MediaWiki:Gadget-jquery.ui.js:修订间差异
外观
创建页面,内容为“→<pre> * https://zh.wikipedia.org/w/load.php?debug=false&lang=zh-cn&modules=jquery.ui&skin=vector: (function($, undefined) { var uuid = 0, runiqueI…” |
星海-interfacebot(留言 | 贡献) 小 跨站同步 标签:由机器人或全自动脚本执行的操作 |
||
| 第1行: | 第1行: | ||
/* <pre> | /* <pre> */ | ||
* | /** | ||
* ------------------------------------------------------------------------- | |||
* !!! DON'T MODIFY THIS PAGE MANUALLY, YOUR CHANGES WILL BE OVERWRITTEN !!! | |||
* ------------------------------------------------------------------------- | |||
*/ | */ | ||
(function($, undefined) { | var _addText = '{{GHIACode|page=GHIA:MoegirlPediaInterfaceCodes/blob/master/src/gadgets/jquery.ui/MediaWiki:Gadget-jquery.ui.js|user=[[U:AnnAngela]]|longId=95ea4fd62f6aa66f83f138743a52cf0a8d1c35a4|shortId=95ea4fd|message=auto: auto prefetch - commit from GitHub Actions}}'; | ||
var uuid = 0, | |||
"use strict"; | |||
mw.log.warn("This page is using the deprecated ResourceLoader module \"jquery.ui\".\nPlease use OOUI instead."); | |||
(function ($, undefined) { | |||
var uuid = 0, runiqueId = /^ui-id-\d+$/; | |||
$.ui = $.ui || {}; | $.ui = $.ui || {}; | ||
if ($.ui.version) { | if ($.ui.version) { | ||
| 第38行: | 第44行: | ||
$.fn.extend({ | $.fn.extend({ | ||
_focus: $.fn.focus, | _focus: $.fn.focus, | ||
focus: function(delay, fn) { | focus: function (delay, fn) { | ||
return typeof delay === "number" ? this.each(function() { | return typeof delay === "number" ? | ||
this.each(function () { | |||
var elem = this; | |||
setTimeout(function () { | |||
$(elem).focus(); | |||
if (fn) { | |||
fn.call(elem); | |||
} | |||
}, delay); | |||
}) : | |||
this._focus.apply(this, arguments); | |||
}, | }, | ||
scrollParent: function() { | scrollParent: function () { | ||
var scrollParent; | var scrollParent; | ||
if (($.ui.ie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) { | if (($.ui.ie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) { | ||
scrollParent = this.parents().filter(function() { | scrollParent = this.parents().filter(function () { | ||
return (/(relative|absolute|fixed)/).test($.css(this, 'position')) && (/(auto|scroll)/).test($.css(this, 'overflow') + $.css(this, 'overflow-y') + $.css(this, 'overflow-x')); | return (/(relative|absolute|fixed)/).test($.css(this, 'position')) && (/(auto|scroll)/).test($.css(this, 'overflow') + $.css(this, 'overflow-y') + $.css(this, 'overflow-x')); | ||
}).eq(0); | }).eq(0); | ||
} else { | } | ||
scrollParent = this.parents().filter(function() { | else { | ||
scrollParent = this.parents().filter(function () { | |||
return (/(auto|scroll)/).test($.css(this, 'overflow') + $.css(this, 'overflow-y') + $.css(this, 'overflow-x')); | return (/(auto|scroll)/).test($.css(this, 'overflow') + $.css(this, 'overflow-y') + $.css(this, 'overflow-x')); | ||
}).eq(0); | }).eq(0); | ||
| 第62行: | 第71行: | ||
return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent; | return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent; | ||
}, | }, | ||
zIndex: function(zIndex) { | zIndex: function (zIndex) { | ||
if (zIndex !== undefined) { | if (zIndex !== undefined) { | ||
return this.css("zIndex", zIndex); | return this.css("zIndex", zIndex); | ||
} | } | ||
if (this.length) { | if (this.length) { | ||
var elem = $(this[0]), | var elem = $(this[0]), position, value; | ||
while (elem.length && elem[0] !== document) { | while (elem.length && elem[0] !== document) { | ||
position = elem.css("position"); | position = elem.css("position"); | ||
| 第82行: | 第90行: | ||
return 0; | return 0; | ||
}, | }, | ||
uniqueId: function() { | uniqueId: function () { | ||
return this.each(function() { | return this.each(function () { | ||
if (!this.id) { | if (!this.id) { | ||
this.id = "ui-id-" + (++uuid); | this.id = "ui-id-" + (++uuid); | ||
| 第89行: | 第97行: | ||
}); | }); | ||
}, | }, | ||
removeUniqueId: function() { | removeUniqueId: function () { | ||
return this.each(function() { | return this.each(function () { | ||
if (runiqueId.test(this.id)) { | if (runiqueId.test(this.id)) { | ||
$(this). | $(this).removeAttr("id"); | ||
} | } | ||
}); | }); | ||
} | } | ||
}); | }); | ||
function focusable(element, isTabIndexNotNaN) { | function focusable(element, isTabIndexNotNaN) { | ||
var map, mapName, img, nodeName = element.nodeName.toLowerCase(); | var map, mapName, img, nodeName = element.nodeName.toLowerCase(); | ||
| 第110行: | 第116行: | ||
return !!img && visible(img); | return !!img && visible(img); | ||
} | } | ||
return (/input|select|textarea|button|object/.test(nodeName) ? !element.disabled : "a" === nodeName ? element.href || isTabIndexNotNaN : isTabIndexNotNaN) && visible(element); | return (/input|select|textarea|button|object/.test(nodeName) ? | ||
!element.disabled : | |||
"a" === nodeName ? | |||
element.href || isTabIndexNotNaN : | |||
isTabIndexNotNaN) && | |||
visible(element); | |||
} | } | ||
function visible(element) { | function visible(element) { | ||
return $.expr.pseudos.visible(element) && !$(element).parents().addBack().filter(function() { | return $.expr.pseudos.visible(element) && | ||
!$(element).parents().addBack().filter(function () { | |||
return $.css(this, "visibility") === "hidden"; | |||
}).length; | |||
} | } | ||
$.extend($.expr.pseudos, { | $.extend($.expr.pseudos, { | ||
data: $.expr.createPseudo ? $.expr.createPseudo(function(dataName) { | data: $.expr.createPseudo ? | ||
$.expr.createPseudo(function (dataName) { | |||
return function (elem) { | |||
return !!$.data(elem, dataName); | |||
}; | |||
}) : | |||
function (elem, i, match) { | |||
focusable: function(element) { | return !!$.data(elem, match[3]); | ||
}, | |||
focusable: function (element) { | |||
return focusable(element, !isNaN($.attr(element, "tabindex"))); | return focusable(element, !isNaN($.attr(element, "tabindex"))); | ||
}, | }, | ||
tabbable: function(element) { | tabbable: function (element) { | ||
var tabIndex = $. | var tabIndex = $.attr(element, "tabindex"), isTabIndexNaN = isNaN(tabIndex); | ||
return (isTabIndexNaN || tabIndex >= 0) && focusable(element, !isTabIndexNaN); | return (isTabIndexNaN || tabIndex >= 0) && focusable(element, !isTabIndexNaN); | ||
} | } | ||
}); | }); | ||
$(function() { | $(function () { | ||
var body = document.body, | var body = document.body, div = body.appendChild(div = document.createElement("div")); | ||
div.offsetHeight; | div.offsetHeight; | ||
$.extend(div.style, { | $.extend(div.style, { | ||
| 第150行: | 第161行: | ||
}); | }); | ||
if (!$("<a>").outerWidth(1).jquery) { | if (!$("<a>").outerWidth(1).jquery) { | ||
$.each(["Width", "Height"], function(i, name) { | $.each(["Width", "Height"], function (i, name) { | ||
var side = name === "Width" ? ["Left", "Right"] : ["Top", "Bottom"], | 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) { | function reduce(elem, size, border, margin) { | ||
$.each(side, function() { | $.each(side, function () { | ||
size -= parseFloat($.css(elem, "padding" + this)) || 0; | size -= parseFloat($.css(elem, "padding" + this)) || 0; | ||
if (border) { | if (border) { | ||
| 第172行: | 第180行: | ||
return size; | return size; | ||
} | } | ||
$.fn["inner" + name] = function(size) { | $.fn["inner" + name] = function (size) { | ||
if (size === undefined) { | if (size === undefined) { | ||
return orig["inner" + name].call(this); | return orig["inner" + name].call(this); | ||
} | } | ||
return this.each(function() { | return this.each(function () { | ||
$(this).css(type, reduce(this, size) + "px"); | $(this).css(type, reduce(this, size) + "px"); | ||
}); | }); | ||
}; | }; | ||
$.fn["outer" + name] = function(size, margin) { | $.fn["outer" + name] = function (size, margin) { | ||
if (typeof size !== "number") { | if (typeof size !== "number") { | ||
return orig["outer" + name].call(this, size); | return orig["outer" + name].call(this, size); | ||
} | } | ||
return this.each(function() { | return this.each(function () { | ||
$(this).css(type, reduce(this, size, true, margin) + "px"); | $(this).css(type, reduce(this, size, true, margin) + "px"); | ||
}); | }); | ||
| 第191行: | 第199行: | ||
} | } | ||
if ($("<a>").data("a-b", "a").removeData("a-b").data("a-b")) { | if ($("<a>").data("a-b", "a").removeData("a-b").data("a-b")) { | ||
$.fn.removeData = (function(removeData) { | $.fn.removeData = (function (removeData) { | ||
return function(key) { | return function (key) { | ||
if (arguments.length) { | if (arguments.length) { | ||
return removeData.call(this, $.camelCase(key)); | return removeData.call(this, $.camelCase(key)); | ||
} else { | } | ||
else { | |||
return removeData.call(this); | return removeData.call(this); | ||
} | } | ||
}; | }; | ||
})($.fn.removeData); | })($.fn.removeData); | ||
}(function() { | } | ||
(function () { | |||
var uaMatch = /msie ([\w.]+)/.exec(navigator.userAgent.toLowerCase()) || []; | var uaMatch = /msie ([\w.]+)/.exec(navigator.userAgent.toLowerCase()) || []; | ||
$.ui.ie = uaMatch.length ? true : | $.ui.ie = uaMatch.length ? true : false; | ||
$.ui.ie6 = parseFloat(uaMatch[1], 10) === 6; | $.ui.ie6 = parseFloat(uaMatch[1], 10) === 6; | ||
})(); | })(); | ||
$.fn.extend({ | $.fn.extend({ | ||
disableSelection: function() { | disableSelection: function () { | ||
return this.bind(($.support.selectstart ? "selectstart" : "mousedown") + ".ui-disableSelection", function(event) { | return this.bind(($.support.selectstart ? "selectstart" : "mousedown") + | ||
".ui-disableSelection", function (event) { | |||
event.preventDefault(); | event.preventDefault(); | ||
}); | }); | ||
}, | }, | ||
enableSelection: function() { | enableSelection: function () { | ||
return this.unbind(".ui-disableSelection"); | return this.unbind(".ui-disableSelection"); | ||
} | } | ||
| 第217行: | 第228行: | ||
$.extend($.ui, { | $.extend($.ui, { | ||
plugin: { | plugin: { | ||
add: function(module, option, set) { | add: function (module, option, set) { | ||
var i, proto = $.ui[module].prototype; | var i, proto = $.ui[module].prototype; | ||
for (i in set) { | for (i in set) { | ||
| 第224行: | 第235行: | ||
} | } | ||
}, | }, | ||
call: function(instance, name, args) { | call: function (instance, name, args) { | ||
var i, set = instance.plugins[name]; | var i, set = instance.plugins[name]; | ||
if (!set || !instance.element[0].parentNode || instance.element[0].parentNode.nodeType === 11) { | if (!set || !instance.element[0].parentNode || instance.element[0].parentNode.nodeType === 11) { | ||
| 第237行: | 第248行: | ||
}, | }, | ||
contains: $.contains, | contains: $.contains, | ||
hasScroll: function(el, a) { | hasScroll: function (el, a) { | ||
if ($(el).css("overflow") === "hidden") { | if ($(el).css("overflow") === "hidden") { | ||
return false; | return false; | ||
} | } | ||
var scroll = (a && a === "left") ? "scrollLeft" : "scrollTop", | var scroll = (a && a === "left") ? "scrollLeft" : "scrollTop", has = false; | ||
if (el[scroll] > 0) { | if (el[scroll] > 0) { | ||
return true; | return true; | ||
| 第251行: | 第261行: | ||
return has; | return has; | ||
}, | }, | ||
isOverAxis: function(x, reference, size) { | isOverAxis: function (x, reference, size) { | ||
return (x > reference) && (x < (reference + size)); | return (x > reference) && (x < (reference + size)); | ||
}, | }, | ||
isOver: function(y, x, top, left, height, width) { | isOver: function (y, x, top, left, height, width) { | ||
return $.ui.isOverAxis(y, top, height) && $.ui.isOverAxis(x, left, width); | return $.ui.isOverAxis(y, top, height) && $.ui.isOverAxis(x, left, width); | ||
} | } | ||
}); | }); | ||
})(jQuery); | })(jQuery); | ||
(function($, undefined) { | (function ($, undefined) { | ||
var uuid = 0, | var uuid = 0, slice = Array.prototype.slice, _cleanData = $.cleanData; | ||
$.cleanData = function (elems) { | |||
for (var i = 0, elem; (elem = elems[i]) != null; i++) { | |||
$. | |||
for (var i = 0, elem; | |||
try { | try { | ||
$(elem).triggerHandler("remove"); | $(elem).triggerHandler("remove"); | ||
} catch (e) {} | } | ||
catch (e) { } | |||
} | } | ||
_cleanData(elems); | _cleanData(elems); | ||
}; | }; | ||
$.widget = function(name, base, prototype) { | $.widget = function (name, base, prototype) { | ||
var fullName, existingConstructor, constructor, basePrototype, namespace = name.split(".")[0]; | var fullName, existingConstructor, constructor, basePrototype, namespace = name.split(".")[0]; | ||
name = name.split(".")[1]; | name = name.split(".")[1]; | ||
| 第281行: | 第288行: | ||
base = $.Widget; | base = $.Widget; | ||
} | } | ||
$.expr.pseudos[fullName.toLowerCase()] = function(elem) { | $.expr.pseudos[fullName.toLowerCase()] = function (elem) { | ||
return !!$.data(elem, fullName); | return !!$.data(elem, fullName); | ||
}; | }; | ||
$[namespace] = $[namespace] || {}; | $[namespace] = $[namespace] || {}; | ||
existingConstructor = $[namespace][name]; | existingConstructor = $[namespace][name]; | ||
constructor = $[namespace][name] = function(options, element) { | constructor = $[namespace][name] = function (options, element) { | ||
if (!this._createWidget) { | if (!this._createWidget) { | ||
return new constructor(options, element); | return new constructor(options, element); | ||
| 第301行: | 第308行: | ||
basePrototype = new base(); | basePrototype = new base(); | ||
basePrototype.options = $.widget.extend({}, basePrototype.options); | basePrototype.options = $.widget.extend({}, basePrototype.options); | ||
$.each(prototype, function(prop, value) { | $.each(prototype, function (prop, value) { | ||
if ( | if (typeof value === "function") { | ||
prototype[prop] = (function() { | prototype[prop] = (function () { | ||
var _super = function() { | var _super = function () { | ||
return base.prototype[prop].apply(this, arguments); | |||
}, _superApply = function (args) { | |||
return base.prototype[prop].apply(this, args); | |||
}; | |||
return function () { | |||
return function() { | var __super = this._super, __superApply = this._superApply, returnValue; | ||
var __super = this._super, | |||
this._super = _super; | this._super = _super; | ||
this._superApply = _superApply; | this._superApply = _superApply; | ||
| 第334行: | 第338行: | ||
}); | }); | ||
if (existingConstructor) { | if (existingConstructor) { | ||
$.each(existingConstructor._childConstructors, function(i, child) { | $.each(existingConstructor._childConstructors, function (i, child) { | ||
var childPrototype = child.prototype; | var childPrototype = child.prototype; | ||
$.widget(childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto); | $.widget(childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto); | ||
}); | }); | ||
delete existingConstructor._childConstructors; | delete existingConstructor._childConstructors; | ||
} else { | } | ||
else { | |||
base._childConstructors.push(constructor); | base._childConstructors.push(constructor); | ||
} | } | ||
$.widget.bridge(name, constructor); | $.widget.bridge(name, constructor); | ||
}; | }; | ||
$ | $.widget.extend = function (target) { | ||
var input = slice.call(arguments, 1), inputIndex = 0, inputLength = input.length, key, value; | |||
for (; inputIndex < inputLength; inputIndex++) { | |||
for (key in input[inputIndex]) { | |||
value = input[inputIndex][key]; | |||
if (input[inputIndex].hasOwnProperty(key) && value !== undefined) { | |||
if ($.isPlainObject(value)) { | |||
target[key] = $.isPlainObject(target[key]) ? | |||
$.widget.extend({}, target[key], value) : | |||
$.widget.extend({}, value); | |||
} | |||
else { | |||
target[key] = value; | |||
} | } | ||
} | } | ||
} | } | ||
} | |||
return target; | |||
$.widget.bridge = function(name, object) { | }; | ||
$.widget.bridge = function (name, object) { | |||
var fullName = object.prototype.widgetFullName || name; | var fullName = object.prototype.widgetFullName || name; | ||
$.fn[name] = function(options) { | $.fn[name] = function (options) { | ||
var isMethodCall = typeof options === "string", | var isMethodCall = typeof options === "string", args = slice.call(arguments, 1), returnValue = this; | ||
options = !isMethodCall && args.length ? | |||
$.widget.extend.apply(null, [options].concat(args)) : | |||
options = !isMethodCall && args.length ? $.widget.extend.apply(null, [options].concat(args)) : options; | options; | ||
if (isMethodCall) { | if (isMethodCall) { | ||
this.each(function() { | this.each(function () { | ||
var methodValue, instance = $.data(this, fullName); | var methodValue, instance = $.data(this, fullName); | ||
if (!instance) { | if (!instance) { | ||
return $.error("cannot call methods on " + name + " prior to initialization; " + "attempted to call method '" + options + "'"); | return $.error("cannot call methods on " + name + " prior to initialization; " + | ||
"attempted to call method '" + options + "'"); | |||
} | } | ||
if ( | if (typeof instance[options] !== "function" || options.charAt(0) === "_") { | ||
return $.error("no such method '" + options + "' for " + name + " widget instance"); | return $.error("no such method '" + options + "' for " + name + " widget instance"); | ||
} | } | ||
methodValue = instance[options].apply(instance, args); | methodValue = instance[options].apply(instance, args); | ||
if (methodValue !== instance && methodValue !== undefined) { | if (methodValue !== instance && methodValue !== undefined) { | ||
returnValue = methodValue && methodValue.jquery ? returnValue.pushStack(methodValue.get()) : methodValue; | returnValue = methodValue && methodValue.jquery ? | ||
returnValue.pushStack(methodValue.get()) : | |||
methodValue; | |||
return false; | return false; | ||
} | } | ||
}); | }); | ||
} else { | } | ||
this.each(function() { | else { | ||
this.each(function () { | |||
var instance = $.data(this, fullName); | var instance = $.data(this, fullName); | ||
if (instance) { | if (instance) { | ||
instance.option(options || {})._init(); | instance.option(options || {})._init(); | ||
} else { | } | ||
else { | |||
$.data(this, fullName, new object(options, this)); | $.data(this, fullName, new object(options, this)); | ||
} | } | ||
| 第400行: | 第408行: | ||
}; | }; | ||
}; | }; | ||
$.Widget = function() {}; | $.Widget = function () { }; | ||
$.Widget._childConstructors = []; | $.Widget._childConstructors = []; | ||
$.Widget.prototype = { | $.Widget.prototype = { | ||
| 第407行: | 第415行: | ||
defaultElement: "<div>", | defaultElement: "<div>", | ||
options: { | options: { | ||
disabled: | disabled: false, | ||
create: null | create: null | ||
}, | }, | ||
_createWidget: function(options, element) { | _createWidget: function (options, element) { | ||
element = $(element || this.defaultElement || this)[0]; | element = $(element || this.defaultElement || this)[0]; | ||
this.element = $(element); | this.element = $(element); | ||
| 第418行: | 第426行: | ||
this.bindings = $(); | this.bindings = $(); | ||
this.hoverable = $(); | this.hoverable = $(); | ||
this. | this.focusable = $(); | ||
if (element !== this) { | if (element !== this) { | ||
$.data(element, this.widgetName, this); | $.data(element, this.widgetName, this); | ||
$.data(element, this.widgetFullName, this); | $.data(element, this.widgetFullName, this); | ||
this._on(true, this.element, { | this._on(true, this.element, { | ||
remove: function(event) { | remove: function (event) { | ||
if (event.target === element) { | if (event.target === element) { | ||
this.destroy(); | this.destroy(); | ||
| 第430行: | 第437行: | ||
} | } | ||
}); | }); | ||
this.document = $(element.style ? element.ownerDocument : element.document || element); | this.document = $(element.style ? | ||
element.ownerDocument : | |||
element.document || element); | |||
this.window = $(this.document[0].defaultView || this.document[0].parentWindow); | this.window = $(this.document[0].defaultView || this.document[0].parentWindow); | ||
} | } | ||
| 第441行: | 第450行: | ||
_create: $.noop, | _create: $.noop, | ||
_init: $.noop, | _init: $.noop, | ||
destroy: function() { | destroy: function () { | ||
this._destroy(); | this._destroy(); | ||
this.element. | this.element | ||
this.widget(). | .off(this.eventNamespace) | ||
this.bindings. | .removeData(this.widgetName) | ||
.removeData(this.widgetFullName) | |||
.removeData($.camelCase(this.widgetFullName)); | |||
this.widget() | |||
.off(this.eventNamespace) | |||
.removeAttr("aria-disabled") | |||
.removeClass(this.widgetFullName + "-disabled " + | |||
"ui-state-disabled"); | |||
this.bindings.off(this.eventNamespace); | |||
this.hoverable.removeClass("ui-state-hover"); | this.hoverable.removeClass("ui-state-hover"); | ||
this.focusable.removeClass("ui-state-focus"); | this.focusable.removeClass("ui-state-focus"); | ||
}, | }, | ||
_destroy: $.noop, | _destroy: $.noop, | ||
widget: function() { | widget: function () { | ||
return this.element; | return this.element; | ||
}, | }, | ||
option: function(key, value) { | option: function (key, value) { | ||
var options = key, | var options = key, parts, curOption, i; | ||
if (arguments.length === 0) { | if (arguments.length === 0) { | ||
return $.widget.extend({}, this.options); | return $.widget.extend({}, this.options); | ||
| 第474行: | 第490行: | ||
} | } | ||
curOption[key] = value; | curOption[key] = value; | ||
} else { | } | ||
else { | |||
if (value === undefined) { | if (value === undefined) { | ||
return this.options[key] === undefined ? null : this.options[key]; | return this.options[key] === undefined ? null : this.options[key]; | ||
| 第484行: | 第501行: | ||
return this; | return this; | ||
}, | }, | ||
_setOptions: function(options) { | _setOptions: function (options) { | ||
var key; | var key; | ||
for (key in options) { | for (key in options) { | ||
| 第491行: | 第508行: | ||
return this; | return this; | ||
}, | }, | ||
_setOption: function(key, value) { | _setOption: function (key, value) { | ||
this.options[key] = value; | this.options[key] = value; | ||
if (key === "disabled") { | if (key === "disabled") { | ||
this.widget().toggleClass(this.widgetFullName + "-disabled ui-state-disabled", !!value).attr("aria-disabled", value); | this.widget() | ||
this.hoverable | .toggleClass(this.widgetFullName + "-disabled ui-state-disabled", !!value) | ||
.attr("aria-disabled", value); | |||
this.hoverable.removeClass("ui-state-hover"); | |||
this.focusable.removeClass("ui-state-focus"); | this.focusable.removeClass("ui-state-focus"); | ||
} | } | ||
return this; | return this; | ||
}, | }, | ||
enable: function() { | enable: function () { | ||
return this._setOption("disabled", false); | return this._setOption("disabled", false); | ||
}, | }, | ||
disable: function() { | disable: function () { | ||
return this._setOption("disabled", true); | return this._setOption("disabled", true); | ||
}, | }, | ||
_on: function(suppressDisabledCheck, element, handlers) { | _on: function (suppressDisabledCheck, element, handlers) { | ||
var delegateElement, instance = this; | var delegateElement, instance = this; | ||
if (typeof suppressDisabledCheck !== "boolean") { | if (typeof suppressDisabledCheck !== "boolean") { | ||
handlers = element; | handlers = element; | ||
element = suppressDisabledCheck; | element = suppressDisabledCheck; | ||
suppressDisabledCheck = | suppressDisabledCheck = false; | ||
} | } | ||
if (!handlers) { | if (!handlers) { | ||
| 第518行: | 第536行: | ||
element = this.element; | element = this.element; | ||
delegateElement = this.widget(); | delegateElement = this.widget(); | ||
} else { | } | ||
else { | |||
element = delegateElement = $(element); | element = delegateElement = $(element); | ||
this.bindings = this.bindings.add(element); | this.bindings = this.bindings.add(element); | ||
} | } | ||
$.each(handlers, function(event, handler) { | $.each(handlers, function (event, handler) { | ||
function handlerProxy() { | function handlerProxy() { | ||
if (!suppressDisabledCheck && (instance.options.disabled === true || $(this).hasClass("ui-state-disabled"))) { | if (!suppressDisabledCheck && | ||
(instance.options.disabled === true || | |||
$(this).hasClass("ui-state-disabled"))) { | |||
return; | return; | ||
} | } | ||
return (typeof handler === "string" ? instance[handler] : handler).apply(instance, arguments); | return (typeof handler === "string" ? instance[handler] : handler) | ||
.apply(instance, arguments); | |||
} | } | ||
if (typeof handler !== "string") { | if (typeof handler !== "string") { | ||
handlerProxy.guid = handler.guid = handler.guid || handlerProxy.guid || $.guid++; | handlerProxy.guid = handler.guid = | ||
handler.guid || handlerProxy.guid || $.guid++; | |||
} | } | ||
var match = event.match(/^(\w+)\s*(.*)$/), | var match = event.match(/^(\w+)\s*(.*)$/), eventName = match[1] + instance.eventNamespace, selector = match[2]; | ||
if (selector) { | if (selector) { | ||
delegateElement. | delegateElement.on(eventName, selector, handlerProxy); | ||
} else { | } | ||
else { | |||
element.on(eventName, handlerProxy); | element.on(eventName, handlerProxy); | ||
} | } | ||
}); | }); | ||
}, | }, | ||
_off: function(element, eventName) { | _off: function (element, eventName) { | ||
eventName = (eventName || "").split(" ").join(this.eventNamespace + " ") + this.eventNamespace; | eventName = (eventName || "").split(" ").join(this.eventNamespace + " ") + this.eventNamespace; | ||
element. | element.off(eventName); | ||
}, | }, | ||
_delay: function(handler, delay) { | _delay: function (handler, delay) { | ||
function handlerProxy() { | function handlerProxy() { | ||
return (typeof handler === "string" ? instance[handler] : handler).apply(instance, arguments); | return (typeof handler === "string" ? instance[handler] : handler) | ||
.apply(instance, arguments); | |||
} | } | ||
var instance = this; | var instance = this; | ||
return setTimeout(handlerProxy, delay || 0); | return setTimeout(handlerProxy, delay || 0); | ||
}, | }, | ||
_hoverable: function(element) { | _hoverable: function (element) { | ||
this.hoverable = this.hoverable.add(element); | this.hoverable = this.hoverable.add(element); | ||
this._on(element, { | this._on(element, { | ||
mouseenter: function(event) { | mouseenter: function (event) { | ||
$(event.currentTarget).addClass("ui-state-hover"); | $(event.currentTarget).addClass("ui-state-hover"); | ||
}, | }, | ||
mouseleave: function(event) { | mouseleave: function (event) { | ||
$(event.currentTarget).removeClass("ui-state-hover"); | $(event.currentTarget).removeClass("ui-state-hover"); | ||
} | } | ||
}); | }); | ||
}, | }, | ||
_focusable: function(element) { | _focusable: function (element) { | ||
this.focusable = this.focusable.add(element); | this.focusable = this.focusable.add(element); | ||
this._on(element, { | this._on(element, { | ||
focusin: function(event) { | focusin: function (event) { | ||
$(event.currentTarget).addClass("ui-state-focus"); | $(event.currentTarget).addClass("ui-state-focus"); | ||
}, | }, | ||
focusout: function(event) { | focusout: function (event) { | ||
$(event.currentTarget).removeClass("ui-state-focus"); | $(event.currentTarget).removeClass("ui-state-focus"); | ||
} | } | ||
}); | }); | ||
}, | }, | ||
_trigger: function(type, event, data) { | _trigger: function (type, event, data) { | ||
var prop, orig, callback = this.options[type]; | var prop, orig, callback = this.options[type]; | ||
data = data || {}; | data = data || {}; | ||
event = $.Event(event); | event = $.Event(event); | ||
event.type = (type === this.widgetEventPrefix ? type : this.widgetEventPrefix + type).toLowerCase(); | event.type = (type === this.widgetEventPrefix ? | ||
type : | |||
this.widgetEventPrefix + type).toLowerCase(); | |||
event.target = this.element[0]; | event.target = this.element[0]; | ||
orig = event.originalEvent; | orig = event.originalEvent; | ||
| 第590行: | 第615行: | ||
} | } | ||
this.element.trigger(event, data); | this.element.trigger(event, data); | ||
return !( | return !(typeof callback === 'function' && | ||
callback.apply(this.element[0], [event].concat(data)) === false || | |||
event.isDefaultPrevented()); | |||
} | } | ||
}; | }; | ||
$.each({ | $.each({ show: "fadeIn", hide: "fadeOut" }, function (method, defaultEffect) { | ||
$.Widget.prototype["_" + method] = function (element, options, callback) { | |||
$.Widget.prototype["_" + method] = function(element, options, callback) { | |||
if (typeof options === "string") { | if (typeof options === "string") { | ||
options = { | options = { effect: options }; | ||
} | } | ||
var hasOptions, effectName = !options ? method : options === | var hasOptions, effectName = !options ? | ||
method : | |||
options === true || typeof options === "number" ? | |||
defaultEffect : | |||
options.effect || defaultEffect; | |||
options = options || {}; | options = options || {}; | ||
if (typeof options === "number") { | if (typeof options === "number") { | ||
options = { | options = { duration: options }; | ||
} | } | ||
hasOptions = !$.isEmptyObject(options); | hasOptions = !$.isEmptyObject(options); | ||
| 第617行: | 第641行: | ||
if (hasOptions && $.effects && ($.effects.effect[effectName] || $.uiBackCompat !== false && $.effects[effectName])) { | if (hasOptions && $.effects && ($.effects.effect[effectName] || $.uiBackCompat !== false && $.effects[effectName])) { | ||
element[method](options); | element[method](options); | ||
} else if (effectName !== method && element[effectName]) { | } | ||
else if (effectName !== method && element[effectName]) { | |||
element[effectName](options.duration, options.easing, callback); | element[effectName](options.duration, options.easing, callback); | ||
} else { | } | ||
element.queue(function(next) { | else { | ||
element.queue(function (next) { | |||
$(this)[method](); | $(this)[method](); | ||
if (callback) { | if (callback) { | ||
| 第631行: | 第657行: | ||
}); | }); | ||
if ($.uiBackCompat !== false) { | if ($.uiBackCompat !== false) { | ||
$.Widget.prototype._getCreateOptions = function() { | $.Widget.prototype._getCreateOptions = function () { | ||
return $.metadata && $.metadata.get(this.element[0])[this.widgetName]; | return $.metadata && $.metadata.get(this.element[0])[this.widgetName]; | ||
}; | }; | ||
} | } | ||
})(jQuery); | })(jQuery); | ||
(function($, undefined) { | (function ($, undefined) { | ||
var mouseHandled = | var mouseHandled = false; | ||
$(document).mouseup(function(e) { | $(document).mouseup(function (e) { | ||
mouseHandled = | mouseHandled = false; | ||
}); | }); | ||
$.widget("ui.mouse", { | $.widget("ui.mouse", { | ||
| 第648行: | 第674行: | ||
delay: 0 | delay: 0 | ||
}, | }, | ||
_mouseInit: function() { | _mouseInit: function () { | ||
var that = this; | var that = this; | ||
this.element.on('mousedown.' + this.widgetName, function(event) { | this.element | ||
.on('mousedown.' + this.widgetName, function (event) { | |||
return that._mouseDown(event); | return that._mouseDown(event); | ||
}).on('click.' + this.widgetName, function(event) { | }) | ||
if (true === $.data(event.target, that.widgetName + | .on('click.' + this.widgetName, function (event) { | ||
if (true === $.data(event.target, that.widgetName + '.preventClickEvent')) { | |||
$.removeData(event.target, that.widgetName + '.preventClickEvent'); | $.removeData(event.target, that.widgetName + '.preventClickEvent'); | ||
event.stopImmediatePropagation(); | event.stopImmediatePropagation(); | ||
| 第660行: | 第687行: | ||
} | } | ||
}); | }); | ||
this.started = | this.started = false; | ||
}, | }, | ||
_mouseDestroy: function() { | _mouseDestroy: function () { | ||
this.element.off('.' + this.widgetName); | this.element.off('.' + this.widgetName); | ||
if (this._mouseMoveDelegate) { | if (this._mouseMoveDelegate) { | ||
$(document).off('mousemove.' + this.widgetName, this._mouseMoveDelegate).off('mouseup.' + this.widgetName, this._mouseUpDelegate); | $(document) | ||
.off('mousemove.' + this.widgetName, this._mouseMoveDelegate) | |||
.off('mouseup.' + this.widgetName, this._mouseUpDelegate); | |||
} | } | ||
}, | }, | ||
_mouseDown: function(event) { | _mouseDown: function (event) { | ||
if (mouseHandled) { | if (mouseHandled) { | ||
return; | return; | ||
}(this._mouseStarted && this._mouseUp(event)); | } | ||
(this._mouseStarted && this._mouseUp(event)); | |||
this._mouseDownEvent = event; | this._mouseDownEvent = event; | ||
var that = this, | var that = this, btnIsLeft = (event.which === 1), elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false); | ||
if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { | if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { | ||
return true; | return true; | ||
| 第681行: | 第709行: | ||
this.mouseDelayMet = !this.options.delay; | this.mouseDelayMet = !this.options.delay; | ||
if (!this.mouseDelayMet) { | if (!this.mouseDelayMet) { | ||
this._mouseDelayTimer = setTimeout(function() { | this._mouseDelayTimer = setTimeout(function () { | ||
that.mouseDelayMet = | that.mouseDelayMet = true; | ||
}, this.options.delay); | }, this.options.delay); | ||
} | } | ||
if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { | if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { | ||
this._mouseStarted = (this._mouseStart(event) !== | this._mouseStarted = (this._mouseStart(event) !== false); | ||
if (!this._mouseStarted) { | if (!this._mouseStarted) { | ||
event.preventDefault(); | event.preventDefault(); | ||
| 第696行: | 第723行: | ||
$.removeData(event.target, this.widgetName + '.preventClickEvent'); | $.removeData(event.target, this.widgetName + '.preventClickEvent'); | ||
} | } | ||
this._mouseMoveDelegate = function(event) { | this._mouseMoveDelegate = function (event) { | ||
return that._mouseMove(event); | return that._mouseMove(event); | ||
}; | }; | ||
this._mouseUpDelegate = function(event) { | this._mouseUpDelegate = function (event) { | ||
return that._mouseUp(event); | return that._mouseUp(event); | ||
}; | }; | ||
$(document).on('mousemove.' + this.widgetName, this._mouseMoveDelegate).on('mouseup.' + this.widgetName, this._mouseUpDelegate); | $(document) | ||
.on('mousemove.' + this.widgetName, this._mouseMoveDelegate) | |||
.on('mouseup.' + this.widgetName, this._mouseUpDelegate); | |||
event.preventDefault(); | event.preventDefault(); | ||
mouseHandled = | mouseHandled = true; | ||
return true; | return true; | ||
}, | }, | ||
_mouseMove: function(event) { | _mouseMove: function (event) { | ||
if ($.ui.ie && !(document.documentMode >= 9) && !event.button) { | if ($.ui.ie && !(document.documentMode >= 9) && !event.button) { | ||
return this._mouseUp(event); | return this._mouseUp(event); | ||
| 第716行: | 第745行: | ||
} | } | ||
if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { | if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { | ||
this._mouseStarted = (this._mouseStart(this._mouseDownEvent, event) !== false); | this._mouseStarted = | ||
(this._mouseStart(this._mouseDownEvent, event) !== false); | |||
(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); | (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); | ||
} | } | ||
return !this._mouseStarted; | return !this._mouseStarted; | ||
}, | }, | ||
_mouseUp: function(event) { | _mouseUp: function (event) { | ||
$(document).off('mousemove.' + this.widgetName, this._mouseMoveDelegate).off('mouseup.' + this.widgetName, this._mouseUpDelegate); | $(document) | ||
.off('mousemove.' + this.widgetName, this._mouseMoveDelegate) | |||
.off('mouseup.' + this.widgetName, this._mouseUpDelegate); | |||
if (this._mouseStarted) { | if (this._mouseStarted) { | ||
this._mouseStarted = | this._mouseStarted = false; | ||
if (event.target === this._mouseDownEvent.target) { | if (event.target === this._mouseDownEvent.target) { | ||
$.data(event.target, this.widgetName + '.preventClickEvent', true); | $.data(event.target, this.widgetName + '.preventClickEvent', true); | ||
| 第732行: | 第764行: | ||
return false; | return false; | ||
}, | }, | ||
_mouseDistanceMet: function(event) { | _mouseDistanceMet: function (event) { | ||
return (Math.max(Math.abs(this._mouseDownEvent.pageX - event.pageX), Math.abs(this._mouseDownEvent.pageY - event.pageY)) >= this.options.distance); | return (Math.max(Math.abs(this._mouseDownEvent.pageX - event.pageX), Math.abs(this._mouseDownEvent.pageY - event.pageY)) >= this.options.distance); | ||
}, | }, | ||
_mouseDelayMet: function(event) { | _mouseDelayMet: function (event) { | ||
return this.mouseDelayMet; | return this.mouseDelayMet; | ||
}, | }, | ||
_mouseStart: function(event) {}, | _mouseStart: function (event) { }, | ||
_mouseDrag: function(event) {}, | _mouseDrag: function (event) { }, | ||
_mouseStop: function(event) {}, | _mouseStop: function (event) { }, | ||
_mouseCapture: function(event) { | _mouseCapture: function (event) { return true; } | ||
}); | }); | ||
})(jQuery); | })(jQuery); | ||
(function($, undefined) { | (function ($, undefined) { | ||
$.widget("ui.draggable", $.ui.mouse, { | $.widget("ui.draggable", $.ui.mouse, { | ||
version: "1.9.2", | version: "1.9.2", | ||
widgetEventPrefix: "drag", | widgetEventPrefix: "drag", | ||
options: { | options: { | ||
addClasses: | addClasses: true, | ||
appendTo: "parent", | appendTo: "parent", | ||
axis: | axis: false, | ||
connectToSortable: | connectToSortable: false, | ||
containment: | containment: false, | ||
cursor: "auto", | cursor: "auto", | ||
cursorAt: | cursorAt: false, | ||
grid: | grid: false, | ||
handle: | handle: false, | ||
helper: "original", | helper: "original", | ||
iframeFix: | iframeFix: false, | ||
opacity: | opacity: false, | ||
refreshPositions: | refreshPositions: false, | ||
revert: | revert: false, | ||
revertDuration: 500, | revertDuration: 500, | ||
scope: "default", | scope: "default", | ||
scroll: | scroll: true, | ||
scrollSensitivity: 20, | scrollSensitivity: 20, | ||
scrollSpeed: 20, | scrollSpeed: 20, | ||
snap: | snap: false, | ||
snapMode: "both", | snapMode: "both", | ||
snapTolerance: 20, | snapTolerance: 20, | ||
stack: | stack: false, | ||
zIndex: | zIndex: false | ||
}, | }, | ||
_create: function() { | _create: function () { | ||
if (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css("position"))) this.element[0].style.position = 'relative'; | if (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css("position"))) | ||
this.element[0].style.position = 'relative'; | |||
(this.options.addClasses && this.element.addClass("ui-draggable")); | (this.options.addClasses && this.element.addClass("ui-draggable")); | ||
(this.options.disabled && this.element.addClass("ui-draggable-disabled")); | (this.options.disabled && this.element.addClass("ui-draggable-disabled")); | ||
this._mouseInit(); | this._mouseInit(); | ||
}, | }, | ||
_destroy: function() { | _destroy: function () { | ||
this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"); | this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"); | ||
this._mouseDestroy(); | this._mouseDestroy(); | ||
}, | }, | ||
_mouseCapture: function(event) { | _mouseCapture: function (event) { | ||
var o = this.options; | var o = this.options; | ||
if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle')) return false; | if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle')) | ||
return false; | |||
this.handle = this._getHandle(event); | this.handle = this._getHandle(event); | ||
if (!this.handle) return false; | if (!this.handle) | ||
$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() { | return false; | ||
$('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({ | $(o.iframeFix === true ? "iframe" : o.iframeFix).each(function () { | ||
width: this.offsetWidth + "px", | $('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>') | ||
.css({ | |||
position: "absolute", | width: this.offsetWidth + "px", height: this.offsetHeight + "px", | ||
position: "absolute", opacity: "0.001", zIndex: 1000 | |||
}) | |||
}).css($(this).offset()).appendTo("body"); | .css($(this).offset()) | ||
.appendTo("body"); | |||
}); | }); | ||
return true; | return true; | ||
}, | }, | ||
_mouseStart: function(event) { | _mouseStart: function (event) { | ||
var o = this.options; | var o = this.options; | ||
this.helper = this._createHelper(event); | this.helper = this._createHelper(event); | ||
this.helper.addClass("ui-draggable-dragging"); | this.helper.addClass("ui-draggable-dragging"); | ||
this._cacheHelperProportions(); | this._cacheHelperProportions(); | ||
if ($.ui.ddmanager) $.ui.ddmanager.current = this; | if ($.ui.ddmanager) | ||
$.ui.ddmanager.current = this; | |||
this._cacheMargins(); | this._cacheMargins(); | ||
this.cssPosition = this.helper.css("position"); | this.cssPosition = this.helper.css("position"); | ||
| 第828行: | 第862行: | ||
this.originalPosition = this.position = this._generatePosition(event); | this.originalPosition = this.position = this._generatePosition(event); | ||
(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); | (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); | ||
if (o.containment) this._setContainment(); | if (o.containment) | ||
this._setContainment(); | |||
if (this._trigger("start", event) === false) { | if (this._trigger("start", event) === false) { | ||
this._clear(); | this._clear(); | ||
| 第834行: | 第869行: | ||
} | } | ||
this._cacheHelperProportions(); | this._cacheHelperProportions(); | ||
if ($.ui.ddmanager && !o.dropBehaviour) $.ui.ddmanager.prepareOffsets(this, event); | if ($.ui.ddmanager && !o.dropBehaviour) | ||
$.ui.ddmanager.prepareOffsets(this, event); | |||
this._mouseDrag(event, true); | this._mouseDrag(event, true); | ||
if ($.ui.ddmanager) $.ui.ddmanager.dragStart(this, event); | if ($.ui.ddmanager) | ||
$.ui.ddmanager.dragStart(this, event); | |||
return true; | return true; | ||
}, | }, | ||
_mouseDrag: function(event, noPropagation) { | _mouseDrag: function (event, noPropagation) { | ||
this.position = this._generatePosition(event); | this.position = this._generatePosition(event); | ||
this.positionAbs = this._convertPositionTo("absolute"); | this.positionAbs = this._convertPositionTo("absolute"); | ||
| 第850行: | 第887行: | ||
this.position = ui.position; | this.position = ui.position; | ||
} | } | ||
if (!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left + 'px'; | if (!this.options.axis || this.options.axis != "y") | ||
if (!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top + 'px'; | this.helper[0].style.left = this.position.left + 'px'; | ||
if ($.ui.ddmanager) $.ui.ddmanager.drag(this, event); | if (!this.options.axis || this.options.axis != "x") | ||
this.helper[0].style.top = this.position.top + 'px'; | |||
if ($.ui.ddmanager) | |||
$.ui.ddmanager.drag(this, event); | |||
return false; | return false; | ||
}, | }, | ||
_mouseStop: function(event) { | _mouseStop: function (event) { | ||
var dropped = | var dropped = false; | ||
if ($.ui.ddmanager && !this.options.dropBehaviour) dropped = $.ui.ddmanager.drop(this, event); | if ($.ui.ddmanager && !this.options.dropBehaviour) | ||
dropped = $.ui.ddmanager.drop(this, event); | |||
if (this.dropped) { | if (this.dropped) { | ||
dropped = this.dropped; | dropped = this.dropped; | ||
this.dropped = | this.dropped = false; | ||
} | } | ||
var element = this.element[0], | var element = this.element[0], elementInDom = false; | ||
while (element && (element = element.parentNode)) { | |||
while (element && ( | |||
if (element == document) { | if (element == document) { | ||
elementInDom = | elementInDom = true; | ||
} | } | ||
} | } | ||
if (!elementInDom && this.options.helper === "original") return false; | if (!elementInDom && this.options.helper === "original") | ||
if ((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || ( | return false; | ||
if ((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || (typeof this.options.revert === 'function' && this.options.revert.call(this.element, dropped))) { | |||
var that = this; | var that = this; | ||
$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() { | $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function () { | ||
if (that._trigger("stop", event) !== false) { | if (that._trigger("stop", event) !== false) { | ||
that._clear(); | that._clear(); | ||
} | } | ||
}); | }); | ||
} else { | } | ||
else { | |||
if (this._trigger("stop", event) !== false) { | if (this._trigger("stop", event) !== false) { | ||
this._clear(); | this._clear(); | ||
| 第885行: | 第926行: | ||
return false; | return false; | ||
}, | }, | ||
_mouseUp: function(event) { | _mouseUp: function (event) { | ||
$("div.ui-draggable-iframeFix").each(function() { | $("div.ui-draggable-iframeFix").each(function () { | ||
this.parentNode.removeChild(this); | this.parentNode.removeChild(this); | ||
}); | }); | ||
if ($.ui.ddmanager) $.ui.ddmanager.dragStop(this, event); | if ($.ui.ddmanager) | ||
$.ui.ddmanager.dragStop(this, event); | |||
return $.ui.mouse.prototype._mouseUp.call(this, event); | return $.ui.mouse.prototype._mouseUp.call(this, event); | ||
}, | }, | ||
cancel: function() { | cancel: function () { | ||
if (this.helper.is(".ui-draggable-dragging")) { | if (this.helper.is(".ui-draggable-dragging")) { | ||
this._mouseUp({}); | this._mouseUp({}); | ||
} else { | } | ||
else { | |||
this._clear(); | this._clear(); | ||
} | } | ||
return this; | return this; | ||
}, | }, | ||
_getHandle: function(event) { | _getHandle: function (event) { | ||
var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : | var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false; | ||
$(this.options.handle, this.element).find("*"). | $(this.options.handle, this.element) | ||
if (this == event.target) handle = | .find("*") | ||
.addBack() | |||
.each(function () { | |||
if (this == event.target) | |||
handle = true; | |||
}); | }); | ||
return handle; | return handle; | ||
}, | }, | ||
_createHelper: function(event) { | _createHelper: function (event) { | ||
var o = this.options; | var o = this.options; | ||
var helper = | var helper = typeof o.helper === 'function' ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone().removeAttr('id') : this.element); | ||
if (!helper.parents('body').length) helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo)); | if (!helper.parents('body').length) | ||
if (helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) helper.css("position", "absolute"); | helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo)); | ||
if (helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) | |||
helper.css("position", "absolute"); | |||
return helper; | return helper; | ||
}, | }, | ||
_adjustOffsetFromHelper: function(obj) { | _adjustOffsetFromHelper: function (obj) { | ||
if (typeof obj == 'string') { | if (typeof obj == 'string') { | ||
obj = obj.split(' '); | obj = obj.split(' '); | ||
} | } | ||
if ( | if (Array.isArray(obj)) { | ||
obj = { | obj = { left: +obj[0], top: +obj[1] || 0 }; | ||
} | } | ||
if ('left' in obj) { | if ('left' in obj) { | ||
| 第934行: | 第980行: | ||
} | } | ||
if ('bottom' in obj) { | if ('bottom' in obj) { | ||
this.offset. | this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; | ||
} | } | ||
}, | }, | ||
_getParentOffset: function() { | _getParentOffset: function () { | ||
this.offsetParent = this.helper.offsetParent(); | this.offsetParent = this.helper.offsetParent(); | ||
var po = this.offsetParent.offset(); | var po = this.offsetParent.offset(); | ||
| 第945行: | 第990行: | ||
po.top += this.scrollParent.scrollTop(); | po.top += this.scrollParent.scrollTop(); | ||
} | } | ||
if ((this.offsetParent[0] == document.body) || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.ui.ie)) po = { | if ((this.offsetParent[0] == document.body) | ||
|| (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.ui.ie)) | |||
po = { top: 0, left: 0 }; | |||
return { | return { | ||
top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0), | top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0), | ||
| 第954行: | 第998行: | ||
}; | }; | ||
}, | }, | ||
_getRelativeOffset: function() { | _getRelativeOffset: function () { | ||
if (this.cssPosition == "relative") { | if (this.cssPosition == "relative") { | ||
var p = this.element.position(); | var p = this.element.position(); | ||
| 第961行: | 第1,005行: | ||
left: p.left - (parseInt(this.helper.css("left"), 10) || 0) + this.scrollParent.scrollLeft() | left: p.left - (parseInt(this.helper.css("left"), 10) || 0) + this.scrollParent.scrollLeft() | ||
}; | }; | ||
} else { | } | ||
return { | else { | ||
return { top: 0, left: 0 }; | |||
} | } | ||
}, | }, | ||
_cacheMargins: function() { | _cacheMargins: function () { | ||
this.margins = { | this.margins = { | ||
left: (parseInt(this.element.css("marginLeft"), 10) || 0), | left: (parseInt(this.element.css("marginLeft"), 10) || 0), | ||
| 第976行: | 第1,018行: | ||
}; | }; | ||
}, | }, | ||
_cacheHelperProportions: function() { | _cacheHelperProportions: function () { | ||
this.helperProportions = { | this.helperProportions = { | ||
width: this.helper.outerWidth(), | width: this.helper.outerWidth(), | ||
| 第982行: | 第1,024行: | ||
}; | }; | ||
}, | }, | ||
_setContainment: function() { | _setContainment: function () { | ||
var o = this.options; | var o = this.options; | ||
if (o.containment == 'parent') o.containment = this.helper[0].parentNode; | if (o.containment == 'parent') | ||
if (o.containment == 'document' || o.containment == 'window') this.containment = [o.containment == 'document' ? 0 : $(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left, o.containment == 'document' ? 0 : $(window).scrollTop() - this.offset.relative.top - this.offset.parent.top, (o.containment == 'document' ? 0 : $(window).scrollLeft()) + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left, (o.containment == 'document' ? 0 : $(window).scrollTop()) + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top]; | o.containment = this.helper[0].parentNode; | ||
if (o.containment == 'document' || o.containment == 'window') | |||
this.containment = [ | |||
o.containment == 'document' ? 0 : $(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left, | |||
o.containment == 'document' ? 0 : $(window).scrollTop() - this.offset.relative.top - this.offset.parent.top, | |||
(o.containment == 'document' ? 0 : $(window).scrollLeft()) + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left, | |||
(o.containment == 'document' ? 0 : $(window).scrollTop()) + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top | |||
]; | |||
if (!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) { | if (!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) { | ||
var c = $(o.containment); | var c = $(o.containment); | ||
var ce = c[0]; | var ce = c[0]; | ||
if (!ce) return; | if (!ce) | ||
return; | |||
var co = c.offset(); | var co = c.offset(); | ||
var over = ($(ce).css("overflow") != 'hidden'); | var over = ($(ce).css("overflow") != 'hidden'); | ||
this.containment = [(parseInt($(ce).css("borderLeftWidth"), 10) || 0) + (parseInt($(ce).css("paddingLeft"), 10) || 0), (parseInt($(ce).css("borderTopWidth"), 10) || 0) + (parseInt($(ce).css("paddingTop"), 10) || 0), (over ? Math.max(ce.scrollWidth, ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"), 10) || 0) - (parseInt($(ce).css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right, (over ? Math.max(ce.scrollHeight, ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"), 10) || 0) - (parseInt($(ce).css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top - this.margins.bottom]; | this.containment = [ | ||
(parseInt($(ce).css("borderLeftWidth"), 10) || 0) + (parseInt($(ce).css("paddingLeft"), 10) || 0), | |||
(parseInt($(ce).css("borderTopWidth"), 10) || 0) + (parseInt($(ce).css("paddingTop"), 10) || 0), | |||
(over ? Math.max(ce.scrollWidth, ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"), 10) || 0) - (parseInt($(ce).css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right, | |||
(over ? Math.max(ce.scrollHeight, ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"), 10) || 0) - (parseInt($(ce).css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top - this.margins.bottom | |||
]; | |||
this.relative_container = c; | this.relative_container = c; | ||
} else if (o.containment.constructor == | } | ||
else if (o.containment.constructor == Array) { | |||
this.containment = o.containment; | this.containment = o.containment; | ||
} | } | ||
}, | }, | ||
_convertPositionTo: function(d, pos) { | _convertPositionTo: function (d, pos) { | ||
if (!pos) pos = this.position; | if (!pos) | ||
pos = this.position; | |||
var mod = d == "absolute" ? 1 : -1; | var mod = d == "absolute" ? 1 : -1; | ||
var o = this.options, | var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); | ||
return { | return { | ||
top: (pos.top + this.offset.relative.top * mod + this.offset.parent.top * mod - ((this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : (scrollIsRootNode ? 0 : scroll.scrollTop())) * mod)), | top: (pos.top | ||
left: (pos.left + this.offset.relative.left * mod + this.offset.parent.left * mod - ((this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft()) * mod)) | + this.offset.relative.top * mod | ||
+ this.offset.parent.top * mod | |||
- ((this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : (scrollIsRootNode ? 0 : scroll.scrollTop())) * mod)), | |||
left: (pos.left | |||
+ this.offset.relative.left * mod | |||
+ this.offset.parent.left * mod | |||
- ((this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft()) * mod)) | |||
}; | }; | ||
}, | }, | ||
_generatePosition: function(event) { | _generatePosition: function (event) { | ||
var o = this.options, | var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); | ||
var pageX = event.pageX; | var pageX = event.pageX; | ||
var pageY = event.pageY; | var pageY = event.pageY; | ||
| 第1,021行: | 第1,079行: | ||
if (this.relative_container) { | if (this.relative_container) { | ||
var co = this.relative_container.offset(); | var co = this.relative_container.offset(); | ||
containment = [this.containment[0] + co.left, this.containment[1] + co.top, this.containment[2] + co.left, this.containment[3] + co.top]; | containment = [this.containment[0] + co.left, | ||
} else { | this.containment[1] + co.top, | ||
this.containment[2] + co.left, | |||
this.containment[3] + co.top]; | |||
} | |||
else { | |||
containment = this.containment; | containment = this.containment; | ||
} | } | ||
if (event.pageX - this.offset.click.left < containment[0]) pageX = containment[0] + this.offset.click.left; | if (event.pageX - this.offset.click.left < containment[0]) | ||
if (event.pageY - this.offset.click.top < containment[1]) pageY = containment[1] + this.offset.click.top; | pageX = containment[0] + this.offset.click.left; | ||
if (event.pageX - this.offset.click.left > containment[2]) pageX = containment[2] + this.offset.click.left; | if (event.pageY - this.offset.click.top < containment[1]) | ||
if (event.pageY - this.offset.click.top > containment[3]) pageY = containment[3] + this.offset.click.top; | pageY = containment[1] + this.offset.click.top; | ||
if (event.pageX - this.offset.click.left > containment[2]) | |||
pageX = containment[2] + this.offset.click.left; | |||
if (event.pageY - this.offset.click.top > containment[3]) | |||
pageY = containment[3] + this.offset.click.top; | |||
} | } | ||
if (o.grid) { | if (o.grid) { | ||
var top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY; | var top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY; | ||
pageY = containment ? (!(top - this.offset.click.top < containment[1] || top - this.offset.click.top > containment[3]) ? top : (!(top - this.offset.click.top < | pageY = containment ? (!(top - this.offset.click.top < containment[1] || top - this.offset.click.top > containment[3]) ? top : (!(top - this.offset.click.top < containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; | ||
var left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX; | var left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX; | ||
pageX = containment ? (!(left - this.offset.click.left < containment[0] || left - this.offset.click.left > containment[2]) ? left : (!(left - this.offset.click.left < containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; | pageX = containment ? (!(left - this.offset.click.left < containment[0] || left - this.offset.click.left > containment[2]) ? left : (!(left - this.offset.click.left < containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; | ||
| 第1,039行: | 第1,104行: | ||
} | } | ||
return { | return { | ||
top: (pageY - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + ((this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : (scrollIsRootNode ? 0 : scroll.scrollTop())))), | top: (pageY | ||
left: (pageX - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + ((this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft()))) | - this.offset.click.top | ||
- this.offset.relative.top | |||
- this.offset.parent.top | |||
+ ((this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : (scrollIsRootNode ? 0 : scroll.scrollTop())))), | |||
left: (pageX | |||
- this.offset.click.left | |||
- this.offset.relative.left | |||
- this.offset.parent.left | |||
+ ((this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft()))) | |||
}; | }; | ||
}, | }, | ||
_clear: function() { | _clear: function () { | ||
this.helper.removeClass("ui-draggable-dragging"); | this.helper.removeClass("ui-draggable-dragging"); | ||
if (this.helper[0] != this.element[0] && !this.cancelHelperRemoval) this.helper.remove(); | if (this.helper[0] != this.element[0] && !this.cancelHelperRemoval) | ||
this.helper.remove(); | |||
this.helper = null; | this.helper = null; | ||
this.cancelHelperRemoval = | this.cancelHelperRemoval = false; | ||
}, | }, | ||
_trigger: function(type, event, ui) { | _trigger: function (type, event, ui) { | ||
ui = ui || this._uiHash(); | ui = ui || this._uiHash(); | ||
$.ui.plugin.call(this, type, [event, ui]); | $.ui.plugin.call(this, type, [event, ui]); | ||
if (type == "drag") this.positionAbs = this._convertPositionTo("absolute"); | if (type == "drag") | ||
this.positionAbs = this._convertPositionTo("absolute"); | |||
return $.Widget.prototype._trigger.call(this, type, event, ui); | return $.Widget.prototype._trigger.call(this, type, event, ui); | ||
}, | }, | ||
plugins: {}, | plugins: {}, | ||
_uiHash: function(event) { | _uiHash: function (event) { | ||
return { | return { | ||
helper: this.helper, | helper: this.helper, | ||
| 第1,066行: | 第1,141行: | ||
}); | }); | ||
$.ui.plugin.add("draggable", "connectToSortable", { | $.ui.plugin.add("draggable", "connectToSortable", { | ||
start: function(event, ui) { | start: function (event, ui) { | ||
var inst = $(this).data("draggable"), | var inst = $(this).data("draggable"), o = inst.options, uiSortable = $.extend({}, ui, { item: inst.element }); | ||
inst.sortables = []; | inst.sortables = []; | ||
$(o.connectToSortable).each(function() { | $(o.connectToSortable).each(function () { | ||
var sortable = $.data(this, 'sortable'); | var sortable = $.data(this, 'sortable'); | ||
if (sortable && !sortable.options.disabled) { | if (sortable && !sortable.options.disabled) { | ||
| 第1,085行: | 第1,156行: | ||
}); | }); | ||
}, | }, | ||
stop: function(event, ui) { | stop: function (event, ui) { | ||
var inst = $(this).data("draggable"), | var inst = $(this).data("draggable"), uiSortable = $.extend({}, ui, { item: inst.element }); | ||
$.each(inst.sortables, function () { | |||
$.each(inst.sortables, function() { | |||
if (this.instance.isOver) { | if (this.instance.isOver) { | ||
this.instance.isOver = 0; | this.instance.isOver = 0; | ||
inst.cancelHelperRemoval = | inst.cancelHelperRemoval = true; | ||
this.instance.cancelHelperRemoval = | this.instance.cancelHelperRemoval = false; | ||
if (this.shouldRevert) this.instance.options.revert = | if (this.shouldRevert) | ||
this.instance.options.revert = true; | |||
this.instance._mouseStop(event); | this.instance._mouseStop(event); | ||
this.instance.options.helper = this.instance.options._helper; | this.instance.options.helper = this.instance.options._helper; | ||
if (inst.options.helper == 'original') this.instance.currentItem.css({ | if (inst.options.helper == 'original') | ||
this.instance.currentItem.css({ top: 'auto', left: 'auto' }); | |||
} | |||
else { | |||
} else { | this.instance.cancelHelperRemoval = false; | ||
this.instance.cancelHelperRemoval = | |||
this.instance._trigger("deactivate", event, uiSortable); | this.instance._trigger("deactivate", event, uiSortable); | ||
} | } | ||
}); | }); | ||
}, | }, | ||
drag: function(event, ui) { | drag: function (event, ui) { | ||
var inst = $(this).data("draggable"), | var inst = $(this).data("draggable"), that = this; | ||
var checkPos = function (o) { | |||
var checkPos = function(o) { | var dyClick = this.offset.click.top, dxClick = this.offset.click.left; | ||
var dyClick = this.offset.click.top, | var helperTop = this.positionAbs.top, helperLeft = this.positionAbs.left; | ||
var itemHeight = o.height, itemWidth = o.width; | |||
var helperTop = this.positionAbs.top, | var itemTop = o.top, itemLeft = o.left; | ||
var itemHeight = o.height, | |||
var itemTop = o.top, | |||
return $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth); | return $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth); | ||
}; | }; | ||
$.each(inst.sortables, function(i) { | $.each(inst.sortables, function (i) { | ||
var innermostIntersecting = | var innermostIntersecting = false; | ||
var thisSortable = this; | var thisSortable = this; | ||
this.instance.positionAbs = inst.positionAbs; | this.instance.positionAbs = inst.positionAbs; | ||
| 第1,129行: | 第1,192行: | ||
this.instance.offset.click = inst.offset.click; | this.instance.offset.click = inst.offset.click; | ||
if (this.instance._intersectsWith(this.instance.containerCache)) { | if (this.instance._intersectsWith(this.instance.containerCache)) { | ||
innermostIntersecting = | innermostIntersecting = true; | ||
$.each(inst.sortables, function() { | $.each(inst.sortables, function () { | ||
this.instance.positionAbs = inst.positionAbs; | this.instance.positionAbs = inst.positionAbs; | ||
this.instance.helperProportions = inst.helperProportions; | this.instance.helperProportions = inst.helperProportions; | ||
this.instance.offset.click = inst.offset.click; | this.instance.offset.click = inst.offset.click; | ||
if (this != thisSortable && this.instance._intersectsWith(this.instance.containerCache) && $.ui.contains(thisSortable.instance.element[0], this.instance.element[0])) innermostIntersecting = | if (this != thisSortable | ||
&& this.instance._intersectsWith(this.instance.containerCache) | |||
&& $.ui.contains(thisSortable.instance.element[0], this.instance.element[0])) | |||
innermostIntersecting = false; | |||
return innermostIntersecting; | return innermostIntersecting; | ||
}); | }); | ||
| 第1,143行: | 第1,209行: | ||
this.instance.currentItem = $(that).clone().removeAttr('id').appendTo(this.instance.element).data("sortable-item", true); | this.instance.currentItem = $(that).clone().removeAttr('id').appendTo(this.instance.element).data("sortable-item", true); | ||
this.instance.options._helper = this.instance.options.helper; | this.instance.options._helper = this.instance.options.helper; | ||
this.instance.options.helper = function() { | this.instance.options.helper = function () { return ui.helper[0]; }; | ||
event.target = this.instance.currentItem[0]; | event.target = this.instance.currentItem[0]; | ||
this.instance._mouseCapture(event, true); | this.instance._mouseCapture(event, true); | ||
this.instance._mouseStart(event, true, true); | this.instance._mouseStart(event, true, true); | ||
this.instance.offset.click.top = inst.offset.click.top; | this.instance.offset.click.top = inst.offset.click.top; | ||
this | this.instance.offset.click.left = inst.offset.click.left; | ||
this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left; | this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left; | ||
this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top; | this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top; | ||
| 第1,159行: | 第1,222行: | ||
this.instance.fromOutside = inst; | this.instance.fromOutside = inst; | ||
} | } | ||
if (this.instance.currentItem) this.instance._mouseDrag(event); | if (this.instance.currentItem) | ||
} else { | this.instance._mouseDrag(event); | ||
} | |||
else { | |||
if (this.instance.isOver) { | if (this.instance.isOver) { | ||
this.instance.isOver = 0; | this.instance.isOver = 0; | ||
this.instance.cancelHelperRemoval = | this.instance.cancelHelperRemoval = true; | ||
this.instance.options.revert = | this.instance.options.revert = false; | ||
this.instance._trigger('out', event, this.instance._uiHash(this.instance)); | this.instance._trigger('out', event, this.instance._uiHash(this.instance)); | ||
this.instance._mouseStop(event, true); | this.instance._mouseStop(event, true); | ||
this.instance.options.helper = this.instance.options._helper; | this.instance.options.helper = this.instance.options._helper; | ||
this.instance.currentItem.remove(); | this.instance.currentItem.remove(); | ||
if (this.instance.placeholder) this.instance.placeholder.remove(); | if (this.instance.placeholder) | ||
this.instance.placeholder.remove(); | |||
inst._trigger("fromSortable", event); | inst._trigger("fromSortable", event); | ||
inst.dropped = | inst.dropped = false; | ||
} | } | ||
}; | } | ||
; | |||
}); | }); | ||
} | } | ||
}); | }); | ||
$.ui.plugin.add("draggable", "cursor", { | $.ui.plugin.add("draggable", "cursor", { | ||
start: function(event, ui) { | start: function (event, ui) { | ||
var t = $('body'), | var t = $('body'), o = $(this).data('draggable').options; | ||
if (t.css("cursor")) | |||
if (t.css("cursor")) o._cursor = t.css("cursor"); | o._cursor = t.css("cursor"); | ||
t.css("cursor", o.cursor); | t.css("cursor", o.cursor); | ||
}, | }, | ||
stop: function(event, ui) { | stop: function (event, ui) { | ||
var o = $(this).data('draggable').options; | var o = $(this).data('draggable').options; | ||
if (o._cursor) $('body').css("cursor", o._cursor); | if (o._cursor) | ||
$('body').css("cursor", o._cursor); | |||
} | } | ||
}); | }); | ||
$.ui.plugin.add("draggable", "opacity", { | $.ui.plugin.add("draggable", "opacity", { | ||
start: function(event, ui) { | start: function (event, ui) { | ||
var t = $(ui.helper), | var t = $(ui.helper), o = $(this).data('draggable').options; | ||
if (t.css("opacity")) | |||
if (t.css("opacity")) o._opacity = t.css("opacity"); | o._opacity = t.css("opacity"); | ||
t.css('opacity', o.opacity); | t.css('opacity', o.opacity); | ||
}, | }, | ||
stop: function(event, ui) { | stop: function (event, ui) { | ||
var o = $(this).data('draggable').options; | var o = $(this).data('draggable').options; | ||
if (o._opacity) $(ui.helper).css('opacity', o._opacity); | if (o._opacity) | ||
$(ui.helper).css('opacity', o._opacity); | |||
} | } | ||
}); | }); | ||
$.ui.plugin.add("draggable", "scroll", { | $.ui.plugin.add("draggable", "scroll", { | ||
start: function(event, ui) { | start: function (event, ui) { | ||
var i = $(this).data("draggable"); | var i = $(this).data("draggable"); | ||
if (i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset(); | if (i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') | ||
i.overflowOffset = i.scrollParent.offset(); | |||
}, | }, | ||
drag: function(event, ui) { | drag: function (event, ui) { | ||
var i = $(this).data("draggable"), | var i = $(this).data("draggable"), o = i.options, scrolled = false; | ||
if (i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') { | if (i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') { | ||
if (!o.axis || o.axis != 'x') { | if (!o.axis || o.axis != 'x') { | ||
if ((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) i.scrollParent[0].scrollTop = | if ((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) | ||
i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed; | |||
else if (event.pageY - i.overflowOffset.top < o.scrollSensitivity) i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed; | else if (event.pageY - i.overflowOffset.top < o.scrollSensitivity) | ||
i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed; | |||
} | } | ||
if (!o.axis || o.axis != 'y') { | if (!o.axis || o.axis != 'y') { | ||
if ((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed; | if ((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) | ||
else if (event.pageX - i.overflowOffset.left < o.scrollSensitivity) i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed; | i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed; | ||
else if (event.pageX - i.overflowOffset.left < o.scrollSensitivity) | |||
i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed; | |||
} | } | ||
} else { | } | ||
else { | |||
if (!o.axis || o.axis != 'x') { | if (!o.axis || o.axis != 'x') { | ||
if (event.pageY - $(document).scrollTop() < o.scrollSensitivity) scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); | if (event.pageY - $(document).scrollTop() < o.scrollSensitivity) | ||
else if ($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); | scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); | ||
else if ($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) | |||
scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); | |||
} | } | ||
if (!o.axis || o.axis != 'y') { | if (!o.axis || o.axis != 'y') { | ||
if (event.pageX - $(document).scrollLeft() < o.scrollSensitivity) scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); | if (event.pageX - $(document).scrollLeft() < o.scrollSensitivity) | ||
else if ($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); | scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); | ||
else if ($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) | |||
scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); | |||
} | } | ||
} | } | ||
if (scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) $.ui.ddmanager.prepareOffsets(i, event); | if (scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) | ||
$.ui.ddmanager.prepareOffsets(i, event); | |||
} | } | ||
}); | }); | ||
$.ui.plugin.add("draggable", "snap", { | $.ui.plugin.add("draggable", "snap", { | ||
start: function(event, ui) { | start: function (event, ui) { | ||
var i = $(this).data("draggable"), | var i = $(this).data("draggable"), o = i.options; | ||
i.snapElements = []; | i.snapElements = []; | ||
$(o.snap.constructor != String ? (o.snap.items || ':data(draggable)') : o.snap).each(function() { | $(o.snap.constructor != String ? (o.snap.items || ':data(draggable)') : o.snap).each(function () { | ||
var $t = $(this); | var $t = $(this); | ||
var $o = $t.offset(); | var $o = $t.offset(); | ||
if (this != i.element[0]) i.snapElements.push({ | if (this != i.element[0]) | ||
i.snapElements.push({ | |||
item: this, | |||
width: $t.outerWidth(), height: $t.outerHeight(), | |||
top: $o.top, left: $o.left | |||
}); | |||
}); | }); | ||
}, | }, | ||
drag: function(event, ui) { | drag: function (event, ui) { | ||
var inst = $(this).data("draggable"), | var inst = $(this).data("draggable"), o = inst.options; | ||
var d = o.snapTolerance; | var d = o.snapTolerance; | ||
var x1 = ui.offset.left, | var x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width, y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height; | ||
for (var i = inst.snapElements.length - 1; i >= 0; i--) { | for (var i = inst.snapElements.length - 1; i >= 0; i--) { | ||
var l = inst.snapElements[i].left, | var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width, t = inst.snapElements[i].top, b = t + inst.snapElements[i].height; | ||
if (!((l - d < x1 && x1 < r + d && t - d < y1 && y1 < b + d) || (l - d < x1 && x1 < r + d && t - d < y2 && y2 < b + d) || (l - d < x2 && x2 < r + d && t - d < y1 && y1 < b + d) || (l - d < x2 && x2 < r + d && t - d < y2 && y2 < b + d))) { | if (!((l - d < x1 && x1 < r + d && t - d < y1 && y1 < b + d) || (l - d < x1 && x1 < r + d && t - d < y2 && y2 < b + d) || (l - d < x2 && x2 < r + d && t - d < y1 && y1 < b + d) || (l - d < x2 && x2 < r + d && t - d < y2 && y2 < b + d))) { | ||
if (inst.snapElements[i].snapping)(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { | if (inst.snapElements[i].snapping) | ||
(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); | |||
inst.snapElements[i].snapping = false; | |||
inst.snapElements[i].snapping = | |||
continue; | continue; | ||
} | } | ||
| 第1,276行: | 第1,342行: | ||
var ls = Math.abs(l - x2) <= d; | var ls = Math.abs(l - x2) <= d; | ||
var rs = Math.abs(r - x1) <= d; | var rs = Math.abs(r - x1) <= d; | ||
if (ts) ui.position.top = inst._convertPositionTo("relative", { | if (ts) | ||
ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top; | |||
if (bs) | |||
ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top; | |||
if (bs) ui.position.top = inst._convertPositionTo("relative", { | if (ls) | ||
ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left; | |||
if (rs) | |||
ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left; | |||
if (ls) ui.position.left = inst._convertPositionTo("relative", { | |||
if (rs) ui.position.left = inst._convertPositionTo("relative", { | |||
} | } | ||
var first = (ts || bs || ls || rs); | var first = (ts || bs || ls || rs); | ||
if (o.snapMode != | if (o.snapMode != 'outer') { | ||
var ts = Math.abs(t - y1) <= d; | var ts = Math.abs(t - y1) <= d; | ||
var bs = Math.abs(b - y2) <= d; | var bs = Math.abs(b - y2) <= d; | ||
var ls = Math.abs(l - x1) <= d; | var ls = Math.abs(l - x1) <= d; | ||
var rs = Math.abs(r - x2) <= d; | var rs = Math.abs(r - x2) <= d; | ||
if (ts) ui.position.top = inst._convertPositionTo("relative", { | if (ts) | ||
ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top; | |||
if (bs) | |||
ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top; | |||
if (bs) ui.position.top = inst._convertPositionTo("relative", { | if (ls) | ||
ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left; | |||
if (rs) | |||
ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left; | |||
if (ls) ui.position.left = inst._convertPositionTo("relative", { | |||
if (rs) ui.position.left = inst._convertPositionTo("relative", { | |||
} | } | ||
if (!inst.snapElements[i].snapping && (ts || bs || ls || rs || first))(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { | if (!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) | ||
(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); | |||
inst.snapElements[i].snapping = (ts || bs || ls || rs || first); | inst.snapElements[i].snapping = (ts || bs || ls || rs || first); | ||
}; | } | ||
; | |||
} | } | ||
}); | }); | ||
$.ui.plugin.add("draggable", "stack", { | $.ui.plugin.add("draggable", "stack", { | ||
start: function(event, ui) { | start: function (event, ui) { | ||
var o = $(this).data("draggable").options; | var o = $(this).data("draggable").options; | ||
var group = $.makeArray($(o.stack)).sort(function(a, b) { | var group = $.makeArray($(o.stack)).sort(function (a, b) { | ||
return (parseInt($(a).css("zIndex"), 10) || | return (parseInt($(a).css("zIndex"), 10) || 0) - (parseInt($(b).css("zIndex"), 10) || 0); | ||
}); | }); | ||
if (!group.length) { | if (!group.length) { | ||
| 第1,335行: | 第1,383行: | ||
} | } | ||
var min = parseInt(group[0].style.zIndex) || 0; | var min = parseInt(group[0].style.zIndex) || 0; | ||
$(group).each(function(i) { | $(group).each(function (i) { | ||
this.style.zIndex = min + i; | this.style.zIndex = min + i; | ||
}); | }); | ||
| 第1,342行: | 第1,390行: | ||
}); | }); | ||
$.ui.plugin.add("draggable", "zIndex", { | $.ui.plugin.add("draggable", "zIndex", { | ||
start: function(event, ui) { | start: function (event, ui) { | ||
var t = $(ui.helper), | var t = $(ui.helper), o = $(this).data("draggable").options; | ||
if (t.css("zIndex")) | |||
if (t.css("zIndex")) o._zIndex = t.css("zIndex"); | o._zIndex = t.css("zIndex"); | ||
t.css('zIndex', o.zIndex); | t.css('zIndex', o.zIndex); | ||
}, | }, | ||
stop: function(event, ui) { | stop: function (event, ui) { | ||
var o = $(this).data("draggable").options; | var o = $(this).data("draggable").options; | ||
if (o._zIndex) $(ui.helper).css('zIndex', o._zIndex); | if (o._zIndex) | ||
$(ui.helper).css('zIndex', o._zIndex); | |||
} | } | ||
}); | }); | ||
})(jQuery); | })(jQuery); | ||
(function($, undefined) { | (function ($, undefined) { | ||
$.widget("ui.droppable", { | $.widget("ui.droppable", { | ||
version: "1.9.2", | version: "1.9.2", | ||
| 第1,360行: | 第1,409行: | ||
options: { | options: { | ||
accept: '*', | accept: '*', | ||
activeClass: | activeClass: false, | ||
addClasses: | addClasses: true, | ||
greedy: | greedy: false, | ||
hoverClass: | hoverClass: false, | ||
scope: 'default', | scope: 'default', | ||
tolerance: 'intersect' | tolerance: 'intersect' | ||
}, | }, | ||
_create: function() { | _create: function () { | ||
var o = this.options, | var o = this.options, accept = o.accept; | ||
this.isover = 0; | this.isover = 0; | ||
this.isout = 1; | this.isout = 1; | ||
this.accept = | this.accept = typeof accept === 'function' ? accept : function (d) { | ||
return d.is(accept); | return d.is(accept); | ||
}; | }; | ||
this.proportions = { | this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight }; | ||
$.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || []; | |||
$.ui.ddmanager. | |||
$.ui.ddmanager.droppables[o.scope].push(this); | $.ui.ddmanager.droppables[o.scope].push(this); | ||
(o.addClasses && this.element.addClass("ui-droppable")); | (o.addClasses && this.element.addClass("ui-droppable")); | ||
}, | }, | ||
_destroy: function() { | _destroy: function () { | ||
var drop = $.ui.ddmanager.droppables[this.options.scope]; | var drop = $.ui.ddmanager.droppables[this.options.scope]; | ||
for (var i = 0; i < drop.length; i++) | for (var i = 0; i < drop.length; i++) | ||
if (drop[i] == this) drop.splice(i, 1); | if (drop[i] == this) | ||
drop.splice(i, 1); | |||
this.element.removeClass("ui-droppable ui-droppable-disabled"); | this.element.removeClass("ui-droppable ui-droppable-disabled"); | ||
}, | }, | ||
_setOption: function(key, value) { | _setOption: function (key, value) { | ||
if (key == 'accept') { | if (key == 'accept') { | ||
this.accept = | this.accept = typeof value === 'function' ? value : function (d) { | ||
return d.is(value); | return d.is(value); | ||
}; | }; | ||
| 第1,398行: | 第1,443行: | ||
$.Widget.prototype._setOption.apply(this, arguments); | $.Widget.prototype._setOption.apply(this, arguments); | ||
}, | }, | ||
_activate: function(event) { | _activate: function (event) { | ||
var draggable = $.ui.ddmanager.current; | var draggable = $.ui.ddmanager.current; | ||
if (this.options.activeClass) this.element.addClass(this.options.activeClass); | if (this.options.activeClass) | ||
this.element.addClass(this.options.activeClass); | |||
(draggable && this._trigger('activate', event, this.ui(draggable))); | (draggable && this._trigger('activate', event, this.ui(draggable))); | ||
}, | }, | ||
_deactivate: function(event) { | _deactivate: function (event) { | ||
var draggable = $.ui.ddmanager.current; | var draggable = $.ui.ddmanager.current; | ||
if (this.options.activeClass) this.element.removeClass(this.options.activeClass); | if (this.options.activeClass) | ||
this.element.removeClass(this.options.activeClass); | |||
(draggable && this._trigger('deactivate', event, this.ui(draggable))); | (draggable && this._trigger('deactivate', event, this.ui(draggable))); | ||
}, | }, | ||
_over: function(event) { | _over: function (event) { | ||
var draggable = $.ui. | var draggable = $.ui.ddmanager.current; | ||
if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) | |||
if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; | return; | ||
if (this.accept.call(this.element[0], (draggable.currentItem || draggable.element))) { | if (this.accept.call(this.element[0], (draggable.currentItem || draggable.element))) { | ||
if (this.options.hoverClass) this.element.addClass(this.options.hoverClass); | if (this.options.hoverClass) | ||
this.element.addClass(this.options.hoverClass); | |||
this._trigger('over', event, this.ui(draggable)); | this._trigger('over', event, this.ui(draggable)); | ||
} | } | ||
}, | }, | ||
_out: function(event) { | _out: function (event) { | ||
var draggable = $.ui.ddmanager.current; | var draggable = $.ui.ddmanager.current; | ||
if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; | if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) | ||
return; | |||
if (this.accept.call(this.element[0], (draggable.currentItem || draggable.element))) { | if (this.accept.call(this.element[0], (draggable.currentItem || draggable.element))) { | ||
if (this.options.hoverClass) this.element.removeClass(this.options.hoverClass); | if (this.options.hoverClass) | ||
this.element.removeClass(this.options.hoverClass); | |||
this._trigger('out', event, this.ui(draggable)); | this._trigger('out', event, this.ui(draggable)); | ||
} | } | ||
}, | }, | ||
_drop: function(event, custom) { | _drop: function (event, custom) { | ||
var draggable = custom || $.ui.ddmanager.current; | var draggable = custom || $.ui.ddmanager.current; | ||
if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return false; | if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) | ||
var childrenIntersection = | return false; | ||
this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function() { | var childrenIntersection = false; | ||
this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function () { | |||
var inst = $.data(this, 'droppable'); | var inst = $.data(this, 'droppable'); | ||
if (inst.options.greedy && ! | if (inst.options.greedy | ||
&& !inst.options.disabled | |||
&& inst.options.scope == draggable.options.scope | |||
&& inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) | |||
childrenIntersection = | && $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)) { | ||
childrenIntersection = true; | |||
return false; | return false; | ||
} | } | ||
}); | }); | ||
if (childrenIntersection) return false; | if (childrenIntersection) | ||
return false; | |||
if (this.accept.call(this.element[0], (draggable.currentItem || draggable.element))) { | if (this.accept.call(this.element[0], (draggable.currentItem || draggable.element))) { | ||
if (this.options.activeClass) this.element.removeClass(this.options.activeClass); | if (this.options.activeClass) | ||
if (this.options.hoverClass) this.element.removeClass(this.options.hoverClass); | this.element.removeClass(this.options.activeClass); | ||
if (this.options.hoverClass) | |||
this.element.removeClass(this.options.hoverClass); | |||
this._trigger('drop', event, this.ui(draggable)); | this._trigger('drop', event, this.ui(draggable)); | ||
return this.element; | return this.element; | ||
| 第1,448行: | 第1,503行: | ||
return false; | return false; | ||
}, | }, | ||
ui: function(c) { | ui: function (c) { | ||
return { | return { | ||
draggable: (c.currentItem || c.element), | draggable: (c.currentItem || c.element), | ||
| 第1,457行: | 第1,512行: | ||
} | } | ||
}); | }); | ||
$.ui.intersect = function(draggable, droppable, toleranceMode) { | $.ui.intersect = function (draggable, droppable, toleranceMode) { | ||
if (!droppable.offset) return false; | if (!droppable.offset) | ||
var x1 = (draggable.positionAbs || draggable.position.absolute).left, | return false; | ||
var x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width, y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height; | |||
var l = droppable.offset.left, r = l + droppable.proportions.width, t = droppable.offset.top, b = t + droppable.proportions.height; | |||
var l = droppable.offset.left, | |||
switch (toleranceMode) { | switch (toleranceMode) { | ||
case 'fit': | case 'fit': | ||
return (l <= x1 && x2 <= r && t <= y1 && y2 <= b); | return (l <= x1 && x2 <= r | ||
&& t <= y1 && y2 <= b); | |||
break; | break; | ||
case 'intersect': | case 'intersect': | ||
return (l < x1 + (draggable.helperProportions.width / 2) && x2 - (draggable.helperProportions.width / 2) < r && t < y1 + (draggable.helperProportions.height / 2) && y2 - (draggable.helperProportions.height / 2) < b); | return (l < x1 + (draggable.helperProportions.width / 2) | ||
&& x2 - (draggable.helperProportions.width / 2) < r | |||
&& t < y1 + (draggable.helperProportions.height / 2) | |||
&& y2 - (draggable.helperProportions.height / 2) < b); | |||
break; | break; | ||
case 'pointer': | case 'pointer': | ||
var draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left), | var draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left), draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top), isOver = $.ui.isOver(draggableTop, draggableLeft, t, l, droppable.proportions.height, droppable.proportions.width); | ||
return isOver; | return isOver; | ||
break; | break; | ||
case 'touch': | case 'touch': | ||
return ((y1 >= t && y1 <= b) || (y2 >= t && y2 <= b) || (y1 < t && y2 > b)) && ((x1 >= l && x1 <= r) || (x2 >= l && x2 <= r) || (x1 < l && x2 > r)); | return ((y1 >= t && y1 <= b) || | ||
(y2 >= t && y2 <= b) || | |||
(y1 < t && y2 > b)) && ((x1 >= l && x1 <= r) || | |||
(x2 >= l && x2 <= r) || | |||
(x1 < l && x2 > r)); | |||
break; | break; | ||
default: | default: | ||
| 第1,490行: | 第1,546行: | ||
$.ui.ddmanager = { | $.ui.ddmanager = { | ||
current: null, | current: null, | ||
droppables: { | droppables: { 'default': [] }, | ||
prepareOffsets: function (t, event) { | |||
prepareOffsets: function(t, event) { | |||
var m = $.ui.ddmanager.droppables[t.options.scope] || []; | var m = $.ui.ddmanager.droppables[t.options.scope] || []; | ||
var type = event ? event.type : null; | var type = event ? event.type : null; | ||
var list = (t.currentItem || t.element).find(":data(droppable)"). | var list = (t.currentItem || t.element).find(":data(droppable)").addBack(); | ||
droppablesLoop: for (var i = 0; i < m.length; i++) { | droppablesLoop: for (var i = 0; i < m.length; i++) { | ||
if (m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0], (t.currentItem || t.element)))) continue; | if (m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0], (t.currentItem || t.element)))) | ||
continue; | |||
for (var j = 0; j < list.length; j++) { | for (var j = 0; j < list.length; j++) { | ||
if (list[j] == m[i].element[0]) { | if (list[j] == m[i].element[0]) { | ||
| 第1,504行: | 第1,559行: | ||
continue droppablesLoop; | continue droppablesLoop; | ||
} | } | ||
}; | } | ||
; | |||
m[i].visible = m[i].element.css("display") != "none"; | m[i].visible = m[i].element.css("display") != "none"; | ||
if (!m[i].visible) continue; | if (!m[i].visible) | ||
if (type == "mousedown") m[i]._activate.call(m[i], event); | continue; | ||
if (type == "mousedown") | |||
m[i]._activate.call(m[i], event); | |||
m[i].offset = m[i].element.offset(); | m[i].offset = m[i].element.offset(); | ||
m[i].proportions = { | m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight }; | ||
} | } | ||
}, | }, | ||
drop: function(draggable, event) { | drop: function (draggable, event) { | ||
var dropped = | var dropped = false; | ||
$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() { | $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function () { | ||
if (!this.options) return; | if (!this.options) | ||
if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) dropped = this._drop.call(this, event) || dropped; | return; | ||
if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) | |||
dropped = this._drop.call(this, event) || dropped; | |||
if (!this.options.disabled && this.visible && this.accept.call(this.element[0], (draggable.currentItem || draggable.element))) { | if (!this.options.disabled && this.visible && this.accept.call(this.element[0], (draggable.currentItem || draggable.element))) { | ||
this.isout = 1; | this.isout = 1; | ||
| 第1,528行: | 第1,585行: | ||
return dropped; | return dropped; | ||
}, | }, | ||
dragStart: function(draggable, event) { | dragStart: function (draggable, event) { | ||
draggable.element.parentsUntil("body").bind("scroll.droppable", function() { | draggable.element.parentsUntil("body").bind("scroll.droppable", function () { | ||
if (!draggable.options.refreshPositions) $.ui.ddmanager.prepareOffsets(draggable, event); | if (!draggable.options.refreshPositions) | ||
$.ui.ddmanager.prepareOffsets(draggable, event); | |||
}); | }); | ||
}, | }, | ||
drag: function(draggable, event) { | drag: function (draggable, event) { | ||
if (draggable.options.refreshPositions) $.ui.ddmanager.prepareOffsets(draggable, event); | if (draggable.options.refreshPositions) | ||
$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() { | $.ui.ddmanager.prepareOffsets(draggable, event); | ||
if (this.options.disabled || this.greedyChild || !this.visible) return; | $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function () { | ||
if (this.options.disabled || this.greedyChild || !this.visible) | |||
return; | |||
var intersects = $.ui.intersect(draggable, this, this.options.tolerance); | var intersects = $.ui.intersect(draggable, this, this.options.tolerance); | ||
var c = !intersects && this.isover == 1 ? 'isout' : (intersects && this.isover == 0 ? 'isover' : null); | var c = !intersects && this.isover == 1 ? 'isout' : (intersects && this.isover == 0 ? 'isover' : null); | ||
if (!c) return; | if (!c) | ||
return; | |||
var parentInstance; | var parentInstance; | ||
if (this.options.greedy) { | if (this.options.greedy) { | ||
var scope = this.options.scope; | var scope = this.options.scope; | ||
var parent = this.element.parents( | var parent = this.element.parents(':data(droppable)').filter(function () { | ||
return $.data(this, 'droppable').options.scope === scope; | return $.data(this, 'droppable').options.scope === scope; | ||
}); | }); | ||
| 第1,567行: | 第1,627行: | ||
}); | }); | ||
}, | }, | ||
dragStop: function(draggable, event) { | dragStop: function (draggable, event) { | ||
draggable.element.parentsUntil("body").unbind("scroll.droppable"); | draggable.element.parentsUntil("body").unbind("scroll.droppable"); | ||
if (!draggable.options.refreshPositions) $.ui.ddmanager.prepareOffsets(draggable, event); | if (!draggable.options.refreshPositions) | ||
$.ui.ddmanager.prepareOffsets(draggable, event); | |||
} | } | ||
}; | }; | ||
})(jQuery); | })(jQuery); | ||
(function($, undefined) { | (function ($, undefined) { | ||
$.widget("ui.resizable", $.ui.mouse, { | $.widget("ui.resizable", $.ui.mouse, { | ||
version: "1.9.2", | version: "1.9.2", | ||
widgetEventPrefix: "resize", | widgetEventPrefix: "resize", | ||
options: { | options: { | ||
alsoResize: | alsoResize: false, | ||
animate: | animate: false, | ||
animateDuration: "slow", | animateDuration: "slow", | ||
animateEasing: "swing", | animateEasing: "swing", | ||
aspectRatio: | aspectRatio: false, | ||
autoHide: | autoHide: false, | ||
containment: | containment: false, | ||
ghost: | ghost: false, | ||
grid: | grid: false, | ||
handles: "e,s,se", | handles: "e,s,se", | ||
helper: | helper: false, | ||
maxHeight: null, | maxHeight: null, | ||
maxWidth: null, | maxWidth: null, | ||
| 第1,595行: | 第1,656行: | ||
zIndex: 1000 | zIndex: 1000 | ||
}, | }, | ||
_create: function() { | _create: function () { | ||
var that = this, | var that = this, o = this.options; | ||
this.element.addClass("ui-resizable"); | this.element.addClass("ui-resizable"); | ||
$.extend(this, { | $.extend(this, { | ||
| 第1,615行: | 第1,675行: | ||
})); | })); | ||
this.element = this.element.parent().data("resizable", this.element.data('resizable')); | this.element = this.element.parent().data("resizable", this.element.data('resizable')); | ||
this.elementIsWrapper = | this.elementIsWrapper = true; | ||
this.element.css({ | this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") }); | ||
this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0 }); | |||
this.originalElement.css({ | |||
this.originalResizeStyle = this.originalElement.css('resize'); | this.originalResizeStyle = this.originalElement.css('resize'); | ||
this.originalElement.css('resize', 'none'); | this.originalElement.css('resize', 'none'); | ||
this._proportionallyResizeElements.push(this.originalElement.css({ | this._proportionallyResizeElements.push(this.originalElement.css({ position: 'static', zoom: 1, display: 'block' })); | ||
this.originalElement.css({ margin: this.originalElement.css('margin') }); | |||
this.originalElement.css({ | |||
this._proportionallyResize(); | this._proportionallyResize(); | ||
} | } | ||
this.handles = o.handles || (!$('.ui-resizable-handle', this.element).length ? "e,s,se" : { | this.handles = o.handles || (!$('.ui-resizable-handle', this.element).length ? "e,s,se" : { n: '.ui-resizable-n', e: '.ui-resizable-e', s: '.ui-resizable-s', w: '.ui-resizable-w', se: '.ui-resizable-se', sw: '.ui-resizable-sw', ne: '.ui-resizable-ne', nw: '.ui-resizable-nw' }); | ||
if (this.handles.constructor == String) { | if (this.handles.constructor == String) { | ||
if (this.handles == 'all') this.handles = 'n,e,s,w,se,sw,ne,nw'; | if (this.handles == 'all') | ||
this.handles = 'n,e,s,w,se,sw,ne,nw'; | |||
var n = this.handles.split(","); | var n = this.handles.split(","); | ||
this.handles = {}; | this.handles = {}; | ||
for (var i = 0; i < n.length; i++) { | for (var i = 0; i < n.length; i++) { | ||
var handle = | var handle = n[i].trim(), hname = 'ui-resizable-' + handle; | ||
var axis = $('<div class="ui-resizable-handle ' + hname + '"></div>'); | |||
var axis = $( | axis.css({ zIndex: o.zIndex }); | ||
axis.css({ | |||
if ('se' == handle) { | if ('se' == handle) { | ||
axis.addClass('ui-icon ui-icon-gripsmall-diagonal-se'); | axis.addClass('ui-icon ui-icon-gripsmall-diagonal-se'); | ||
}; | } | ||
; | |||
this.handles[handle] = '.ui-resizable-' + handle; | this.handles[handle] = '.ui-resizable-' + handle; | ||
this.element.append(axis); | this.element.append(axis); | ||
} | } | ||
} | } | ||
this._renderAxis = function(target) { | this._renderAxis = function (target) { | ||
target = target || this.element; | target = target || this.element; | ||
for (var i in this.handles) { | for (var i in this.handles) { | ||
if (this.handles[i].constructor == String) this.handles[i] = $(this.handles[i], this.element).show(); | if (this.handles[i].constructor == String) | ||
this.handles[i] = $(this.handles[i], this.element).show(); | |||
if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) { | if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) { | ||
var axis = $(this.handles[i], this.element), | var axis = $(this.handles[i], this.element), padWrapper = 0; | ||
padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth(); | padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth(); | ||
var padPos = ['padding', /ne|nw|n/.test(i) ? 'Top' : /se|sw|s/.test(i) ? 'Bottom' : /^e$/.test(i) ? 'Right' : 'Left'].join(""); | var padPos = ['padding', | ||
/ne|nw|n/.test(i) ? 'Top' : | |||
/se|sw|s/.test(i) ? 'Bottom' : | |||
/^e$/.test(i) ? 'Right' : 'Left'].join(""); | |||
target.css(padPos, padWrapper); | target.css(padPos, padWrapper); | ||
this._proportionallyResize(); | this._proportionallyResize(); | ||
} | } | ||
if (!$(this.handles[i]).length) continue; | if (!$(this.handles[i]).length) | ||
continue; | |||
} | } | ||
}; | }; | ||
this._renderAxis(this.element); | this._renderAxis(this.element); | ||
this._handles = $('.ui-resizable-handle', this.element).disableSelection(); | this._handles = $('.ui-resizable-handle', this.element) | ||
this._handles.mouseover(function() { | .disableSelection(); | ||
this._handles.mouseover(function () { | |||
if (!that.resizing) { | if (!that.resizing) { | ||
if (this.className) var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i); | if (this.className) | ||
var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i); | |||
that.axis = axis && axis[1] ? axis[1] : 'se'; | that.axis = axis && axis[1] ? axis[1] : 'se'; | ||
} | } | ||
| 第1,694行: | 第1,733行: | ||
if (o.autoHide) { | if (o.autoHide) { | ||
this._handles.hide(); | this._handles.hide(); | ||
$(this.element).addClass("ui-resizable-autohide").mouseenter(function() { | $(this.element) | ||
if (o.disabled) return; | .addClass("ui-resizable-autohide") | ||
.mouseenter(function () { | |||
if (o.disabled) | |||
return; | |||
$(this).removeClass("ui-resizable-autohide"); | $(this).removeClass("ui-resizable-autohide"); | ||
that._handles.show(); | that._handles.show(); | ||
}).mouseleave(function() { | }) | ||
if (o.disabled) return; | .mouseleave(function () { | ||
if (o.disabled) | |||
return; | |||
if (!that.resizing) { | if (!that.resizing) { | ||
$(this).addClass("ui-resizable-autohide"); | $(this).addClass("ui-resizable-autohide"); | ||
| 第1,708行: | 第1,752行: | ||
this._mouseInit(); | this._mouseInit(); | ||
}, | }, | ||
_destroy: function() { | _destroy: function () { | ||
this._mouseDestroy(); | this._mouseDestroy(); | ||
var _destroy = function(exp) { | var _destroy = function (exp) { | ||
$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable"). | $(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing") | ||
.removeData("resizable").removeData("ui-resizable").off(".resizable").find('.ui-resizable-handle').remove(); | |||
}; | }; | ||
if (this.elementIsWrapper) { | if (this.elementIsWrapper) { | ||
| 第1,722行: | 第1,767行: | ||
top: wrapper.css('top'), | top: wrapper.css('top'), | ||
left: wrapper.css('left') | left: wrapper.css('left') | ||
}).insertAfter( | }).insertAfter(wrapper); | ||
wrapper.remove(); | wrapper.remove(); | ||
} | } | ||
| 第1,730行: | 第1,774行: | ||
return this; | return this; | ||
}, | }, | ||
_mouseCapture: function(event) { | _mouseCapture: function (event) { | ||
var handle = | var handle = false; | ||
for (var i in this.handles) { | for (var i in this.handles) { | ||
if ($(this.handles[i])[0] == event.target) { | if ($(this.handles[i])[0] == event.target) { | ||
handle = | handle = true; | ||
} | } | ||
} | } | ||
return !this.options.disabled && handle; | return !this.options.disabled && handle; | ||
}, | }, | ||
_mouseStart: function(event) { | _mouseStart: function (event) { | ||
var o = this.options, | var o = this.options, iniPos = this.element.position(), el = this.element; | ||
this.resizing = true; | |||
this.documentScroll = { top: $(document).scrollTop(), left: $(document).scrollLeft() }; | |||
this.resizing = | |||
this.documentScroll = { | |||
if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) { | if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) { | ||
el.css({ | el.css({ position: 'absolute', top: iniPos.top, left: iniPos.left }); | ||
} | } | ||
this._renderProxy(); | this._renderProxy(); | ||
var curleft = num(this.helper.css('left')), | var curleft = num(this.helper.css('left')), curtop = num(this.helper.css('top')); | ||
if (o.containment) { | if (o.containment) { | ||
curleft += $(o.containment).scrollLeft() || 0; | curleft += $(o.containment).scrollLeft() || 0; | ||
| 第1,763行: | 第1,797行: | ||
} | } | ||
this.offset = this.helper.offset(); | this.offset = this.helper.offset(); | ||
this.position = { | this.position = { left: curleft, top: curtop }; | ||
this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() }; | |||
this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() }; | |||
this.originalPosition = { left: curleft, top: curtop }; | |||
this.size = this._helper ? { | this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() }; | ||
this.originalMousePosition = { left: event.pageX, top: event.pageY }; | |||
this.originalSize = this._helper ? { | |||
this.originalPosition = { | |||
this.sizeDiff = { | |||
this.originalMousePosition = { | |||
this.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1); | this.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1); | ||
var cursor = $('.ui-resizable-' + this.axis).css('cursor'); | var cursor = $('.ui-resizable-' + this.axis).css('cursor'); | ||
| 第1,800行: | 第1,810行: | ||
return true; | return true; | ||
}, | }, | ||
_mouseDrag: function(event) { | _mouseDrag: function (event) { | ||
var el = this.helper, | var el = this.helper, o = this.options, props = {}, that = this, smp = this.originalMousePosition, a = this.axis; | ||
var dx = (event.pageX - smp.left) || 0, dy = (event.pageY - smp.top) || 0; | |||
var dx = (event.pageX - smp.left) || 0, | |||
var trigger = this._change[a]; | var trigger = this._change[a]; | ||
if (!trigger) return false; | if (!trigger) | ||
return false; | |||
var data = trigger.apply(this, [event, dx, dy]); | var data = trigger.apply(this, [event, dx, dy]); | ||
this._updateVirtualBoundaries(event.shiftKey); | this._updateVirtualBoundaries(event.shiftKey); | ||
| 第1,818行: | 第1,823行: | ||
this._propagate("resize", event); | this._propagate("resize", event); | ||
el.css({ | el.css({ | ||
top: this.position.top + "px", | top: this.position.top + "px", left: this.position.left + "px", | ||
width: this.size.width + "px", height: this.size.height + "px" | |||
width: this.size.width + "px", | |||
}); | }); | ||
if (!this._helper && this._proportionallyResizeElements.length) this._proportionallyResize(); | if (!this._helper && this._proportionallyResizeElements.length) | ||
this._proportionallyResize(); | |||
this._updateCache(data); | this._updateCache(data); | ||
this._trigger('resize', event, this.ui()); | this._trigger('resize', event, this.ui()); | ||
return false; | return false; | ||
}, | }, | ||
_mouseStop: function(event) { | _mouseStop: function (event) { | ||
this.resizing = | this.resizing = false; | ||
var o = this.options, | var o = this.options, that = this; | ||
if (this._helper) { | if (this._helper) { | ||
var pr = this._proportionallyResizeElements, | var pr = this._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName), soffseth = ista && $.ui.hasScroll(pr[0], 'left') ? 0 : that.sizeDiff.height, soffsetw = ista ? 0 : that.sizeDiff.width; | ||
var s = { width: (that.helper.width() - soffsetw), height: (that.helper.height() - soffseth) }, left = (parseInt(that.element.css('left'), 10) + (that.position.left - that.originalPosition.left)) || null, top = (parseInt(that.element.css('top'), 10) + (that.position.top - that.originalPosition.top)) || null; | |||
if (!o.animate) | |||
this.element.css($.extend(s, { top: top, left: left })); | |||
var s = { | |||
if (!o.animate) this.element.css($.extend(s, { | |||
that.helper.height(that.size.height); | that.helper.height(that.size.height); | ||
that.helper.width(that.size.width); | that.helper.width(that.size.width); | ||
if (this._helper && !o.animate) this._proportionallyResize(); | if (this._helper && !o.animate) | ||
this._proportionallyResize(); | |||
} | } | ||
$('body').css('cursor', 'auto'); | $('body').css('cursor', 'auto'); | ||
this.element.removeClass("ui-resizable-resizing"); | this.element.removeClass("ui-resizable-resizing"); | ||
this._propagate("stop", event); | this._propagate("stop", event); | ||
if (this._helper) this.helper.remove(); | if (this._helper) | ||
this.helper.remove(); | |||
return false; | return false; | ||
}, | }, | ||
_updateVirtualBoundaries: function(forceAspectRatio) { | _updateVirtualBoundaries: function (forceAspectRatio) { | ||
var o = this.options, | var o = this.options, pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b; | ||
b = { | b = { | ||
minWidth: isNumber(o.minWidth) ? o.minWidth : 0, | minWidth: isNumber(o.minWidth) ? o.minWidth : 0, | ||
| 第1,871行: | 第1,865行: | ||
pMaxWidth = b.maxHeight * this.aspectRatio; | pMaxWidth = b.maxHeight * this.aspectRatio; | ||
pMaxHeight = b.maxWidth / this.aspectRatio; | pMaxHeight = b.maxWidth / this.aspectRatio; | ||
if (pMinWidth > b.minWidth) b.minWidth = pMinWidth; | if (pMinWidth > b.minWidth) | ||
if (pMinHeight > b.minHeight) b.minHeight = pMinHeight; | b.minWidth = pMinWidth; | ||
if (pMaxWidth < b.maxWidth) b.maxWidth = pMaxWidth; | if (pMinHeight > b.minHeight) | ||
if (pMaxHeight < b.maxHeight) b.maxHeight = | b.minHeight = pMinHeight; | ||
if (pMaxWidth < b.maxWidth) | |||
b.maxWidth = pMaxWidth; | |||
if (pMaxHeight < b.maxHeight) | |||
b.maxHeight = pMaxHeight; | |||
} | } | ||
this._vBoundaries = b; | this._vBoundaries = b; | ||
}, | }, | ||
_updateCache: function(data) { | _updateCache: function (data) { | ||
var o = this.options; | var o = this.options; | ||
this.offset = this.helper.offset(); | this.offset = this.helper.offset(); | ||
if (isNumber(data.left)) this.position.left = data.left; | if (isNumber(data.left)) | ||
if (isNumber(data.top)) this.position.top = data.top; | this.position.left = data.left; | ||
if (isNumber(data.height)) this.size.height = data.height; | if (isNumber(data.top)) | ||
if (isNumber(data.width)) this.size.width = data.width; | this.position.top = data.top; | ||
if (isNumber(data.height)) | |||
this.size.height = data.height; | |||
if (isNumber(data.width)) | |||
this.size.width = data.width; | |||
}, | }, | ||
_updateRatio: function(data, event) { | _updateRatio: function (data, event) { | ||
var o = this.options, | var o = this.options, cpos = this.position, csize = this.size, a = this.axis; | ||
if (isNumber(data.height)) | |||
data.width = (data.height * this.aspectRatio); | |||
else if (isNumber(data.width)) | |||
if (isNumber(data.height)) data.width = (data.height * this.aspectRatio); | data.height = (data.width / this.aspectRatio); | ||
else if (isNumber(data.width)) data.height = (data.width / this.aspectRatio); | |||
if (a == 'sw') { | if (a == 'sw') { | ||
data.left = cpos.left + (csize.width - data.width); | data.left = cpos.left + (csize.width - data.width); | ||
| 第1,904行: | 第1,904行: | ||
return data; | return data; | ||
}, | }, | ||
_respectSize: function(data, event) { | _respectSize: function (data, event) { | ||
var el = this.helper, | var el = this.helper, o = this._vBoundaries, pRatio = this._aspectRatio || event.shiftKey, a = this.axis, ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height), isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height); | ||
if (isminw) | |||
data.width = o.minWidth; | |||
if (isminh) | |||
data.height = o.minHeight; | |||
if (ismaxw) | |||
data.width = o.maxWidth; | |||
if (ismaxh) | |||
data.height = o.maxHeight; | |||
if (isminw) data.width = o.minWidth; | var dw = this.originalPosition.left + this.originalSize.width, dh = this.position.top + this.size.height; | ||
if (isminh) data.height = o.minHeight; | var cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a); | ||
if (ismaxw) data.width = o.maxWidth; | if (isminw && cw) | ||
if (ismaxh) data.height = o.maxHeight; | data.left = dw - o.minWidth; | ||
var dw = this.originalPosition.left + this.originalSize.width, | if (ismaxw && cw) | ||
data.left = dw - o.maxWidth; | |||
var cw = /sw|nw|w/.test(a), | if (isminh && ch) | ||
data.top = dh - o.minHeight; | |||
if (isminw && cw) data.left = dw - o.minWidth; | if (ismaxh && ch) | ||
if (ismaxw && cw) data.left = dw - o.maxWidth; | data.top = dh - o.maxHeight; | ||
if (isminh && ch) data.top = dh - o.minHeight; | |||
if (ismaxh && ch) data.top = dh - o.maxHeight; | |||
var isNotwh = !data.width && !data.height; | var isNotwh = !data.width && !data.height; | ||
if (isNotwh && !data.left && data.top) data.top = null; | if (isNotwh && !data.left && data.top) | ||
else if (isNotwh && !data.top && data.left) data.left = null; | data.top = null; | ||
else if (isNotwh && !data.top && data.left) | |||
data.left = null; | |||
return data; | return data; | ||
}, | }, | ||
_proportionallyResize: function() { | _proportionallyResize: function () { | ||
var o = this.options; | var o = this.options; | ||
if (!this._proportionallyResizeElements.length) return; | if (!this._proportionallyResizeElements.length) | ||
return; | |||
var element = this.helper || this.element; | var element = this.helper || this.element; | ||
for (var i = 0; i < this._proportionallyResizeElements.length; i++) { | for (var i = 0; i < this._proportionallyResizeElements.length; i++) { | ||
var prel = this._proportionallyResizeElements[i]; | var prel = this._proportionallyResizeElements[i]; | ||
if (!this.borderDif) { | if (!this.borderDif) { | ||
var b = [ | var b = [prel.css('borderTopWidth'), prel.css('borderRightWidth'), prel.css('borderBottomWidth'), prel.css('borderLeftWidth')], p = [prel.css('paddingTop'), prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')]; | ||
this.borderDif = $.map(b, function (v, i) { | |||
var border = parseInt(v, 10) || 0, padding = parseInt(p[i], 10) || 0; | |||
this.borderDif = $.map(b, function(v, i) { | |||
var border = parseInt(v, 10) || 0, | |||
return border + padding; | return border + padding; | ||
}); | }); | ||
| 第1,952行: | 第1,949行: | ||
width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0 | width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0 | ||
}); | }); | ||
}; | } | ||
; | |||
}, | }, | ||
_renderProxy: function() { | _renderProxy: function () { | ||
var el = this.element, | var el = this.element, o = this.options; | ||
this.elementOffset = el.offset(); | this.elementOffset = el.offset(); | ||
if (this._helper) { | if (this._helper) { | ||
this.helper = this.helper || $('<div style="overflow:hidden;"></div>'); | this.helper = this.helper || $('<div style="overflow:hidden;"></div>'); | ||
var ie6offset = ($.ui.ie6 ? 1 : 0), | var ie6offset = ($.ui.ie6 ? 1 : 0), pxyoffset = ($.ui.ie6 ? 2 : -1); | ||
this.helper.addClass(this._helper).css({ | this.helper.addClass(this._helper).css({ | ||
width: this.element.outerWidth() + pxyoffset, | width: this.element.outerWidth() + pxyoffset, | ||
| 第1,970行: | 第1,966行: | ||
zIndex: ++o.zIndex | zIndex: ++o.zIndex | ||
}); | }); | ||
this.helper.appendTo("body"). | this.helper | ||
.appendTo("body") | |||
} else { | .disableSelection(); | ||
} | |||
else { | |||
this.helper = this.element; | this.helper = this.element; | ||
} | } | ||
}, | }, | ||
_change: { | _change: { | ||
e: function(event, dx, dy) { | e: function (event, dx, dy) { | ||
return { | return { width: this.originalSize.width + dx }; | ||
}, | }, | ||
w: function(event, dx, dy) { | w: function (event, dx, dy) { | ||
var o = this.options, | var o = this.options, cs = this.originalSize, sp = this.originalPosition; | ||
return { left: sp.left + dx, width: cs.width - dx }; | |||
return { | |||
}, | }, | ||
n: function(event, dx, dy) { | n: function (event, dx, dy) { | ||
var o = this.options, | var o = this.options, cs = this.originalSize, sp = this.originalPosition; | ||
return { top: sp.top + dy, height: cs.height - dy }; | |||
return { | |||
}, | }, | ||
s: function(event, dx, dy) { | s: function (event, dx, dy) { | ||
return { | return { height: this.originalSize.height + dy }; | ||
}, | }, | ||
se: function(event, dx, dy) { | se: function (event, dx, dy) { | ||
return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy])); | return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy])); | ||
}, | }, | ||
sw: function(event, dx, dy) { | sw: function (event, dx, dy) { | ||
return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy])); | return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy])); | ||
}, | }, | ||
ne: function(event, dx, dy) { | ne: function (event, dx, dy) { | ||
return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy])); | return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy])); | ||
}, | }, | ||
nw: function(event, dx, dy) { | nw: function (event, dx, dy) { | ||
return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy])); | return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy])); | ||
} | } | ||
}, | }, | ||
_propagate: function(n, event) { | _propagate: function (n, event) { | ||
$.ui.plugin.call( | $.ui.plugin.call(this, n, [event, this.ui()]); | ||
(n != "resize" && this._trigger(n, event, this.ui())); | (n != "resize" && this._trigger(n, event, this.ui())); | ||
}, | }, | ||
plugins: {}, | plugins: {}, | ||
ui: function() { | ui: function () { | ||
return { | return { | ||
originalElement: this.originalElement, | originalElement: this.originalElement, | ||
| 第2,037行: | 第2,020行: | ||
}); | }); | ||
$.ui.plugin.add("resizable", "alsoResize", { | $.ui.plugin.add("resizable", "alsoResize", { | ||
start: function(event, ui) { | start: function (event, ui) { | ||
var that = $(this).data("resizable"), | var that = $(this).data("resizable"), o = that.options; | ||
var _store = function (exp) { | |||
var _store = function(exp) { | $(exp).each(function () { | ||
$(exp).each(function() { | |||
var el = $(this); | var el = $(this); | ||
el.data("resizable-alsoresize", { | el.data("resizable-alsoresize", { | ||
width: parseInt(el.width(), 10), | width: parseInt(el.width(), 10), height: parseInt(el.height(), 10), | ||
left: parseInt(el.css('left'), 10), top: parseInt(el.css('top'), 10) | |||
left: parseInt(el.css('left'), 10), | |||
}); | }); | ||
}); | }); | ||
}; | }; | ||
if (typeof(o.alsoResize) == 'object' && !o.alsoResize.parentNode) { | if (typeof (o.alsoResize) == 'object' && !o.alsoResize.parentNode) { | ||
if (o.alsoResize.length) { | if (o.alsoResize.length) { | ||
o.alsoResize = o.alsoResize[0]; | o.alsoResize = o.alsoResize[0]; | ||
_store(o.alsoResize); | _store(o.alsoResize); | ||
} | } | ||
} else { | else { | ||
$.each(o.alsoResize, function (exp) { _store(exp); }); | |||
} | |||
} | |||
else { | |||
_store(o.alsoResize); | _store(o.alsoResize); | ||
} | } | ||
}, | }, | ||
resize: function(event, ui) { | resize: function (event, ui) { | ||
var that = $(this).data("resizable"), | var that = $(this).data("resizable"), o = that.options, os = that.originalSize, op = that.originalPosition; | ||
var delta = { | var delta = { | ||
height: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0, | |||
top: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0 | |||
}, _alsoResize = function (exp, c) { | |||
$(exp).each(function () { | |||
var el = $(this), start = $(this).data("resizable-alsoresize"), style = {}, css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ['width', 'height'] : ['width', 'height', 'top', 'left']; | |||
$.each(css, function (i, prop) { | |||
var sum = (start[prop] || 0) + (delta[prop] || 0); | |||
if (sum && sum >= 0) | |||
style[prop] = sum || null; | |||
}); | }); | ||
el.css(style); | |||
}); | }); | ||
} else { | }; | ||
if (typeof (o.alsoResize) == 'object' && !o.alsoResize.nodeType) { | |||
$.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); }); | |||
} | |||
else { | |||
_alsoResize(o.alsoResize); | _alsoResize(o.alsoResize); | ||
} | } | ||
}, | }, | ||
stop: function(event, ui) { | stop: function (event, ui) { | ||
$(this).removeData("resizable-alsoresize"); | $(this).removeData("resizable-alsoresize"); | ||
} | } | ||
}); | }); | ||
$.ui.plugin.add("resizable", "animate", { | $.ui.plugin.add("resizable", "animate", { | ||
stop: function(event, ui) { | stop: function (event, ui) { | ||
var that = $(this).data("resizable"), | var that = $(this).data("resizable"), o = that.options; | ||
var pr = that._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName), soffseth = ista && $.ui.hasScroll(pr[0], 'left') ? 0 : that.sizeDiff.height, soffsetw = ista ? 0 : that.sizeDiff.width; | |||
var pr = that._proportionallyResizeElements, | var style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) }, left = (parseInt(that.element.css('left'), 10) + (that.position.left - that.originalPosition.left)) || null, top = (parseInt(that.element.css('top'), 10) + (that.position.top - that.originalPosition.top)) || null; | ||
that.element.animate($.extend(style, top && left ? { top: top, left: left } : {}), { | |||
var style = { | |||
that.element.animate($.extend(style, top && left ? { | |||
duration: o.animateDuration, | duration: o.animateDuration, | ||
easing: o.animateEasing, | easing: o.animateEasing, | ||
step: function() { | step: function () { | ||
var data = { | var data = { | ||
width: parseInt(that.element.css('width'), 10), | width: parseInt(that.element.css('width'), 10), | ||
| 第2,127行: | 第2,086行: | ||
left: parseInt(that.element.css('left'), 10) | left: parseInt(that.element.css('left'), 10) | ||
}; | }; | ||
if (pr && pr.length) $(pr[0]).css({ | if (pr && pr.length) | ||
$(pr[0]).css({ width: data.width, height: data.height }); | |||
that._updateCache(data); | that._updateCache(data); | ||
that._propagate("resize", event); | that._propagate("resize", event); | ||
| 第2,138行: | 第2,095行: | ||
}); | }); | ||
$.ui.plugin.add("resizable", "containment", { | $.ui.plugin.add("resizable", "containment", { | ||
start: function(event, ui) { | start: function (event, ui) { | ||
var that = $(this).data("resizable"), | var that = $(this).data("resizable"), o = that.options, el = that.element; | ||
var oc = o.containment, ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc; | |||
if (!ce) | |||
var oc = o.containment, | return; | ||
if (! | |||
that.containerElement = $(ce); | that.containerElement = $(ce); | ||
if (/document/.test(oc) || oc == document) { | if (/document/.test(oc) || oc == document) { | ||
that.containerOffset = { | that.containerOffset = { left: 0, top: 0 }; | ||
that.containerPosition = { left: 0, top: 0 }; | |||
that.containerPosition = { | |||
that.parentData = { | that.parentData = { | ||
element: $(document), | element: $(document), left: 0, top: 0, | ||
width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight | |||
width: $(document).width(), | |||
}; | }; | ||
} else { | } | ||
var element = $(ce), | else { | ||
var element = $(ce), p = []; | |||
$(["Top", "Right", "Left", "Bottom"]).each(function(i, name) { | $(["Top", "Right", "Left", "Bottom"]).each(function (i, name) { p[i] = num(element.css("padding" + name)); }); | ||
that.containerOffset = element.offset(); | that.containerOffset = element.offset(); | ||
that.containerPosition = element.position(); | that.containerPosition = element.position(); | ||
that.containerSize = { | that.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) }; | ||
var co = that.containerOffset, ch = that.containerSize.height, cw = that.containerSize.width, width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw), height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch); | |||
var co = that.containerOffset, | |||
that.parentData = { | that.parentData = { | ||
element: ce, | element: ce, left: co.left, top: co.top, width: width, height: height | ||
}; | }; | ||
} | } | ||
}, | }, | ||
resize: function(event, ui) { | resize: function (event, ui) { | ||
var that = $(this).data("resizable"), | var that = $(this).data("resizable"), o = that.options, ps = that.containerSize, co = that.containerOffset, cs = that.size, cp = that.position, pRatio = that._aspectRatio || event.shiftKey, cop = { top: 0, left: 0 }, ce = that.containerElement; | ||
if (ce[0] != document && (/static/).test(ce.css('position'))) | |||
cop = co; | |||
if (ce[0] != document && (/static/).test(ce.css('position'))) cop = co; | |||
if (cp.left < (that._helper ? co.left : 0)) { | if (cp.left < (that._helper ? co.left : 0)) { | ||
that.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left)); | that.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left)); | ||
if (pRatio) that.size.height = that.size.width / that.aspectRatio; | if (pRatio) | ||
that.size.height = that.size.width / that.aspectRatio; | |||
that.position.left = o.helper ? co.left : 0; | that.position.left = o.helper ? co.left : 0; | ||
} | } | ||
if (cp.top < (that._helper ? co.top : 0)) { | if (cp.top < (that._helper ? co.top : 0)) { | ||
that.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top); | that.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top); | ||
if (pRatio) that.size.width = that.size.height * that.aspectRatio; | if (pRatio) | ||
that.size.width = that.size.height * that.aspectRatio; | |||
that.position.top = that._helper ? co.top : 0; | that.position.top = that._helper ? co.top : 0; | ||
} | } | ||
that.offset.left = that.parentData.left + that.position.left; | that.offset.left = that.parentData.left + that.position.left; | ||
that.offset.top = that.parentData.top + that.position.top; | that.offset.top = that.parentData.top + that.position.top; | ||
var woset = Math.abs((that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width), | var woset = Math.abs((that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width), hoset = Math.abs((that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height); | ||
var isParent = that.containerElement.get(0) == that.element.parent().get(0), isOffsetRelative = /relative|absolute/.test(that.containerElement.css('position')); | |||
var isParent = that.containerElement.get(0) == that. | if (isParent && isOffsetRelative) | ||
woset -= that.parentData.left; | |||
if (isParent && isOffsetRelative) woset -= that.parentData.left; | |||
if (woset + that.size.width >= that.parentData.width) { | if (woset + that.size.width >= that.parentData.width) { | ||
that.size.width = that.parentData.width - woset; | that.size.width = that.parentData.width - woset; | ||
if (pRatio) that.size.height = that.size.width / that.aspectRatio; | if (pRatio) | ||
that.size.height = that.size.width / that.aspectRatio; | |||
} | } | ||
if (hoset + that.size.height >= that.parentData.height) { | if (hoset + that.size.height >= that.parentData.height) { | ||
that.size.height = that.parentData.height - hoset; | that.size.height = that.parentData.height - hoset; | ||
if (pRatio) that.size.width = that.size.height * that.aspectRatio; | if (pRatio) | ||
that.size.width = that.size.height * that.aspectRatio; | |||
} | } | ||
}, | }, | ||
stop: function(event, ui) { | stop: function (event, ui) { | ||
var that = $(this).data("resizable"), | var that = $(this).data("resizable"), o = that.options, cp = that.position, co = that.containerOffset, cop = that.containerPosition, ce = that.containerElement; | ||
var helper = $(that.helper), ho = helper.offset(), w = helper.outerWidth() - that.sizeDiff.width, h = helper.outerHeight() - that.sizeDiff.height; | |||
if (that._helper && !o.animate && (/relative/).test(ce.css('position'))) | |||
$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h }); | |||
if (that._helper && !o.animate && (/static/).test(ce.css('position'))) | |||
$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h }); | |||
var helper = $(that.helper), | |||
if (that._helper && !o.animate && (/relative/).test(ce.css('position'))) $(this).css({ | |||
if (that._helper && !o.animate && (/static/).test(ce.css('position'))) $(this).css({ | |||
} | } | ||
}); | }); | ||
$.ui.plugin.add("resizable", "ghost", { | $.ui.plugin.add("resizable", "ghost", { | ||
start: function(event, ui) { | start: function (event, ui) { | ||
var that = $(this).data("resizable"), | var that = $(this).data("resizable"), o = that.options, cs = that.size; | ||
that.ghost = that.originalElement.clone(); | that.ghost = that.originalElement.clone(); | ||
that.ghost.css({ | that.ghost | ||
.css({ opacity: .25, display: 'block', position: 'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 }) | |||
.addClass('ui-resizable-ghost') | |||
.addClass(typeof o.ghost == 'string' ? o.ghost : ''); | |||
that.ghost.appendTo(that.helper); | that.ghost.appendTo(that.helper); | ||
}, | }, | ||
resize: function(event, ui) { | resize: function (event, ui) { | ||
var that = $(this).data("resizable"), | var that = $(this).data("resizable"), o = that.options; | ||
if (that.ghost) | |||
if (that.ghost) that.ghost.css({ | that.ghost.css({ position: 'relative', height: that.size.height, width: that.size.width }); | ||
}, | }, | ||
stop: function(event, ui) { | stop: function (event, ui) { | ||
var that = $(this).data("resizable"), | var that = $(this).data("resizable"), o = that.options; | ||
if (that.ghost && that.helper) | |||
if (that.ghost && that.helper) that.helper.get(0).removeChild(that.ghost.get(0)); | that.helper.get(0).removeChild(that.ghost.get(0)); | ||
} | } | ||
}); | }); | ||
$.ui.plugin.add("resizable", "grid", { | $.ui.plugin.add("resizable", "grid", { | ||
resize: function(event, ui) { | resize: function (event, ui) { | ||
var that = $(this).data("resizable"), | var that = $(this).data("resizable"), o = that.options, cs = that.size, os = that.originalSize, op = that.originalPosition, a = that.axis, ratio = o._aspectRatio || event.shiftKey; | ||
o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid; | |||
var ox = Math.round((cs.width - os.width) / (o.grid[0] || 1)) * (o.grid[0] || 1), oy = Math.round((cs.height - os.height) / (o.grid[1] || 1)) * (o.grid[1] || 1); | |||
o.grid = typeof o. | |||
var ox = Math.round((cs.width - os.width) / (o.grid[0] || 1)) * (o.grid[0] || 1), | |||
if (/^(se|s|e)$/.test(a)) { | if (/^(se|s|e)$/.test(a)) { | ||
that.size.width = os.width + ox; | that.size.width = os.width + ox; | ||
that.size.height = os.height + oy; | that.size.height = os.height + oy; | ||
} else if (/^(ne)$/.test(a)) { | } | ||
else if (/^(ne)$/.test(a)) { | |||
that.size.width = os.width + ox; | that.size.width = os.width + ox; | ||
that.size.height = os.height + oy; | that.size.height = os.height + oy; | ||
that.position.top = op.top - oy; | that.position.top = op.top - oy; | ||
} else if (/^(sw)$/.test(a)) { | } | ||
else if (/^(sw)$/.test(a)) { | |||
that.size.width = os.width + ox; | that.size.width = os.width + ox; | ||
that.size.height = os.height + oy; | that.size.height = os.height + oy; | ||
that.position.left = op.left - ox; | that.position.left = op.left - ox; | ||
} else { | } | ||
else { | |||
that.size.width = os.width + ox; | that.size.width = os.width + ox; | ||
that.size.height = os.height + oy; | that.size.height = os.height + oy; | ||
| 第2,319行: | 第2,211行: | ||
} | } | ||
}); | }); | ||
var num = function(v) { | var num = function (v) { | ||
return parseInt(v, 10) || 0; | return parseInt(v, 10) || 0; | ||
}; | }; | ||
var isNumber = function(value) { | var isNumber = function (value) { | ||
return !isNaN(parseInt(value, 10)); | return !isNaN(parseInt(value, 10)); | ||
}; | }; | ||
})(jQuery); | })(jQuery); | ||
(function($, undefined) { | (function ($, undefined) { | ||
$.widget("ui.selectable", $.ui.mouse, { | $.widget("ui.selectable", $.ui.mouse, { | ||
version: "1.9.2", | version: "1.9.2", | ||
options: { | options: { | ||
appendTo: 'body', | appendTo: 'body', | ||
autoRefresh: | autoRefresh: true, | ||
distance: 0, | distance: 0, | ||
filter: '*', | filter: '*', | ||
tolerance: 'touch' | tolerance: 'touch' | ||
}, | }, | ||
_create: function() { | _create: function () { | ||
var that = this; | var that = this; | ||
this.element.addClass("ui-selectable"); | this.element.addClass("ui-selectable"); | ||
this.dragged = | this.dragged = false; | ||
var selectees; | var selectees; | ||
this.refresh = function() { | this.refresh = function () { | ||
selectees = $(that.options.filter, that.element[0]); | selectees = $(that.options.filter, that.element[0]); | ||
selectees.addClass("ui-selectee"); | selectees.addClass("ui-selectee"); | ||
selectees.each(function() { | selectees.each(function () { | ||
var $this = $(this); | var $this = $(this); | ||
var pos = $this.offset(); | var pos = $this.offset(); | ||
| 第2,354行: | 第2,246行: | ||
right: pos.left + $this.outerWidth(), | right: pos.left + $this.outerWidth(), | ||
bottom: pos.top + $this.outerHeight(), | bottom: pos.top + $this.outerHeight(), | ||
startselected: | startselected: false, | ||
selected: $this.hasClass('ui-selected'), | selected: $this.hasClass('ui-selected'), | ||
selecting: $this.hasClass('ui-selecting'), | selecting: $this.hasClass('ui-selecting'), | ||
| 第2,366行: | 第2,258行: | ||
this.helper = $("<div class='ui-selectable-helper'></div>"); | this.helper = $("<div class='ui-selectable-helper'></div>"); | ||
}, | }, | ||
_destroy: function() { | _destroy: function () { | ||
this.selectees.removeClass("ui-selectee").removeData("selectable-item"); | this.selectees | ||
this.element.removeClass("ui-selectable ui-selectable-disabled"); | .removeClass("ui-selectee") | ||
.removeData("selectable-item"); | |||
this.element | |||
.removeClass("ui-selectable ui-selectable-disabled"); | |||
this._mouseDestroy(); | this._mouseDestroy(); | ||
}, | }, | ||
_mouseStart: function(event) { | _mouseStart: function (event) { | ||
var that = this; | var that = this; | ||
this.opos = [event.pageX, event.pageY]; | this.opos = [event.pageX, event.pageY]; | ||
if (this.options.disabled) return; | if (this.options.disabled) | ||
return; | |||
var options = this.options; | var options = this.options; | ||
this.selectees = $(options.filter, this.element[0]); | this.selectees = $(options.filter, this.element[0]); | ||
this._trigger( | this._trigger("start", event); | ||
$(options.appendTo).append(this.helper); | $(options.appendTo).append(this.helper); | ||
this.helper.css({ | this.helper.css({ | ||
| 第2,389行: | 第2,284行: | ||
this.refresh(); | this.refresh(); | ||
} | } | ||
this.selectees.filter('.ui-selected').each(function() { | this.selectees.filter('.ui-selected').each(function () { | ||
var selectee = $.data(this, "selectable-item"); | var selectee = $.data(this, "selectable-item"); | ||
selectee.startselected = | selectee.startselected = true; | ||
if (!event.metaKey && !event.ctrlKey) { | if (!event.metaKey && !event.ctrlKey) { | ||
selectee.$element.removeClass('ui-selected'); | selectee.$element.removeClass('ui-selected'); | ||
selectee.selected = | selectee.selected = false; | ||
selectee.$element.addClass('ui-unselecting'); | selectee.$element.addClass('ui-unselecting'); | ||
selectee.unselecting = | selectee.unselecting = true; | ||
that._trigger("unselecting", event, { | that._trigger("unselecting", event, { | ||
unselecting: selectee.element | unselecting: selectee.element | ||
| 第2,402行: | 第2,297行: | ||
} | } | ||
}); | }); | ||
$(event.target).parents(). | $(event.target).parents().addBack().each(function () { | ||
var selectee = $.data(this, "selectable-item"); | var selectee = $.data(this, "selectable-item"); | ||
if (selectee) { | if (selectee) { | ||
var doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass('ui-selected'); | var doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass('ui-selected'); | ||
selectee.$element.removeClass(doSelect ? "ui-unselecting" : "ui-selected").addClass(doSelect ? "ui-selecting" : "ui-unselecting"); | selectee.$element | ||
.removeClass(doSelect ? "ui-unselecting" : "ui-selected") | |||
.addClass(doSelect ? "ui-selecting" : "ui-unselecting"); | |||
selectee.unselecting = !doSelect; | selectee.unselecting = !doSelect; | ||
selectee.selecting = doSelect; | selectee.selecting = doSelect; | ||
| 第2,414行: | 第2,311行: | ||
selecting: selectee.element | selecting: selectee.element | ||
}); | }); | ||
} else { | } | ||
else { | |||
that._trigger("unselecting", event, { | that._trigger("unselecting", event, { | ||
unselecting: selectee.element | unselecting: selectee.element | ||
| 第2,423行: | 第2,321行: | ||
}); | }); | ||
}, | }, | ||
_mouseDrag: function(event) { | _mouseDrag: function (event) { | ||
var that = this; | var that = this; | ||
this.dragged = | this.dragged = true; | ||
if (this.options.disabled) return; | if (this.options.disabled) | ||
return; | |||
var options = this.options; | var options = this.options; | ||
var x1 = this.opos[0], | var x1 = this.opos[0], y1 = this.opos[1], x2 = event.pageX, y2 = event.pageY; | ||
if (x1 > x2) { | if (x1 > x2) { | ||
var tmp = x2; | var tmp = x2; | ||
| 第2,442行: | 第2,338行: | ||
y1 = tmp; | y1 = tmp; | ||
} | } | ||
this.helper.css({ | this.helper.css({ left: x1, top: y1, width: x2 - x1, height: y2 - y1 }); | ||
this.selectees.each(function () { | |||
this.selectees.each(function() { | |||
var selectee = $.data(this, "selectable-item"); | var selectee = $.data(this, "selectable-item"); | ||
if (!selectee || selectee.element == that.element[0]) return; | if (!selectee || selectee.element == that.element[0]) | ||
var hit = | return; | ||
var hit = false; | |||
if (options.tolerance == 'touch') { | if (options.tolerance == 'touch') { | ||
hit = (!(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1)); | hit = (!(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1)); | ||
} else if (options.tolerance == 'fit') { | } | ||
else if (options.tolerance == 'fit') { | |||
hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2); | hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2); | ||
} | } | ||
| 第2,460行: | 第2,353行: | ||
if (selectee.selected) { | if (selectee.selected) { | ||
selectee.$element.removeClass('ui-selected'); | selectee.$element.removeClass('ui-selected'); | ||
selectee.selected = | selectee.selected = false; | ||
} | } | ||
if (selectee.unselecting) { | if (selectee.unselecting) { | ||
selectee.$element.removeClass('ui-unselecting'); | selectee.$element.removeClass('ui-unselecting'); | ||
selectee.unselecting = | selectee.unselecting = false; | ||
} | } | ||
if (!selectee.selecting) { | if (!selectee.selecting) { | ||
selectee.$element.addClass('ui-selecting'); | selectee.$element.addClass('ui-selecting'); | ||
selectee.selecting = | selectee.selecting = true; | ||
that._trigger("selecting", event, { | that._trigger("selecting", event, { | ||
selecting: selectee.element | selecting: selectee.element | ||
}); | }); | ||
} | } | ||
} else { | } | ||
else { | |||
if (selectee.selecting) { | if (selectee.selecting) { | ||
if ((event.metaKey || event.ctrlKey) && selectee.startselected) { | if ((event.metaKey || event.ctrlKey) && selectee.startselected) { | ||
selectee.$element.removeClass('ui-selecting'); | selectee.$element.removeClass('ui-selecting'); | ||
selectee.selecting = | selectee.selecting = false; | ||
selectee.$element.addClass('ui-selected'); | selectee.$element.addClass('ui-selected'); | ||
selectee.selected = | selectee.selected = true; | ||
} else { | } | ||
else { | |||
selectee.$element.removeClass('ui-selecting'); | selectee.$element.removeClass('ui-selecting'); | ||
selectee.selecting = | selectee.selecting = false; | ||
if (selectee.startselected) { | if (selectee.startselected) { | ||
selectee.$element.addClass('ui-unselecting'); | selectee.$element.addClass('ui-unselecting'); | ||
selectee.unselecting = | selectee.unselecting = true; | ||
} | } | ||
that._trigger("unselecting", event, { | that._trigger("unselecting", event, { | ||
| 第2,495行: | 第2,390行: | ||
if (!event.metaKey && !event.ctrlKey && !selectee.startselected) { | if (!event.metaKey && !event.ctrlKey && !selectee.startselected) { | ||
selectee.$element.removeClass('ui-selected'); | selectee.$element.removeClass('ui-selected'); | ||
selectee.selected = | selectee.selected = false; | ||
selectee.$element.addClass('ui-unselecting'); | selectee.$element.addClass('ui-unselecting'); | ||
selectee.unselecting = | selectee.unselecting = true; | ||
that._trigger("unselecting", event, { | that._trigger("unselecting", event, { | ||
unselecting: selectee.element | unselecting: selectee.element | ||
| 第2,507行: | 第2,402行: | ||
return false; | return false; | ||
}, | }, | ||
_mouseStop: function(event) { | _mouseStop: function (event) { | ||
var that = this; | var that = this; | ||
this.dragged = | this.dragged = false; | ||
var options = this.options; | var options = this.options; | ||
$('.ui-unselecting', this.element[0]).each(function() { | $('.ui-unselecting', this.element[0]).each(function () { | ||
var selectee = $.data(this, "selectable-item"); | var selectee = $.data(this, "selectable-item"); | ||
selectee.$element.removeClass('ui-unselecting'); | selectee.$element.removeClass('ui-unselecting'); | ||
selectee.unselecting = | selectee.unselecting = false; | ||
selectee.startselected = | selectee.startselected = false; | ||
that._trigger("unselected", event, { | that._trigger("unselected", event, { | ||
unselected: selectee.element | unselected: selectee.element | ||
}); | }); | ||
}); | }); | ||
$('.ui-selecting', this.element[0]).each(function() { | $('.ui-selecting', this.element[0]).each(function () { | ||
var selectee = $.data(this, "selectable-item"); | var selectee = $.data(this, "selectable-item"); | ||
selectee.$element.removeClass('ui-selecting').addClass('ui-selected'); | selectee.$element.removeClass('ui-selecting').addClass('ui-selected'); | ||
selectee.selecting = | selectee.selecting = false; | ||
selectee.selected = | selectee.selected = true; | ||
selectee.startselected = | selectee.startselected = true; | ||
that._trigger("selected", event, { | that._trigger("selected", event, { | ||
selected: selectee.element | selected: selectee.element | ||
| 第2,536行: | 第2,431行: | ||
}); | }); | ||
})(jQuery); | })(jQuery); | ||
(function($, undefined) { | (function ($, undefined) { | ||
$.widget("ui.sortable", $.ui.mouse, { | $.widget("ui.sortable", $.ui.mouse, { | ||
version: "1.9.2", | version: "1.9.2", | ||
widgetEventPrefix: "sort", | widgetEventPrefix: "sort", | ||
ready: | ready: false, | ||
options: { | options: { | ||
appendTo: "parent", | appendTo: "parent", | ||
axis: | axis: false, | ||
connectWith: | connectWith: false, | ||
containment: | containment: false, | ||
cursor: 'auto', | cursor: 'auto', | ||
cursorAt: | cursorAt: false, | ||
dropOnEmpty: | dropOnEmpty: true, | ||
forcePlaceholderSize: | forcePlaceholderSize: false, | ||
forceHelperSize: | forceHelperSize: false, | ||
grid: | grid: false, | ||
handle: | handle: false, | ||
helper: "original", | helper: "original", | ||
items: '> *', | items: '> *', | ||
opacity: | opacity: false, | ||
placeholder: | placeholder: false, | ||
revert: | revert: false, | ||
scroll: | scroll: true, | ||
scrollSensitivity: 20, | scrollSensitivity: 20, | ||
scrollSpeed: 20, | scrollSpeed: 20, | ||
| 第2,565行: | 第2,460行: | ||
zIndex: 1000 | zIndex: 1000 | ||
}, | }, | ||
_create: function() { | _create: function () { | ||
var o = this.options; | var o = this.options; | ||
this.containerCache = {}; | this.containerCache = {}; | ||
this.element.addClass("ui-sortable"); | this.element.addClass("ui-sortable"); | ||
this.refresh(); | this.refresh(); | ||
this.floating = this.items.length ? o.axis === 'x' || (/left|right/).test(this.items[0].item.css('float')) || (/inline|table-cell/).test(this.items[0].item.css('display')) : | this.floating = this.items.length ? o.axis === 'x' || (/left|right/).test(this.items[0].item.css('float')) || (/inline|table-cell/).test(this.items[0].item.css('display')) : false; | ||
this.offset = this.element.offset(); | this.offset = this.element.offset(); | ||
this._mouseInit(); | this._mouseInit(); | ||
this.ready = | this.ready = true; | ||
}, | }, | ||
_destroy: function() { | _destroy: function () { | ||
this.element.removeClass("ui-sortable ui-sortable-disabled"); | this.element | ||
.removeClass("ui-sortable ui-sortable-disabled"); | |||
this._mouseDestroy(); | this._mouseDestroy(); | ||
for (var i = this.items.length - 1; i >= 0; i--) this.items[i].item.removeData(this.widgetName + "-item"); | for (var i = this.items.length - 1; i >= 0; i--) | ||
this.items[i].item.removeData(this.widgetName + "-item"); | |||
return this; | return this; | ||
}, | }, | ||
_setOption: function(key, value) { | _setOption: function (key, value) { | ||
if (key === "disabled") { | if (key === "disabled") { | ||
this.options[key] = value; | this.options[key] = value; | ||
this.widget().toggleClass("ui-sortable-disabled", !!value); | this.widget().toggleClass("ui-sortable-disabled", !!value); | ||
} else { | } | ||
else { | |||
$.Widget.prototype._setOption.apply(this, arguments); | $.Widget.prototype._setOption.apply(this, arguments); | ||
} | } | ||
}, | }, | ||
_mouseCapture: function(event, overrideHandle) { | _mouseCapture: function (event, overrideHandle) { | ||
var that = this; | var that = this; | ||
if (this.reverting) { | if (this.reverting) { | ||
return false; | return false; | ||
} | } | ||
if (this.options.disabled || this.options.type == 'static') return false; | if (this.options.disabled || this.options.type == 'static') | ||
return false; | |||
this._refreshItems(event); | this._refreshItems(event); | ||
var currentItem = null, | var currentItem = null, nodes = $(event.target).parents().each(function () { | ||
if ($.data(this, that.widgetName + '-item') == that) { | |||
currentItem = $(this); | |||
return false; | |||
} | |||
}); | |||
if ($.data(event.target, that.widgetName + '-item') == that) | |||
if ($.data(event.target, that.widgetName + '-item') == that) currentItem = $(event.target); | currentItem = $(event.target); | ||
if (!currentItem) return false; | if (!currentItem) | ||
return false; | |||
if (this.options.handle && !overrideHandle) { | if (this.options.handle && !overrideHandle) { | ||
var validHandle = | var validHandle = false; | ||
$(this.options.handle, currentItem).find("*"). | $(this.options.handle, currentItem).find("*").addBack().each(function () { if (this == event.target) | ||
validHandle = true; }); | |||
if (!validHandle) | |||
if (!validHandle) return false; | return false; | ||
} | } | ||
this.currentItem = currentItem; | this.currentItem = currentItem; | ||
| 第2,616行: | 第2,516行: | ||
return true; | return true; | ||
}, | }, | ||
_mouseStart: function(event, overrideHandle, noActivation) { | _mouseStart: function (event, overrideHandle, noActivation) { | ||
var o = this.options; | var o = this.options; | ||
this.currentContainer = this; | this.currentContainer = this; | ||
| 第2,627行: | 第2,527行: | ||
this.offset = { | this.offset = { | ||
top: this.offset.top - this.margins.top, | top: this.offset.top - this.margins.top, | ||
left: this. | left: this.offset.left - this.margins.left | ||
}; | }; | ||
$.extend(this.offset, { | $.extend(this.offset, { | ||
| 第2,644行: | 第2,543行: | ||
this.originalPageY = event.pageY; | this.originalPageY = event.pageY; | ||
(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); | (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); | ||
this.domPosition = { | this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] }; | ||
if (this.helper[0] != this.currentItem[0]) { | if (this.helper[0] != this.currentItem[0]) { | ||
this.currentItem.hide(); | this.currentItem.hide(); | ||
} | } | ||
this._createPlaceholder(); | this._createPlaceholder(); | ||
if (o.containment) this._setContainment(); | if (o.containment) | ||
this._setContainment(); | |||
if (o.cursor) { | if (o.cursor) { | ||
if ($('body').css("cursor")) this._storedCursor = $('body').css("cursor"); | if ($('body').css("cursor")) | ||
this._storedCursor = $('body').css("cursor"); | |||
$('body').css("cursor", o.cursor); | $('body').css("cursor", o.cursor); | ||
} | } | ||
if (o.opacity) { | if (o.opacity) { | ||
if (this.helper.css("opacity")) this._storedOpacity = this.helper.css("opacity"); | if (this.helper.css("opacity")) | ||
this._storedOpacity = this.helper.css("opacity"); | |||
this.helper.css("opacity", o.opacity); | this.helper.css("opacity", o.opacity); | ||
} | } | ||
if (o.zIndex) { | if (o.zIndex) { | ||
if (this.helper.css("zIndex")) this._storedZIndex = this.helper.css("zIndex"); | if (this.helper.css("zIndex")) | ||
this._storedZIndex = this.helper.css("zIndex"); | |||
this.helper.css("zIndex", o.zIndex); | this.helper.css("zIndex", o.zIndex); | ||
} | } | ||
if (this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') this.overflowOffset = this.scrollParent.offset(); | if (this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') | ||
this.overflowOffset = this.scrollParent.offset(); | |||
this._trigger("start", event, this._uiHash()); | this._trigger("start", event, this._uiHash()); | ||
if (!this._preserveHelperProportions) this._cacheHelperProportions(); | if (!this._preserveHelperProportions) | ||
this._cacheHelperProportions(); | |||
if (!noActivation) { | if (!noActivation) { | ||
for (var i = this.containers.length - 1; i >= 0; i--) { | for (var i = this.containers.length - 1; i >= 0; i--) { | ||
| 第2,673行: | 第2,575行: | ||
} | } | ||
} | } | ||
if ($.ui.ddmanager) $.ui.ddmanager.current = this; | if ($.ui.ddmanager) | ||
if ($.ui.ddmanager && !o.dropBehaviour) $.ui.ddmanager.prepareOffsets(this, event); | $.ui.ddmanager.current = this; | ||
this.dragging = | if ($.ui.ddmanager && !o.dropBehaviour) | ||
$.ui.ddmanager.prepareOffsets(this, event); | |||
this.dragging = true; | |||
this.helper.addClass("ui-sortable-helper"); | this.helper.addClass("ui-sortable-helper"); | ||
this._mouseDrag(event); | this._mouseDrag(event); | ||
return true; | return true; | ||
}, | }, | ||
_mouseDrag: function(event) { | _mouseDrag: function (event) { | ||
this.position = this._generatePosition(event); | this.position = this._generatePosition(event); | ||
this.positionAbs = this._convertPositionTo("absolute"); | this.positionAbs = this._convertPositionTo("absolute"); | ||
| 第2,687行: | 第2,591行: | ||
} | } | ||
if (this.options.scroll) { | if (this.options.scroll) { | ||
var o = this.options, | var o = this.options, scrolled = false; | ||
if (this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') { | if (this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') { | ||
if ((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed; | if ((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) | ||
else if (event.pageY - this.overflowOffset.top < o.scrollSensitivity) this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed; | this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed; | ||
if ((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed; | else if (event.pageY - this.overflowOffset.top < o.scrollSensitivity) | ||
else if (event.pageX - this.overflowOffset.left < o.scrollSensitivity) this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed; | this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed; | ||
} else { | if ((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) | ||
if (event.pageY - $(document).scrollTop() < o.scrollSensitivity) scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); | this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed; | ||
else if ($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); | else if (event.pageX - this.overflowOffset.left < o.scrollSensitivity) | ||
if (event.pageX - $(document).scrollLeft() < o.scrollSensitivity) scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); | this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed; | ||
else if ($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); | } | ||
else { | |||
if (event.pageY - $(document).scrollTop() < o.scrollSensitivity) | |||
scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); | |||
else if ($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) | |||
scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); | |||
if (event.pageX - $(document).scrollLeft() < o.scrollSensitivity) | |||
scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); | |||
else if ($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) | |||
scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); | |||
} | } | ||
if (scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) $.ui.ddmanager.prepareOffsets(this, event); | if (scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) | ||
$.ui.ddmanager.prepareOffsets(this, event); | |||
} | } | ||
this.positionAbs = this._convertPositionTo("absolute"); | this.positionAbs = this._convertPositionTo("absolute"); | ||
if (!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left + 'px'; | if (!this.options.axis || this.options.axis != "y") | ||
if (!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top + 'px'; | this.helper[0].style.left = this.position.left + 'px'; | ||
if (!this.options.axis || this.options.axis != "x") | |||
this.helper[0].style.top = this.position.top + 'px'; | |||
for (var i = this.items.length - 1; i >= 0; i--) { | for (var i = this.items.length - 1; i >= 0; i--) { | ||
var item = this.items[i], | var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item); | ||
if (!intersection) | |||
continue; | |||
if (!intersection) continue; | if (item.instance !== this.currentContainer) | ||
if (item.instance !== this.currentContainer) continue; | continue; | ||
if (itemElement != this.currentItem[0] && this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement && !$.contains(this.placeholder[0], itemElement) && (this.options.type == 'semi-dynamic' ? !$.contains(this.element[0], itemElement) : true)) { | if (itemElement != this.currentItem[0] | ||
this.direction = intersection == 1 ? | && this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement | ||
&& !$.contains(this.placeholder[0], itemElement) | |||
&& (this.options.type == 'semi-dynamic' ? !$.contains(this.element[0], itemElement) : true)) { | |||
this.direction = intersection == 1 ? "down" : "up"; | |||
if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) { | if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) { | ||
this._rearrange(event, item); | this._rearrange(event, item); | ||
} else { | } | ||
else { | |||
break; | break; | ||
} | } | ||
| 第2,724行: | 第2,642行: | ||
} | } | ||
this._contactContainers(event); | this._contactContainers(event); | ||
if ($.ui.ddmanager) $.ui.ddmanager.drag(this, event); | if ($.ui.ddmanager) | ||
$.ui.ddmanager.drag(this, event); | |||
this._trigger('sort', event, this._uiHash()); | this._trigger('sort', event, this._uiHash()); | ||
this.lastPositionAbs = this.positionAbs; | this.lastPositionAbs = this.positionAbs; | ||
return false; | return false; | ||
}, | }, | ||
_mouseStop: function(event, noPropagation) { | _mouseStop: function (event, noPropagation) { | ||
if (!event) return; | if (!event) | ||
if ($.ui.ddmanager && !this.options.dropBehaviour) $.ui.ddmanager.drop(this, event); | return; | ||
if ($.ui.ddmanager && !this.options.dropBehaviour) | |||
$.ui.ddmanager.drop(this, event); | |||
if (this.options.revert) { | if (this.options.revert) { | ||
var that = this; | var that = this; | ||
var cur = this.placeholder.offset(); | var cur = this.placeholder.offset(); | ||
this.reverting = | this.reverting = true; | ||
$(this.helper).animate({ | $(this.helper).animate({ | ||
left: cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft), | left: cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft), | ||
top: cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop) | top: cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop) | ||
}, parseInt(this.options.revert, 10) || 500, function() { | }, parseInt(this.options.revert, 10) || 500, function () { | ||
that._clear(event); | that._clear(event); | ||
}); | }); | ||
} else { | } | ||
else { | |||
this._clear(event, noPropagation); | this._clear(event, noPropagation); | ||
} | } | ||
return false; | return false; | ||
}, | }, | ||
cancel: function() { | cancel: function () { | ||
if (this.dragging) { | if (this.dragging) { | ||
this._mouseUp({ | this._mouseUp({ target: null }); | ||
if (this.options.helper == "original") | |||
this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); | |||
if (this.options.helper == "original") this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); | else | ||
else this.currentItem.show(); | this.currentItem.show(); | ||
for (var i = this.containers.length - 1; i >= 0; i--) { | for (var i = this.containers.length - 1; i >= 0; i--) { | ||
this.containers[i]._trigger("deactivate", null, this._uiHash(this)); | this.containers[i]._trigger("deactivate", null, this._uiHash(this)); | ||
| 第2,763行: | 第2,685行: | ||
} | } | ||
if (this.placeholder) { | if (this.placeholder) { | ||
if (this.placeholder[0].parentNode) this.placeholder[0].parentNode.removeChild(this.placeholder[0]); | if (this.placeholder[0].parentNode) | ||
if (this.options.helper != "original" && this.helper && this.helper[0].parentNode) this.helper.remove(); | this.placeholder[0].parentNode.removeChild(this.placeholder[0]); | ||
if (this.options.helper != "original" && this.helper && this.helper[0].parentNode) | |||
this.helper.remove(); | |||
$.extend(this, { | $.extend(this, { | ||
helper: null, | helper: null, | ||
dragging: | dragging: false, | ||
reverting: | reverting: false, | ||
_noFinalSort: null | _noFinalSort: null | ||
}); | }); | ||
if (this.domPosition.prev) { | if (this.domPosition.prev) { | ||
$(this.domPosition.prev).after(this.currentItem); | $(this.domPosition.prev).after(this.currentItem); | ||
} else { | } | ||
else { | |||
$(this.domPosition.parent).prepend(this.currentItem); | $(this.domPosition.parent).prepend(this.currentItem); | ||
} | } | ||
| 第2,779行: | 第2,704行: | ||
return this; | return this; | ||
}, | }, | ||
serialize: function(o) { | serialize: function (o) { | ||
var items = this._getItemsAsjQuery(o && o.connected); | var items = this._getItemsAsjQuery(o && o.connected); | ||
var str = []; | var str = []; | ||
o = o || {}; | o = o || {}; | ||
$(items).each( | $(items).each(function () { | ||
var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/)); | |||
if (res) | |||
str.push((o.key || res[1] + '[]') + '=' + (o.key && o.expression ? res[1] : res[2])); | |||
}); | |||
if (!str.length && o.key) { | if (!str.length && o.key) { | ||
str.push(o.key + '='); | str.push(o.key + '='); | ||
| 第2,793行: | 第2,718行: | ||
return str.join('&'); | return str.join('&'); | ||
}, | }, | ||
toArray: function(o) { | toArray: function (o) { | ||
var items = this._getItemsAsjQuery(o && o.connected); | var items = this._getItemsAsjQuery(o && o.connected); | ||
var ret = []; | var ret = []; | ||
o = o || {}; | o = o || {}; | ||
items.each(function() { | items.each(function () { ret.push($(o.item || this).attr(o.attribute || 'id') || ''); }); | ||
return ret; | return ret; | ||
}, | }, | ||
_intersectsWith: function(item) { | _intersectsWith: function (item) { | ||
var x1 = this.positionAbs.left, | var x1 = this.positionAbs.left, x2 = x1 + this.helperProportions.width, y1 = this.positionAbs.top, y2 = y1 + this.helperProportions.height; | ||
var l = item.left, r = l + item.width, t = item.top, b = t + item.height; | |||
var dyClick = this.offset.click.top, dxClick = this.offset.click.left; | |||
var l = item.left, | |||
var dyClick = this.offset.click.top, | |||
var isOverElement = (y1 + dyClick) > t && (y1 + dyClick) < b && (x1 + dxClick) > l && (x1 + dxClick) < r; | var isOverElement = (y1 + dyClick) > t && (y1 + dyClick) < b && (x1 + dxClick) > l && (x1 + dxClick) < r; | ||
if (this.options.tolerance == "pointer" || this.options.forcePointerForContainers || (this.options.tolerance != "pointer" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height'])) { | if (this.options.tolerance == "pointer" | ||
|| this.options.forcePointerForContainers | |||
|| (this.options.tolerance != "pointer" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height'])) { | |||
return isOverElement; | return isOverElement; | ||
} else { | } | ||
return (l < x1 + (this.helperProportions.width / 2) && x2 - (this.helperProportions.width / 2) < r && t < y1 + (this.helperProportions.height / 2) && y2 - (this.helperProportions.height / 2) < b); | else { | ||
return (l < x1 + (this.helperProportions.width / 2) | |||
&& x2 - (this.helperProportions.width / 2) < r | |||
&& t < y1 + (this.helperProportions.height / 2) | |||
&& y2 - (this.helperProportions.height / 2) < b); | |||
} | } | ||
}, | }, | ||
_intersectsWithPointer: function(item) { | _intersectsWithPointer: function (item) { | ||
var isOverElementHeight = (this.options.axis === 'x') || $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height), | var isOverElementHeight = (this.options.axis === 'x') || $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height), isOverElementWidth = (this.options.axis === 'y') || $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width), isOverElement = isOverElementHeight && isOverElementWidth, verticalDirection = this._getDragVerticalDirection(), horizontalDirection = this._getDragHorizontalDirection(); | ||
if (!isOverElement) | |||
return false; | |||
return this.floating ? | |||
(((horizontalDirection && horizontalDirection == "right") || verticalDirection == "down") ? 2 : 1) | |||
if (!isOverElement) return false; | : (verticalDirection && (verticalDirection == "down" ? 2 : 1)); | ||
return this.floating ? (((horizontalDirection && horizontalDirection == "right") || verticalDirection == "down") ? 2 : 1) : (verticalDirection && (verticalDirection == "down" ? 2 : 1)); | |||
}, | }, | ||
_intersectsWithSides: function(item) { | _intersectsWithSides: function (item) { | ||
var isOverBottomHalf = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height / 2), item.height), | var isOverBottomHalf = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height / 2), item.height), isOverRightHalf = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width / 2), item.width), verticalDirection = this._getDragVerticalDirection(), horizontalDirection = this._getDragHorizontalDirection(); | ||
if (this.floating && horizontalDirection) { | if (this.floating && horizontalDirection) { | ||
return ((horizontalDirection == "right" && isOverRightHalf) || (horizontalDirection == "left" && !isOverRightHalf)); | return ((horizontalDirection == "right" && isOverRightHalf) || (horizontalDirection == "left" && !isOverRightHalf)); | ||
} else { | } | ||
else { | |||
return verticalDirection && ((verticalDirection == "down" && isOverBottomHalf) || (verticalDirection == "up" && !isOverBottomHalf)); | return verticalDirection && ((verticalDirection == "down" && isOverBottomHalf) || (verticalDirection == "up" && !isOverBottomHalf)); | ||
} | } | ||
}, | }, | ||
_getDragVerticalDirection: function() { | _getDragVerticalDirection: function () { | ||
var delta = this.positionAbs.top - this.lastPositionAbs.top; | var delta = this.positionAbs.top - this.lastPositionAbs.top; | ||
return delta != 0 && (delta > 0 ? "down" : "up"); | return delta != 0 && (delta > 0 ? "down" : "up"); | ||
}, | }, | ||
_getDragHorizontalDirection: function() { | _getDragHorizontalDirection: function () { | ||
var delta = this.positionAbs.left - this.lastPositionAbs.left; | var delta = this.positionAbs.left - this.lastPositionAbs.left; | ||
return delta != 0 && (delta > 0 ? "right" : "left"); | return delta != 0 && (delta > 0 ? "right" : "left"); | ||
}, | }, | ||
refresh: function(event) { | refresh: function (event) { | ||
this._refreshItems(event); | this._refreshItems(event); | ||
this.refreshPositions(); | this.refreshPositions(); | ||
return this; | return this; | ||
}, | }, | ||
_connectWith: function() { | _connectWith: function () { | ||
var options = this.options; | var options = this.options; | ||
return options.connectWith.constructor == String ? [options.connectWith] : options.connectWith; | return options.connectWith.constructor == String | ||
? [options.connectWith] | |||
: options.connectWith; | |||
}, | }, | ||
_getItemsAsjQuery: function(connected) { | _getItemsAsjQuery: function (connected) { | ||
var items = []; | var items = []; | ||
var queries = []; | var queries = []; | ||
| 第2,867行: | 第2,788行: | ||
var inst = $.data(cur[j], this.widgetName); | var inst = $.data(cur[j], this.widgetName); | ||
if (inst && inst != this && !inst.options.disabled) { | if (inst && inst != this && !inst.options.disabled) { | ||
queries.push([ | queries.push([typeof inst.options.items === 'function' ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), inst]); | ||
} | } | ||
}; | } | ||
}; | ; | ||
} | |||
; | |||
} | } | ||
queries.push([ | queries.push([typeof this.options.items === 'function' ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), this]); | ||
for (var i = queries.length - 1; i >= 0; i--) { | for (var i = queries.length - 1; i >= 0; i--) { | ||
queries[i][0].each(function() { | queries[i][0].each(function () { | ||
items.push(this); | items.push(this); | ||
}); | }); | ||
}; | } | ||
; | |||
return $(items); | return $(items); | ||
}, | }, | ||
_removeCurrentsFromItems: function() { | _removeCurrentsFromItems: function () { | ||
var list = this.currentItem.find(":data(" + this.widgetName + "-item)"); | var list = this.currentItem.find(":data(" + this.widgetName + "-item)"); | ||
this.items = $.grep(this.items, function(item) { | this.items = $.grep(this.items, function (item) { | ||
for ( | for (var j = 0; j < list.length; j++) { | ||
if (list[j] == item.item[0]) | |||
if (list[j] == item.item[0]) return false; | return false; | ||
}; | } | ||
; | |||
return true; | return true; | ||
}); | }); | ||
}, | }, | ||
_refreshItems: function(event) { | _refreshItems: function (event) { | ||
this.items = []; | this.items = []; | ||
this.containers = [this]; | this.containers = [this]; | ||
var items = this.items; | var items = this.items; | ||
var queries = [ | var queries = [[typeof this.options.items === 'function' ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]]; | ||
var connectWith = this._connectWith(); | var connectWith = this._connectWith(); | ||
if (connectWith && this.ready) { | if (connectWith && this.ready) { | ||
| 第2,909行: | 第2,827行: | ||
var inst = $.data(cur[j], this.widgetName); | var inst = $.data(cur[j], this.widgetName); | ||
if (inst && inst != this && !inst.options.disabled) { | if (inst && inst != this && !inst.options.disabled) { | ||
queries.push([ | queries.push([typeof inst.options.items === 'function' ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]); | ||
this.containers.push(inst); | this.containers.push(inst); | ||
} | } | ||
}; | } | ||
}; | ; | ||
} | |||
; | |||
} | } | ||
for (var i = queries.length - 1; i >= 0; i--) { | for (var i = queries.length - 1; i >= 0; i--) { | ||
| 第2,926行: | 第2,844行: | ||
item: item, | item: item, | ||
instance: targetData, | instance: targetData, | ||
width: 0, | width: 0, height: 0, | ||
left: 0, top: 0 | |||
left: 0, | |||
}); | }); | ||
}; | } | ||
}; | ; | ||
} | |||
; | |||
}, | }, | ||
refreshPositions: function(fast) { | refreshPositions: function (fast) { | ||
if (this.offsetParent && this.helper) { | if (this.offsetParent && this.helper) { | ||
this.offset.parent = this._getParentOffset(); | this.offset.parent = this._getParentOffset(); | ||
| 第2,940行: | 第2,858行: | ||
for (var i = this.items.length - 1; i >= 0; i--) { | for (var i = this.items.length - 1; i >= 0; i--) { | ||
var item = this.items[i]; | var item = this.items[i]; | ||
if (item.instance != this.currentContainer && this.currentContainer && item.item[0] != this.currentItem[0]) continue; | if (item.instance != this.currentContainer && this.currentContainer && item.item[0] != this.currentItem[0]) | ||
continue; | |||
var t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item; | var t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item; | ||
if (!fast) { | if (!fast) { | ||
| 第2,949行: | 第2,868行: | ||
item.left = p.left; | item.left = p.left; | ||
item.top = p.top; | item.top = p.top; | ||
}; | } | ||
; | |||
if (this.options.custom && this.options.custom.refreshContainers) { | if (this.options.custom && this.options.custom.refreshContainers) { | ||
this.options.custom.refreshContainers.call(this); | this.options.custom.refreshContainers.call(this); | ||
} else { | } | ||
else { | |||
for (var i = this.containers.length - 1; i >= 0; i--) { | for (var i = this.containers.length - 1; i >= 0; i--) { | ||
var p = this.containers[i].element.offset(); | var p = this.containers[i].element.offset(); | ||
| 第2,958行: | 第2,879行: | ||
this.containers[i].containerCache.top = p.top; | this.containers[i].containerCache.top = p.top; | ||
this.containers[i].containerCache.width = this.containers[i].element.outerWidth(); | this.containers[i].containerCache.width = this.containers[i].element.outerWidth(); | ||
this.containers[i].containerCache.height = this.containers[i] | this.containers[i].containerCache.height = this.containers[i].element.outerHeight(); | ||
} | |||
}; | ; | ||
} | } | ||
return this; | return this; | ||
}, | }, | ||
_createPlaceholder: function(that) { | _createPlaceholder: function (that) { | ||
that = that || this; | that = that || this; | ||
var o = that.options; | var o = that.options; | ||
| 第2,970行: | 第2,891行: | ||
var className = o.placeholder; | var className = o.placeholder; | ||
o.placeholder = { | o.placeholder = { | ||
element: function() { | element: function () { | ||
var el = $(document.createElement(that.currentItem[0].nodeName)).addClass(className || that.currentItem[0].className + " ui-sortable-placeholder").removeClass("ui-sortable-helper")[0]; | var el = $(document.createElement(that.currentItem[0].nodeName)) | ||
if (!className) el.style.visibility = "hidden"; | .addClass(className || that.currentItem[0].className + " ui-sortable-placeholder") | ||
.removeClass("ui-sortable-helper")[0]; | |||
if (!className) | |||
el.style.visibility = "hidden"; | |||
return el; | return el; | ||
}, | }, | ||
update: function(container, p) { | update: function (container, p) { | ||
if (className && !o.forcePlaceholderSize) return; | if (className && !o.forcePlaceholderSize) | ||
return; | |||
if (!p.height()) { | if (!p.height()) { | ||
p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css('paddingTop') || 0, 10) - parseInt(that.currentItem.css('paddingBottom') || 0, 10)); | p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css('paddingTop') || 0, 10) - parseInt(that.currentItem.css('paddingBottom') || 0, 10)); | ||
}; | } | ||
; | |||
if (!p.width()) { | if (!p.width()) { | ||
p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css('paddingLeft') || 0, 10) - parseInt(that.currentItem.css('paddingRight') || 0, 10)); | p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css('paddingLeft') || 0, 10) - parseInt(that.currentItem.css('paddingRight') || 0, 10)); | ||
}; | } | ||
; | |||
} | } | ||
}; | }; | ||
| 第2,990行: | 第2,917行: | ||
o.placeholder.update(that, that.placeholder); | o.placeholder.update(that, that.placeholder); | ||
}, | }, | ||
_contactContainers: function(event) { | _contactContainers: function (event) { | ||
var innermostContainer = null, | var innermostContainer = null, innermostIndex = null; | ||
for (var i = this.containers.length - 1; i >= 0; i--) { | for (var i = this.containers.length - 1; i >= 0; i--) { | ||
if ($.contains(this.currentItem[0], this.containers[i].element[0])) continue; | if ($.contains(this.currentItem[0], this.containers[i].element[0])) | ||
continue; | |||
if (this._intersectsWith(this.containers[i].containerCache)) { | if (this._intersectsWith(this.containers[i].containerCache)) { | ||
if (innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) continue; | if (innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) | ||
continue; | |||
innermostContainer = this.containers[i]; | innermostContainer = this.containers[i]; | ||
innermostIndex = i; | innermostIndex = i; | ||
} else { | } | ||
else { | |||
if (this.containers[i].containerCache.over) { | if (this.containers[i].containerCache.over) { | ||
this.containers[i]._trigger("out", event, this._uiHash(this)); | this.containers[i]._trigger("out", event, this._uiHash(this)); | ||
| 第3,006行: | 第2,935行: | ||
} | } | ||
} | } | ||
if (!innermostContainer) return; | if (!innermostContainer) | ||
return; | |||
if (this.containers.length === 1) { | if (this.containers.length === 1) { | ||
this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); | this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); | ||
this.containers[innermostIndex].containerCache.over = 1; | this.containers[innermostIndex].containerCache.over = 1; | ||
} else { | } | ||
else { | |||
var dist = 10000; | var dist = 10000; | ||
var itemWithLeastDistance = null; | var itemWithLeastDistance = null; | ||
var posProperty = this.containers[innermostIndex].floating ? 'left' : 'top'; | var posProperty = this.containers[innermostIndex].floating ? 'left' : 'top'; | ||
var sizeProperty = this.containers[innermostIndex].floating ? 'width' : 'height'; | var sizeProperty = this.containers[innermostIndex].floating ? 'width' : 'height'; | ||
var base = this. | var base = this.positionAbs[posProperty] + this.offset.click[posProperty]; | ||
for (var j = this.items.length - 1; j >= 0; j--) { | for (var j = this.items.length - 1; j >= 0; j--) { | ||
if (!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) continue; | if (!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) | ||
if (this.items[j].item[0] == this.currentItem[0]) continue; | continue; | ||
if (this.items[j].item[0] == this.currentItem[0]) | |||
continue; | |||
var cur = this.items[j].item.offset()[posProperty]; | var cur = this.items[j].item.offset()[posProperty]; | ||
var nearBottom = | var nearBottom = false; | ||
if (Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)) { | if (Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)) { | ||
nearBottom = | nearBottom = true; | ||
cur += this.items[j][sizeProperty]; | cur += this.items[j][sizeProperty]; | ||
} | } | ||
| 第3,032行: | 第2,964行: | ||
} | } | ||
} | } | ||
if (!itemWithLeastDistance && !this.options.dropOnEmpty) return; | if (!itemWithLeastDistance && !this.options.dropOnEmpty) | ||
return; | |||
this.currentContainer = this.containers[innermostIndex]; | this.currentContainer = this.containers[innermostIndex]; | ||
itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true); | itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true); | ||
this._trigger("change", event, this._uiHash()); | this._trigger("change", event, this._uiHash()); | ||
this.containers[innermostIndex]._trigger("change", event, this._uiHash(this)); | this.containers[innermostIndex]._trigger("change", event, this._uiHash(this)); | ||
this.options.placeholder.update(this.currentContainer, | this.options.placeholder.update(this.currentContainer, this.placeholder); | ||
this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); | this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); | ||
this.containers[innermostIndex].containerCache.over = 1; | this.containers[innermostIndex].containerCache.over = 1; | ||
} | } | ||
}, | }, | ||
_createHelper: function(event) { | _createHelper: function (event) { | ||
var o = this.options; | var o = this.options; | ||
var helper = | var helper = typeof o.helper === 'function' ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper == 'clone' ? this.currentItem.clone() : this.currentItem); | ||
if (!helper.parents('body').length) $(o.appendTo != 'parent' ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]); | if (!helper.parents('body').length) | ||
if (helper[0] == this.currentItem[0]) this._storedCSS = { | $(o.appendTo != 'parent' ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]); | ||
if (helper[0] == this.currentItem[0]) | |||
this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") }; | |||
if (helper[0].style.width == '' || o.forceHelperSize) | |||
helper.width(this.currentItem.width()); | |||
if (helper[0].style.height == '' || o.forceHelperSize) | |||
helper.height(this.currentItem.height()); | |||
if (helper[0].style.width == '' || o.forceHelperSize) helper.width(this.currentItem.width()); | |||
if (helper[0].style.height == '' || o.forceHelperSize) helper.height(this.currentItem.height()); | |||
return helper; | return helper; | ||
}, | }, | ||
_adjustOffsetFromHelper: function(obj) { | _adjustOffsetFromHelper: function (obj) { | ||
if (typeof obj == 'string') { | if (typeof obj == 'string') { | ||
obj = obj.split(' '); | obj = obj.split(' '); | ||
} | } | ||
if ( | if (Array.isArray(obj)) { | ||
obj = { | obj = { left: +obj[0], top: +obj[1] || 0 }; | ||
} | } | ||
if ('left' in obj) { | if ('left' in obj) { | ||
| 第3,081行: | 第3,008行: | ||
} | } | ||
}, | }, | ||
_getParentOffset: function() { | _getParentOffset: function () { | ||
this.offsetParent = this.helper.offsetParent(); | this.offsetParent = this.helper.offsetParent(); | ||
var po = this.offsetParent.offset(); | var po = this.offsetParent.offset(); | ||
| 第3,088行: | 第3,015行: | ||
po.top += this.scrollParent.scrollTop(); | po.top += this.scrollParent.scrollTop(); | ||
} | } | ||
if ((this.offsetParent[0] == document.body) || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.ui.ie)) po = { | if ((this.offsetParent[0] == document.body) | ||
|| (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.ui.ie)) | |||
po = { top: 0, left: 0 }; | |||
return { | return { | ||
top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0), | top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0), | ||
| 第3,097行: | 第3,023行: | ||
}; | }; | ||
}, | }, | ||
_getRelativeOffset: function() { | _getRelativeOffset: function () { | ||
if (this.cssPosition == "relative") { | if (this.cssPosition == "relative") { | ||
var p = this.currentItem.position(); | var p = this.currentItem.position(); | ||
| 第3,104行: | 第3,030行: | ||
left: p.left - (parseInt(this.helper.css("left"), 10) || 0) + this.scrollParent.scrollLeft() | left: p.left - (parseInt(this.helper.css("left"), 10) || 0) + this.scrollParent.scrollLeft() | ||
}; | }; | ||
} else { | } | ||
return { | else { | ||
return { top: 0, left: 0 }; | |||
} | } | ||
}, | }, | ||
_cacheMargins: function() { | _cacheMargins: function () { | ||
this.margins = { | this.margins = { | ||
left: (parseInt(this.currentItem.css("marginLeft"), 10) || 0), | left: (parseInt(this.currentItem.css("marginLeft"), 10) || 0), | ||
| 第3,117行: | 第3,041行: | ||
}; | }; | ||
}, | }, | ||
_cacheHelperProportions: function() { | _cacheHelperProportions: function () { | ||
this.helperProportions = { | this.helperProportions = { | ||
width: this.helper.outerWidth(), | width: this.helper.outerWidth(), | ||
| 第3,123行: | 第3,047行: | ||
}; | }; | ||
}, | }, | ||
_setContainment: function() { | _setContainment: function () { | ||
var o = this.options; | var o = this.options; | ||
if (o.containment == 'parent') o.containment = this.helper[0].parentNode; | if (o.containment == 'parent') | ||
if (o.containment == 'document' || o.containment == 'window') this.containment = [0 - this.offset.relative.left - this.offset.parent.left, 0 - this.offset.relative.top - this.offset.parent.top, $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left, ($(o.containment == 'document' ? | o.containment = this.helper[0].parentNode; | ||
if (o.containment == 'document' || o.containment == 'window') | |||
this.containment = [ | |||
0 - this.offset.relative.left - this.offset.parent.left, | |||
0 - this.offset.relative.top - this.offset.parent.top, | |||
$(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left, | |||
($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top | |||
]; | |||
if (!(/^(document|window|parent)$/).test(o.containment)) { | if (!(/^(document|window|parent)$/).test(o.containment)) { | ||
var ce = $(o.containment)[0]; | var ce = $(o.containment)[0]; | ||
var co = $(o.containment).offset(); | var co = $(o.containment).offset(); | ||
var over = ($(ce).css("overflow") != 'hidden'); | var over = ($(ce).css("overflow") != 'hidden'); | ||
this.containment = [co.left + (parseInt($(ce).css("borderLeftWidth"), 10) || 0) + (parseInt($(ce).css("paddingLeft"), 10) || 0) - this.margins.left, co.top + (parseInt($(ce).css("borderTopWidth"), 10) || 0) + (parseInt($(ce).css("paddingTop"), 10) || 0) - this.margins.top, co.left + (over ? Math.max(ce.scrollWidth, ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"), 10) || 0) - (parseInt($(ce).css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left, co.top + (over ? Math.max(ce.scrollHeight, ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"), 10) || 0) - (parseInt($(ce).css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top]; | this.containment = [ | ||
co.left + (parseInt($(ce).css("borderLeftWidth"), 10) || 0) + (parseInt($(ce).css("paddingLeft"), 10) || 0) - this.margins.left, | |||
co.top + (parseInt($(ce).css("borderTopWidth"), 10) || 0) + (parseInt($(ce).css("paddingTop"), 10) || 0) - this.margins.top, | |||
co.left + (over ? Math.max(ce.scrollWidth, ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"), 10) || 0) - (parseInt($(ce).css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left, | |||
co.top + (over ? Math.max(ce.scrollHeight, ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"), 10) || 0) - (parseInt($(ce).css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top | |||
]; | |||
} | } | ||
}, | }, | ||
_convertPositionTo: function(d, pos) { | _convertPositionTo: function (d, pos) { | ||
if (!pos) pos = this. | if (!pos) | ||
pos = this.position; | |||
var mod = d == "absolute" ? 1 : -1; | var mod = d == "absolute" ? 1 : -1; | ||
var o = this.options, | var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); | ||
return { | return { | ||
top: (pos.top + this.offset.relative.top * mod + this.offset.parent.top * mod - ((this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : (scrollIsRootNode ? 0 : scroll.scrollTop())) * mod)), | top: (pos.top | ||
left: (pos.left + this.offset.relative.left * mod + this.offset.parent.left * mod - ((this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft()) * mod)) | + this.offset.relative.top * mod | ||
+ this.offset.parent.top * mod | |||
- ((this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : (scrollIsRootNode ? 0 : scroll.scrollTop())) * mod)), | |||
left: (pos.left | |||
+ this.offset.relative.left * mod | |||
+ this.offset.parent.left * mod | |||
- ((this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft()) * mod)) | |||
}; | }; | ||
}, | }, | ||
_generatePosition: function(event) { | _generatePosition: function (event) { | ||
var o = this.options, | var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); | ||
if (this.cssPosition == 'relative' && !(this.scrollParent[0] != document && this.scrollParent[0] != this.offsetParent[0])) { | |||
if (this.cssPosition == 'relative' && !(this.scrollParent[0] != document && this.scrollParent[0] != | |||
this.offset.relative = this._getRelativeOffset(); | this.offset.relative = this._getRelativeOffset(); | ||
} | } | ||
| 第3,159行: | 第3,095行: | ||
if (this.originalPosition) { | if (this.originalPosition) { | ||
if (this.containment) { | if (this.containment) { | ||
if (event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left; | if (event.pageX - this.offset.click.left < this.containment[0]) | ||
if (event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top; | pageX = this.containment[0] + this.offset.click.left; | ||
if (event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left; | if (event.pageY - this.offset.click.top < this.containment[1]) | ||
if (event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top; | pageY = this.containment[1] + this.offset.click.top; | ||
if (event.pageX - this.offset.click.left > this.containment[2]) | |||
pageX = this.containment[2] + this.offset.click.left; | |||
if (event.pageY - this.offset.click.top > this.containment[3]) | |||
pageY = this.containment[3] + this.offset.click.top; | |||
} | } | ||
if (o.grid) { | if (o.grid) { | ||
| 第3,168行: | 第3,108行: | ||
pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; | pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; | ||
var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0]; | var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0]; | ||
pageX = this. | pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; | ||
} | } | ||
} | } | ||
return { | return { | ||
top: (pageY - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + ((this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : (scrollIsRootNode ? 0 : scroll.scrollTop())))), | top: (pageY | ||
left: (pageX - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + ((this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft()))) | - this.offset.click.top | ||
- this.offset.relative.top | |||
- this.offset.parent.top | |||
+ ((this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : (scrollIsRootNode ? 0 : scroll.scrollTop())))), | |||
left: (pageX | |||
- this.offset.click.left | |||
- this.offset.relative.left | |||
- this.offset.parent.left | |||
+ ((this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft()))) | |||
}; | }; | ||
}, | }, | ||
_rearrange: function(event, i, a, hardRefresh) { | _rearrange: function (event, i, a, hardRefresh) { | ||
a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction == 'down' ? i.item[0] : i.item[0].nextSibling)); | a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction == 'down' ? i.item[0] : i.item[0].nextSibling)); | ||
this.counter = this.counter ? ++this.counter : 1; | this.counter = this.counter ? ++this.counter : 1; | ||
var counter = this.counter; | var counter = this.counter; | ||
this._delay(function() { | this._delay(function () { | ||
if (counter == this.counter) this.refreshPositions(!hardRefresh); | if (counter == this.counter) | ||
this.refreshPositions(!hardRefresh); | |||
}); | }); | ||
}, | }, | ||
_clear: function(event, noPropagation) { | _clear: function (event, noPropagation) { | ||
this.reverting = | this.reverting = false; | ||
var delayedTriggers = []; | var delayedTriggers = []; | ||
if (!this._noFinalSort && this.currentItem.parent().length) this.placeholder.before(this.currentItem); | if (!this._noFinalSort && this.currentItem.parent().length) | ||
this.placeholder.before(this.currentItem); | |||
this._noFinalSort = null; | this._noFinalSort = null; | ||
if (this.helper[0] == this.currentItem[0]) { | if (this.helper[0] == this.currentItem[0]) { | ||
for (var i in this._storedCSS) { | for (var i in this._storedCSS) { | ||
if (this._storedCSS[i] == 'auto' || this._storedCSS[i] == 'static') this._storedCSS[i] = ''; | if (this._storedCSS[i] == 'auto' || this._storedCSS[i] == 'static') | ||
this._storedCSS[i] = ''; | |||
} | } | ||
this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); | this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); | ||
} else { | } | ||
else { | |||
this.currentItem.show(); | this.currentItem.show(); | ||
} | } | ||
if (this.fromOutside && !noPropagation) delayedTriggers.push(function(event) { | if (this.fromOutside && !noPropagation) | ||
delayedTriggers.push(function (event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); }); | |||
if ((this.fromOutside || this.domPosition.prev != this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent != this.currentItem.parent()[0]) && !noPropagation) | |||
if ((this.fromOutside || this.domPosition.prev != this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent != this.currentItem.parent()[0]) && !noPropagation) delayedTriggers.push(function(event) { | delayedTriggers.push(function (event) { this._trigger("update", event, this._uiHash()); }); | ||
if (this !== this.currentContainer) { | if (this !== this.currentContainer) { | ||
if (!noPropagation) { | if (!noPropagation) { | ||
delayedTriggers.push(function(event) { | delayedTriggers.push(function (event) { this._trigger("remove", event, this._uiHash()); }); | ||
delayedTriggers.push((function (c) { return function (event) { c._trigger("receive", event, this._uiHash(this)); }; }).call(this, this.currentContainer)); | |||
delayedTriggers.push((function (c) { return function (event) { c._trigger("update", event, this._uiHash(this)); }; }).call(this, this.currentContainer)); | |||
delayedTriggers.push((function(c) { | |||
delayedTriggers.push((function(c) { | |||
} | } | ||
} | } | ||
for (var i = this.containers.length - 1; i >= 0; i--) { | for (var i = this.containers.length - 1; i >= 0; i--) { | ||
if (!noPropagation) delayedTriggers.push((function(c) { | if (!noPropagation) | ||
delayedTriggers.push((function (c) { return function (event) { c._trigger("deactivate", event, this._uiHash(this)); }; }).call(this, this.containers[i])); | |||
if (this.containers[i].containerCache.over) { | if (this.containers[i].containerCache.over) { | ||
delayedTriggers.push((function(c) { | delayedTriggers.push((function (c) { return function (event) { c._trigger("out", event, this._uiHash(this)); }; }).call(this, this.containers[i])); | ||
this.containers[i].containerCache.over = 0; | this.containers[i].containerCache.over = 0; | ||
} | } | ||
} | } | ||
if (this._storedCursor) $('body').css("cursor", this._storedCursor); | if (this._storedCursor) | ||
if (this._storedOpacity) this.helper.css("opacity", this._storedOpacity); | $('body').css("cursor", this._storedCursor); | ||
if (this._storedZIndex) this.helper.css("zIndex", this._storedZIndex == 'auto' ? '' : this._storedZIndex); | if (this._storedOpacity) | ||
this.dragging = | this.helper.css("opacity", this._storedOpacity); | ||
if (this._storedZIndex) | |||
this.helper.css("zIndex", this._storedZIndex == 'auto' ? '' : this._storedZIndex); | |||
this.dragging = false; | |||
if (this.cancelHelperRemoval) { | if (this.cancelHelperRemoval) { | ||
if (!noPropagation) { | if (!noPropagation) { | ||
this._trigger("beforeStop", event, this._uiHash()); | this._trigger("beforeStop", event, this._uiHash()); | ||
for ( | for (var i = 0; i < delayedTriggers.length; i++) { | ||
delayedTriggers[i].call(this, event); | delayedTriggers[i].call(this, event); | ||
}; | } | ||
; | |||
this._trigger("stop", event, this._uiHash()); | this._trigger("stop", event, this._uiHash()); | ||
} | } | ||
this.fromOutside = | this.fromOutside = false; | ||
return false; | return false; | ||
} | } | ||
if (!noPropagation) this._trigger("beforeStop", event, this._uiHash()); | if (!noPropagation) | ||
this._trigger("beforeStop", event, this._uiHash()); | |||
this.placeholder[0].parentNode.removeChild(this.placeholder[0]); | this.placeholder[0].parentNode.removeChild(this.placeholder[0]); | ||
if (this.helper[0] != this.currentItem[0]) this.helper.remove(); | if (this.helper[0] != this.currentItem[0]) | ||
this.helper.remove(); | |||
this.helper = null; | this.helper = null; | ||
if (!noPropagation) { | if (!noPropagation) { | ||
for (var i = 0; i < delayedTriggers.length; i++) { | for (var i = 0; i < delayedTriggers.length; i++) { | ||
delayedTriggers[i].call(this, event); | delayedTriggers[i].call(this, event); | ||
}; | } | ||
; | |||
this._trigger("stop", event, this._uiHash()); | this._trigger("stop", event, this._uiHash()); | ||
} | } | ||
this.fromOutside = | this.fromOutside = false; | ||
return true; | return true; | ||
}, | }, | ||
_trigger: function() { | _trigger: function () { | ||
if ($.Widget.prototype._trigger.apply(this, arguments) === false) { | if ($.Widget.prototype._trigger.apply(this, arguments) === false) { | ||
this.cancel(); | this.cancel(); | ||
} | } | ||
}, | }, | ||
_uiHash: function(_inst) { | _uiHash: function (_inst) { | ||
var inst = _inst || this; | var inst = _inst || this; | ||
return { | return { | ||
| 第3,284行: | 第3,221行: | ||
} | } | ||
}); | }); | ||
})(jQuery);; | })(jQuery); | ||
(jQuery.effects || (function($, undefined) { | ; | ||
var backCompat = $.uiBackCompat !== | (jQuery.effects || (function ($, undefined) { | ||
var backCompat = $.uiBackCompat !== false, dataSpace = "ui-effects-"; | |||
$.effects = { | $.effects = { | ||
effect: {} | effect: {} | ||
}; | }; | ||
(function(jQuery, undefined) { | (function (jQuery, undefined) { | ||
var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor".split(" "), | var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor".split(" "), rplusequals = /^([\-+])=\s*(\d+\.?\d*)/, stringParsers = [{ | ||
re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/, | re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/, | ||
parse: function(execResult) { | parse: function (execResult) { | ||
return [execResult[1], execResult[2], execResult[3], execResult[4]]; | 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*)?\)/, | re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/, | ||
parse: function(execResult) { | parse: function (execResult) { | ||
return [execResult[1] * 2.55, execResult[2] * 2.55, execResult[3] * 2.55, execResult[4]]; | return [ | ||
execResult[1] * 2.55, | |||
execResult[2] * 2.55, | |||
execResult[3] * 2.55, | |||
execResult[4] | |||
]; | |||
} | } | ||
}, { | }, { | ||
re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/, | re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/, | ||
parse: function(execResult) { | parse: function (execResult) { | ||
return [parseInt(execResult[1], 16), parseInt(execResult[2], 16), parseInt(execResult[3], 16)]; | return [ | ||
parseInt(execResult[1], 16), | |||
parseInt(execResult[2], 16), | |||
parseInt(execResult[3], 16) | |||
]; | |||
} | } | ||
}, { | }, { | ||
re: /#([a-f0-9])([a-f0-9])([a-f0-9])/, | re: /#([a-f0-9])([a-f0-9])([a-f0-9])/, | ||
parse: function(execResult) { | parse: function (execResult) { | ||
return [parseInt(execResult[1] + execResult[1], 16), parseInt( | 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*)?\)/, | re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/, | ||
space: "hsla", | space: "hsla", | ||
parse: function(execResult) { | parse: function (execResult) { | ||
return [execResult[1], execResult[2] / 100, execResult[3] / 100, execResult[4]]; | return [ | ||
execResult[1], | |||
execResult[2] / 100, | |||
execResult[3] / 100, | |||
execResult[4] | |||
]; | |||
} | |||
}], color = jQuery.Color = function (color, green, blue, alpha) { | |||
return new jQuery.Color.fn.parse(color, green, blue, alpha); | |||
}, spaces = { | |||
rgba: { | |||
props: { | |||
red: { | |||
idx: 0, | |||
type: "byte" | |||
}, | |||
green: { | |||
idx: 1, | |||
type: "byte" | |||
}, | |||
blue: { | |||
idx: 2, | |||
type: "byte" | |||
} | |||
} | } | ||
}, | }, | ||
hsla: { | |||
props: { | |||
hue: { | |||
idx: 0, | |||
type: "degrees" | |||
}, | |||
saturation: { | |||
idx: 1, | |||
type: "percent" | |||
}, | |||
lightness: { | |||
idx: 2, | |||
type: "percent" | |||
} | } | ||
} | } | ||
} | |||
}, propTypes = { | |||
"byte": { | |||
floor: true, | |||
max: 255 | |||
}, | }, | ||
"percent": { | |||
max: 1 | |||
}, | }, | ||
support = color.support = {}, | "degrees": { | ||
mod: 360, | |||
floor: true | |||
} | |||
}, support = color.support = {}, supportElem = jQuery("<p>")[0], colors, each = jQuery.each; | |||
supportElem.style.cssText = "background-color:rgba(1,1,1,.5)"; | supportElem.style.cssText = "background-color:rgba(1,1,1,.5)"; | ||
support.rgba = supportElem.style.backgroundColor.indexOf("rgba") > -1; | support.rgba = supportElem.style.backgroundColor.indexOf("rgba") > -1; | ||
each(spaces, function(spaceName, space) { | each(spaces, function (spaceName, space) { | ||
space.cache = "_" + spaceName; | space.cache = "_" + spaceName; | ||
space.props.alpha = { | space.props.alpha = { | ||
| 第3,386行: | 第3,336行: | ||
}; | }; | ||
}); | }); | ||
function clamp(value, prop, allowEmpty) { | function clamp(value, prop, allowEmpty) { | ||
var type = propTypes[prop.type] || {}; | var type = propTypes[prop.type] || {}; | ||
| 第3,401行: | 第3,350行: | ||
return 0 > value ? 0 : type.max < value ? type.max : value; | return 0 > value ? 0 : type.max < value ? type.max : value; | ||
} | } | ||
function stringParse(string) { | function stringParse(string) { | ||
var inst = color(), | var inst = color(), rgba = inst._rgba = []; | ||
string = string.toLowerCase(); | string = string.toLowerCase(); | ||
each(stringParsers, function(i, parser) { | each(stringParsers, function (i, parser) { | ||
var parsed, match = parser.re.exec(string), | var parsed, match = parser.re.exec(string), values = match && parser.parse(match), spaceName = parser.space || "rgba"; | ||
if (values) { | if (values) { | ||
parsed = inst[spaceName](values); | parsed = inst[spaceName](values); | ||
| 第3,426行: | 第3,371行: | ||
} | } | ||
color.fn = jQuery.extend(color.prototype, { | color.fn = jQuery.extend(color.prototype, { | ||
parse: function(red, green, blue, alpha) { | parse: function (red, green, blue, alpha) { | ||
if (red === undefined) { | if (red === undefined) { | ||
this._rgba = [null, null, null, null]; | this._rgba = [null, null, null, null]; | ||
return this; | return this; | ||
} | } | ||
if (red.jquery || | if (red.jquery || red.nodeType) { | ||
red = jQuery(red).css(green); | red = jQuery(red).css(green); | ||
green = undefined; | green = undefined; | ||
} | } | ||
var inst = this, | var inst = this, type = jQuery.type(red), rgba = this._rgba = []; | ||
if (green !== undefined) { | if (green !== undefined) { | ||
red = [red, green, blue, alpha]; | red = [red, green, blue, alpha]; | ||
| 第3,447行: | 第3,389行: | ||
} | } | ||
if (type === "array") { | if (type === "array") { | ||
each(spaces.rgba.props, function(key, prop) { | each(spaces.rgba.props, function (key, prop) { | ||
rgba[prop.idx] = clamp(red[prop.idx], prop); | rgba[prop.idx] = clamp(red[prop.idx], prop); | ||
}); | }); | ||
| 第3,454行: | 第3,396行: | ||
if (type === "object") { | if (type === "object") { | ||
if (red instanceof color) { | if (red instanceof color) { | ||
each(spaces, function(spaceName, space) { | each(spaces, function (spaceName, space) { | ||
if (red[space.cache]) { | if (red[space.cache]) { | ||
inst[space.cache] = red[space.cache].slice(); | inst[space.cache] = red[space.cache].slice(); | ||
} | } | ||
}); | }); | ||
} else { | } | ||
each(spaces, function(spaceName, space) { | else { | ||
each(spaces, function (spaceName, space) { | |||
var cache = space.cache; | var cache = space.cache; | ||
each(space.props, function(key, prop) { | each(space.props, function (key, prop) { | ||
if (!inst[cache] && space.to) { | if (!inst[cache] && space.to) { | ||
if (key === "alpha" || red[key] == null) { | if (key === "alpha" || red[key] == null) { | ||
| 第3,482行: | 第3,425行: | ||
} | } | ||
}, | }, | ||
is: function(compare) { | is: function (compare) { | ||
var is = color(compare), | var is = color(compare), same = true, inst = this; | ||
each(spaces, function (_, space) { | |||
var localCache, isCache = is[space.cache]; | |||
each(spaces, | 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; | return same; | ||
}, | }, | ||
_space: function() { | _space: function () { | ||
var used = [], | var used = [], inst = this; | ||
each(spaces, function (spaceName, space) { | |||
each(spaces, function(spaceName, space) { | |||
if (inst[space.cache]) { | if (inst[space.cache]) { | ||
used.push(spaceName); | used.push(spaceName); | ||
| 第3,512行: | 第3,451行: | ||
return used.pop(); | return used.pop(); | ||
}, | }, | ||
transition: function(other, distance) { | transition: function (other, distance) { | ||
var end = color(other), | 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]; | end = end[space.cache]; | ||
each(space.props, function(key, prop) { | each(space.props, function (key, prop) { | ||
var index = prop.idx, | var index = prop.idx, startValue = start[index], endValue = end[index], type = propTypes[prop.type] || {}; | ||
if (endValue === null) { | if (endValue === null) { | ||
return; | return; | ||
| 第3,530行: | 第3,461行: | ||
if (startValue === null) { | if (startValue === null) { | ||
result[index] = endValue; | result[index] = endValue; | ||
} else { | } | ||
else { | |||
if (type.mod) { | if (type.mod) { | ||
if (endValue - startValue > type.mod / 2) { | if (endValue - startValue > type.mod / 2) { | ||
startValue += type.mod; | startValue += type.mod; | ||
} else if (startValue - endValue > | } | ||
else if (startValue - endValue > type.mod / 2) { | |||
startValue -= type.mod; | startValue -= type.mod; | ||
} | } | ||
| 第3,544行: | 第3,476行: | ||
return this[spaceName](result); | return this[spaceName](result); | ||
}, | }, | ||
blend: function(opaque) { | blend: function (opaque) { | ||
if (this._rgba[3] === 1) { | if (this._rgba[3] === 1) { | ||
return this; | return this; | ||
} | } | ||
var rgb = this._rgba.slice(), | var rgb = this._rgba.slice(), a = rgb.pop(), blend = color(opaque)._rgba; | ||
return color(jQuery.map(rgb, function (v, i) { | |||
return color(jQuery.map(rgb, function(v, i) { | |||
return (1 - a) * blend[i] + a * v; | return (1 - a) * blend[i] + a * v; | ||
})); | })); | ||
}, | }, | ||
toRgbaString: function() { | toRgbaString: function () { | ||
var prefix = "rgba(", | var prefix = "rgba(", rgba = jQuery.map(this._rgba, function (v, i) { | ||
return v == null ? (i > 2 ? 1 : 0) : v; | |||
}); | |||
if (rgba[3] === 1) { | if (rgba[3] === 1) { | ||
rgba.pop(); | rgba.pop(); | ||
| 第3,566行: | 第3,495行: | ||
return prefix + rgba.join() + ")"; | return prefix + rgba.join() + ")"; | ||
}, | }, | ||
toHslaString: function() { | toHslaString: function () { | ||
var prefix = "hsla(", | var prefix = "hsla(", hsla = jQuery.map(this.hsla(), function (v, i) { | ||
if (v == null) { | |||
v = i > 2 ? 1 : 0; | |||
} | |||
if (i && i < 3) { | |||
v = Math.round(v * 100) + "%"; | |||
} | |||
return v; | |||
}); | |||
if (hsla[3] === 1) { | if (hsla[3] === 1) { | ||
hsla.pop(); | hsla.pop(); | ||
| 第3,583行: | 第3,511行: | ||
return prefix + hsla.join() + ")"; | return prefix + hsla.join() + ")"; | ||
}, | }, | ||
toHexString: function(includeAlpha) { | toHexString: function (includeAlpha) { | ||
var rgba = this._rgba.slice(), | var rgba = this._rgba.slice(), alpha = rgba.pop(); | ||
if (includeAlpha) { | if (includeAlpha) { | ||
rgba.push(~~(alpha * 255)); | rgba.push(~~(alpha * 255)); | ||
} | } | ||
return "#" + jQuery.map(rgba, function(v) { | return "#" + jQuery.map(rgba, function (v) { | ||
v = (v || 0).toString(16); | v = (v || 0).toString(16); | ||
return v.length === 1 ? "0" + v : v; | return v.length === 1 ? "0" + v : v; | ||
}).join(""); | }).join(""); | ||
}, | }, | ||
toString: function() { | toString: function () { | ||
return this._rgba[3] === 0 ? "transparent" : this.toRgbaString(); | return this._rgba[3] === 0 ? "transparent" : this.toRgbaString(); | ||
} | } | ||
}); | }); | ||
color.fn.parse.prototype = color.fn; | color.fn.parse.prototype = color.fn; | ||
function hue2rgb(p, q, h) { | function hue2rgb(p, q, h) { | ||
h = (h + 1) % 1; | h = (h + 1) % 1; | ||
| 第3,613行: | 第3,539行: | ||
return p; | return p; | ||
} | } | ||
spaces.hsla.to = function(rgba) { | spaces.hsla.to = function (rgba) { | ||
if (rgba[0] == null || rgba[1] == null || rgba[2] == null) { | if (rgba[0] == null || rgba[1] == null || rgba[2] == null) { | ||
return [null, null, null, rgba[3]]; | return [null, null, null, rgba[3]]; | ||
} | } | ||
var r = rgba[0] / 255, | 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) { | if (min === max) { | ||
h = 0; | h = 0; | ||
} else if (r === max) { | } | ||
else if (r === max) { | |||
h = (60 * (g - b) / diff) + 360; | h = (60 * (g - b) / diff) + 360; | ||
} else if (g === max) { | } | ||
else if (g === max) { | |||
h = (60 * (b - r) / diff) + 120; | h = (60 * (b - r) / diff) + 120; | ||
} else { | } | ||
h = (60 * (r - g) / diff) + 240; | else { | ||
h = (60 * (r - g) / diff) + 240; | |||
} | } | ||
if (l === 0 || l === 1) { | if (l === 0 || l === 1) { | ||
s = l; | s = l; | ||
} else if (l <= 0.5) { | } | ||
else if (l <= 0.5) { | |||
s = diff / add; | s = diff / add; | ||
} else { | } | ||
else { | |||
s = diff / (2 - add); | s = diff / (2 - add); | ||
} | } | ||
return [Math.round(h) % 360, s, l, a == null ? 1 : a]; | return [Math.round(h) % 360, s, l, a == null ? 1 : a]; | ||
}; | }; | ||
spaces.hsla.from = function(hsla) { | spaces.hsla.from = function (hsla) { | ||
if (hsla[0] == null || hsla[1] == null || hsla[2] == null) { | if (hsla[0] == null || hsla[1] == null || hsla[2] == null) { | ||
return [null, null, null, hsla[3]]; | return [null, null, null, hsla[3]]; | ||
} | } | ||
var h = hsla[0] / 360, | 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 | |||
return [Math.round(hue2rgb(p, q, h + (1 / 3)) * 255), Math.round(hue2rgb(p, q, h) * 255), Math.round( | ]; | ||
}; | }; | ||
each(spaces, function(spaceName, space) { | each(spaces, function (spaceName, space) { | ||
var props = space.props, | var props = space.props, cache = space.cache, to = space.to, from = space.from; | ||
color.fn[spaceName] = function (value) { | |||
color.fn[spaceName] = function(value) { | |||
if (to && !this[cache]) { | if (to && !this[cache]) { | ||
this[cache] = to(this._rgba); | this[cache] = to(this._rgba); | ||
| 第3,670行: | 第3,588行: | ||
return this[cache].slice(); | return this[cache].slice(); | ||
} | } | ||
var ret, type = jQuery.type(value), | var ret, type = jQuery.type(value), arr = (type === "array" || type === "object") ? value : arguments, local = this[cache].slice(); | ||
each(props, function (key, prop) { | |||
each(props, function(key, prop) { | |||
var val = arr[type === "object" ? key : prop.idx]; | var val = arr[type === "object" ? key : prop.idx]; | ||
if (val == null) { | if (val == null) { | ||
| 第3,684行: | 第3,600行: | ||
ret[cache] = local; | ret[cache] = local; | ||
return ret; | return ret; | ||
} else { | } | ||
else { | |||
return color(local); | return color(local); | ||
} | } | ||
}; | }; | ||
each(props, function(key, prop) { | each(props, function (key, prop) { | ||
if (color.fn[key]) { | if (color.fn[key]) { | ||
return; | return; | ||
} | } | ||
color.fn[key] = function(value) { | color.fn[key] = function (value) { | ||
var vtype = jQuery.type(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") { | if (vtype === "undefined") { | ||
return cur; | return cur; | ||
| 第3,708行: | 第3,621行: | ||
return this; | return this; | ||
} | } | ||
if (vtype === | if (vtype === "string") { | ||
match = rplusequals.exec(value); | match = rplusequals.exec(value); | ||
if (match) { | if (match) { | ||
| 第3,720行: | 第3,632行: | ||
}); | }); | ||
}); | }); | ||
each(stepHooks, function(i, hook) { | each(stepHooks, function (i, hook) { | ||
jQuery.cssHooks[hook] = { | jQuery.cssHooks[hook] = { | ||
set: function(elem, value) { | set: function (elem, value) { | ||
var parsed, curElem, backgroundColor = ""; | var parsed, curElem, backgroundColor = ""; | ||
if (jQuery.type(value) !== "string" || (parsed = stringParse(value))) { | if (jQuery.type(value) !== "string" || (parsed = stringParse(value))) { | ||
| 第3,728行: | 第3,640行: | ||
if (!support.rgba && value._rgba[3] !== 1) { | if (!support.rgba && value._rgba[3] !== 1) { | ||
curElem = hook === "backgroundColor" ? elem.parentNode : elem; | curElem = hook === "backgroundColor" ? elem.parentNode : elem; | ||
while ((backgroundColor === "" || backgroundColor === "transparent") && curElem && curElem.style) { | while ((backgroundColor === "" || backgroundColor === "transparent") && | ||
curElem && curElem.style) { | |||
try { | try { | ||
backgroundColor = jQuery.css(curElem, "backgroundColor"); | backgroundColor = jQuery.css(curElem, "backgroundColor"); | ||
curElem = curElem.parentNode; | curElem = curElem.parentNode; | ||
} catch (e) {} | } | ||
catch (e) { | |||
} | |||
} | } | ||
value = value.blend(backgroundColor && backgroundColor !== "transparent" ? backgroundColor : "_default"); | value = value.blend(backgroundColor && backgroundColor !== "transparent" ? | ||
backgroundColor : | |||
"_default"); | |||
} | } | ||
value = value.toRgbaString(); | value = value.toRgbaString(); | ||
| 第3,740行: | 第3,657行: | ||
try { | try { | ||
elem.style[hook] = value; | elem.style[hook] = value; | ||
} catch (error) {} | } | ||
catch (error) { | |||
} | |||
} | } | ||
}; | }; | ||
jQuery.fx.step[hook] = function(fx) { | jQuery.fx.step[hook] = function (fx) { | ||
if (!fx.colorInit) { | if (!fx.colorInit) { | ||
fx.start = color(fx.elem, hook); | fx.start = color(fx.elem, hook); | ||
fx.end = color(fx.end); | fx.end = color(fx.end); | ||
fx.colorInit = | fx.colorInit = true; | ||
} | } | ||
jQuery.cssHooks[hook].set(fx.elem, fx.start.transition(fx.end, fx.pos)); | jQuery.cssHooks[hook].set(fx.elem, fx.start.transition(fx.end, fx.pos)); | ||
| 第3,753行: | 第3,672行: | ||
}); | }); | ||
jQuery.cssHooks.borderColor = { | jQuery.cssHooks.borderColor = { | ||
expand: function(value) { | expand: function (value) { | ||
var expanded = {}; | var expanded = {}; | ||
each(["Top", "Right", "Bottom", "Left"], function(i, part) { | each(["Top", "Right", "Bottom", "Left"], function (i, part) { | ||
expanded["border" + part + "Color"] = value; | expanded["border" + part + "Color"] = value; | ||
}); | }); | ||
| 第3,782行: | 第3,701行: | ||
}; | }; | ||
})(jQuery); | })(jQuery); | ||
(function() { | (function () { | ||
var classAnimationActions = ["add", "remove", "toggle"], | 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) { | |||
$.each(["borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle"], function(_, prop) { | $.fx.step[prop] = function (fx) { | ||
$.fx.step[prop] = function(fx) { | |||
if (fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr) { | if (fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr) { | ||
jQuery.style(fx.elem, prop, fx.end); | jQuery.style(fx.elem, prop, fx.end); | ||
fx.setAttr = | fx.setAttr = true; | ||
} | } | ||
}; | }; | ||
}); | }); | ||
function getElementStyles() { | function getElementStyles() { | ||
var | var style = this.ownerDocument.defaultView ? | ||
this.ownerDocument.defaultView.getComputedStyle(this, null) : | |||
this.currentStyle, newStyle = {}, key, len; | |||
if (style && style.length && style[0] && style[style[0]]) { | if (style && style.length && style[0] && style[style[0]]) { | ||
len = style.length; | len = style.length; | ||
| 第3,817行: | 第3,733行: | ||
} | } | ||
} | } | ||
} else { | } | ||
else { | |||
for (key in style) { | for (key in style) { | ||
if (typeof style[key] === "string") { | if (typeof style[key] === "string") { | ||
| 第3,826行: | 第3,743行: | ||
return newStyle; | return newStyle; | ||
} | } | ||
function styleDifference(oldStyle, newStyle) { | function styleDifference(oldStyle, newStyle) { | ||
var diff = {}, | var diff = {}, name, value; | ||
for (name in newStyle) { | for (name in newStyle) { | ||
value = newStyle[name]; | value = newStyle[name]; | ||
| 第3,842行: | 第3,757行: | ||
return diff; | return diff; | ||
} | } | ||
$.effects.animateClass = function(value, duration, easing, callback) { | $.effects.animateClass = function (value, duration, easing, callback) { | ||
var o = $.speed(duration, easing, callback); | var o = $.speed(duration, easing, callback); | ||
return this.queue(function() { | return this.queue(function () { | ||
var animated = $(this), | var animated = $(this), baseClass = animated.attr("class") || "", applyClassChange, allAnimations = o.children ? animated.find("*").addBack() : animated; | ||
allAnimations = allAnimations.map(function () { | |||
allAnimations = allAnimations.map(function() { | |||
var el = $(this); | var el = $(this); | ||
return { | return { | ||
| 第3,855行: | 第3,768行: | ||
}; | }; | ||
}); | }); | ||
applyClassChange = function() { | applyClassChange = function () { | ||
$.each(classAnimationActions, function(i, action) { | $.each(classAnimationActions, function (i, action) { | ||
if (value[action]) { | if (value[action]) { | ||
animated[action + "Class"](value[action]); | animated[action + "Class"](value[action]); | ||
| 第3,863行: | 第3,776行: | ||
}; | }; | ||
applyClassChange(); | applyClassChange(); | ||
allAnimations = allAnimations.map(function() { | allAnimations = allAnimations.map(function () { | ||
this.end = getElementStyles.call(this.el[0]); | this.end = getElementStyles.call(this.el[0]); | ||
this.diff = styleDifference(this.start, this.end); | this.diff = styleDifference(this.start, this.end); | ||
| 第3,869行: | 第3,782行: | ||
}); | }); | ||
animated.attr("class", baseClass); | animated.attr("class", baseClass); | ||
allAnimations = allAnimations.map(function() { | allAnimations = allAnimations.map(function () { | ||
var styleInfo = this, | var styleInfo = this, dfd = $.Deferred(), opts = jQuery.extend({}, o, { | ||
queue: false, | |||
complete: function () { | |||
dfd.resolve(styleInfo); | |||
} | |||
}); | |||
this.el.animate(this.diff, opts); | this.el.animate(this.diff, opts); | ||
return dfd.promise(); | return dfd.promise(); | ||
}); | }); | ||
$.when.apply($, allAnimations.get()).done(function() { | $.when.apply($, allAnimations.get()).done(function () { | ||
applyClassChange(); | applyClassChange(); | ||
$.each(arguments, function() { | $.each(arguments, function () { | ||
var el = this.el; | var el = this.el; | ||
$.each(this.diff, function(key) { | $.each(this.diff, function (key) { | ||
el.css(key, ''); | el.css(key, ''); | ||
}); | }); | ||
| 第3,895行: | 第3,806行: | ||
$.fn.extend({ | $.fn.extend({ | ||
_addClass: $.fn.addClass, | _addClass: $.fn.addClass, | ||
addClass: function(classNames, speed, easing, callback) { | addClass: function (classNames, speed, easing, callback) { | ||
return speed ? $.effects.animateClass.call(this, { | return speed ? | ||
$.effects.animateClass.call(this, { add: classNames }, speed, easing, callback) : | |||
this._addClass(classNames); | |||
}, | }, | ||
_removeClass: $.fn.removeClass, | _removeClass: $.fn.removeClass, | ||
removeClass: function(classNames, speed, easing, callback) { | removeClass: function (classNames, speed, easing, callback) { | ||
return speed ? $.effects.animateClass.call(this, { | return speed ? | ||
$.effects.animateClass.call(this, { remove: classNames }, speed, easing, callback) : | |||
this._removeClass(classNames); | |||
}, | }, | ||
_toggleClass: $.fn.toggleClass, | _toggleClass: $.fn.toggleClass, | ||
toggleClass: function(classNames, force, speed, easing, callback) { | toggleClass: function (classNames, force, speed, easing, callback) { | ||
if (typeof force === "boolean" || force === undefined) { | if (typeof force === "boolean" || force === undefined) { | ||
if (!speed) { | if (!speed) { | ||
return this._toggleClass(classNames, force); | return this._toggleClass(classNames, force); | ||
} | } | ||
} else { | else { | ||
return $.effects.animateClass.call(this, { | return $.effects.animateClass.call(this, (force ? { add: classNames } : { remove: classNames }), speed, easing, callback); | ||
} | |||
} | |||
else { | |||
return $.effects.animateClass.call(this, { toggle: classNames }, force, speed, easing); | |||
} | } | ||
}, | }, | ||
switchClass: function(remove, add, speed, easing, callback) { | switchClass: function (remove, add, speed, easing, callback) { | ||
return $.effects.animateClass.call(this, { | return $.effects.animateClass.call(this, { | ||
add: add, | add: add, | ||
| 第3,932行: | 第3,839行: | ||
}); | }); | ||
})(); | })(); | ||
(function() { | (function () { | ||
$.extend($.effects, { | $.extend($.effects, { | ||
version: "1.9.2", | version: "1.9.2", | ||
save: function(element, set) { | save: function (element, set) { | ||
for (var i = 0; i < set.length; i++) { | for (var i = 0; i < set.length; i++) { | ||
if (set[i] !== null) { | if (set[i] !== null) { | ||
| 第3,942行: | 第3,849行: | ||
} | } | ||
}, | }, | ||
restore: function(element, set) { | restore: function (element, set) { | ||
var val, i; | var val, i; | ||
for (i = 0; i < set.length; i++) { | for (i = 0; i < set.length; i++) { | ||
| 第3,954行: | 第3,861行: | ||
} | } | ||
}, | }, | ||
setMode: function(el, mode) { | setMode: function (el, mode) { | ||
if (mode === "toggle") { | if (mode === "toggle") { | ||
mode = el.is(":hidden") ? "show" : "hide"; | mode = el.is(":hidden") ? "show" : "hide"; | ||
| 第3,960行: | 第3,867行: | ||
return mode; | return mode; | ||
}, | }, | ||
getBaseline: function(origin, original) { | getBaseline: function (origin, original) { | ||
var y, x; | var y, x; | ||
switch (origin[0]) { | switch (origin[0]) { | ||
| 第3,972行: | 第3,879行: | ||
y = 1; | y = 1; | ||
break; | break; | ||
default: | default: y = origin[0] / original.height; | ||
} | } | ||
switch (origin[1]) { | switch (origin[1]) { | ||
| 第3,985行: | 第3,891行: | ||
x = 1; | x = 1; | ||
break; | break; | ||
default: | default: x = origin[1] / original.width; | ||
} | } | ||
return { | return { | ||
| 第3,993行: | 第3,898行: | ||
}; | }; | ||
}, | }, | ||
createWrapper: function(element) { | createWrapper: function (element) { | ||
if (element.parent().is(".ui-effects-wrapper")) { | if (element.parent().is(".ui-effects-wrapper")) { | ||
return element.parent(); | return element.parent(); | ||
} | } | ||
var props = { | var props = { | ||
width: element.outerWidth(true), | |||
height: element.outerHeight(true), | |||
"float": element.css("float") | |||
}, wrapper = $("<div></div>") | |||
.addClass("ui-effects-wrapper") | |||
.css({ | |||
fontSize: "100%", | |||
background: "transparent", | |||
border: "none", | |||
margin: 0, | |||
padding: 0 | |||
}), size = { | |||
width: element.width(), | |||
height: element.height() | |||
}, active = document.activeElement; | |||
try { | try { | ||
active.id; | active.id; | ||
} catch (e) { | } | ||
catch (e) { | |||
active = document.body; | active = document.body; | ||
} | } | ||
element. | element.wrap(wrapper); | ||
if (element[0] === active || $.contains(element[0], active)) { | if (element[0] === active || $.contains(element[0], active)) { | ||
$(active).focus(); | $(active).focus(); | ||
| 第4,026行: | 第3,930行: | ||
wrapper = element.parent(); | wrapper = element.parent(); | ||
if (element.css("position") === "static") { | if (element.css("position") === "static") { | ||
wrapper.css({ | wrapper.css({ position: "relative" }); | ||
element.css({ position: "relative" }); | |||
} | |||
element.css({ | else { | ||
} else { | |||
$.extend(props, { | $.extend(props, { | ||
position: element.css("position"), | position: element.css("position"), | ||
zIndex: element.css("z-index") | zIndex: element.css("z-index") | ||
}); | }); | ||
$.each(["top", "left", "bottom", "right"], function(i, pos) { | $.each(["top", "left", "bottom", "right"], function (i, pos) { | ||
props[pos] = element.css(pos); | props[pos] = element.css(pos); | ||
if (isNaN(parseInt(props[pos], 10))) { | if (isNaN(parseInt(props[pos], 10))) { | ||
| 第4,054行: | 第3,955行: | ||
return wrapper.css(props).show(); | return wrapper.css(props).show(); | ||
}, | }, | ||
removeWrapper: function(element) { | removeWrapper: function (element) { | ||
var active = document.activeElement; | var active = document.activeElement; | ||
if (element.parent().is(".ui-effects-wrapper")) { | if (element.parent().is(".ui-effects-wrapper")) { | ||
| 第4,064行: | 第3,965行: | ||
return element; | return element; | ||
}, | }, | ||
setTransition: function(element, list, factor, value) { | setTransition: function (element, list, factor, value) { | ||
value = value || {}; | value = value || {}; | ||
$.each(list, function(i, x) { | $.each(list, function (i, x) { | ||
var unit = element.cssUnit(x); | var unit = element.cssUnit(x); | ||
if (unit[0] > 0) { | if (unit[0] > 0) { | ||
| 第4,075行: | 第3,976行: | ||
} | } | ||
}); | }); | ||
function _normalizeArguments(effect, options, speed, callback) { | function _normalizeArguments(effect, options, speed, callback) { | ||
if ($.isPlainObject(effect)) { | if ($.isPlainObject(effect)) { | ||
| 第4,081行: | 第3,981行: | ||
effect = effect.effect; | effect = effect.effect; | ||
} | } | ||
effect = { | effect = { effect: effect }; | ||
if (options == null) { | if (options == null) { | ||
options = {}; | options = {}; | ||
} | } | ||
if ( | if (typeof options === 'function') { | ||
callback = options; | callback = options; | ||
speed = null; | speed = null; | ||
| 第4,097行: | 第3,995行: | ||
options = {}; | options = {}; | ||
} | } | ||
if ( | if (typeof speed === 'function') { | ||
callback = speed; | callback = speed; | ||
speed = null; | speed = null; | ||
| 第4,105行: | 第4,003行: | ||
} | } | ||
speed = speed || options.duration; | speed = speed || options.duration; | ||
effect.duration = $.fx.off ? 0 : typeof speed === "number" ? speed : speed in $.fx.speeds ? $.fx.speeds[speed] : $.fx.speeds._default; | effect.duration = $.fx.off ? 0 : | ||
typeof speed === "number" ? speed : | |||
speed in $.fx.speeds ? $.fx.speeds[speed] : | |||
$.fx.speeds._default; | |||
effect.complete = callback || options.complete; | effect.complete = callback || options.complete; | ||
return effect; | return effect; | ||
} | } | ||
function standardSpeed(speed) { | function standardSpeed(speed) { | ||
if (!speed || typeof speed === "number" || $.fx.speeds[speed]) { | if (!speed || typeof speed === "number" || $.fx.speeds[speed]) { | ||
| 第4,123行: | 第4,023行: | ||
} | } | ||
$.fn.extend({ | $.fn.extend({ | ||
effect: function() { | effect: function () { | ||
var args = _normalizeArguments.apply(this, arguments), | var args = _normalizeArguments.apply(this, arguments), mode = args.mode, queue = args.queue, effectMethod = $.effects.effect[args.effect], oldEffectMethod = !effectMethod && backCompat && $.effects[args.effect]; | ||
if ($.fx.off || !(effectMethod || oldEffectMethod)) { | if ($.fx.off || !(effectMethod || oldEffectMethod)) { | ||
if (mode) { | if (mode) { | ||
return this[mode](args.duration, args.complete); | return this[mode](args.duration, args.complete); | ||
} else { | } | ||
return this.each(function() { | else { | ||
return this.each(function () { | |||
if (args.complete) { | if (args.complete) { | ||
args.complete.call(this); | args.complete.call(this); | ||
| 第4,141行: | 第4,037行: | ||
} | } | ||
} | } | ||
function run(next) { | function run(next) { | ||
var elem = $(this), | var elem = $(this), complete = args.complete, mode = args.mode; | ||
function done() { | function done() { | ||
if ( | if (typeof complete === 'function') { | ||
complete.call(elem[0]); | complete.call(elem[0]); | ||
} | } | ||
if ( | if (typeof next === 'function') { | ||
next(); | next(); | ||
} | } | ||
| 第4,157行: | 第4,049行: | ||
if (elem.is(":hidden") ? mode === "hide" : mode === "show") { | if (elem.is(":hidden") ? mode === "hide" : mode === "show") { | ||
done(); | done(); | ||
} else { | } | ||
else { | |||
effectMethod.call(elem[0], args, done); | effectMethod.call(elem[0], args, done); | ||
} | } | ||
} | } | ||
if (effectMethod) { | if (effectMethod) { | ||
return queue === | return queue === false ? this.each(run) : this.queue(queue || "fx", run); | ||
} else { | } | ||
else { | |||
return oldEffectMethod.call(this, { | return oldEffectMethod.call(this, { | ||
options: args, | options: args, | ||
| 第4,173行: | 第4,067行: | ||
}, | }, | ||
_show: $.fn.show, | _show: $.fn.show, | ||
show: function(speed) { | show: function (speed) { | ||
if (standardSpeed(speed)) { | if (standardSpeed(speed)) { | ||
return this._show.apply(this, arguments); | return this._show.apply(this, arguments); | ||
} else { | } | ||
else { | |||
var args = _normalizeArguments.apply(this, arguments); | var args = _normalizeArguments.apply(this, arguments); | ||
args.mode = "show"; | args.mode = "show"; | ||
| 第4,183行: | 第4,078行: | ||
}, | }, | ||
_hide: $.fn.hide, | _hide: $.fn.hide, | ||
hide: function(speed) { | hide: function (speed) { | ||
if (standardSpeed(speed)) { | if (standardSpeed(speed)) { | ||
return this._hide.apply(this, arguments); | return this._hide.apply(this, arguments); | ||
} else { | } | ||
else { | |||
var args = _normalizeArguments.apply(this, arguments); | var args = _normalizeArguments.apply(this, arguments); | ||
args.mode = "hide"; | args.mode = "hide"; | ||
| 第4,193行: | 第4,089行: | ||
}, | }, | ||
__toggle: $.fn.toggle, | __toggle: $.fn.toggle, | ||
toggle: function(speed) { | toggle: function (speed) { | ||
if (standardSpeed(speed) || typeof speed === "boolean" || | if (standardSpeed(speed) || typeof speed === "boolean" || typeof speed === 'function') { | ||
return this.__toggle.apply(this, arguments); | return this.__toggle.apply(this, arguments); | ||
} else { | } | ||
else { | |||
var args = _normalizeArguments.apply(this, arguments); | var args = _normalizeArguments.apply(this, arguments); | ||
args.mode = "toggle"; | args.mode = "toggle"; | ||
| 第4,202行: | 第4,099行: | ||
} | } | ||
}, | }, | ||
cssUnit: function(key) { | cssUnit: function (key) { | ||
var style = this.css(key), | var style = this.css(key), val = []; | ||
$.each(["em", "px", "%", "pt"], function (i, unit) { | |||
$.each(["em", "px", "%", "pt"], function(i, unit) { | |||
if (style.indexOf(unit) > 0) { | if (style.indexOf(unit) > 0) { | ||
val = [parseFloat(style), unit]; | val = [parseFloat(style), unit]; | ||
| 第4,214行: | 第4,110行: | ||
}); | }); | ||
})(); | })(); | ||
(function() { | (function () { | ||
var baseEasings = {}; | var baseEasings = {}; | ||
$.each(["Quad", "Cubic", "Quart", "Quint", "Expo"], function(i, name) { | $.each(["Quad", "Cubic", "Quart", "Quint", "Expo"], function (i, name) { | ||
baseEasings[name] = function(p) { | baseEasings[name] = function (p) { | ||
return Math.pow(p, i + 2); | return Math.pow(p, i + 2); | ||
}; | }; | ||
}); | }); | ||
$.extend(baseEasings, { | $.extend(baseEasings, { | ||
Sine: function(p) { | Sine: function (p) { | ||
return 1 - Math.cos(p * Math.PI / 2); | return 1 - Math.cos(p * Math.PI / 2); | ||
}, | }, | ||
Circ: function(p) { | Circ: function (p) { | ||
return 1 - Math.sqrt(1 - p * p); | return 1 - Math.sqrt(1 - p * p); | ||
}, | }, | ||
Elastic: function(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); | 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) { | Back: function (p) { | ||
return p * p * (3 * p - 2); | return p * p * (3 * p - 2); | ||
}, | }, | ||
Bounce: function(p) { | Bounce: function (p) { | ||
var pow2, bounce = 4; | var pow2, bounce = 4; | ||
while (p < ((pow2 = Math.pow(2, --bounce)) - 1) / 11) {} | 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); | return 1 / Math.pow(4, 3 - bounce) - 7.5625 * Math.pow((pow2 * 3 - 2) / 22 - p, 2); | ||
} | } | ||
}); | }); | ||
$.each(baseEasings, function(name, easeIn) { | $.each(baseEasings, function (name, easeIn) { | ||
$.easing["easeIn" + name] = easeIn; | $.easing["easeIn" + name] = easeIn; | ||
$.easing["easeOut" + name] = function(p) { | $.easing["easeOut" + name] = function (p) { | ||
return 1 - easeIn(1 - p); | return 1 - easeIn(1 - p); | ||
}; | }; | ||
$.easing["easeInOut" + name] = function(p) { | $.easing["easeInOut" + name] = function (p) { | ||
return p < 0.5 ? easeIn(p * 2) / 2 : 1 - easeIn(p * -2 + 2) / 2; | return p < 0.5 ? | ||
easeIn(p * 2) / 2 : | |||
1 - easeIn(p * -2 + 2) / 2; | |||
}; | }; | ||
}); | }); | ||
})(); | })(); | ||
})(jQuery)); | })(jQuery)); | ||
(function($, undefined) { | (function ($, undefined) { | ||
var uid = 0, | var uid = 0, hideProps = {}, showProps = {}; | ||
hideProps.height = hideProps.paddingTop = hideProps.paddingBottom = | |||
hideProps.borderTopWidth = hideProps.borderBottomWidth = "hide"; | |||
hideProps.height = hideProps.paddingTop = hideProps.paddingBottom = hideProps.borderTopWidth = hideProps.borderBottomWidth = "hide"; | showProps.height = showProps.paddingTop = showProps.paddingBottom = | ||
showProps.height = showProps.paddingTop = showProps.paddingBottom = showProps.borderTopWidth = showProps.borderBottomWidth = "show"; | showProps.borderTopWidth = showProps.borderBottomWidth = "show"; | ||
$.widget("ui.accordion", { | $.widget("ui.accordion", { | ||
version: "1.9.2", | version: "1.9.2", | ||
| 第4,262行: | 第4,161行: | ||
active: 0, | active: 0, | ||
animate: {}, | animate: {}, | ||
collapsible: | collapsible: false, | ||
event: "click", | event: "click", | ||
header: "> li > :first-child,> :not(li):even", | header: "> li > :first-child,> :not(li):even", | ||
| 第4,273行: | 第4,172行: | ||
beforeActivate: null | beforeActivate: null | ||
}, | }, | ||
_create: function() { | _create: function () { | ||
var accordionId = this.accordionId = "ui-accordion-" + (this.element.attr("id") || ++uid), | var accordionId = this.accordionId = "ui-accordion-" + | ||
(this.element.attr("id") || ++uid), options = this.options; | |||
this.prevShow = this.prevHide = $(); | this.prevShow = this.prevHide = $(); | ||
this.element.addClass("ui-accordion ui-widget ui-helper-reset"); | this.element.addClass("ui-accordion ui-widget ui-helper-reset"); | ||
this.headers = this.element.find(options.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all"); | this.headers = this.element.find(options.header) | ||
.addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all"); | |||
this._hoverable(this.headers); | this._hoverable(this.headers); | ||
this._focusable(this.headers); | this._focusable(this.headers); | ||
this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").hide(); | this.headers.next() | ||
.addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom") | |||
.hide(); | |||
if (!options.collapsible && (options.active === false || options.active == null)) { | if (!options.collapsible && (options.active === false || options.active == null)) { | ||
options.active = 0; | options.active = 0; | ||
| 第4,288行: | 第4,190行: | ||
options.active += this.headers.length; | options.active += this.headers.length; | ||
} | } | ||
this.active = this._findActive(options.active).addClass("ui-accordion-header-active ui-state-active").toggleClass("ui-corner-all ui-corner-top"); | this.active = this._findActive(options.active) | ||
this.active.next().addClass("ui-accordion-content-active").show(); | .addClass("ui-accordion-header-active ui-state-active") | ||
.toggleClass("ui-corner-all ui-corner-top"); | |||
this.active.next() | |||
.addClass("ui-accordion-content-active") | |||
.show(); | |||
this._createIcons(); | this._createIcons(); | ||
this.refresh(); | this.refresh(); | ||
this.element.attr("role", "tablist"); | this.element.attr("role", "tablist"); | ||
this.headers.attr("role", "tab").each(function(i) { | this.headers | ||
var header = $(this), | .attr("role", "tab") | ||
.each(function (i) { | |||
var header = $(this), headerId = header.attr("id"), panel = header.next(), panelId = panel.attr("id"); | |||
if (!headerId) { | if (!headerId) { | ||
headerId = accordionId + "-header-" + i; | headerId = accordionId + "-header-" + i; | ||
| 第4,308行: | 第4,213行: | ||
header.attr("aria-controls", panelId); | header.attr("aria-controls", panelId); | ||
panel.attr("aria-labelledby", headerId); | panel.attr("aria-labelledby", headerId); | ||
}).next().attr("role", "tabpanel"); | }) | ||
this.headers.not(this.active).attr({ | .next() | ||
.attr("role", "tabpanel"); | |||
this.headers | |||
.not(this.active) | |||
.attr({ | |||
"aria-selected": "false", | "aria-selected": "false", | ||
tabIndex: -1 | tabIndex: -1 | ||
}).next().attr({ | }) | ||
.next() | |||
.attr({ | |||
"aria-expanded": "false", | "aria-expanded": "false", | ||
"aria-hidden": "true" | "aria-hidden": "true" | ||
}).hide(); | }) | ||
.hide(); | |||
if (!this.active.length) { | if (!this.active.length) { | ||
this.headers.eq(0).attr("tabIndex", 0); | this.headers.eq(0).attr("tabIndex", 0); | ||
} else { | } | ||
else { | |||
this.active.attr({ | this.active.attr({ | ||
"aria-selected": "true", | "aria-selected": "true", | ||
tabIndex: 0 | tabIndex: 0 | ||
}).next().attr({ | }) | ||
.next() | |||
.attr({ | |||
"aria-expanded": "true", | "aria-expanded": "true", | ||
"aria-hidden": "false" | "aria-hidden": "false" | ||
}); | }); | ||
} | } | ||
this._on(this.headers, { | this._on(this.headers, { keydown: "_keydown" }); | ||
this._on(this.headers.next(), { keydown: "_panelKeyDown" }); | |||
this._setupEvents(options.event); | |||
this._on(this.headers.next(), { | |||
this._setupEvents(options.event); | |||
}, | }, | ||
_getCreateEventData: function() { | _getCreateEventData: function () { | ||
return { | return { | ||
header: this.active, | header: this.active, | ||
| 第4,341行: | 第4,252行: | ||
}; | }; | ||
}, | }, | ||
_createIcons: function() { | _createIcons: function () { | ||
var icons = this.options.icons; | var icons = this.options.icons; | ||
if (icons) { | if (icons) { | ||
$("<span>"). | $("<span>") | ||
.addClass("ui-accordion-header-icon ui-icon " + icons.header) | |||
this.active.children(".ui-accordion-header-icon").removeClass(icons.header).addClass(icons.activeHeader); | .prependTo(this.headers); | ||
this.active.children(".ui-accordion-header-icon") | |||
.removeClass(icons.header) | |||
.addClass(icons.activeHeader); | |||
this.headers.addClass("ui-accordion-icons"); | this.headers.addClass("ui-accordion-icons"); | ||
} | } | ||
}, | }, | ||
_destroyIcons: function() { | _destroyIcons: function () { | ||
this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove(); | this.headers | ||
.removeClass("ui-accordion-icons") | |||
.children(".ui-accordion-header-icon") | |||
.remove(); | |||
}, | }, | ||
_destroy: function() { | _destroy: function () { | ||
var contents; | var contents; | ||
this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"); | this.element | ||
this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").each(function() { | .removeClass("ui-accordion ui-widget ui-helper-reset") | ||
.removeAttr("role"); | |||
this.headers | |||
.removeClass("ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top") | |||
.removeAttr("role") | |||
.removeAttr("aria-selected") | |||
.removeAttr("aria-controls") | |||
.removeAttr("tabIndex") | |||
.each(function () { | |||
if (/^ui-accordion/.test(this.id)) { | if (/^ui-accordion/.test(this.id)) { | ||
this.removeAttribute("id"); | this.removeAttribute("id"); | ||
| 第4,362行: | 第4,287行: | ||
}); | }); | ||
this._destroyIcons(); | this._destroyIcons(); | ||
contents = this.headers.next().css("display", "").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-labelledby"). | contents = this.headers.next() | ||
.css("display", "") | |||
.removeAttr("role") | |||
.removeAttr("aria-expanded") | |||
.removeAttr("aria-hidden") | |||
.removeAttr("aria-labelledby") | |||
.removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled") | |||
.each(function () { | |||
if (/^ui-accordion/.test(this.id)) { | if (/^ui-accordion/.test(this.id)) { | ||
this.removeAttribute("id"); | this.removeAttribute("id"); | ||
| 第4,372行: | 第4,303行: | ||
} | } | ||
}, | }, | ||
_setOption: function(key, value) { | _setOption: function (key, value) { | ||
if (key === "active") { | if (key === "active") { | ||
this._activate(value); | this._activate(value); | ||
| 第4,394行: | 第4,325行: | ||
} | } | ||
if (key === "disabled") { | if (key === "disabled") { | ||
this.headers.add(this.headers.next()).toggleClass("ui-state-disabled", !!value); | this.headers.add(this.headers.next()) | ||
.toggleClass("ui-state-disabled", !!value); | |||
} | } | ||
}, | }, | ||
_keydown: function(event) { | _keydown: function (event) { | ||
if (event.altKey || event.ctrlKey) { | if (event.altKey || event.ctrlKey) { | ||
return; | return; | ||
} | } | ||
var keyCode = $.ui.keyCode, | var keyCode = $.ui.keyCode, length = this.headers.length, currentIndex = this.headers.index(event.target), toFocus = false; | ||
switch (event.keyCode) { | switch (event.keyCode) { | ||
case keyCode.RIGHT: | case keyCode.RIGHT: | ||
case keyCode.DOWN: | case keyCode.DOWN: | ||
toFocus = this | toFocus = this.headers[(currentIndex + 1) % length]; | ||
break; | break; | ||
case keyCode.LEFT: | case keyCode.LEFT: | ||
| 第4,433行: | 第4,361行: | ||
} | } | ||
}, | }, | ||
_panelKeyDown: function(event) { | _panelKeyDown: function (event) { | ||
if (event.keyCode === $.ui.keyCode.UP && event.ctrlKey) { | if (event.keyCode === $.ui.keyCode.UP && event.ctrlKey) { | ||
$(event.currentTarget).prev().focus(); | $(event.currentTarget).prev().focus(); | ||
} | } | ||
}, | }, | ||
refresh: function() { | refresh: function () { | ||
var maxHeight, overflow, heightStyle = this.options.heightStyle, | var maxHeight, overflow, heightStyle = this.options.heightStyle, parent = this.element.parent(); | ||
if (heightStyle === "fill") { | if (heightStyle === "fill") { | ||
if (!$.support.minHeight) { | if (!$.support.minHeight) { | ||
| 第4,447行: | 第4,374行: | ||
} | } | ||
maxHeight = parent.height(); | maxHeight = parent.height(); | ||
this.element.siblings(":visible").each(function() { | this.element.siblings(":visible").each(function () { | ||
var elem = $(this), | var elem = $(this), position = elem.css("position"); | ||
if (position === "absolute" || position === "fixed") { | if (position === "absolute" || position === "fixed") { | ||
return; | return; | ||
| 第4,458行: | 第4,384行: | ||
parent.css("overflow", overflow); | parent.css("overflow", overflow); | ||
} | } | ||
this.headers.each(function() { | this.headers.each(function () { | ||
maxHeight -= $(this).outerHeight(true); | maxHeight -= $(this).outerHeight(true); | ||
}); | }); | ||
this.headers.next().each(function() { | this.headers.next() | ||
$(this).height(Math.max(0, maxHeight - $(this).innerHeight() + $(this).height())); | .each(function () { | ||
}).css("overflow", "auto"); | $(this).height(Math.max(0, maxHeight - | ||
} else if (heightStyle === "auto") { | $(this).innerHeight() + $(this).height())); | ||
}) | |||
.css("overflow", "auto"); | |||
} | |||
else if (heightStyle === "auto") { | |||
maxHeight = 0; | maxHeight = 0; | ||
this.headers.next().each(function() { | this.headers.next() | ||
.each(function () { | |||
maxHeight = Math.max(maxHeight, $(this).css("height", "").height()); | maxHeight = Math.max(maxHeight, $(this).css("height", "").height()); | ||
}).height(maxHeight); | }) | ||
.height(maxHeight); | |||
} | } | ||
}, | }, | ||
_activate: function(index) { | _activate: function (index) { | ||
var active = this._findActive(index)[0]; | var active = this._findActive(index)[0]; | ||
if (active === this.active[0]) { | if (active === this.active[0]) { | ||
| 第4,483行: | 第4,415行: | ||
}); | }); | ||
}, | }, | ||
_findActive: function(selector) { | _findActive: function (selector) { | ||
return typeof selector === "number" ? this.headers.eq(selector) : $(); | return typeof selector === "number" ? this.headers.eq(selector) : $(); | ||
}, | }, | ||
_setupEvents: function(event) { | _setupEvents: function (event) { | ||
var events = {}; | var events = {}; | ||
if (!event) { | if (!event) { | ||
return; | return; | ||
} | } | ||
$.each(event.split(" "), function(index, eventName) { | $.each(event.split(" "), function (index, eventName) { | ||
events[eventName] = "_eventHandler"; | events[eventName] = "_eventHandler"; | ||
}); | }); | ||
this._on(this.headers, events); | this._on(this.headers, events); | ||
}, | }, | ||
_eventHandler: function(event) { | _eventHandler: function (event) { | ||
var options = this.options, | var 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(); | event.preventDefault(); | ||
if ((clickedIsActive && !options.collapsible) || (this._trigger("beforeActivate", event, eventData) === false)) { | if ((clickedIsActive && !options.collapsible) || | ||
(this._trigger("beforeActivate", event, eventData) === false)) { | |||
return; | return; | ||
} | } | ||
| 第4,519行: | 第4,445行: | ||
active.removeClass("ui-accordion-header-active ui-state-active"); | active.removeClass("ui-accordion-header-active ui-state-active"); | ||
if (options.icons) { | if (options.icons) { | ||
active.children(".ui-accordion-header-icon").removeClass(options.icons.activeHeader).addClass(options.icons.header); | active.children(".ui-accordion-header-icon") | ||
.removeClass(options.icons.activeHeader) | |||
.addClass(options.icons.header); | |||
} | } | ||
if (!clickedIsActive) { | if (!clickedIsActive) { | ||
clicked.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"); | clicked | ||
.removeClass("ui-corner-all") | |||
.addClass("ui-accordion-header-active ui-state-active ui-corner-top"); | |||
if (options.icons) { | if (options.icons) { | ||
clicked.children(".ui-accordion-header-icon").removeClass(options.icons.header).addClass(options.icons.activeHeader); | clicked.children(".ui-accordion-header-icon") | ||
.removeClass(options.icons.header) | |||
.addClass(options.icons.activeHeader); | |||
} | } | ||
clicked.next().addClass( | clicked | ||
.next() | |||
.addClass("ui-accordion-content-active"); | |||
} | } | ||
}, | }, | ||
_toggle: function(data) { | _toggle: function (data) { | ||
var toShow = data.newPanel, | var toShow = data.newPanel, toHide = this.prevShow.length ? this.prevShow : data.oldPanel; | ||
this.prevShow.add(this.prevHide).stop(true, true); | this.prevShow.add(this.prevHide).stop(true, true); | ||
this.prevShow = toShow; | this.prevShow = toShow; | ||
| 第4,538行: | 第4,470行: | ||
if (this.options.animate) { | if (this.options.animate) { | ||
this._animate(toShow, toHide, data); | this._animate(toShow, toHide, data); | ||
} else { | } | ||
else { | |||
toHide.hide(); | toHide.hide(); | ||
toShow.show(); | toShow.show(); | ||
| 第4,550行: | 第4,483行: | ||
if (toShow.length && toHide.length) { | if (toShow.length && toHide.length) { | ||
toHide.prev().attr("tabIndex", -1); | toHide.prev().attr("tabIndex", -1); | ||
} else if (toShow.length) { | } | ||
this.headers.filter(function() { | else if (toShow.length) { | ||
this.headers.filter(function () { | |||
return $(this).attr("tabIndex") === 0; | return $(this).attr("tabIndex") === 0; | ||
}).attr("tabIndex", -1); | }) | ||
.attr("tabIndex", -1); | |||
} | } | ||
toShow.attr({ | toShow | ||
.attr({ | |||
"aria-expanded": "true", | "aria-expanded": "true", | ||
"aria-hidden": "false" | "aria-hidden": "false" | ||
}).prev().attr({ | }) | ||
.prev() | |||
.attr({ | |||
"aria-selected": "true", | "aria-selected": "true", | ||
tabIndex: 0 | tabIndex: 0 | ||
}); | }); | ||
}, | }, | ||
_animate: function(toShow, toHide, data) { | _animate: function (toShow, toHide, data) { | ||
var total, easing, duration, that = this, | var total, easing, duration, that = this, adjust = 0, 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") { | if (typeof options === "number") { | ||
duration = options; | duration = options; | ||
| 第4,591行: | 第4,524行: | ||
duration: duration, | duration: duration, | ||
easing: easing, | easing: easing, | ||
step: function(now, fx) { | step: function (now, fx) { | ||
fx.now = Math.round(now); | fx.now = Math.round(now); | ||
} | } | ||
}); | }); | ||
toShow.hide().animate(showProps, { | toShow | ||
.hide() | |||
.animate(showProps, { | |||
duration: duration, | duration: duration, | ||
easing: easing, | easing: easing, | ||
complete: complete, | complete: complete, | ||
step: function(now, fx) { | step: function (now, fx) { | ||
fx.now = Math.round(now); | fx.now = Math.round(now); | ||
if (fx.prop !== "height") { | if (fx.prop !== "height") { | ||
adjust += fx.now; | adjust += fx.now; | ||
} else if (that.options.heightStyle !== "content") { | } | ||
else if (that.options.heightStyle !== "content") { | |||
fx.now = Math.round(total - toHide.outerHeight() - adjust); | fx.now = Math.round(total - toHide.outerHeight() - adjust); | ||
adjust = 0; | adjust = 0; | ||
| 第4,610行: | 第4,546行: | ||
}); | }); | ||
}, | }, | ||
_toggleComplete: function(data) { | _toggleComplete: function (data) { | ||
var toHide = data.oldPanel; | var toHide = data.oldPanel; | ||
toHide.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"); | toHide | ||
.removeClass("ui-accordion-content-active") | |||
.prev() | |||
.removeClass("ui-corner-top") | |||
.addClass("ui-corner-all"); | |||
if (toHide.length) { | if (toHide.length) { | ||
toHide.parent()[0].className = toHide.parent()[0].className; | toHide.parent()[0].className = toHide.parent()[0].className; | ||
| 第4,620行: | 第4,560行: | ||
}); | }); | ||
if ($.uiBackCompat !== false) { | if ($.uiBackCompat !== false) { | ||
(function($, prototype) { | (function ($, prototype) { | ||
$.extend(prototype.options, { | $.extend(prototype.options, { | ||
navigation: | navigation: false, | ||
navigationFilter: function() { | navigationFilter: function () { | ||
return this.href.toLowerCase() === location.href.toLowerCase(); | return this.href.toLowerCase() === location.href.toLowerCase(); | ||
} | } | ||
}); | }); | ||
var _create = prototype._create; | var _create = prototype._create; | ||
prototype._create = function() { | prototype._create = function () { | ||
if (this.options.navigation) { | if (this.options.navigation) { | ||
var that = this, | var that = this, headers = this.element.find(this.options.header), content = headers.next(), current = headers.add(content) | ||
.find("a") | |||
.filter(this.options.navigationFilter)[0]; | |||
if (current) { | if (current) { | ||
headers.add(content).each(function(index) { | headers.add(content).each(function (index) { | ||
if ($.contains(this, current)) { | if ($.contains(this, current)) { | ||
that.options.active = Math.floor(index / 2); | that.options.active = Math.floor(index / 2); | ||
| 第4,646行: | 第4,585行: | ||
}; | }; | ||
}(jQuery, jQuery.ui.accordion.prototype)); | }(jQuery, jQuery.ui.accordion.prototype)); | ||
(function($, prototype) { | (function ($, prototype) { | ||
$.extend(prototype.options, { | $.extend(prototype.options, { | ||
heightStyle: null, | heightStyle: null, | ||
autoHeight: | autoHeight: true, | ||
clearStyle: | clearStyle: false, | ||
fillSpace: | fillSpace: false | ||
}); | }); | ||
var _create = prototype._create, | var _create = prototype._create, _setOption = prototype._setOption; | ||
$.extend(prototype, { | $.extend(prototype, { | ||
_create: function() { | _create: function () { | ||
this.options.heightStyle = this.options.heightStyle || | this.options.heightStyle = this.options.heightStyle || | ||
._mergeHeightStyle(); | this._mergeHeightStyle(); | ||
_create.call(this); | _create.call(this); | ||
}, | }, | ||
_setOption: function(key) { | _setOption: function (key) { | ||
if (key === "autoHeight" || key === "clearStyle" || key === "fillSpace") { | if (key === "autoHeight" || key === "clearStyle" || key === "fillSpace") { | ||
this.options.heightStyle = this._mergeHeightStyle(); | this.options.heightStyle = this._mergeHeightStyle(); | ||
| 第4,667行: | 第4,605行: | ||
_setOption.apply(this, arguments); | _setOption.apply(this, arguments); | ||
}, | }, | ||
_mergeHeightStyle: function() { | _mergeHeightStyle: function () { | ||
var options = this.options; | var options = this.options; | ||
if (options.fillSpace) { | if (options.fillSpace) { | ||
| 第4,681行: | 第4,619行: | ||
}); | }); | ||
}(jQuery, jQuery.ui.accordion.prototype)); | }(jQuery, jQuery.ui.accordion.prototype)); | ||
(function($, prototype) { | (function ($, prototype) { | ||
$.extend(prototype.options.icons, { | $.extend(prototype.options.icons, { | ||
activeHeader: null, | activeHeader: null, | ||
| 第4,687行: | 第4,625行: | ||
}); | }); | ||
var _createIcons = prototype._createIcons; | var _createIcons = prototype._createIcons; | ||
prototype._createIcons = function() { | prototype._createIcons = function () { | ||
if (this.options.icons) { | if (this.options.icons) { | ||
this.options.icons.activeHeader = this.options.icons.activeHeader || this.options.icons.headerSelected; | this.options.icons.activeHeader = this.options.icons.activeHeader || | ||
this.options.icons.headerSelected; | |||
} | } | ||
_createIcons.call(this); | _createIcons.call(this); | ||
}; | }; | ||
}(jQuery, jQuery.ui.accordion.prototype)); | }(jQuery, jQuery.ui.accordion.prototype)); | ||
(function($, prototype) { | (function ($, prototype) { | ||
prototype.activate = prototype._activate; | prototype.activate = prototype._activate; | ||
var _findActive = prototype._findActive; | var _findActive = prototype._findActive; | ||
prototype._findActive = function(index) { | prototype._findActive = function (index) { | ||
if (index === -1) { | if (index === -1) { | ||
index = | index = false; | ||
} | } | ||
if (index && typeof index !== | if (index && typeof index !== "number") { | ||
index = this.headers.index(this.headers.filter(index)); | index = this.headers.index(this.headers.filter(index)); | ||
if (index === -1) { | if (index === -1) { | ||
index = | index = false; | ||
} | } | ||
} | } | ||
| 第4,712行: | 第4,650行: | ||
}(jQuery, jQuery.ui.accordion.prototype)); | }(jQuery, jQuery.ui.accordion.prototype)); | ||
jQuery.ui.accordion.prototype.resize = jQuery.ui.accordion.prototype.refresh; | jQuery.ui.accordion.prototype.resize = jQuery.ui.accordion.prototype.refresh; | ||
(function($, prototype) { | (function ($, prototype) { | ||
$.extend(prototype.options, { | $.extend(prototype.options, { | ||
change: null, | change: null, | ||
| 第4,718行: | 第4,656行: | ||
}); | }); | ||
var _trigger = prototype._trigger; | var _trigger = prototype._trigger; | ||
prototype._trigger = function(type, event, data) { | prototype._trigger = function (type, event, data) { | ||
var ret = _trigger.apply(this, arguments); | var ret = _trigger.apply(this, arguments); | ||
if (!ret) { | if (!ret) { | ||
| 第4,730行: | 第4,668行: | ||
newContent: data.newPanel | newContent: data.newPanel | ||
}); | }); | ||
} else if (type === "activate") { | } | ||
else if (type === "activate") { | |||
ret = _trigger.call(this, "change", event, { | ret = _trigger.call(this, "change", event, { | ||
oldHeader: data.oldHeader, | oldHeader: data.oldHeader, | ||
| 第4,741行: | 第4,680行: | ||
}; | }; | ||
}(jQuery, jQuery.ui.accordion.prototype)); | }(jQuery, jQuery.ui.accordion.prototype)); | ||
(function($, prototype) { | (function ($, prototype) { | ||
$.extend(prototype.options, { | $.extend(prototype.options, { | ||
animate: null, | animate: null, | ||
| 第4,747行: | 第4,686行: | ||
}); | }); | ||
var _create = prototype._create; | var _create = prototype._create; | ||
prototype._create = | prototype._create = function () { | ||
var options = this.options; | |||
if (options.animate === null) { | |||
if (!options.animated) { | |||
options.animate = false; | |||
} | |||
else if (options.animated === "slide") { | |||
options.animate = 300; | |||
} | |||
else if (options.animated === "bounceslide") { | |||
options.animate = { | |||
duration: 200, | |||
down: { | |||
easing: "easeOutBounce", | |||
duration: 1000 | |||
} | |||
}; | |||
} | |||
else { | |||
options.animate = options.animated; | |||
} | } | ||
} | |||
_create.call(this); | |||
}; | |||
}(jQuery, jQuery.ui.accordion.prototype)); | }(jQuery, jQuery.ui.accordion.prototype)); | ||
} | } | ||
})(jQuery); | })(jQuery); | ||
(function($, undefined) { | (function ($, undefined) { | ||
var requestIndex = 0; | var requestIndex = 0; | ||
$.widget("ui.autocomplete", { | $.widget("ui.autocomplete", { | ||
| 第4,779行: | 第4,720行: | ||
options: { | options: { | ||
appendTo: "body", | appendTo: "body", | ||
autoFocus: | autoFocus: false, | ||
delay: 300, | delay: 300, | ||
minLength: 1, | minLength: 1, | ||
| 第4,797行: | 第4,738行: | ||
}, | }, | ||
pending: 0, | pending: 0, | ||
_create: function() { | _create: function () { | ||
var suppressKeyPress, suppressKeyPressRepeat, suppressInput; | var suppressKeyPress, suppressKeyPressRepeat, suppressInput; | ||
this.isMultiLine = this._isMultiLine(); | this.isMultiLine = this._isMultiLine(); | ||
this.valueMethod = this.element[this.element.is("input,textarea") ? "val" : "text"]; | this.valueMethod = this.element[this.element.is("input,textarea") ? "val" : "text"]; | ||
this.isNewMenu = | this.isNewMenu = true; | ||
this.element.addClass("ui-autocomplete-input").attr( | this.element | ||
.addClass("ui-autocomplete-input") | |||
.attr("autocomplete", "off"); | |||
this._on(this.element, { | this._on(this.element, { | ||
keydown: function(event) { | keydown: function (event) { | ||
if (this.element.prop("readOnly")) { | if (this.element.prop("readOnly")) { | ||
suppressKeyPress = | suppressKeyPress = true; | ||
suppressInput = | suppressInput = true; | ||
suppressKeyPressRepeat = | suppressKeyPressRepeat = true; | ||
return; | return; | ||
} | } | ||
suppressKeyPress = | suppressKeyPress = false; | ||
suppressInput = | suppressInput = false; | ||
suppressKeyPressRepeat = | suppressKeyPressRepeat = false; | ||
var keyCode = $.ui.keyCode; | var keyCode = $.ui.keyCode; | ||
switch (event.keyCode) { | switch (event.keyCode) { | ||
case keyCode.PAGE_UP: | case keyCode.PAGE_UP: | ||
suppressKeyPress = | suppressKeyPress = true; | ||
this._move("previousPage", event); | this._move("previousPage", event); | ||
break; | break; | ||
case keyCode.PAGE_DOWN: | case keyCode.PAGE_DOWN: | ||
suppressKeyPress = | suppressKeyPress = true; | ||
this._move("nextPage", event); | this._move("nextPage", event); | ||
break; | break; | ||
case keyCode.UP: | case keyCode.UP: | ||
suppressKeyPress = | suppressKeyPress = true; | ||
this._keyEvent("previous", event); | this._keyEvent("previous", event); | ||
break; | break; | ||
case keyCode.DOWN: | case keyCode.DOWN: | ||
suppressKeyPress = | suppressKeyPress = true; | ||
this._keyEvent("next", event); | this._keyEvent("next", event); | ||
break; | break; | ||
| 第4,836行: | 第4,778行: | ||
case keyCode.NUMPAD_ENTER: | case keyCode.NUMPAD_ENTER: | ||
if (this.menu.active) { | if (this.menu.active) { | ||
suppressKeyPress = | suppressKeyPress = true; | ||
event.preventDefault(); | event.preventDefault(); | ||
this.menu.select(event); | this.menu.select(event); | ||
| 第4,854行: | 第4,796行: | ||
break; | break; | ||
default: | default: | ||
suppressKeyPressRepeat = | suppressKeyPressRepeat = true; | ||
this. | this._searchTimeout(event); | ||
break; | break; | ||
} | } | ||
}, | }, | ||
keypress: function(event) { | keypress: function (event) { | ||
if (suppressKeyPress) { | if (suppressKeyPress) { | ||
suppressKeyPress = | suppressKeyPress = false; | ||
event.preventDefault(); | event.preventDefault(); | ||
return; | return; | ||
| 第4,885行: | 第4,826行: | ||
} | } | ||
}, | }, | ||
input: function(event) { | input: function (event) { | ||
if (suppressInput) { | if (suppressInput) { | ||
suppressInput = | suppressInput = false; | ||
event.preventDefault(); | event.preventDefault(); | ||
return; | return; | ||
| 第4,893行: | 第4,834行: | ||
this._searchTimeout(event); | this._searchTimeout(event); | ||
}, | }, | ||
focus: function() { | focus: function () { | ||
this.selectedItem = null; | this.selectedItem = null; | ||
this.previous = this._value(); | this.previous = this._value(); | ||
}, | }, | ||
blur: function(event) { | blur: function (event) { | ||
if (this.cancelBlur) { | if (this.cancelBlur) { | ||
delete this.cancelBlur; | delete this.cancelBlur; | ||
| 第4,908行: | 第4,849行: | ||
}); | }); | ||
this._initSource(); | this._initSource(); | ||
this.menu = $("<ul>").addClass("ui-autocomplete").appendTo(this.document.find(this.options.appendTo || "body")[0]).menu({ | this.menu = $("<ul>") | ||
.addClass("ui-autocomplete") | |||
.appendTo(this.document.find(this.options.appendTo || "body")[0]) | |||
.menu({ | |||
input: $(), | input: $(), | ||
role: null | role: null | ||
}).zIndex(this.element.zIndex() + 1).hide().data("menu"); | }) | ||
.zIndex(this.element.zIndex() + 1) | |||
.hide() | |||
.data("menu"); | |||
this._on(this.menu.element, { | this._on(this.menu.element, { | ||
mousedown: function(event) { | mousedown: function (event) { | ||
event.preventDefault(); | event.preventDefault(); | ||
this.cancelBlur = | this.cancelBlur = true; | ||
this._delay(function() { | this._delay(function () { | ||
delete this.cancelBlur; | delete this.cancelBlur; | ||
}); | }); | ||
var menuElement = this.menu.element[0]; | var menuElement = this.menu.element[0]; | ||
if (!$(event.target).closest(".ui-menu-item").length) { | if (!$(event.target).closest(".ui-menu-item").length) { | ||
this._delay(function() { | this._delay(function () { | ||
var that = this; | var that = this; | ||
this.document.one("mousedown", function(event) { | this.document.one("mousedown", function (event) { | ||
if (event.target !== that.element[0] && event.target !== menuElement && !$.contains(menuElement, event.target)) { | if (event.target !== that.element[0] && | ||
event.target !== menuElement && | |||
!$.contains(menuElement, event.target)) { | |||
that.close(); | that.close(); | ||
} | } | ||
| 第4,931行: | 第4,880行: | ||
} | } | ||
}, | }, | ||
menufocus: function(event, ui) { | menufocus: function (event, ui) { | ||
if (this.isNewMenu) { | if (this.isNewMenu) { | ||
this.isNewMenu = | this.isNewMenu = false; | ||
if (event.originalEvent && /^mouse/.test(event.originalEvent.type)) { | if (event.originalEvent && /^mouse/.test(event.originalEvent.type)) { | ||
this.menu.blur(); | this.menu.blur(); | ||
this.document.one("mousemove", function() { | this.document.one("mousemove", function () { | ||
$(event.target).trigger(event.originalEvent); | $(event.target).trigger(event.originalEvent); | ||
}); | }); | ||
| 第4,943行: | 第4,892行: | ||
} | } | ||
var item = ui.item.data("ui-autocomplete-item") || ui.item.data("item.autocomplete"); | var item = ui.item.data("ui-autocomplete-item") || ui.item.data("item.autocomplete"); | ||
if (false !== this._trigger("focus", event, { | if (false !== this._trigger("focus", event, { item: item })) { | ||
if (event.originalEvent && /^key/.test(event.originalEvent.type)) { | if (event.originalEvent && /^key/.test(event.originalEvent.type)) { | ||
this._value(item.value); | this._value(item.value); | ||
} | } | ||
} else { | } | ||
else { | |||
this.liveRegion.text(item.value); | this.liveRegion.text(item.value); | ||
} | } | ||
}, | }, | ||
menuselect: function(event, ui) { | menuselect: function (event, ui) { | ||
var item = ui.item.data( | var item = ui.item.data("ui-autocomplete-item") || ui.item.data("item.autocomplete"), previous = this.previous; | ||
if (this.element[0] !== this.document[0].activeElement) { | if (this.element[0] !== this.document[0].activeElement) { | ||
this.element.focus(); | this.element.focus(); | ||
this.previous = previous; | this.previous = previous; | ||
this._delay(function() { | this._delay(function () { | ||
this.previous = previous; | this.previous = previous; | ||
this.selectedItem = item; | this.selectedItem = item; | ||
}); | }); | ||
} | } | ||
if (false !== this._trigger("select", event, { | if (false !== this._trigger("select", event, { item: item })) { | ||
this._value(item.value); | this._value(item.value); | ||
} | } | ||
| 第4,978行: | 第4,922行: | ||
role: "status", | role: "status", | ||
"aria-live": "polite" | "aria-live": "polite" | ||
}).addClass("ui-helper-hidden-accessible").insertAfter(this.element); | }) | ||
.addClass("ui-helper-hidden-accessible") | |||
.insertAfter(this.element); | |||
if ($.fn.bgiframe) { | if ($.fn.bgiframe) { | ||
this.menu.element.bgiframe(); | this.menu.element.bgiframe(); | ||
} | } | ||
this._on(this.window, { | this._on(this.window, { | ||
beforeunload: function() { | beforeunload: function () { | ||
this.element.removeAttr("autocomplete"); | this.element.removeAttr("autocomplete"); | ||
} | } | ||
}); | }); | ||
}, | }, | ||
_destroy: function() { | _destroy: function () { | ||
clearTimeout(this.searching); | clearTimeout(this.searching); | ||
this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"); | this.element | ||
.removeClass("ui-autocomplete-input") | |||
.removeAttr("autocomplete"); | |||
this.menu.element.remove(); | this.menu.element.remove(); | ||
this.liveRegion.remove(); | this.liveRegion.remove(); | ||
}, | }, | ||
_setOption: function(key, value) { | _setOption: function (key, value) { | ||
this._super(key, value); | this._super(key, value); | ||
if (key === "source") { | if (key === "source") { | ||
| 第5,006行: | 第4,954行: | ||
} | } | ||
}, | }, | ||
_isMultiLine: function() { | _isMultiLine: function () { | ||
if (this.element.is("textarea")) { | if (this.element.is("textarea")) { | ||
return true; | return true; | ||
| 第5,015行: | 第4,963行: | ||
return this.element.prop("isContentEditable"); | return this.element.prop("isContentEditable"); | ||
}, | }, | ||
_initSource: function() { | _initSource: function () { | ||
var array, url, that = this; | var array, url, that = this; | ||
if ( | if (Array.isArray(this.options.source)) { | ||
array = this.options.source; | array = this.options.source; | ||
this.source = function(request, response) { | this.source = function (request, response) { | ||
response($.ui.autocomplete.filter(array, request.term)); | response($.ui.autocomplete.filter(array, request.term)); | ||
}; | }; | ||
} else if (typeof this.options.source === "string") { | } | ||
else if (typeof this.options.source === "string") { | |||
url = this.options.source; | url = this.options.source; | ||
this.source = function(request, response) { | this.source = function (request, response) { | ||
if (that.xhr) { | if (that.xhr) { | ||
that.xhr.abort(); | that.xhr.abort(); | ||
| 第5,032行: | 第4,981行: | ||
data: request, | data: request, | ||
dataType: "json", | dataType: "json", | ||
success: function(data) { | success: function (data) { | ||
response(data); | response(data); | ||
}, | }, | ||
error: function() { | error: function () { | ||
response([]); | response([]); | ||
} | } | ||
}); | }); | ||
}; | }; | ||
} else { | } | ||
else { | |||
this.source = this.options.source; | this.source = this.options.source; | ||
} | } | ||
}, | }, | ||
_searchTimeout: function(event) { | _searchTimeout: function (event) { | ||
clearTimeout(this.searching); | clearTimeout(this.searching); | ||
this.searching = this._delay(function() { | this.searching = this._delay(function () { | ||
if (this.term !== this._value()) { | if (this.term !== this._value()) { | ||
this.selectedItem = null; | this.selectedItem = null; | ||
| 第5,053行: | 第5,003行: | ||
}, this.options.delay); | }, this.options.delay); | ||
}, | }, | ||
search: function(value, event) { | search: function (value, event) { | ||
value = value != null ? value : this._value(); | value = value != null ? value : this._value(); | ||
this.term = this._value(); | this.term = this._value(); | ||
| 第5,064行: | 第5,014行: | ||
return this._search(value); | return this._search(value); | ||
}, | }, | ||
_search: function(value) { | _search: function (value) { | ||
this.pending++; | this.pending++; | ||
this.element.addClass("ui-autocomplete-loading"); | this.element.addClass("ui-autocomplete-loading"); | ||
this.cancelSearch = | this.cancelSearch = false; | ||
this.source({ | this.source({ term: value }, this._response()); | ||
}, | }, | ||
_response: function() { | _response: function () { | ||
var that = this, | var that = this, index = ++requestIndex; | ||
return function (content) { | |||
return function(content) { | |||
if (index === requestIndex) { | if (index === requestIndex) { | ||
that.__response(content); | that.__response(content); | ||
| 第5,085行: | 第5,032行: | ||
}; | }; | ||
}, | }, | ||
__response: function(content) { | __response: function (content) { | ||
if (content) { | if (content) { | ||
content = this._normalize(content); | content = this._normalize(content); | ||
} | } | ||
this._trigger("response", null, { | this._trigger("response", null, { content: content }); | ||
if (!this.options.disabled && content && content.length && !this.cancelSearch) { | if (!this.options.disabled && content && content.length && !this.cancelSearch) { | ||
this._suggest(content); | this._suggest(content); | ||
this._trigger("open"); | this._trigger("open"); | ||
} else { | } | ||
else { | |||
this._close(); | this._close(); | ||
} | } | ||
}, | }, | ||
close: function(event) { | close: function (event) { | ||
this.cancelSearch = | this.cancelSearch = true; | ||
this._close(event); | this._close(event); | ||
}, | }, | ||
_close: function(event) { | _close: function (event) { | ||
if (this.menu.element.is(":visible")) { | if (this.menu.element.is(":visible")) { | ||
this.menu.element.hide(); | this.menu.element.hide(); | ||
this.menu.blur(); | this.menu.blur(); | ||
this.isNewMenu = | this.isNewMenu = true; | ||
this._trigger("close", event); | this._trigger("close", event); | ||
} | } | ||
}, | }, | ||
_change: function(event) { | _change: function (event) { | ||
if (this.previous !== this._value()) { | if (this.previous !== this._value()) { | ||
this._trigger("change", event, { | this._trigger("change", event, { item: this.selectedItem }); | ||
} | } | ||
}, | }, | ||
_normalize: function(items) { | _normalize: function (items) { | ||
if (items.length && items[0].label && items[0].value) { | if (items.length && items[0].label && items[0].value) { | ||
return items; | return items; | ||
} | } | ||
return $.map(items, function(item) { | return $.map(items, function (item) { | ||
if (typeof item === "string") { | if (typeof item === "string") { | ||
return { | return { | ||
| 第5,135行: | 第5,079行: | ||
}); | }); | ||
}, | }, | ||
_suggest: function(items) { | _suggest: function (items) { | ||
var ul = this.menu.element.empty().zIndex(this.element.zIndex() + 1); | var ul = this.menu.element | ||
.empty() | |||
.zIndex(this.element.zIndex() + 1); | |||
this._renderMenu(ul, items); | this._renderMenu(ul, items); | ||
this.menu.refresh(); | this.menu.refresh(); | ||
ul.show(); | ul.show(); | ||
this._resizeMenu(); | this._resizeMenu(); | ||
ul.position($.extend({ of: this.element | ul.position($.extend({ | ||
of: this.element | |||
}, this.options.position)); | }, this.options.position)); | ||
if (this.options.autoFocus) { | if (this.options.autoFocus) { | ||
| 第5,147行: | 第5,094行: | ||
} | } | ||
}, | }, | ||
_resizeMenu: function() { | _resizeMenu: function () { | ||
var ul = this.menu.element; | var ul = this.menu.element; | ||
ul.outerWidth(Math.max(ul.width("").outerWidth() + 1, this.element.outerWidth())); | ul.outerWidth(Math.max(ul.width("").outerWidth() + 1, this.element.outerWidth())); | ||
}, | }, | ||
_renderMenu: function(ul, items) { | _renderMenu: function (ul, items) { | ||
var that = this; | var that = this; | ||
$.each(items, function(index, item) { | $.each(items, function (index, item) { | ||
that._renderItemData(ul, item); | that._renderItemData(ul, item); | ||
}); | }); | ||
}, | }, | ||
_renderItemData: function( | _renderItemData: function (ul, item) { | ||
return this._renderItem(ul, item).data("ui-autocomplete-item", item); | return this._renderItem(ul, item).data("ui-autocomplete-item", item); | ||
}, | }, | ||
_renderItem: function(ul, item) { | _renderItem: function (ul, item) { | ||
return $("<li>").append($("<a>").text(item.label)).appendTo(ul); | return $("<li>") | ||
.append($("<a>").text(item.label)) | |||
.appendTo(ul); | |||
}, | }, | ||
_move: function(direction, event) { | _move: function (direction, event) { | ||
if (!this.menu.element.is(":visible")) { | if (!this.menu.element.is(":visible")) { | ||
this.search(null, event); | this.search(null, event); | ||
return; | return; | ||
} | } | ||
if (this.menu.isFirstItem() && /^previous/.test(direction) || this.menu.isLastItem() && /^next/.test(direction)) { | if (this.menu.isFirstItem() && /^previous/.test(direction) || | ||
this.menu.isLastItem() && /^next/.test(direction)) { | |||
this._value(this.term); | this._value(this.term); | ||
this.menu.blur(); | this.menu.blur(); | ||
| 第5,176行: | 第5,125行: | ||
this.menu[direction](event); | this.menu[direction](event); | ||
}, | }, | ||
widget: function() { | widget: function () { | ||
return this.menu.element; | return this.menu.element; | ||
}, | }, | ||
_value: function() { | _value: function () { | ||
return this.valueMethod.apply(this.element, arguments); | return this.valueMethod.apply(this.element, arguments); | ||
}, | }, | ||
_keyEvent: function(keyEvent, event) { | _keyEvent: function (keyEvent, event) { | ||
if (!this.isMultiLine || this.menu.element.is(":visible")) { | if (!this.isMultiLine || this.menu.element.is(":visible")) { | ||
this._move(keyEvent, event); | this._move(keyEvent, event); | ||
| 第5,190行: | 第5,139行: | ||
}); | }); | ||
$.extend($.ui.autocomplete, { | $.extend($.ui.autocomplete, { | ||
escapeRegex: function(value) { | escapeRegex: function (value) { | ||
return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"); | return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"); | ||
}, | }, | ||
filter: function(array, term) { | filter: function (array, term) { | ||
var matcher = new RegExp($.ui.autocomplete.escapeRegex(term), "i"); | var matcher = new RegExp($.ui.autocomplete.escapeRegex(term), "i"); | ||
return $.grep(array, function(value) { | return $.grep(array, function (value) { | ||
return matcher.test(value.label || value.value || value); | return matcher.test(value.label || value.value || value); | ||
}); | }); | ||
| 第5,204行: | 第5,153行: | ||
messages: { | messages: { | ||
noResults: "No search results.", | noResults: "No search results.", | ||
results: function(amount) { | results: function (amount) { | ||
return amount + (amount > 1 ? " results are" : " result is") + " available, use up and down arrow keys to navigate."; | return amount + (amount > 1 ? " results are" : " result is") + | ||
" available, use up and down arrow keys to navigate."; | |||
} | } | ||
} | } | ||
}, | }, | ||
__response: function(content) { | __response: function (content) { | ||
var message; | var message; | ||
this._superApply(arguments); | this._superApply(arguments); | ||
| 第5,217行: | 第5,167行: | ||
if (content && content.length) { | if (content && content.length) { | ||
message = this.options.messages.results(content.length); | message = this.options.messages.results(content.length); | ||
} else { | } | ||
else { | |||
message = this.options.messages.noResults; | message = this.options.messages.noResults; | ||
} | } | ||
| 第5,224行: | 第5,175行: | ||
}); | }); | ||
}(jQuery)); | }(jQuery)); | ||
(function($, undefined) { | (function ($, undefined) { | ||
var lastActive, startXPos, startYPos, clickDragged, baseClasses = "ui-button ui-widget ui-state-default ui-corner-all", | var lastActive, startXPos, startYPos, clickDragged, baseClasses = "ui-button ui-widget ui-state-default ui-corner-all", stateClasses = "ui-state-hover ui-state-active ", typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only", formResetHandler = function () { | ||
var buttons = $(this).find(":ui-button"); | |||
setTimeout(function () { | |||
buttons.button("refresh"); | |||
}, 1); | |||
}, radioGroup = function (radio) { | |||
var name = radio.name, form = radio.form, radios = $([]); | |||
if (name) { | |||
if (form) { | |||
radios = $(form).find("[name='" + name + "']"); | |||
} | |||
else { | |||
radios = $("[name='" + name + "']", radio.ownerDocument) | |||
.filter(function () { | |||
return !this.form; | |||
}); | |||
} | } | ||
} | |||
return radios; | |||
}; | |||
$.widget("ui.button", { | $.widget("ui.button", { | ||
version: "1.9.2", | version: "1.9.2", | ||
| 第5,255行: | 第5,201行: | ||
options: { | options: { | ||
disabled: null, | disabled: null, | ||
text: | text: true, | ||
label: null, | label: null, | ||
icons: { | icons: { | ||
| 第5,262行: | 第5,208行: | ||
} | } | ||
}, | }, | ||
_create: function() { | _create: function () { | ||
this.element.closest("form"). | this.element.closest("form") | ||
.off("reset" + this.eventNamespace) | |||
.on("reset" + this.eventNamespace, formResetHandler); | |||
if (typeof this.options.disabled !== "boolean") { | if (typeof this.options.disabled !== "boolean") { | ||
this.options.disabled = !!this.element.prop("disabled"); | this.options.disabled = !!this.element.prop("disabled"); | ||
} else { | } | ||
else { | |||
this.element.prop("disabled", this.options.disabled); | this.element.prop("disabled", this.options.disabled); | ||
} | } | ||
this._determineButtonType(); | this._determineButtonType(); | ||
this.hasTitle = !!this.buttonElement.attr("title"); | this.hasTitle = !!this.buttonElement.attr("title"); | ||
var that = this, | var that = this, options = this.options, toggleButton = this.type === "checkbox" || this.type === "radio", activeClass = !toggleButton ? "ui-state-active" : "", focusClass = "ui-state-focus"; | ||
if (options.label === null) { | if (options.label === null) { | ||
options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html()); | options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html()); | ||
} | } | ||
this._hoverable(this.buttonElement); | this._hoverable(this.buttonElement); | ||
this.buttonElement.addClass(baseClasses).attr("role", "button"). | this.buttonElement | ||
.addClass(baseClasses) | |||
.attr("role", "button") | |||
.on("mouseenter" + this.eventNamespace, function () { | |||
if (options.disabled) { | if (options.disabled) { | ||
return; | return; | ||
| 第5,287行: | 第5,235行: | ||
$(this).addClass("ui-state-active"); | $(this).addClass("ui-state-active"); | ||
} | } | ||
}). | }) | ||
.on("mouseleave" + this.eventNamespace, function () { | |||
if (options.disabled) { | if (options.disabled) { | ||
return; | return; | ||
} | } | ||
$(this).removeClass(activeClass); | $(this).removeClass(activeClass); | ||
}). | }) | ||
.on("click" + this.eventNamespace, function (event) { | |||
if (options.disabled) { | if (options.disabled) { | ||
event.preventDefault(); | event.preventDefault(); | ||
| 第5,298行: | 第5,248行: | ||
} | } | ||
}); | }); | ||
this.element. | this.element | ||
.on("focus" + this.eventNamespace, function () { | |||
that.buttonElement.addClass(focusClass); | that.buttonElement.addClass(focusClass); | ||
}). | }) | ||
.on("blur" + this.eventNamespace, function () { | |||
that.buttonElement.removeClass(focusClass); | that.buttonElement.removeClass(focusClass); | ||
}); | }); | ||
if (toggleButton) { | if (toggleButton) { | ||
this.element. | this.element.on("change" + this.eventNamespace, function () { | ||
if (clickDragged) { | if (clickDragged) { | ||
return; | return; | ||
| 第5,310行: | 第5,262行: | ||
that.refresh(); | that.refresh(); | ||
}); | }); | ||
this.buttonElement. | this.buttonElement | ||
.on("mousedown" + this.eventNamespace, function (event) { | |||
if (options.disabled) { | if (options.disabled) { | ||
return; | return; | ||
} | } | ||
clickDragged = | clickDragged = false; | ||
startXPos = event.pageX; | startXPos = event.pageX; | ||
startYPos = event.pageY; | startYPos = event.pageY; | ||
}). | }) | ||
.on("mouseup" + this.eventNamespace, function (event) { | |||
if (options.disabled) { | if (options.disabled) { | ||
return; | return; | ||
} | } | ||
if (startXPos !== event.pageX || startYPos !== event.pageY) { | if (startXPos !== event.pageX || startYPos !== event.pageY) { | ||
clickDragged = | clickDragged = true; | ||
} | } | ||
}); | }); | ||
} | } | ||
if (this.type === "checkbox") { | if (this.type === "checkbox") { | ||
this.buttonElement. | this.buttonElement.on("click" + this.eventNamespace, function () { | ||
if (options.disabled || clickDragged) { | if (options.disabled || clickDragged) { | ||
return false; | return false; | ||
| 第5,334行: | 第5,288行: | ||
that.buttonElement.attr("aria-pressed", that.element[0].checked); | that.buttonElement.attr("aria-pressed", that.element[0].checked); | ||
}); | }); | ||
} else if (this.type === "radio") { | } | ||
this.buttonElement. | else if (this.type === "radio") { | ||
this.buttonElement.on("click" + this.eventNamespace, function () { | |||
if (options.disabled || clickDragged) { | if (options.disabled || clickDragged) { | ||
return false; | return false; | ||
| 第5,342行: | 第5,297行: | ||
that.buttonElement.attr("aria-pressed", "true"); | that.buttonElement.attr("aria-pressed", "true"); | ||
var radio = that.element[0]; | var radio = that.element[0]; | ||
radioGroup(radio).not(radio).map(function() { | radioGroup(radio) | ||
.not(radio) | |||
.map(function () { | |||
return $(this).button("widget")[0]; | return $(this).button("widget")[0]; | ||
}).removeClass("ui-state-active").attr("aria-pressed", "false"); | }) | ||
.removeClass("ui-state-active") | |||
.attr("aria-pressed", "false"); | |||
}); | }); | ||
} else { | } | ||
this.buttonElement. | else { | ||
this.buttonElement | |||
.on("mousedown" + this.eventNamespace, function () { | |||
if (options.disabled) { | if (options.disabled) { | ||
return false; | return false; | ||
| 第5,353行: | 第5,314行: | ||
$(this).addClass("ui-state-active"); | $(this).addClass("ui-state-active"); | ||
lastActive = this; | lastActive = this; | ||
that.document.one( | that.document.one("mouseup", function () { | ||
lastActive = null; | |||
}); | |||
}) | |||
.on("mouseup" + this.eventNamespace, function () { | |||
}). | |||
if (options.disabled) { | if (options.disabled) { | ||
return false; | return false; | ||
} | } | ||
$(this).removeClass("ui-state-active"); | $(this).removeClass("ui-state-active"); | ||
}). | }) | ||
.on("keydown" + this.eventNamespace, function (event) { | |||
if (options.disabled) { | if (options.disabled) { | ||
return false; | return false; | ||
| 第5,370行: | 第5,331行: | ||
$(this).addClass("ui-state-active"); | $(this).addClass("ui-state-active"); | ||
} | } | ||
}). | }) | ||
.on("keyup" + this.eventNamespace, function () { | |||
$(this).removeClass("ui-state-active"); | $(this).removeClass("ui-state-active"); | ||
}); | }); | ||
if (this.buttonElement.is("a")) { | if (this.buttonElement.is("a")) { | ||
this.buttonElement.keyup(function(event) { | this.buttonElement.keyup(function (event) { | ||
if (event.keyCode === $.ui.keyCode.SPACE) { | if (event.keyCode === $.ui.keyCode.SPACE) { | ||
$(this).click(); | $(this).click(); | ||
| 第5,384行: | 第5,346行: | ||
this._resetButton(); | this._resetButton(); | ||
}, | }, | ||
_determineButtonType: function() { | _determineButtonType: function () { | ||
var ancestor, labelSelector, checked; | var ancestor, labelSelector, checked; | ||
if (this.element.is("[type=checkbox]")) { | if (this.element.is("[type=checkbox]")) { | ||
this.type = "checkbox"; | this.type = "checkbox"; | ||
} else if (this.element.is("[type=radio]")) { | } | ||
else if (this.element.is("[type=radio]")) { | |||
this.type = "radio"; | this.type = "radio"; | ||
} else if (this.element.is("input")) { | } | ||
else if (this.element.is("input")) { | |||
this.type = "input"; | this.type = "input"; | ||
} else { | } | ||
else { | |||
this.type = "button"; | this.type = "button"; | ||
} | } | ||
if (this.type === "checkbox" || this.type === "radio") { | if (this.type === "checkbox" || this.type === "radio") { | ||
ancestor = this.element.parents(). | ancestor = this.element.parents().last(); | ||
labelSelector = "label[for='" + this.element.attr("id") + "']"; | labelSelector = "label[for='" + this.element.attr("id") + "']"; | ||
this.buttonElement = ancestor.find(labelSelector); | this.buttonElement = ancestor.find(labelSelector); | ||
| 第5,413行: | 第5,377行: | ||
} | } | ||
this.buttonElement.prop("aria-pressed", checked); | this.buttonElement.prop("aria-pressed", checked); | ||
} else { | } | ||
else { | |||
this.buttonElement = this.element; | this.buttonElement = this.element; | ||
} | } | ||
}, | }, | ||
widget: function() { | widget: function () { | ||
return this.buttonElement; | return this.buttonElement; | ||
}, | }, | ||
_destroy: function() { | _destroy: function () { | ||
this.element.removeClass("ui-helper-hidden-accessible"); | this.element | ||
this.buttonElement.removeClass(baseClasses + " " + stateClasses + " " + typeClasses).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()); | .removeClass("ui-helper-hidden-accessible"); | ||
this.buttonElement | |||
.removeClass(baseClasses + " " + stateClasses + " " + typeClasses) | |||
.removeAttr("role") | |||
.removeAttr("aria-pressed") | |||
.html(this.buttonElement.find(".ui-button-text").html()); | |||
if (!this.hasTitle) { | if (!this.hasTitle) { | ||
this.buttonElement.removeAttr("title"); | this.buttonElement.removeAttr("title"); | ||
} | } | ||
}, | }, | ||
_setOption: function(key, value) { | _setOption: function (key, value) { | ||
this._super(key, value); | this._super(key, value); | ||
if ( | if (key === "disabled") { | ||
if (value) { | if (value) { | ||
this.element.prop("disabled", true); | this.element.prop("disabled", true); | ||
} else { | } | ||
else { | |||
this.element.prop("disabled", false); | this.element.prop("disabled", false); | ||
} | } | ||
| 第5,440行: | 第5,410行: | ||
this._resetButton(); | this._resetButton(); | ||
}, | }, | ||
refresh: function() { | refresh: function () { | ||
var isDisabled = this.element.is("input, button") ? this.element.is(":disabled") : this.element.hasClass("ui-button-disabled"); | var isDisabled = this.element.is("input, button") ? this.element.is(":disabled") : this.element.hasClass("ui-button-disabled"); | ||
if (isDisabled !== this.options.disabled) { | if (isDisabled !== this.options.disabled) { | ||
| 第5,446行: | 第5,416行: | ||
} | } | ||
if (this.type === "radio") { | if (this.type === "radio") { | ||
radioGroup(this.element[0]).each(function() { | radioGroup(this.element[0]).each(function () { | ||
if ($(this).is(":checked")) { | if ($(this).is(":checked")) { | ||
$(this).button("widget").addClass("ui-state-active").attr("aria-pressed", "true"); | $(this).button("widget") | ||
} else { | .addClass("ui-state-active") | ||
$(this).button("widget").removeClass("ui-state-active").attr("aria-pressed", "false"); | .attr("aria-pressed", "true"); | ||
} | |||
else { | |||
$(this).button("widget") | |||
.removeClass("ui-state-active") | |||
.attr("aria-pressed", "false"); | |||
} | } | ||
}); | }); | ||
} else if (this.type === "checkbox") { | } | ||
else if (this.type === "checkbox") { | |||
if (this.element.is(":checked")) { | if (this.element.is(":checked")) { | ||
this.buttonElement.addClass("ui-state-active").attr("aria-pressed", "true"); | this.buttonElement | ||
} else { | .addClass("ui-state-active") | ||
this.buttonElement.removeClass("ui-state-active").attr("aria-pressed", "false"); | .attr("aria-pressed", "true"); | ||
} | |||
else { | |||
this.buttonElement | |||
.removeClass("ui-state-active") | |||
.attr("aria-pressed", "false"); | |||
} | } | ||
} | } | ||
}, | }, | ||
_resetButton: function() { | _resetButton: function () { | ||
if (this.type === "input") { | if (this.type === "input") { | ||
if (this.options.label) { | if (this.options.label) { | ||
| 第5,468行: | 第5,449行: | ||
return; | return; | ||
} | } | ||
var buttonElement = this. | var buttonElement = this.buttonElement.removeClass(typeClasses), buttonText = $("<span></span>", this.document[0]) | ||
.addClass("ui-button-text") | |||
.html(this.options.label) | |||
.appendTo(buttonElement.empty()) | |||
.text(), icons = this.options.icons, multipleIcons = icons.primary && icons.secondary, buttonClasses = []; | |||
if (icons.primary || icons.secondary) { | if (icons.primary || icons.secondary) { | ||
if (this.options.text) { | if (this.options.text) { | ||
| 第5,483行: | 第5,467行: | ||
buttonClasses.push(multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only"); | buttonClasses.push(multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only"); | ||
if (!this.hasTitle) { | if (!this.hasTitle) { | ||
buttonElement.attr("title", | buttonElement.attr("title", buttonText.trim()); | ||
} | } | ||
} | } | ||
} else { | } | ||
else { | |||
buttonClasses.push("ui-button-text-only"); | buttonClasses.push("ui-button-text-only"); | ||
} | } | ||
| 第5,497行: | 第5,482行: | ||
items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(button)" | items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(button)" | ||
}, | }, | ||
_create: function() { | _create: function () { | ||
this.element.addClass("ui-buttonset"); | this.element.addClass("ui-buttonset"); | ||
}, | }, | ||
_init: function() { | _init: function () { | ||
this.refresh(); | this.refresh(); | ||
}, | }, | ||
_setOption: function(key, value) { | _setOption: function (key, value) { | ||
if (key === "disabled") { | if (key === "disabled") { | ||
this.buttons.button("option", key, value); | this.buttons.button("option", key, value); | ||
| 第5,509行: | 第5,494行: | ||
this._super(key, value); | this._super(key, value); | ||
}, | }, | ||
refresh: function() { | refresh: function () { | ||
var rtl = this.element.css("direction") === "rtl"; | var rtl = this.element.css("direction") === "rtl"; | ||
this.buttons = this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function() { | this.buttons = this.element.find(this.options.items) | ||
.filter(":ui-button") | |||
.button("refresh") | |||
.end() | |||
.not(":ui-button") | |||
.button() | |||
.end() | |||
.map(function () { | |||
return $(this).button("widget")[0]; | return $(this).button("widget")[0]; | ||
}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(rtl ? "ui-corner-right" : "ui-corner-left").end().filter(":last").addClass(rtl ? "ui-corner-left" : "ui-corner-right").end().end(); | }) | ||
.removeClass("ui-corner-all ui-corner-left ui-corner-right") | |||
.filter(":first") | |||
.addClass(rtl ? "ui-corner-right" : "ui-corner-left") | |||
.end() | |||
.filter(":last") | |||
.addClass(rtl ? "ui-corner-left" : "ui-corner-right") | |||
.end() | |||
.end(); | |||
}, | }, | ||
_destroy: function() { | _destroy: function () { | ||
this.element.removeClass("ui-buttonset"); | this.element.removeClass("ui-buttonset"); | ||
this.buttons.map(function() { | this.buttons | ||
.map(function () { | |||
return $(this).button("widget")[0]; | return $(this).button("widget")[0]; | ||
}).removeClass("ui-corner-left ui-corner-right").end().button("destroy"); | }) | ||
.removeClass("ui-corner-left ui-corner-right") | |||
.end() | |||
.button("destroy"); | |||
} | } | ||
}); | }); | ||
}(jQuery)); | }(jQuery)); | ||
(function($, undefined) { | (function ($, undefined) { | ||
$.extend($.ui, { | $.extend($.ui, { datepicker: { version: "1.9.2" } }); | ||
var PROP_NAME = 'datepicker'; | var PROP_NAME = 'datepicker'; | ||
var dpuuid = new Date().getTime(); | var dpuuid = new Date().getTime(); | ||
var instActive; | var instActive; | ||
function Datepicker() { | function Datepicker() { | ||
this.debug = | this.debug = false; | ||
this._curInst = null; | this._curInst = null; | ||
this._keyEvent = | this._keyEvent = false; | ||
this._disabledInputs = []; | this._disabledInputs = []; | ||
this._datepickerShowing = | this._datepickerShowing = false; | ||
this._inDialog = | this._inDialog = false; | ||
this._mainDivId = 'ui-datepicker-div'; | this._mainDivId = 'ui-datepicker-div'; | ||
this._inlineClass = 'ui-datepicker-inline'; | this._inlineClass = 'ui-datepicker-inline'; | ||
| 第5,555行: | 第5,554行: | ||
nextText: 'Next', | nextText: 'Next', | ||
currentText: 'Today', | currentText: 'Today', | ||
monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], | monthNames: ['January', 'February', 'March', 'April', 'May', 'June', | ||
'July', 'August', 'September', 'October', 'November', 'December'], | |||
monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], | monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], | ||
dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], | dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], | ||
| 第5,563行: | 第5,563行: | ||
dateFormat: 'mm/dd/yy', | dateFormat: 'mm/dd/yy', | ||
firstDay: 0, | firstDay: 0, | ||
isRTL: | isRTL: false, | ||
showMonthAfterYear: | showMonthAfterYear: false, | ||
yearSuffix: '' | yearSuffix: '' | ||
}; | }; | ||
| 第5,575行: | 第5,575行: | ||
buttonText: '...', | buttonText: '...', | ||
buttonImage: '', | buttonImage: '', | ||
buttonImageOnly: | buttonImageOnly: false, | ||
hideIfNoPrevNext: | hideIfNoPrevNext: false, | ||
navigationAsDateFormat: | navigationAsDateFormat: false, | ||
gotoCurrent: | gotoCurrent: false, | ||
changeMonth: | changeMonth: false, | ||
changeYear: | changeYear: false, | ||
yearRange: 'c-10:c+10', | yearRange: 'c-10:c+10', | ||
showOtherMonths: | showOtherMonths: false, | ||
selectOtherMonths: | selectOtherMonths: false, | ||
showWeek: | showWeek: false, | ||
calculateWeek: this.iso8601Week, | calculateWeek: this.iso8601Week, | ||
shortYearCutoff: '+10', | shortYearCutoff: '+10', | ||
| 第5,601行: | 第5,601行: | ||
altField: '', | altField: '', | ||
altFormat: '', | altFormat: '', | ||
constrainInput: | constrainInput: true, | ||
showButtonPanel: | showButtonPanel: false, | ||
autoSize: | autoSize: false, | ||
disabled: | disabled: false | ||
}; | }; | ||
$.extend( | $.extend(this._defaults, this.regional['']); | ||
this.dpDiv = bindHover($('<div id="' + this._mainDivId + '" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')); | this.dpDiv = bindHover($('<div id="' + this._mainDivId + '" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')); | ||
} | } | ||
| 第5,613行: | 第5,612行: | ||
markerClassName: 'hasDatepicker', | markerClassName: 'hasDatepicker', | ||
maxRows: 4, | maxRows: 4, | ||
log: function() { | log: function () { | ||
if (this.debug) console.log.apply('', arguments); | if (this.debug) | ||
console.log.apply('', arguments); | |||
}, | }, | ||
_widgetDatepicker: function() { | _widgetDatepicker: function () { | ||
return this.dpDiv; | return this.dpDiv; | ||
}, | }, | ||
setDefaults: function(settings) { | setDefaults: function (settings) { | ||
extendRemove(this._defaults, settings || {}); | extendRemove(this._defaults, settings || {}); | ||
return this; | return this; | ||
}, | }, | ||
_attachDatepicker: function(target, settings) { | _attachDatepicker: function (target, settings) { | ||
var inlineSettings = null; | var inlineSettings = null; | ||
for (var attrName in this._defaults) { | for (var attrName in this._defaults) { | ||
| 第5,631行: | 第5,631行: | ||
try { | try { | ||
inlineSettings[attrName] = eval(attrValue); | inlineSettings[attrName] = eval(attrValue); | ||
} catch (err) { | } | ||
catch (err) { | |||
inlineSettings[attrName] = attrValue; | inlineSettings[attrName] = attrValue; | ||
} | } | ||
| 第5,644行: | 第5,645行: | ||
var inst = this._newInst($(target), inline); | var inst = this._newInst($(target), inline); | ||
inst.settings = $.extend({}, settings || {}, inlineSettings || {}); | inst.settings = $.extend({}, settings || {}, inlineSettings || {}); | ||
if ( | if (nodeName == 'input') { | ||
this._connectDatepicker(target, inst); | this._connectDatepicker(target, inst); | ||
} else if (inline) { | } | ||
else if (inline) { | |||
this._inlineDatepicker(target, inst); | this._inlineDatepicker(target, inst); | ||
} | } | ||
}, | }, | ||
_newInst: function(target, inline) { | _newInst: function (target, inline) { | ||
var id = target[0].id.replace(/([^A-Za-z0-9_-])/g, '\\\\$1'); | var id = target[0].id.replace(/([^A-Za-z0-9_-])/g, '\\\\$1'); | ||
return { | return { id: id, input: target, | ||
selectedDay: 0, selectedMonth: 0, selectedYear: 0, | |||
drawMonth: 0, drawYear: 0, | |||
selectedDay: 0, | |||
drawMonth: 0, | |||
inline: inline, | inline: inline, | ||
dpDiv: (!inline ? this.dpDiv : bindHover($('<div class="' + this._inlineClass + ' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))) | dpDiv: (!inline ? this.dpDiv : | ||
bindHover($('<div class="' + this._inlineClass + ' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))) }; | |||
}, | }, | ||
_connectDatepicker: function(target, inst) { | _connectDatepicker: function (target, inst) { | ||
var input = $(target); | var input = $(target); | ||
inst.append = $([]); | inst.append = $([]); | ||
inst.trigger = $([]); | inst.trigger = $([]); | ||
if (input.hasClass(this.markerClassName)) return; | if (input.hasClass(this.markerClassName)) | ||
return; | |||
this._attachments(input, inst); | this._attachments(input, inst); | ||
input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp). | input.addClass(this.markerClassName).keydown(this._doKeyDown). | ||
keypress(this._doKeyPress).keyup(this._doKeyUp). | |||
on("setData.datepicker", function (event, key, value) { | |||
inst.settings[key] = value; | inst.settings[key] = value; | ||
}). | }).on("getData.datepicker", function (event, key) { | ||
return this._get(inst, key); | return this._get(inst, key); | ||
}); | }); | ||
| 第5,679行: | 第5,678行: | ||
$.data(target, PROP_NAME, inst); | $.data(target, PROP_NAME, inst); | ||
if (inst.settings.disabled) { | if (inst.settings.disabled) { | ||
this. | this._disableDatepicker(target); | ||
} | } | ||
}, | }, | ||
_attachments: function(input, inst) { | _attachments: function (input, inst) { | ||
var appendText = this._get(inst, 'appendText'); | var appendText = this._get(inst, 'appendText'); | ||
var isRTL = this._get(inst, 'isRTL'); | var isRTL = this._get(inst, 'isRTL'); | ||
if (inst.append) inst.append.remove(); | if (inst.append) | ||
inst.append.remove(); | |||
if (appendText) { | if (appendText) { | ||
inst.append = $('<span class="' + this._appendClass + '">' + appendText + '</span>'); | inst.append = $('<span class="' + this._appendClass + '">' + appendText + '</span>'); | ||
input[isRTL ? 'before' : 'after'](inst.append); | input[isRTL ? 'before' : 'after'](inst.append); | ||
} | } | ||
input. | input.off('focus', this._showDatepicker); | ||
if (inst.trigger) inst.trigger.remove(); | if (inst.trigger) | ||
inst.trigger.remove(); | |||
var showOn = this._get(inst, 'showOn'); | var showOn = this._get(inst, 'showOn'); | ||
if (showOn == 'focus' || showOn == 'both') input.focus(this._showDatepicker); | if (showOn == 'focus' || showOn == 'both') | ||
input.focus(this._showDatepicker); | |||
if (showOn == 'button' || showOn == 'both') { | if (showOn == 'button' || showOn == 'both') { | ||
var buttonText = this._get(inst, 'buttonText'); | var buttonText = this._get(inst, 'buttonText'); | ||
var buttonImage = this._get(inst, 'buttonImage'); | var buttonImage = this._get(inst, 'buttonImage'); | ||
inst.trigger = $(this._get(inst, 'buttonImageOnly') ? $('<img/>').addClass(this._triggerClass).attr({ | inst.trigger = $(this._get(inst, 'buttonImageOnly') ? | ||
$('<img/>').addClass(this._triggerClass). | |||
attr({ src: buttonImage, alt: buttonText, title: buttonText }) : | |||
$('<button type="button"></button>').addClass(this._triggerClass). | |||
html(buttonImage == '' ? buttonText : $('<img/>').attr({ src: buttonImage, alt: buttonText, title: buttonText }))); | |||
input[isRTL ? 'before' : 'after'](inst.trigger); | input[isRTL ? 'before' : 'after'](inst.trigger); | ||
inst.trigger. | inst.trigger.click(function () { | ||
if ($.datepicker._datepickerShowing && $.datepicker._lastInput == input[0]) | |||
if ($.datepicker._datepickerShowing && $.datepicker._lastInput == input[0]) $.datepicker._hideDatepicker(); | $.datepicker._hideDatepicker(); | ||
else if ($.datepicker._datepickerShowing && $.datepicker._lastInput != input[0]) { | else if ($.datepicker._datepickerShowing && $.datepicker._lastInput != input[0]) { | ||
$.datepicker._hideDatepicker(); | $.datepicker._hideDatepicker(); | ||
$.datepicker._showDatepicker(input[0]); | $.datepicker._showDatepicker(input[0]); | ||
} else $.datepicker._showDatepicker(input[0]); | } | ||
else | |||
$.datepicker._showDatepicker(input[0]); | |||
return false; | return false; | ||
}); | }); | ||
} | } | ||
}, | }, | ||
_autoSize: function(inst) { | _autoSize: function (inst) { | ||
if (this._get(inst, 'autoSize') && !inst.inline) { | if (this._get(inst, 'autoSize') && !inst.inline) { | ||
var date = new Date(2009, 12 - 1, 20); | var date = new Date(2009, 12 - 1, 20); | ||
var dateFormat = this._get(inst, 'dateFormat'); | var dateFormat = this._get(inst, 'dateFormat'); | ||
if (dateFormat.match(/[DM]/)) { | if (dateFormat.match(/[DM]/)) { | ||
var findMax = function(names) { | var findMax = function (names) { | ||
var max = 0; | var max = 0; | ||
var maxI = 0; | var maxI = 0; | ||
| 第5,735行: | 第5,734行: | ||
return maxI; | return maxI; | ||
}; | }; | ||
date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ? 'monthNames' : 'monthNamesShort')))); | date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ? | ||
date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ? 'dayNames' : 'dayNamesShort'))) + 20 - date.getDay()); | 'monthNames' : 'monthNamesShort')))); | ||
date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ? | |||
'dayNames' : 'dayNamesShort'))) + 20 - date.getDay()); | |||
} | } | ||
inst.input.attr('size', this._formatDate(inst, date).length); | inst.input.attr('size', this._formatDate(inst, date).length); | ||
} | } | ||
}, | }, | ||
_inlineDatepicker: function(target, inst) { | _inlineDatepicker: function (target, inst) { | ||
var divSpan = $(target); | var divSpan = $(target); | ||
if (divSpan.hasClass( | if (divSpan.hasClass(this.markerClassName)) | ||
return; | |||
divSpan.addClass(this.markerClassName).append(inst.dpDiv). | divSpan.addClass(this.markerClassName).append(inst.dpDiv). | ||
on("setData.datepicker", function (event, key, value) { | |||
inst.settings[key] = value; | inst.settings[key] = value; | ||
}). | }).on("getData.datepicker", function (event, key) { | ||
return this._get(inst, key); | return this._get(inst, key); | ||
}); | }); | ||
| 第5,759行: | 第5,761行: | ||
inst.dpDiv.css("display", "block"); | inst.dpDiv.css("display", "block"); | ||
}, | }, | ||
_dialogDatepicker: function(input, date, onSelect, settings, pos) { | _dialogDatepicker: function (input, date, onSelect, settings, pos) { | ||
var inst = this._dialogInst; | var inst = this._dialogInst; | ||
if (!inst) { | if (!inst) { | ||
this.uuid += 1; | this.uuid += 1; | ||
var id = 'dp' + this.uuid; | var id = 'dp' + this.uuid; | ||
this._dialogInput = $('<input type="text" id="' + id + '" style="position: absolute; top: -100px; width: 0px;"/>'); | this._dialogInput = $('<input type="text" id="' + id + | ||
'" style="position: absolute; top: -100px; width: 0px;"/>'); | |||
this._dialogInput.keydown(this._doKeyDown); | this._dialogInput.keydown(this._doKeyDown); | ||
$('body').append(this._dialogInput); | $('body').append(this._dialogInput); | ||
| 第5,772行: | 第5,775行: | ||
} | } | ||
extendRemove(inst.settings, settings || {}); | extendRemove(inst.settings, settings || {}); | ||
date = (date && date.constructor == Date ? | date = (date && date.constructor == Date ? this._formatDate(inst, date) : date); | ||
this._dialogInput.val(date); | this._dialogInput.val(date); | ||
this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null); | this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null); | ||
| 第5,781行: | 第5,783行: | ||
var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; | var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; | ||
var scrollY = document.documentElement.scrollTop || document.body.scrollTop; | var scrollY = document.documentElement.scrollTop || document.body.scrollTop; | ||
this._pos = [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY]; | this._pos = | ||
[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY]; | |||
} | } | ||
this._dialogInput.css('left', (this._pos[0] + 20) + 'px').css('top', this._pos[1] + 'px'); | this._dialogInput.css('left', (this._pos[0] + 20) + 'px').css('top', this._pos[1] + 'px'); | ||
inst.settings.onSelect = onSelect; | inst.settings.onSelect = onSelect; | ||
this._inDialog = | this._inDialog = true; | ||
this.dpDiv.addClass(this._dialogClass); | this.dpDiv.addClass(this._dialogClass); | ||
this._showDatepicker(this._dialogInput[0]); | this._showDatepicker(this._dialogInput[0]); | ||
if ($.blockUI) $.blockUI(this.dpDiv); | if ($.blockUI) | ||
$.blockUI(this.dpDiv); | |||
$.data(this._dialogInput[0], PROP_NAME, inst); | $.data(this._dialogInput[0], PROP_NAME, inst); | ||
return this; | return this; | ||
}, | }, | ||
_destroyDatepicker: function(target) { | _destroyDatepicker: function (target) { | ||
var $target = $(target); | var $target = $(target); | ||
var inst = $.data(target, PROP_NAME); | var inst = $.data(target, PROP_NAME); | ||
| 第5,800行: | 第5,804行: | ||
var nodeName = target.nodeName.toLowerCase(); | var nodeName = target.nodeName.toLowerCase(); | ||
$.removeData(target, PROP_NAME); | $.removeData(target, PROP_NAME); | ||
if ( | if (nodeName == 'input') { | ||
inst.append.remove(); | inst.append.remove(); | ||
inst.trigger.remove(); | inst.trigger.remove(); | ||
$target.removeClass(this.markerClassName). | $target.removeClass(this.markerClassName). | ||
} else if (nodeName == 'div' || nodeName == 'span') $target.removeClass(this.markerClassName).empty(); | off('focus', this._showDatepicker). | ||
off('keydown', this._doKeyDown). | |||
off('keypress', this._doKeyPress). | |||
off('keyup', this._doKeyUp); | |||
} | |||
else if (nodeName == 'div' || nodeName == 'span') | |||
$target.removeClass(this.markerClassName).empty(); | |||
}, | }, | ||
_enableDatepicker: function(target) { | _enableDatepicker: function (target) { | ||
var $target = $(target); | var $target = $(target); | ||
var inst = $.data(target, PROP_NAME); | var inst = $.data(target, PROP_NAME); | ||
| 第5,815行: | 第5,824行: | ||
var nodeName = target.nodeName.toLowerCase(); | var nodeName = target.nodeName.toLowerCase(); | ||
if (nodeName == 'input') { | if (nodeName == 'input') { | ||
target.disabled = | target.disabled = false; | ||
inst.trigger.filter('button').each(function() { | inst.trigger.filter('button'). | ||
each(function () { this.disabled = false; }).end(). | |||
filter('img').css({ opacity: '1.0', cursor: '' }); | |||
} | |||
else if (nodeName == 'div' || nodeName == 'span') { | |||
} else if (nodeName == 'div' || nodeName == 'span') { | |||
var inline = $target.children('.' + this._inlineClass); | var inline = $target.children('.' + this._inlineClass); | ||
inline.children().removeClass('ui-state-disabled'); | inline.children().removeClass('ui-state-disabled'); | ||
inline.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled", false); | inline.find("select.ui-datepicker-month, select.ui-datepicker-year"). | ||
prop("disabled", false); | |||
} | } | ||
this._disabledInputs = $.map(this._disabledInputs, function(value) { | this._disabledInputs = $.map(this._disabledInputs, function (value) { return (value == target ? null : value); }); | ||
}, | }, | ||
_disableDatepicker: function(target) { | _disableDatepicker: function (target) { | ||
var $target = $(target); | var $target = $(target); | ||
var inst = $.data(target, PROP_NAME); | var inst = $.data(target, PROP_NAME); | ||
| 第5,840行: | 第5,845行: | ||
var nodeName = target.nodeName.toLowerCase(); | var nodeName = target.nodeName.toLowerCase(); | ||
if (nodeName == 'input') { | if (nodeName == 'input') { | ||
target.disabled = | target.disabled = true; | ||
inst.trigger.filter('button').each(function() { | inst.trigger.filter('button'). | ||
each(function () { this.disabled = true; }).end(). | |||
filter('img').css({ opacity: '0.5', cursor: 'default' }); | |||
} | |||
else if (nodeName == 'div' || nodeName == 'span') { | |||
} else if (nodeName == 'div' || nodeName == 'span') { | |||
var inline = $target.children('.' + this._inlineClass); | var inline = $target.children('.' + this._inlineClass); | ||
inline.children().addClass('ui-state-disabled'); | inline.children().addClass('ui-state-disabled'); | ||
inline.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled", true); | inline.find("select.ui-datepicker-month, select.ui-datepicker-year"). | ||
prop("disabled", true); | |||
} | } | ||
this._disabledInputs = $.map(this._disabledInputs, function(value) { | this._disabledInputs = $.map(this._disabledInputs, function (value) { return (value == target ? null : value); }); | ||
this._disabledInputs[this._disabledInputs.length] = target; | this._disabledInputs[this._disabledInputs.length] = target; | ||
}, | }, | ||
_isDisabledDatepicker: function(target) { | _isDisabledDatepicker: function (target) { | ||
if (!target) { | if (!target) { | ||
return false; | return false; | ||
} | } | ||
for (var i = 0; i < this._disabledInputs.length; i++) { | for (var i = 0; i < this._disabledInputs.length; i++) { | ||
if (this._disabledInputs[i] == target) return true; | if (this._disabledInputs[i] == target) | ||
return true; | |||
} | } | ||
return false; | return false; | ||
}, | }, | ||
_getInst: function(target) { | _getInst: function (target) { | ||
try { | try { | ||
return $.data( | return $.data(target, PROP_NAME); | ||
} | |||
} catch (err) { | catch (err) { | ||
throw 'Missing instance data for this datepicker'; | throw 'Missing instance data for this datepicker'; | ||
} | } | ||
}, | }, | ||
_optionDatepicker: function(target, name, value) { | _optionDatepicker: function (target, name, value) { | ||
var inst = this._getInst(target); | var inst = this._getInst(target); | ||
if (arguments.length == 2 && typeof name == 'string') { | if (arguments.length == 2 && typeof name == 'string') { | ||
return (name == 'defaults' ? $.extend({}, $.datepicker._defaults) : (inst ? (name == 'all' ? $.extend({}, inst.settings) : this._get(inst, name)) : null)); | return (name == 'defaults' ? $.extend({}, $.datepicker._defaults) : | ||
(inst ? (name == 'all' ? $.extend({}, inst.settings) : | |||
this._get(inst, name)) : null)); | |||
} | } | ||
var settings = name || {}; | var settings = name || {}; | ||
| 第5,892行: | 第5,897行: | ||
var maxDate = this._getMinMaxDate(inst, 'max'); | var maxDate = this._getMinMaxDate(inst, 'max'); | ||
extendRemove(inst.settings, settings); | extendRemove(inst.settings, settings); | ||
if (minDate !== null && settings['dateFormat'] !== undefined && settings['minDate'] === undefined) inst.settings.minDate = this._formatDate(inst, minDate); | if (minDate !== null && settings['dateFormat'] !== undefined && settings['minDate'] === undefined) | ||
if (maxDate !== null && settings['dateFormat'] !== undefined && settings['maxDate'] === undefined) inst.settings.maxDate = this._formatDate(inst, maxDate); | inst.settings.minDate = this._formatDate(inst, minDate); | ||
if (maxDate !== null && settings['dateFormat'] !== undefined && settings['maxDate'] === undefined) | |||
inst.settings.maxDate = this._formatDate(inst, maxDate); | |||
this._attachments($(target), inst); | this._attachments($(target), inst); | ||
this._autoSize(inst); | this._autoSize(inst); | ||
| 第5,901行: | 第5,908行: | ||
} | } | ||
}, | }, | ||
_changeDatepicker: function(target, name, value) { | _changeDatepicker: function (target, name, value) { | ||
this._optionDatepicker(target, name, value); | this._optionDatepicker(target, name, value); | ||
}, | }, | ||
_refreshDatepicker: function(target) { | _refreshDatepicker: function (target) { | ||
var inst = this._getInst(target); | var inst = this._getInst(target); | ||
if (inst) { | if (inst) { | ||
| 第5,910行: | 第5,917行: | ||
} | } | ||
}, | }, | ||
_setDateDatepicker: function(target, date) { | _setDateDatepicker: function (target, date) { | ||
var inst = this._getInst(target); | var inst = this._getInst(target); | ||
if (inst) { | if (inst) { | ||
| 第5,918行: | 第5,925行: | ||
} | } | ||
}, | }, | ||
_getDateDatepicker: function(target, noDefault) { | _getDateDatepicker: function (target, noDefault) { | ||
var inst = this._getInst(target); | var inst = this._getInst(target); | ||
if (inst && !inst.inline) this._setDateFromField(inst, noDefault); | if (inst && !inst.inline) | ||
this._setDateFromField(inst, noDefault); | |||
return (inst ? this._getDate(inst) : null); | return (inst ? this._getDate(inst) : null); | ||
}, | }, | ||
_doKeyDown: function(event) { | _doKeyDown: function (event) { | ||
var inst = $.datepicker._getInst(event.target); | var inst = $.datepicker._getInst(event.target); | ||
var handled = | var handled = true; | ||
var isRTL = inst.dpDiv.is('.ui-datepicker-rtl'); | var isRTL = inst.dpDiv.is('.ui-datepicker-rtl'); | ||
inst._keyEvent = | inst._keyEvent = true; | ||
if ($.datepicker._datepickerShowing) switch (event.keyCode) { | if ($.datepicker._datepickerShowing) | ||
switch (event.keyCode) { | |||
case 9: | case 9: | ||
$.datepicker._hideDatepicker(); | $.datepicker._hideDatepicker(); | ||
handled = | handled = false; | ||
break; | break; | ||
case 13: | case 13: | ||
var sel = $('td.' + $.datepicker._dayOverClass + ':not(.' + $.datepicker._currentClass + ')', inst.dpDiv); | var sel = $('td.' + $.datepicker._dayOverClass + ':not(.' + | ||
if (sel[0]) $. | $.datepicker._currentClass + ')', inst.dpDiv); | ||
if (sel[0]) | |||
$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]); | |||
var onSelect = $.datepicker._get(inst, 'onSelect'); | var onSelect = $.datepicker._get(inst, 'onSelect'); | ||
if (onSelect) { | if (onSelect) { | ||
var dateStr = $.datepicker._formatDate(inst); | var dateStr = $.datepicker._formatDate(inst); | ||
onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); | onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); | ||
} else $.datepicker._hideDatepicker(); | } | ||
else | |||
$.datepicker._hideDatepicker(); | |||
return false; | return false; | ||
break; | break; | ||
| 第5,948行: | 第5,960行: | ||
break; | break; | ||
case 33: | case 33: | ||
$.datepicker._adjustDate(event.target, (event.ctrlKey ? -$.datepicker._get(inst, 'stepBigMonths') : -$.datepicker._get(inst, 'stepMonths')), 'M'); | $.datepicker._adjustDate(event.target, (event.ctrlKey ? | ||
-$.datepicker._get(inst, 'stepBigMonths') : | |||
-$.datepicker._get(inst, 'stepMonths')), 'M'); | |||
break; | break; | ||
case 34: | case 34: | ||
$.datepicker._adjustDate(event.target, (event.ctrlKey ? +$.datepicker._get(inst, 'stepBigMonths') : +$.datepicker._get(inst, 'stepMonths')), 'M'); | $.datepicker._adjustDate(event.target, (event.ctrlKey ? | ||
+$.datepicker._get(inst, 'stepBigMonths') : | |||
+$.datepicker._get(inst, 'stepMonths')), 'M'); | |||
break; | break; | ||
case 35: | case 35: | ||
if (event.ctrlKey || event.metaKey) $.datepicker._clearDate(event.target); | if (event.ctrlKey || event.metaKey) | ||
$.datepicker._clearDate(event.target); | |||
handled = event.ctrlKey || event.metaKey; | handled = event.ctrlKey || event.metaKey; | ||
break; | break; | ||
case 36: | case 36: | ||
if (event.ctrlKey || event.metaKey) $.datepicker._gotoToday(event.target); | if (event.ctrlKey || event.metaKey) | ||
$.datepicker._gotoToday(event.target); | |||
handled = event.ctrlKey || event.metaKey; | handled = event.ctrlKey || event.metaKey; | ||
break; | break; | ||
case 37: | case 37: | ||
if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D'); | if (event.ctrlKey || event.metaKey) | ||
handled = | $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D'); | ||
handled = event.ctrlKey || event.metaKey; | |||
if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? -$.datepicker._get(inst, 'stepBigMonths') : -$.datepicker._get(inst, 'stepMonths')), 'M'); | if (event.originalEvent.altKey) | ||
$.datepicker._adjustDate(event.target, (event.ctrlKey ? | |||
-$.datepicker._get(inst, 'stepBigMonths') : | |||
-$.datepicker._get(inst, 'stepMonths')), 'M'); | |||
break; | break; | ||
case 38: | case 38: | ||
if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, -7, 'D'); | if (event.ctrlKey || event.metaKey) | ||
$.datepicker._adjustDate(event.target, -7, 'D'); | |||
handled = event.ctrlKey || event.metaKey; | handled = event.ctrlKey || event.metaKey; | ||
break; | break; | ||
case 39: | case 39: | ||
if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D'); | if (event.ctrlKey || event.metaKey) | ||
$.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D'); | |||
handled = event.ctrlKey || event.metaKey; | handled = event.ctrlKey || event.metaKey; | ||
if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? +$.datepicker._get(inst, 'stepBigMonths') : +$.datepicker._get(inst, 'stepMonths')), 'M'); | if (event.originalEvent.altKey) | ||
$.datepicker._adjustDate(event.target, (event.ctrlKey ? | |||
+$.datepicker._get(inst, 'stepBigMonths') : | |||
+$.datepicker._get(inst, 'stepMonths')), 'M'); | |||
break; | break; | ||
case 40: | case 40: | ||
if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, +7, 'D'); | if (event.ctrlKey || event.metaKey) | ||
$.datepicker._adjustDate(event.target, +7, 'D'); | |||
handled = event.ctrlKey || event.metaKey; | handled = event.ctrlKey || event.metaKey; | ||
break; | break; | ||
default: | default: handled = false; | ||
} | |||
} else if (event.keyCode == 36 && event.ctrlKey) $.datepicker._showDatepicker(this); | else if (event.keyCode == 36 && event.ctrlKey) | ||
$.datepicker._showDatepicker(this); | |||
else { | |||
handled = false; | |||
} | |||
if (handled) { | |||
event.preventDefault(); | event.preventDefault(); | ||
event.stopPropagation(); | event.stopPropagation(); | ||
} | } | ||
}, | }, | ||
_doKeyPress: function(event) { | _doKeyPress: function (event) { | ||
var inst = $.datepicker. | var inst = $.datepicker._getInst(event.target); | ||
if ($.datepicker._get(inst, 'constrainInput')) { | if ($.datepicker._get(inst, 'constrainInput')) { | ||
var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')); | var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')); | ||
| 第5,999行: | 第6,027行: | ||
} | } | ||
}, | }, | ||
_doKeyUp: function(event) { | _doKeyUp: function (event) { | ||
var inst = $.datepicker._getInst(event.target); | var inst = $.datepicker._getInst(event.target); | ||
if (inst.input.val() != inst.lastVal) { | if (inst.input.val() != inst.lastVal) { | ||
| 第6,009行: | 第6,037行: | ||
$.datepicker._updateDatepicker(inst); | $.datepicker._updateDatepicker(inst); | ||
} | } | ||
} catch (err) { | } | ||
catch (err) { | |||
$.datepicker.log(err); | $.datepicker.log(err); | ||
} | } | ||
| 第6,015行: | 第6,044行: | ||
return true; | return true; | ||
}, | }, | ||
_showDatepicker: function(input) { | _showDatepicker: function (input) { | ||
input = input.target || input; | input = input.target || input; | ||
if (input.nodeName.toLowerCase() != 'input') input = $('input', input.parentNode)[0]; | if (input.nodeName.toLowerCase() != 'input') | ||
if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) return; | input = $('input', input.parentNode)[0]; | ||
if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) | |||
return; | |||
var inst = $.datepicker._getInst(input); | var inst = $.datepicker._getInst(input); | ||
if ($.datepicker._curInst && $.datepicker._curInst != inst) { | if ($.datepicker._curInst && $.datepicker._curInst != inst) { | ||
| 第6,035行: | 第6,066行: | ||
$.datepicker._lastInput = input; | $.datepicker._lastInput = input; | ||
$.datepicker._setDateFromField(inst); | $.datepicker._setDateFromField(inst); | ||
if ($.datepicker._inDialog) input.value = ''; | if ($.datepicker._inDialog) | ||
input.value = ''; | |||
if (!$.datepicker._pos) { | if (!$.datepicker._pos) { | ||
$.datepicker._pos = $.datepicker._findPos(input); | $.datepicker._pos = $.datepicker._findPos(input); | ||
$.datepicker._pos[1] += input.offsetHeight; | $.datepicker._pos[1] += input.offsetHeight; | ||
} | } | ||
var isFixed = | var isFixed = false; | ||
$(input).parents().each(function() { | $(input).parents().each(function () { | ||
isFixed |= $(this).css('position') == 'fixed'; | isFixed |= $(this).css('position') == 'fixed'; | ||
return !isFixed; | return !isFixed; | ||
}); | }); | ||
var offset = { | var offset = { left: $.datepicker._pos[0], top: $.datepicker._pos[1] }; | ||
$.datepicker._pos = null; | $.datepicker._pos = null; | ||
inst.dpDiv.empty(); | inst.dpDiv.empty(); | ||
inst.dpDiv.css({ | inst.dpDiv.css({ position: 'absolute', display: 'block', top: '-1000px' }); | ||
$.datepicker._updateDatepicker(inst); | $.datepicker._updateDatepicker(inst); | ||
offset = $.datepicker. | offset = $.datepicker._checkOffset(inst, offset, isFixed); | ||
inst.dpDiv.css({ position: ($.datepicker._inDialog && $.blockUI ? | |||
inst.dpDiv.css({ | 'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none', | ||
left: offset.left + 'px', top: offset.top + 'px' }); | |||
left: offset.left + 'px', | |||
if (!inst.inline) { | if (!inst.inline) { | ||
var showAnim = $.datepicker._get(inst, 'showAnim'); | var showAnim = $.datepicker._get(inst, 'showAnim'); | ||
var duration = $.datepicker._get(inst, 'duration'); | var duration = $.datepicker._get(inst, 'duration'); | ||
var postProcess = function() { | var postProcess = function () { | ||
var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); | var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); | ||
if (!!cover.length) { | if (!!cover.length) { | ||
var borders = $.datepicker._getBorders(inst.dpDiv); | var borders = $.datepicker._getBorders(inst.dpDiv); | ||
cover.css({ | cover.css({ left: -borders[0], top: -borders[1], | ||
width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight() }); | |||
width: inst.dpDiv.outerWidth(), | |||
} | } | ||
}; | }; | ||
inst.dpDiv.zIndex($(input).zIndex() + 1); | inst.dpDiv.zIndex($(input).zIndex() + 1); | ||
$.datepicker._datepickerShowing = | $.datepicker._datepickerShowing = true; | ||
if ($.effects && ($.effects.effect[showAnim] || $.effects[showAnim])) inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); | if ($.effects && ($.effects.effect[showAnim] || $.effects[showAnim])) | ||
else inst.dpDiv[showAnim || 'show']((showAnim ? duration : null), postProcess); | inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); | ||
if (!showAnim || !duration) postProcess(); | else | ||
if (inst.input.is(':visible') && !inst.input.is(':disabled')) inst.input.focus(); | inst.dpDiv[showAnim || 'show']((showAnim ? duration : null), postProcess); | ||
if (!showAnim || !duration) | |||
postProcess(); | |||
if (inst.input.is(':visible') && !inst.input.is(':disabled')) | |||
inst.input.focus(); | |||
$.datepicker._curInst = inst; | $.datepicker._curInst = inst; | ||
} | } | ||
}, | }, | ||
_updateDatepicker: function(inst) { | _updateDatepicker: function (inst) { | ||
this.maxRows = 4; | this.maxRows = 4; | ||
var borders = $.datepicker._getBorders(inst.dpDiv); | var borders = $.datepicker._getBorders(inst.dpDiv); | ||
| 第6,097行: | 第6,118行: | ||
var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); | var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); | ||
if (!!cover.length) { | if (!!cover.length) { | ||
cover.css({ | cover.css({ left: -borders[0], top: -borders[1], width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight() }); | ||
} | } | ||
inst.dpDiv.find('.' + this._dayOverClass + ' a').mouseover(); | inst.dpDiv.find('.' + this._dayOverClass + ' a').mouseover(); | ||
| 第6,109行: | 第6,125行: | ||
var width = 17; | var width = 17; | ||
inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width(''); | inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width(''); | ||
if (cols > 1) inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em'); | if (cols > 1) | ||
inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') + 'Class']('ui-datepicker-multi'); | inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em'); | ||
inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') + 'Class']('ui-datepicker-rtl'); | inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') + | ||
if (inst == $.datepicker._curInst && $.datepicker._datepickerShowing && inst.input && inst.input.is(':visible') && !inst.input.is(':disabled') && inst.input[0] != document.activeElement) inst.input.focus(); | 'Class']('ui-datepicker-multi'); | ||
inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') + | |||
'Class']('ui-datepicker-rtl'); | |||
if (inst == $.datepicker._curInst && $.datepicker._datepickerShowing && inst.input && | |||
inst.input.is(':visible') && !inst.input.is(':disabled') && inst.input[0] != document.activeElement) | |||
inst.input.focus(); | |||
if (inst.yearshtml) { | if (inst.yearshtml) { | ||
var origyearshtml = inst.yearshtml; | var origyearshtml = inst.yearshtml; | ||
setTimeout(function() { | setTimeout(function () { | ||
if (origyearshtml === inst.yearshtml && inst.yearshtml) { | if (origyearshtml === inst.yearshtml && inst.yearshtml) { | ||
inst.dpDiv.find('select.ui-datepicker-year:first').replaceWith(inst.yearshtml); | inst.dpDiv.find('select.ui-datepicker-year:first').replaceWith(inst.yearshtml); | ||
| 第6,123行: | 第6,144行: | ||
} | } | ||
}, | }, | ||
_getBorders: function(elem) { | _getBorders: function (elem) { | ||
var convert = function(value) { | var convert = function (value) { | ||
return { | return { thin: 1, medium: 2, thick: 3 }[value] || value; | ||
}; | }; | ||
return [parseFloat(convert(elem.css('border-left-width'))), parseFloat(convert(elem.css('border-top-width')))]; | return [parseFloat(convert(elem.css('border-left-width'))), | ||
parseFloat(convert(elem.css('border-top-width')))]; | |||
}, | }, | ||
_checkOffset: function(inst, offset, isFixed) { | _checkOffset: function (inst, offset, isFixed) { | ||
var dpWidth = inst.dpDiv.outerWidth(); | var dpWidth = inst.dpDiv.outerWidth(); | ||
var dpHeight = inst.dpDiv.outerHeight(); | var dpHeight = inst.dpDiv.outerHeight(); | ||
| 第6,140行: | 第6,158行: | ||
var viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()); | var viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()); | ||
var viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop()); | var viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop()); | ||
offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : | offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0); | ||
offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0; | offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0; | ||
offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0; | offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0; | ||
offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? Math.abs(offset.left + dpWidth - viewWidth) : 0); | offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? | ||
offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? Math.abs(dpHeight + inputHeight) : 0); | Math.abs(offset.left + dpWidth - viewWidth) : 0); | ||
offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? | |||
Math.abs(dpHeight + inputHeight) : 0); | |||
return offset; | return offset; | ||
}, | }, | ||
_findPos: function(obj) { | _findPos: function (obj) { | ||
var inst = this._getInst(obj); | var inst = this._getInst(obj); | ||
var isRTL = this._get(inst, 'isRTL'); | var isRTL = this._get(inst, 'isRTL'); | ||
| 第6,157行: | 第6,176行: | ||
return [position.left, position.top]; | return [position.left, position.top]; | ||
}, | }, | ||
_hideDatepicker: function(input) { | _hideDatepicker: function (input) { | ||
var inst = this._curInst; | var inst = this._curInst; | ||
if (!inst || (input && inst != $.data(input, PROP_NAME))) return; | if (!inst || (input && inst != $.data(input, PROP_NAME))) | ||
return; | |||
if (this._datepickerShowing) { | if (this._datepickerShowing) { | ||
var showAnim = this._get(inst, 'showAnim'); | var showAnim = this._get(inst, 'showAnim'); | ||
var duration = this._get(inst, 'duration'); | var duration = this._get(inst, 'duration'); | ||
var postProcess = function() { | var postProcess = function () { | ||
$.datepicker. | $.datepicker._tidyDialog(inst); | ||
}; | }; | ||
if ($.effects && ($.effects.effect[showAnim] || $.effects[showAnim])) inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); | if ($.effects && ($.effects.effect[showAnim] || $.effects[showAnim])) | ||
else inst.dpDiv[(showAnim == 'slideDown' ? 'slideUp' : (showAnim == 'fadeIn' ? 'fadeOut' : 'hide'))]((showAnim ? duration : null), postProcess); | inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); | ||
if (!showAnim) postProcess(); | else | ||
this._datepickerShowing = | inst.dpDiv[(showAnim == 'slideDown' ? 'slideUp' : | ||
(showAnim == 'fadeIn' ? 'fadeOut' : 'hide'))]((showAnim ? duration : null), postProcess); | |||
if (!showAnim) | |||
postProcess(); | |||
this._datepickerShowing = false; | |||
var onClose = this._get(inst, 'onClose'); | var onClose = this._get(inst, 'onClose'); | ||
if (onClose) onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ''), inst]); | if (onClose) | ||
onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ''), inst]); | |||
this._lastInput = null; | this._lastInput = null; | ||
if (this._inDialog) { | if (this._inDialog) { | ||
this._dialogInput.css({ | this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' }); | ||
if ($.blockUI) { | if ($.blockUI) { | ||
$.unblockUI(); | $.unblockUI(); | ||
| 第6,185行: | 第6,205行: | ||
} | } | ||
} | } | ||
this._inDialog = | this._inDialog = false; | ||
} | } | ||
}, | }, | ||
_tidyDialog: function(inst) { | _tidyDialog: function (inst) { | ||
inst.dpDiv.removeClass(this._dialogClass). | inst.dpDiv.removeClass(this._dialogClass).off('.ui-datepicker-calendar'); | ||
}, | }, | ||
_checkExternalClick: function(event) { | _checkExternalClick: function (event) { | ||
if (!$.datepicker._curInst) return; | if (!$.datepicker._curInst) | ||
var $target = $(event.target), | return; | ||
var $target = $(event.target), inst = $.datepicker._getInst($target[0]); | |||
if ((($target[0].id != $.datepicker._mainDivId && $target.parents('#' + $.datepicker._mainDivId).length == 0 && !$target.hasClass($.datepicker.markerClassName) && !$target.closest("." + $.datepicker._triggerClass).length && $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI))) || ($target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst != inst)) $.datepicker._hideDatepicker(); | if ((($target[0].id != $.datepicker._mainDivId && | ||
$target.parents('#' + $.datepicker._mainDivId).length == 0 && | |||
!$target.hasClass($.datepicker.markerClassName) && | |||
!$target.closest("." + $.datepicker._triggerClass).length && | |||
$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI))) || | |||
($target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst != inst)) | |||
$.datepicker._hideDatepicker(); | |||
}, | }, | ||
_adjustDate: function(id, offset, period) { | _adjustDate: function (id, offset, period) { | ||
var target = $(id); | var target = $(id); | ||
var inst = this._getInst(target[0]); | var inst = this._getInst(target[0]); | ||
| 第6,203行: | 第6,229行: | ||
return; | return; | ||
} | } | ||
this._adjustInstDate(inst, offset + (period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), period); | this._adjustInstDate(inst, offset + | ||
(period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), period); | |||
this._updateDatepicker(inst); | this._updateDatepicker(inst); | ||
}, | }, | ||
_gotoToday: function(id) { | _gotoToday: function (id) { | ||
var target = $(id); | var target = $(id); | ||
var inst = this._getInst(target[0]); | var inst = this._getInst(target[0]); | ||
| 第6,213行: | 第6,240行: | ||
inst.drawMonth = inst.selectedMonth = inst.currentMonth; | inst.drawMonth = inst.selectedMonth = inst.currentMonth; | ||
inst.drawYear = inst.selectedYear = inst.currentYear; | inst.drawYear = inst.selectedYear = inst.currentYear; | ||
} else { | } | ||
else { | |||
var date = new Date(); | var date = new Date(); | ||
inst.selectedDay = date.getDate(); | inst.selectedDay = date.getDate(); | ||
| 第6,219行: | 第6,247行: | ||
inst.drawYear = inst.selectedYear = date.getFullYear(); | inst.drawYear = inst.selectedYear = date.getFullYear(); | ||
} | } | ||
this | this._notifyChange(inst); | ||
this._adjustDate(target); | this._adjustDate(target); | ||
}, | }, | ||
_selectMonthYear: function(id, select, period) { | _selectMonthYear: function (id, select, period) { | ||
var target = $(id); | var target = $(id); | ||
var inst = this._getInst(target[0]); | var inst = this._getInst(target[0]); | ||
inst['selected' + (period == 'M' ? 'Month' : 'Year')] = inst['draw' + (period == 'M' ? 'Month' : 'Year')] = parseInt(select.options[select.selectedIndex].value, 10); | inst['selected' + (period == 'M' ? 'Month' : 'Year')] = | ||
inst['draw' + (period == 'M' ? 'Month' : 'Year')] = | |||
parseInt(select.options[select.selectedIndex].value, 10); | |||
this._notifyChange(inst); | this._notifyChange(inst); | ||
this._adjustDate(target); | this._adjustDate(target); | ||
}, | }, | ||
_selectDay: function(id, month, year, td) { | _selectDay: function (id, month, year, td) { | ||
var target = $(id); | var target = $(id); | ||
if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) { | if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) { | ||
| 第6,241行: | 第6,270行: | ||
this._selectDate(id, this._formatDate(inst, inst.currentDay, inst.currentMonth, inst.currentYear)); | this._selectDate(id, this._formatDate(inst, inst.currentDay, inst.currentMonth, inst.currentYear)); | ||
}, | }, | ||
_clearDate: function(id) { | _clearDate: function (id) { | ||
var target = $(id); | var target = $(id); | ||
var inst = this._getInst(target[0]); | var inst = this._getInst(target[0]); | ||
this._selectDate(target, ''); | this._selectDate(target, ''); | ||
}, | }, | ||
_selectDate: function(id, dateStr) { | _selectDate: function (id, dateStr) { | ||
var target = $(id); | var target = $(id); | ||
var inst = this._getInst(target[0]); | var inst = this._getInst(target[0]); | ||
dateStr = (dateStr != null ? dateStr : this._formatDate(inst)); | dateStr = (dateStr != null ? dateStr : this._formatDate(inst)); | ||
if (inst | if (inst.input) | ||
inst.input.val(dateStr); | |||
this._updateAlternate(inst); | this._updateAlternate(inst); | ||
var onSelect = this._get(inst, 'onSelect'); | var onSelect = this._get(inst, 'onSelect'); | ||
if (onSelect) onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); | if (onSelect) | ||
else if (inst.input) inst.input.trigger('change'); | onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); | ||
if (inst.inline) this._updateDatepicker(inst); | else if (inst.input) | ||
inst.input.trigger('change'); | |||
if (inst.inline) | |||
this._updateDatepicker(inst); | |||
else { | else { | ||
this._hideDatepicker(); | this._hideDatepicker(); | ||
this._lastInput = inst.input[0]; | this._lastInput = inst.input[0]; | ||
if (typeof(inst.input[0]) != 'object') inst.input.focus(); | if (typeof (inst.input[0]) != 'object') | ||
inst.input.focus(); | |||
this._lastInput = null; | this._lastInput = null; | ||
} | } | ||
}, | }, | ||
_updateAlternate: function(inst) { | _updateAlternate: function (inst) { | ||
var altField = this._get(inst, 'altField'); | var altField = this._get(inst, 'altField'); | ||
if (altField) { | if (altField) { | ||
| 第6,270行: | 第6,303行: | ||
var date = this._getDate(inst); | var date = this._getDate(inst); | ||
var dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst)); | var dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst)); | ||
$(altField).each(function() { | $(altField).each(function () { $(this).val(dateStr); }); | ||
} | } | ||
}, | }, | ||
noWeekends: function(date) { | noWeekends: function (date) { | ||
var day = date.getDay(); | var day = date.getDay(); | ||
return [(day > 0 && day < 6), '']; | return [(day > 0 && day < 6), '']; | ||
}, | }, | ||
iso8601Week: function(date) { | iso8601Week: function (date) { | ||
var checkDate = new Date(date.getTime()); | var checkDate = new Date(date.getTime()); | ||
checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); | checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); | ||
| 第6,285行: | 第6,316行: | ||
checkDate.setMonth(0); | checkDate.setMonth(0); | ||
checkDate.setDate(1); | checkDate.setDate(1); | ||
return Math | return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1; | ||
}, | }, | ||
parseDate: function(format, value, settings) { | parseDate: function (format, value, settings) { | ||
if (format == null || value == null) throw 'Invalid arguments'; | if (format == null || value == null) | ||
throw 'Invalid arguments'; | |||
value = (typeof value == 'object' ? value.toString() : value + ''); | value = (typeof value == 'object' ? value.toString() : value + ''); | ||
if (value == '') return null; | if (value == '') | ||
return null; | |||
var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff; | var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff; | ||
shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); | shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : | ||
new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); | |||
var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; | var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; | ||
var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; | var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; | ||
| 第6,302行: | 第6,335行: | ||
var day = -1; | var day = -1; | ||
var doy = -1; | var doy = -1; | ||
var literal = | var literal = false; | ||
var lookAhead = function(match) { | var lookAhead = function (match) { | ||
var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); | var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); | ||
if (matches) iFormat++; | if (matches) | ||
iFormat++; | |||
return matches; | return matches; | ||
}; | }; | ||
var getNumber = | var getNumber = function (match) { | ||
var isDoubled = lookAhead(match); | |||
var size = (match == '@' ? 14 : (match == '!' ? 20 : | |||
(match == 'y' && isDoubled ? 4 : (match == 'o' ? 3 : 2)))); | |||
var digits = new RegExp('^\\d{1,' + size + '}'); | |||
var num = value.substring(iValue).match(digits); | |||
if (!num) | |||
throw 'Missing number at position ' + iValue; | |||
iValue += num[0].length; | |||
return parseInt(num[0], 10); | |||
var getName = function(match, shortNames, longNames) { | }; | ||
var names = $.map(lookAhead(match) ? longNames : shortNames, function(v, k) { | var getName = function (match, shortNames, longNames) { | ||
return [ | var names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) { | ||
return [[k, v]]; | |||
}).sort(function (a, b) { | |||
}).sort(function(a, b) { | |||
return -(a[1].length - b[1].length); | return -(a[1].length - b[1].length); | ||
}); | }); | ||
var index = -1; | var index = -1; | ||
$.each(names, function(i, pair) { | $.each(names, function (i, pair) { | ||
var name = pair[1]; | var name = pair[1]; | ||
if (value.substr(iValue, name.length).toLowerCase() == name.toLowerCase()) { | if (value.substr(iValue, name.length).toLowerCase() == name.toLowerCase()) { | ||
| 第6,335行: | 第6,368行: | ||
} | } | ||
}); | }); | ||
if (index != -1) return index + 1; | if (index != -1) | ||
else throw 'Unknown name at position ' + iValue; | return index + 1; | ||
else | |||
throw 'Unknown name at position ' + iValue; | |||
}; | }; | ||
var checkLiteral = function() { | var checkLiteral = function () { | ||
if (value.charAt(iValue) != format.charAt(iFormat)) throw 'Unexpected literal at position ' + iValue; | if (value.charAt(iValue) != format.charAt(iFormat)) | ||
throw 'Unexpected literal at position ' + iValue; | |||
iValue++; | iValue++; | ||
}; | }; | ||
| 第6,345行: | 第6,381行: | ||
for (var iFormat = 0; iFormat < format.length; iFormat++) { | for (var iFormat = 0; iFormat < format.length; iFormat++) { | ||
if (literal) | if (literal) | ||
if (format.charAt(iFormat) == | if (format.charAt(iFormat) == "'" && !lookAhead("'")) | ||
literal = false; | |||
else | |||
checkLiteral(); | checkLiteral(); | ||
} | else | ||
} | switch (format.charAt(iFormat)) { | ||
if (iValue < value.length) { | case 'd': | ||
var extra = value.substr(iValue); | day = getNumber('d'); | ||
if (!/^\s+/.test(extra)) { | break; | ||
throw "Extra/unparsed characters found in date: " + extra; | case 'D': | ||
} | getName('D', dayNamesShort, dayNames); | ||
} | break; | ||
if (year == -1) year = new Date().getFullYear(); | case 'o': | ||
else if (year < 100) year += new Date().getFullYear() - new Date().getFullYear() % 100 + (year <= shortYearCutoff ? 0 : -100); | doy = getNumber('o'); | ||
if (doy > -1) { | break; | ||
month = 1; | case 'm': | ||
month = getNumber('m'); | |||
break; | |||
case 'M': | |||
month = getName('M', monthNamesShort, monthNames); | |||
break; | |||
case 'y': | |||
year = getNumber('y'); | |||
break; | |||
case '@': | |||
var date = new Date(getNumber('@')); | |||
year = date.getFullYear(); | |||
month = date.getMonth() + 1; | |||
day = date.getDate(); | |||
break; | |||
case '!': | |||
var date = new Date((getNumber('!') - this._ticksTo1970) / 10000); | |||
year = date.getFullYear(); | |||
month = date.getMonth() + 1; | |||
day = date.getDate(); | |||
break; | |||
case "'": | |||
if (lookAhead("'")) | |||
checkLiteral(); | |||
else | |||
literal = true; | |||
break; | |||
default: | |||
checkLiteral(); | |||
} | |||
} | |||
if (iValue < value.length) { | |||
var extra = value.substr(iValue); | |||
if (!/^\s+/.test(extra)) { | |||
throw "Extra/unparsed characters found in date: " + extra; | |||
} | |||
} | |||
if (year == -1) | |||
year = new Date().getFullYear(); | |||
else if (year < 100) | |||
year += new Date().getFullYear() - new Date().getFullYear() % 100 + | |||
(year <= shortYearCutoff ? 0 : -100); | |||
if (doy > -1) { | |||
month = 1; | |||
day = doy; | day = doy; | ||
do { | do { | ||
var dim = this._getDaysInMonth(year, month - 1); | var dim = this._getDaysInMonth(year, month - 1); | ||
if (day <= dim) break; | if (day <= dim) | ||
break; | |||
month++; | month++; | ||
day -= dim; | day -= dim; | ||
| 第6,406行: | 第6,450行: | ||
} | } | ||
var date = this._daylightSavingAdjust(new Date(year, month - 1, day)); | var date = this._daylightSavingAdjust(new Date(year, month - 1, day)); | ||
if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day) throw 'Invalid date'; | if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day) | ||
throw 'Invalid date'; | |||
return date; | return date; | ||
}, | }, | ||
| 第6,421行: | 第6,466行: | ||
TIMESTAMP: '@', | TIMESTAMP: '@', | ||
W3C: 'yy-mm-dd', | W3C: 'yy-mm-dd', | ||
_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000), | _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + | ||
formatDate: function(format, date, settings) { | Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000), | ||
if (!date) return ''; | formatDate: function (format, date, settings) { | ||
if (!date) | |||
return ''; | |||
var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; | var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; | ||
var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; | var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; | ||
var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; | var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; | ||
var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; | var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; | ||
var lookAhead = function( | var lookAhead = function (match) { | ||
var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); | var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); | ||
if (matches) iFormat++; | if (matches) | ||
iFormat++; | |||
return matches; | return matches; | ||
}; | }; | ||
var formatNumber = function(match, value, len) { | var formatNumber = function (match, value, len) { | ||
var num = '' + value; | var num = '' + value; | ||
if (lookAhead(match)) | if (lookAhead(match)) | ||
while (num.length < len) num = '0' + num; | while (num.length < len) | ||
num = '0' + num; | |||
return num; | return num; | ||
}; | }; | ||
var formatName = function(match, value, shortNames, longNames) { | var formatName = function (match, value, shortNames, longNames) { | ||
return (lookAhead(match) ? longNames[value] : shortNames[value]); | return (lookAhead(match) ? longNames[value] : shortNames[value]); | ||
}; | }; | ||
var output = ''; | var output = ''; | ||
var literal = | var literal = false; | ||
if (date) | if (date) | ||
for (var iFormat = 0; iFormat < format.length; iFormat++) { | for (var iFormat = 0; iFormat < format.length; iFormat++) { | ||
if (literal) | if (literal) | ||
if (format.charAt(iFormat) == "'" && !lookAhead("'")) | if (format.charAt(iFormat) == "'" && !lookAhead("'")) | ||
literal = false; | |||
else | |||
output += format.charAt(iFormat); | output += format.charAt(iFormat); | ||
} | else | ||
switch (format.charAt(iFormat)) { | |||
case 'd': | |||
output += formatNumber('d', date.getDate(), 2); | |||
break; | |||
case 'D': | |||
output += formatName('D', date.getDay(), dayNamesShort, dayNames); | |||
break; | |||
case 'o': | |||
output += formatNumber('o', Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3); | |||
break; | |||
case 'm': | |||
output += formatNumber('m', date.getMonth() + 1, 2); | |||
break; | |||
case 'M': | |||
output += formatName('M', date.getMonth(), monthNamesShort, monthNames); | |||
break; | |||
case 'y': | |||
output += (lookAhead('y') ? date.getFullYear() : | |||
(date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100); | |||
break; | |||
case '@': | |||
output += date.getTime(); | |||
break; | |||
case '!': | |||
output += date.getTime() * 10000 + this._ticksTo1970; | |||
break; | |||
case "'": | |||
if (lookAhead("'")) | |||
output += "'"; | |||
else | |||
literal = true; | |||
break; | |||
default: | |||
output += format.charAt(iFormat); | |||
} | |||
} | } | ||
return output; | return output; | ||
}, | }, | ||
_possibleChars: function(format) { | _possibleChars: function (format) { | ||
var chars = ''; | var chars = ''; | ||
var literal = | var literal = false; | ||
var lookAhead = function(match) { | var lookAhead = function (match) { | ||
var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); | var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); | ||
if (matches) iFormat++; | if (matches) | ||
iFormat++; | |||
return matches; | return matches; | ||
}; | }; | ||
for (var iFormat = 0; iFormat < format.length; iFormat++) | for (var iFormat = 0; iFormat < format.length; iFormat++) | ||
if (literal) | if (literal) | ||
if (format.charAt(iFormat) == "'" && !lookAhead("'")) literal = | if (format.charAt(iFormat) == "'" && !lookAhead("'")) | ||
else chars += format.charAt(iFormat); | literal = false; | ||
else | |||
chars += format.charAt(iFormat); | |||
else | |||
switch (format.charAt(iFormat)) { | |||
case 'd': | |||
case 'm': | |||
case 'y': | |||
case '@': | |||
chars += '0123456789'; | |||
break; | |||
case 'D': | |||
case 'M': | |||
return null; | |||
case "'": | |||
if (lookAhead("'")) | |||
chars += "'"; | |||
else | |||
literal = true; | |||
break; | |||
default: | |||
chars += format.charAt(iFormat); | |||
} | |||
return chars; | return chars; | ||
}, | }, | ||
_get: function(inst, name) { | _get: function (inst, name) { | ||
return inst.settings[name] !== undefined ? inst.settings[name] : this._defaults[name]; | return inst.settings[name] !== undefined ? | ||
inst.settings[name] : this._defaults[name]; | |||
}, | }, | ||
_setDateFromField: function(inst, noDefault) { | _setDateFromField: function (inst, noDefault) { | ||
if (inst.input.val() == inst.lastVal) { | if (inst.input.val() == inst.lastVal) { | ||
return; | return; | ||
| 第6,531行: | 第6,591行: | ||
try { | try { | ||
date = this.parseDate(dateFormat, dates, settings) || defaultDate; | date = this.parseDate(dateFormat, dates, settings) || defaultDate; | ||
} catch (event) { | } | ||
catch (event) { | |||
this.log(event); | this.log(event); | ||
dates = (noDefault ? '' : dates); | dates = (noDefault ? '' : dates); | ||
| 第6,543行: | 第6,604行: | ||
this._adjustInstDate(inst); | this._adjustInstDate(inst); | ||
}, | }, | ||
_getDefaultDate: function(inst) { | _getDefaultDate: function (inst) { | ||
return this._restrictMinMax(inst, this._determineDate(inst, this._get(inst, 'defaultDate'), new Date())); | return this._restrictMinMax(inst, this._determineDate(inst, this._get(inst, 'defaultDate'), new Date())); | ||
}, | }, | ||
_determineDate: function(inst, date, defaultDate) { | _determineDate: function (inst, date, defaultDate) { | ||
var offsetNumeric = function( | var offsetNumeric = function (offset) { | ||
var date = new Date(); | var date = new Date(); | ||
date.setDate(date.getDate() + offset); | date.setDate(date.getDate() + offset); | ||
return date; | return date; | ||
}; | }; | ||
var offsetString = function(offset) { | var offsetString = function (offset) { | ||
try { | try { | ||
return $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'), offset, $.datepicker._getFormatConfig(inst)); | return $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'), offset, $.datepicker._getFormatConfig(inst)); | ||
} catch (e) {} | } | ||
var date = (offset.toLowerCase().match(/^c/) ? $.datepicker._getDate(inst) : null) || new Date(); | catch (e) { | ||
} | |||
var date = (offset.toLowerCase().match(/^c/) ? | |||
$.datepicker._getDate(inst) : null) || new Date(); | |||
var year = date.getFullYear(); | var year = date.getFullYear(); | ||
var month = date.getMonth(); | var month = date.getMonth(); | ||
| 第6,588行: | 第6,651行: | ||
return new Date(year, month, day); | return new Date(year, month, day); | ||
}; | }; | ||
var newDate = (date == null || date === '' ? defaultDate : (typeof date == 'string' ? offsetString(date) : (typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime())))); | var newDate = (date == null || date === '' ? defaultDate : (typeof date == 'string' ? offsetString(date) : | ||
(typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime())))); | |||
newDate = (newDate && newDate.toString() == 'Invalid Date' ? defaultDate : newDate); | newDate = (newDate && newDate.toString() == 'Invalid Date' ? defaultDate : newDate); | ||
if (newDate) { | if (newDate) { | ||
| 第6,598行: | 第6,662行: | ||
return this._daylightSavingAdjust(newDate); | return this._daylightSavingAdjust(newDate); | ||
}, | }, | ||
_daylightSavingAdjust: function(date) { | _daylightSavingAdjust: function (date) { | ||
if (!date) return null; | if (!date) | ||
return null; | |||
date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); | date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); | ||
return date; | return date; | ||
}, | }, | ||
_setDate: function(inst, date, noChange) { | _setDate: function (inst, date, noChange) { | ||
var clear = !date; | var clear = !date; | ||
var origMonth = inst.selectedMonth; | var origMonth = inst.selectedMonth; | ||
| 第6,611行: | 第6,676行: | ||
inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth(); | inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth(); | ||
inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear(); | inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear(); | ||
if ((origMonth != inst.selectedMonth || origYear != inst.selectedYear) && !noChange) this._notifyChange(inst); | if ((origMonth != inst.selectedMonth || origYear != inst.selectedYear) && !noChange) | ||
this._notifyChange(inst); | |||
this._adjustInstDate(inst); | this._adjustInstDate(inst); | ||
if (inst.input) { | if (inst.input) { | ||
inst.input. | inst.input.val(clear ? '' : this._formatDate(inst)); | ||
} | } | ||
}, | }, | ||
_getDate: function(inst) { | _getDate: function (inst) { | ||
var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null : this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); | var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null : | ||
this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); | |||
return startDate; | return startDate; | ||
}, | }, | ||
_attachHandlers: function(inst) { | _attachHandlers: function (inst) { | ||
var stepMonths = this._get(inst, 'stepMonths'); | var stepMonths = this._get(inst, 'stepMonths'); | ||
var id = '#' + inst.id.replace(/\\\\/g, "\\"); | var id = '#' + inst.id.replace(/\\\\/g, "\\"); | ||
inst.dpDiv.find('[data-handler]').map(function() { | inst.dpDiv.find('[data-handler]').map(function () { | ||
var handler = { | var handler = { | ||
prev: function() { | prev: function () { | ||
window['DP_jQuery_' + dpuuid].datepicker._adjustDate(id, -stepMonths, 'M'); | window['DP_jQuery_' + dpuuid].datepicker._adjustDate(id, -stepMonths, 'M'); | ||
}, | }, | ||
next: function() { | next: function () { | ||
window['DP_jQuery_' + dpuuid].datepicker._adjustDate(id, +stepMonths, 'M'); | window['DP_jQuery_' + dpuuid].datepicker._adjustDate(id, +stepMonths, 'M'); | ||
}, | }, | ||
hide: function() { | hide: function () { | ||
window['DP_jQuery_' + dpuuid].datepicker._hideDatepicker(); | window['DP_jQuery_' + dpuuid].datepicker._hideDatepicker(); | ||
}, | }, | ||
today: function() { | today: function () { | ||
window['DP_jQuery_' + dpuuid].datepicker._gotoToday(id); | window['DP_jQuery_' + dpuuid].datepicker._gotoToday(id); | ||
}, | }, | ||
selectDay: function() { | selectDay: function () { | ||
window['DP_jQuery_' + dpuuid].datepicker._selectDay(id, +this.getAttribute('data-month'), +this.getAttribute('data-year'), this); | window['DP_jQuery_' + dpuuid].datepicker._selectDay(id, +this.getAttribute('data-month'), +this.getAttribute('data-year'), this); | ||
return false; | return false; | ||
}, | }, | ||
selectMonth: function() { | selectMonth: function () { | ||
window['DP_jQuery_' + dpuuid].datepicker._selectMonthYear(id, this, | window['DP_jQuery_' + dpuuid].datepicker._selectMonthYear(id, this, 'M'); | ||
return false; | return false; | ||
}, | }, | ||
selectYear: function() { | selectYear: function () { | ||
window['DP_jQuery_' + dpuuid].datepicker._selectMonthYear(id, this, 'Y'); | window['DP_jQuery_' + dpuuid].datepicker._selectMonthYear(id, this, 'Y'); | ||
return false; | return false; | ||
} | } | ||
}; | }; | ||
$(this). | $(this).on(this.getAttribute('data-event'), handler[this.getAttribute('data-handler')]); | ||
}); | }); | ||
}, | }, | ||
_generateHTML: function(inst) { | _generateHTML: function (inst) { | ||
var today = new Date(); | var today = new Date(); | ||
today = this._daylightSavingAdjust(new Date(today.getFullYear(), today.getMonth(), today.getDate())); | today = this._daylightSavingAdjust(new Date(today.getFullYear(), today.getMonth(), today.getDate())); | ||
| 第6,667行: | 第6,732行: | ||
var stepMonths = this._get(inst, 'stepMonths'); | var stepMonths = this._get(inst, 'stepMonths'); | ||
var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1); | var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1); | ||
var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) : new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); | var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) : | ||
new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); | |||
var minDate = this._getMinMaxDate(inst, 'min'); | var minDate = this._getMinMaxDate(inst, 'min'); | ||
var maxDate = this._getMinMaxDate(inst, | var maxDate = this._getMinMaxDate(inst, 'max'); | ||
var drawMonth = inst.drawMonth - showCurrentAtPos; | var drawMonth = inst.drawMonth - showCurrentAtPos; | ||
var drawYear = inst.drawYear; | var drawYear = inst.drawYear; | ||
| 第6,692行: | 第6,757行: | ||
var prevText = this._get(inst, 'prevText'); | var prevText = this._get(inst, 'prevText'); | ||
prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText, this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), this._getFormatConfig(inst))); | prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText, this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), this._getFormatConfig(inst))); | ||
var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ? '<a class="ui-datepicker-prev ui-corner-all" data-handler="prev" data-event="click"' + ' title="' + prevText + '"><span class="ui-icon ui-icon-circle-triangle-' + (isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>' : (hideIfNoPrevNext ? '' : | var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ? | ||
'<a class="ui-datepicker-prev ui-corner-all" data-handler="prev" data-event="click"' + | |||
' title="' + prevText + '"><span class="ui-icon ui-icon-circle-triangle-' + (isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>' : | |||
(hideIfNoPrevNext ? '' : '<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="' + prevText + '"><span class="ui-icon ui-icon-circle-triangle-' + (isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>')); | |||
var nextText = this._get(inst, 'nextText'); | var nextText = this._get(inst, 'nextText'); | ||
nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText, this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), this._getFormatConfig(inst))); | nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText, this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), this._getFormatConfig(inst))); | ||
var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ? '<a class="ui-datepicker-next ui-corner-all" data-handler="next" data-event="click"' + ' title="' + nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + (isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>' : (hideIfNoPrevNext ? '' : '<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="' + nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + (isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>')); | var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ? | ||
'<a class="ui-datepicker-next ui-corner-all" data-handler="next" data-event="click"' + | |||
' title="' + nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + (isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>' : | |||
(hideIfNoPrevNext ? '' : '<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="' + nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + (isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>')); | |||
var currentText = this._get(inst, 'currentText'); | var currentText = this._get(inst, 'currentText'); | ||
var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today); | var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today); | ||
currentText = (! | currentText = (!navigationAsDateFormat ? currentText : | ||
this.formatDate(currentText, gotoDate, this._getFormatConfig(inst))); | |||
var controls = (!inst.inline ? '<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" data-handler="hide" data-event="click">' + this._get(inst, 'closeText') + '</button>' : ''); | var controls = (!inst.inline ? '<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" data-handler="hide" data-event="click">' + | ||
var buttonPanel = (showButtonPanel) ? '<div class="ui-datepicker-buttonpane ui-widget-content">' + (isRTL ? controls : '') + (this._isInRange(inst, gotoDate) ? '<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" data-handler="today" data-event="click"' + '>' + currentText + '</button>' : '') + (isRTL ? '' : controls) + '</div>' : ''; | this._get(inst, 'closeText') + '</button>' : ''); | ||
var buttonPanel = (showButtonPanel) ? '<div class="ui-datepicker-buttonpane ui-widget-content">' + (isRTL ? controls : '') + | |||
(this._isInRange(inst, gotoDate) ? '<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" data-handler="today" data-event="click"' + | |||
'>' + currentText + '</button>' : '') + (isRTL ? '' : controls) + '</div>' : ''; | |||
var firstDay = parseInt(this._get(inst, 'firstDay'), 10); | var firstDay = parseInt(this._get(inst, 'firstDay'), 10); | ||
firstDay = (isNaN(firstDay) ? 0 : firstDay); | firstDay = (isNaN(firstDay) ? 0 : firstDay); | ||
| 第6,710行: | 第6,783行: | ||
var dayNamesMin = this._get(inst, 'dayNamesMin'); | var dayNamesMin = this._get(inst, 'dayNamesMin'); | ||
var monthNames = this._get(inst, 'monthNames'); | var monthNames = this._get(inst, 'monthNames'); | ||
var | var monthNamesShort = this._get(inst, 'monthNamesShort'); | ||
var beforeShowDay = this._get(inst, 'beforeShowDay'); | var beforeShowDay = this._get(inst, 'beforeShowDay'); | ||
var showOtherMonths = this._get(inst, 'showOtherMonths'); | var showOtherMonths = this._get(inst, 'showOtherMonths'); | ||
| 第6,727行: | 第6,799行: | ||
if (isMultiMonth) { | if (isMultiMonth) { | ||
calender += '<div class="ui-datepicker-group'; | calender += '<div class="ui-datepicker-group'; | ||
if (numMonths[1] > 1) switch (col) { | if (numMonths[1] > 1) | ||
switch (col) { | |||
case 0: | |||
calender += ' ui-datepicker-group-first'; | |||
cornerClass = ' ui-corner-' + (isRTL ? 'right' : 'left'); | |||
break; | |||
case numMonths[1] - 1: | |||
calender += ' ui-datepicker-group-last'; | |||
cornerClass = ' ui-corner-' + (isRTL ? 'left' : 'right'); | |||
break; | |||
default: | |||
calender += ' ui-datepicker-group-middle'; | |||
cornerClass = ''; | |||
break; | |||
} | |||
calender += '">'; | calender += '">'; | ||
} | } | ||
calender += | calender += '<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix' + cornerClass + '">' + | ||
(/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') + | |||
(/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') + | |||
this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate, row > 0 || col > 0, monthNames, monthNamesShort) + | |||
'</div><table class="ui-datepicker-calendar"><thead>' + | |||
'<tr>'; | |||
var thead = (showWeek ? '<th class="ui-datepicker-week-col">' + this._get(inst, 'weekHeader') + '</th>' : ''); | var thead = (showWeek ? '<th class="ui-datepicker-week-col">' + this._get(inst, 'weekHeader') + '</th>' : ''); | ||
for (var dow = 0; dow < 7; dow++) { | for (var dow = 0; dow < 7; dow++) { | ||
var day = (dow + firstDay) % 7; | var day = (dow + firstDay) % 7; | ||
thead += '<th' + ((dow + firstDay + 6) % 7 >= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' + '<span title="' + dayNames[day] + '">' + dayNamesMin[day] + '</span></th>'; | thead += '<th' + ((dow + firstDay + 6) % 7 >= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' + | ||
'<span title="' + dayNames[day] + '">' + dayNamesMin[day] + '</span></th>'; | |||
} | } | ||
calender += thead + '</tr></thead><tbody>'; | calender += thead + '</tr></thead><tbody>'; | ||
var daysInMonth = this._getDaysInMonth(drawYear, drawMonth); | var daysInMonth = this._getDaysInMonth(drawYear, drawMonth); | ||
if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth) inst.selectedDay = Math.min(inst.selectedDay, daysInMonth); | if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth) | ||
inst.selectedDay = Math.min(inst.selectedDay, daysInMonth); | |||
var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7; | var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7; | ||
var curRows = Math.ceil((leadDays + | var curRows = Math.ceil((leadDays + daysInMonth) / 7); | ||
var numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); | var numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); | ||
this.maxRows = numRows; | this.maxRows = numRows; | ||
| 第6,761行: | 第6,839行: | ||
for (var dRow = 0; dRow < numRows; dRow++) { | for (var dRow = 0; dRow < numRows; dRow++) { | ||
calender += '<tr>'; | calender += '<tr>'; | ||
var tbody = (!showWeek ? '' : '<td class="ui-datepicker-week-col">' + this._get(inst, 'calculateWeek')(printDate) + '</td>'); | var tbody = (!showWeek ? '' : '<td class="ui-datepicker-week-col">' + | ||
this._get(inst, 'calculateWeek')(printDate) + '</td>'); | |||
for (var dow = 0; dow < 7; dow++) { | for (var dow = 0; dow < 7; dow++) { | ||
var daySettings = (beforeShowDay ? beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']); | var daySettings = (beforeShowDay ? | ||
beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']); | |||
var otherMonth = (printDate.getMonth() != drawMonth); | var otherMonth = (printDate.getMonth() != drawMonth); | ||
var unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] || (minDate && printDate < minDate) || (maxDate && printDate > maxDate); | var unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] || | ||
tbody += '<td class="' + ((dow + firstDay + 6) % 7 >= 5 ? ' ui-datepicker-week-end' : '') + (otherMonth ? ' ui-datepicker-other-month' : '') + ((printDate.getTime() == selectedDate.getTime() && drawMonth == inst.selectedMonth && inst._keyEvent) || (defaultDate.getTime() == printDate.getTime() && defaultDate.getTime() == selectedDate.getTime()) ? ' ' + this._dayOverClass : '') + (unselectable ? ' ' + this._unselectableClass + ' ui-state-disabled' : '') + (otherMonth && !showOtherMonths ? '' : ' ' + daySettings[1] + (printDate.getTime() == currentDate.getTime() ? ' ' + this._currentClass : '') + (printDate.getTime() == today.getTime() ? ' ui-datepicker-today' : '')) + '"' + ((!otherMonth || showOtherMonths) && daySettings[2] ? ' title="' + daySettings[2] + '"' : '') + (unselectable ? '' : ' data-handler="selectDay" data-event="click" data-month="' + printDate.getMonth() + '" data-year="' + printDate.getFullYear() + '"') + '>' + (otherMonth && !showOtherMonths ? ' ' : (unselectable ? '<span class="ui-state-default">' + printDate.getDate() + '</span>' : '<a class="ui-state-default' + (printDate.getTime() == today.getTime() ? ' ui-state-highlight' : '') + (printDate.getTime() == currentDate.getTime() ? ' ui-state-active' : '') + (otherMonth ? ' ui-priority-secondary' : '') + '" href="#">' + printDate.getDate() + '</a>')) + '</td>'; | (minDate && printDate < minDate) || (maxDate && printDate > maxDate); | ||
tbody += '<td class="' + | |||
((dow + firstDay + 6) % 7 >= 5 ? ' ui-datepicker-week-end' : '') + | |||
(otherMonth ? ' ui-datepicker-other-month' : '') + | |||
((printDate.getTime() == selectedDate.getTime() && drawMonth == inst.selectedMonth && inst._keyEvent) || | |||
(defaultDate.getTime() == printDate.getTime() && defaultDate.getTime() == selectedDate.getTime()) ? | |||
' ' + this._dayOverClass : '') + | |||
(unselectable ? ' ' + this._unselectableClass + ' ui-state-disabled' : '') + | |||
(otherMonth && !showOtherMonths ? '' : ' ' + daySettings[1] + | |||
(printDate.getTime() == currentDate.getTime() ? ' ' + this._currentClass : '') + | |||
(printDate.getTime() == today.getTime() ? ' ui-datepicker-today' : '')) + '"' + | |||
((!otherMonth || showOtherMonths) && daySettings[2] ? ' title="' + daySettings[2] + '"' : '') + | |||
(unselectable ? '' : ' data-handler="selectDay" data-event="click" data-month="' + printDate.getMonth() + '" data-year="' + printDate.getFullYear() + '"') + '>' + | |||
(otherMonth && !showOtherMonths ? ' ' : | |||
(unselectable ? '<span class="ui-state-default">' + printDate.getDate() + '</span>' : '<a class="ui-state-default' + | |||
(printDate.getTime() == today.getTime() ? ' ui-state-highlight' : '') + | |||
(printDate.getTime() == currentDate.getTime() ? ' ui-state-active' : '') + | |||
(otherMonth ? ' ui-priority-secondary' : '') + | |||
'" href="#">' + printDate.getDate() + '</a>')) + '</td>'; | |||
printDate.setDate(printDate.getDate() + 1); | printDate.setDate(printDate.getDate() + 1); | ||
printDate = this._daylightSavingAdjust(printDate); | printDate = this._daylightSavingAdjust(printDate); | ||
| 第6,777行: | 第6,875行: | ||
drawYear++; | drawYear++; | ||
} | } | ||
calender += '</tbody></table>' + (isMultiMonth ? '</div>' + ((numMonths[0] > 0 && col == numMonths[1] - 1) ? '<div class="ui-datepicker-row-break"></div>' : '') : ''); | calender += '</tbody></table>' + (isMultiMonth ? '</div>' + | ||
((numMonths[0] > 0 && col == numMonths[1] - 1) ? '<div class="ui-datepicker-row-break"></div>' : '') : ''); | |||
group += calender; | group += calender; | ||
} | } | ||
html += group; | html += group; | ||
} | } | ||
html += buttonPanel + ($.ui.ie6 && !inst.inline ? '<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>' : ''); | html += buttonPanel + ($.ui.ie6 && !inst.inline ? | ||
inst._keyEvent = | '<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>' : ''); | ||
inst._keyEvent = false; | |||
return html; | return html; | ||
}, | }, | ||
_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, secondary, monthNames, monthNamesShort) { | _generateMonthYearHeader: function (inst, drawMonth, drawYear, minDate, maxDate, secondary, monthNames, monthNamesShort) { | ||
var changeMonth = this._get(inst, 'changeMonth'); | var changeMonth = this._get(inst, 'changeMonth'); | ||
var changeYear = this._get(inst, 'changeYear'); | var changeYear = this._get(inst, 'changeYear'); | ||
| 第6,792行: | 第6,892行: | ||
var html = '<div class="ui-datepicker-title">'; | var html = '<div class="ui-datepicker-title">'; | ||
var monthHtml = ''; | var monthHtml = ''; | ||
if (secondary || !changeMonth) monthHtml += '<span class="ui-datepicker-month">' + monthNames[drawMonth] + '</span>'; | if (secondary || !changeMonth) | ||
monthHtml += '<span class="ui-datepicker-month">' + monthNames[drawMonth] + '</span>'; | |||
else { | else { | ||
var inMinYear = (minDate && minDate.getFullYear() == drawYear); | var inMinYear = (minDate && minDate.getFullYear() == drawYear); | ||
var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear); | var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear); | ||
monthHtml += | monthHtml += '<select class="ui-datepicker-month" data-handler="selectMonth" data-event="change">'; | ||
for (var month = 0; month < 12; month++) { | for (var month = 0; month < 12; month++) { | ||
if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) monthHtml += '<option value="' + month + '"' + (month == drawMonth ? ' selected="selected"' : '') + '>' + monthNamesShort[month] + '</option>'; | if ((!inMinYear || month >= minDate.getMonth()) && | ||
(!inMaxYear || month <= maxDate.getMonth())) | |||
monthHtml += '<option value="' + month + '"' + | |||
(month == drawMonth ? ' selected="selected"' : '') + | |||
'>' + monthNamesShort[month] + '</option>'; | |||
} | } | ||
monthHtml += '</select>'; | monthHtml += '</select>'; | ||
} | } | ||
if (!showMonthAfterYear) html += monthHtml + (secondary || !(changeMonth && changeYear) ? ' ' : ''); | if (!showMonthAfterYear) | ||
html += monthHtml + (secondary || !(changeMonth && changeYear) ? ' ' : ''); | |||
if (!inst.yearshtml) { | if (!inst.yearshtml) { | ||
inst.yearshtml = ''; | inst.yearshtml = ''; | ||
if (secondary || !changeYear) html += '<span class="ui-datepicker-year">' + drawYear + '</span>'; | if (secondary || !changeYear) | ||
html += '<span class="ui-datepicker-year">' + drawYear + '</span>'; | |||
else { | else { | ||
var years = this._get(inst, 'yearRange').split(':'); | var years = this._get(inst, 'yearRange').split(':'); | ||
var thisYear = new Date().getFullYear(); | var thisYear = new Date().getFullYear(); | ||
var determineYear = function(value) { | var determineYear = function (value) { | ||
var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) : (value.match(/[+-].*/) ? thisYear + parseInt(value, 10) : parseInt(value, 10))); | var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) : | ||
(value.match(/[+-].*/) ? thisYear + parseInt(value, 10) : | |||
parseInt(value, 10))); | |||
return (isNaN(year) ? thisYear : year); | return (isNaN(year) ? thisYear : year); | ||
}; | }; | ||
| 第6,820行: | 第6,928行: | ||
inst.yearshtml += '<select class="ui-datepicker-year" data-handler="selectYear" data-event="change">'; | inst.yearshtml += '<select class="ui-datepicker-year" data-handler="selectYear" data-event="change">'; | ||
for (; year <= endYear; year++) { | for (; year <= endYear; year++) { | ||
inst.yearshtml += '<option value="' + year + '"' + (year == drawYear ? ' selected="selected"' : '') + '>' + year + '</option>'; | inst.yearshtml += '<option value="' + year + '"' + | ||
(year == drawYear ? ' selected="selected"' : '') + | |||
'>' + year + '</option>'; | |||
} | } | ||
inst.yearshtml += '</select>'; | inst.yearshtml += '</select>'; | ||
| 第6,828行: | 第6,938行: | ||
} | } | ||
html += this._get(inst, 'yearSuffix'); | html += this._get(inst, 'yearSuffix'); | ||
if (showMonthAfterYear) html += (secondary || !(changeMonth && changeYear) ? ' ' : '') + monthHtml; | if (showMonthAfterYear) | ||
html += (secondary || !(changeMonth && changeYear) ? ' ' : '') + monthHtml; | |||
html += '</div>'; | html += '</div>'; | ||
return html; | return html; | ||
}, | }, | ||
_adjustInstDate: function(inst, offset, period) { | _adjustInstDate: function (inst, offset, period) { | ||
var year = inst.drawYear + (period == 'Y' ? offset : 0); | var year = inst.drawYear + (period == 'Y' ? offset : 0); | ||
var month = inst.drawMonth + (period == 'M' ? offset : 0); | var month = inst.drawMonth + (period == 'M' ? offset : 0); | ||
var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period == 'D' ? offset : 0); | var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + | ||
(period == 'D' ? offset : 0); | |||
var date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day))); | var date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day))); | ||
inst.selectedDay = date.getDate(); | inst.selectedDay = date.getDate(); | ||
inst.drawMonth = inst.selectedMonth = date.getMonth(); | inst.drawMonth = inst.selectedMonth = date.getMonth(); | ||
inst.drawYear = inst.selectedYear = date.getFullYear(); | inst.drawYear = inst.selectedYear = date.getFullYear(); | ||
if (period == 'M' || period == 'Y') this._notifyChange(inst); | if (period == 'M' || period == 'Y') | ||
this._notifyChange(inst); | |||
}, | }, | ||
_restrictMinMax: function(inst, date) { | _restrictMinMax: function (inst, date) { | ||
var minDate = this._getMinMaxDate(inst, 'min'); | var minDate = this._getMinMaxDate(inst, 'min'); | ||
var maxDate = this._getMinMaxDate(inst, 'max'); | var maxDate = this._getMinMaxDate(inst, 'max'); | ||
| 第6,849行: | 第6,962行: | ||
return newDate; | return newDate; | ||
}, | }, | ||
_notifyChange: function(inst) { | _notifyChange: function (inst) { | ||
var onChange = this._get(inst, 'onChangeMonthYear'); | var onChange = this._get(inst, 'onChangeMonthYear'); | ||
if (onChange) onChange.apply((inst.input ? inst.input[0] : null), [inst.selectedYear, inst.selectedMonth + 1, inst]); | if (onChange) | ||
onChange.apply((inst.input ? inst.input[0] : null), [inst.selectedYear, inst.selectedMonth + 1, inst]); | |||
}, | }, | ||
_getNumberOfMonths: function(inst) { | _getNumberOfMonths: function (inst) { | ||
var numMonths = this._get(inst, 'numberOfMonths'); | var numMonths = this._get(inst, 'numberOfMonths'); | ||
return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths)); | return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths)); | ||
}, | }, | ||
_getMinMaxDate: function(inst, minMax) { | _getMinMaxDate: function (inst, minMax) { | ||
return this._determineDate(inst, this._get(inst, minMax + 'Date'), null); | return this._determineDate(inst, this._get(inst, minMax + 'Date'), null); | ||
}, | }, | ||
_getDaysInMonth: function(year, month) { | _getDaysInMonth: function (year, month) { | ||
return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate(); | return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate(); | ||
}, | }, | ||
_getFirstDayOfMonth: function(year, month) { | _getFirstDayOfMonth: function (year, month) { | ||
return new Date(year, month, 1).getDay(); | return new Date(year, month, 1).getDay(); | ||
}, | }, | ||
_canAdjustMonth: function(inst, offset, curYear, | _canAdjustMonth: function (inst, offset, curYear, curMonth) { | ||
var numMonths = this._getNumberOfMonths(inst); | var numMonths = this._getNumberOfMonths(inst); | ||
var date = this._daylightSavingAdjust(new Date(curYear, curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1)); | var date = this._daylightSavingAdjust(new Date(curYear, curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1)); | ||
if (offset < 0) date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); | if (offset < 0) | ||
date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); | |||
return this._isInRange(inst, date); | return this._isInRange(inst, date); | ||
}, | }, | ||
_isInRange: function(inst, date) { | _isInRange: function (inst, date) { | ||
var minDate = this._getMinMaxDate(inst, 'min'); | var minDate = this._getMinMaxDate(inst, 'min'); | ||
var maxDate = this._getMinMaxDate(inst, 'max'); | var maxDate = this._getMinMaxDate(inst, 'max'); | ||
return ((!minDate || date.getTime() >= minDate.getTime()) && (!maxDate || date.getTime() <= maxDate.getTime())); | return ((!minDate || date.getTime() >= minDate.getTime()) && | ||
(!maxDate || date.getTime() <= maxDate.getTime())); | |||
}, | }, | ||
_getFormatConfig: function(inst) { | _getFormatConfig: function (inst) { | ||
var shortYearCutoff = this._get(inst, 'shortYearCutoff'); | var shortYearCutoff = this._get(inst, 'shortYearCutoff'); | ||
shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); | shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : | ||
return { | new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); | ||
return { shortYearCutoff: shortYearCutoff, | |||
dayNamesShort: this._get(inst, 'dayNamesShort'), | dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'), | ||
monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames') }; | |||
monthNamesShort: this._get(inst, 'monthNamesShort'), | |||
}, | }, | ||
_formatDate: function(inst, day, month, year) { | _formatDate: function (inst, day, month, year) { | ||
if (!day) { | if (!day) { | ||
inst.currentDay = | inst.currentDay = inst.selectedDay; | ||
inst.currentMonth = inst.selectedMonth; | inst.currentMonth = inst.selectedMonth; | ||
inst.currentYear = inst.selectedYear; | inst.currentYear = inst.selectedYear; | ||
} | } | ||
var date = (day ? (typeof day == 'object' ? day : this._daylightSavingAdjust(new Date(year, month, day))) : this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); | var date = (day ? (typeof day == 'object' ? day : | ||
this._daylightSavingAdjust(new Date(year, month, day))) : | |||
this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); | |||
return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst)); | return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst)); | ||
} | } | ||
}); | }); | ||
function bindHover(dpDiv) { | function bindHover(dpDiv) { | ||
var selector = 'button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a'; | var selector = 'button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a'; | ||
return dpDiv. | return dpDiv.on('mouseout', selector, function () { | ||
$(this).removeClass('ui-state-hover'); | $(this).removeClass('ui-state-hover'); | ||
if (this.className.indexOf('ui-datepicker-prev') != -1) $(this).removeClass('ui-datepicker-prev-hover'); | if (this.className.indexOf('ui-datepicker-prev') != -1) | ||
if (this.className.indexOf('ui-datepicker-next') != -1) $(this).removeClass('ui-datepicker-next-hover'); | $(this).removeClass('ui-datepicker-prev-hover'); | ||
}). | if (this.className.indexOf('ui-datepicker-next') != -1) | ||
$(this).removeClass('ui-datepicker-next-hover'); | |||
}) | |||
.on('mouseover', selector, function () { | |||
if (!$.datepicker._isDisabledDatepicker(instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) { | if (!$.datepicker._isDisabledDatepicker(instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) { | ||
$(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover'); | $(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover'); | ||
$ | $(this).addClass('ui-state-hover'); | ||
if (this.className.indexOf('ui-datepicker-prev') != -1) | |||
if (this.className.indexOf('ui-datepicker-prev') != -1) $(this).addClass('ui-datepicker-prev-hover'); | $(this).addClass('ui-datepicker-prev-hover'); | ||
if (this.className.indexOf('ui-datepicker-next') != -1) $(this).addClass('ui-datepicker-next-hover'); | if (this.className.indexOf('ui-datepicker-next') != -1) | ||
$(this).addClass('ui-datepicker-next-hover'); | |||
} | } | ||
}); | }); | ||
} | } | ||
function extendRemove(target, props) { | function extendRemove(target, props) { | ||
$.extend(target, props); | $.extend(target, props); | ||
for (var name in props) | for (var name in props) | ||
if (props[name] == null || props[name] == undefined) target[name] = props[name]; | if (props[name] == null || props[name] == undefined) | ||
target[name] = props[name]; | |||
return target; | return target; | ||
}; | } | ||
$.fn.datepicker = function(options) { | ; | ||
$.fn.datepicker = function (options) { | |||
if (!this.length) { | if (!this.length) { | ||
return this; | return this; | ||
} | } | ||
if (!$.datepicker.initialized) { | if (!$.datepicker.initialized) { | ||
$(document).mousedown($.datepicker._checkExternalClick).find(document.body).append($.datepicker.dpDiv); | $(document).mousedown($.datepicker._checkExternalClick). | ||
$.datepicker.initialized = | find(document.body).append($.datepicker.dpDiv); | ||
$.datepicker.initialized = true; | |||
} | } | ||
var otherArgs = Array.prototype.slice.call(arguments, 1); | var otherArgs = Array.prototype.slice.call(arguments, 1); | ||
if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget')) return $.datepicker['_' + options + 'Datepicker'].apply($.datepicker, [this[0]].concat(otherArgs)); | if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget')) | ||
if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string') return $.datepicker['_' + options + 'Datepicker'].apply($.datepicker, [this[0]].concat(otherArgs)); | return $.datepicker['_' + options + 'Datepicker']. | ||
return this.each(function() { | apply($.datepicker, [this[0]].concat(otherArgs)); | ||
typeof options == 'string' ? $.datepicker['_' + options + 'Datepicker'].apply($.datepicker, [this].concat(otherArgs)) : $.datepicker._attachDatepicker(this, options); | if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string') | ||
return $.datepicker['_' + options + 'Datepicker']. | |||
apply($.datepicker, [this[0]].concat(otherArgs)); | |||
return this.each(function () { | |||
typeof options == 'string' ? | |||
$.datepicker['_' + options + 'Datepicker']. | |||
apply($.datepicker, [this].concat(otherArgs)) : | |||
$.datepicker._attachDatepicker(this, options); | |||
}); | }); | ||
}; | }; | ||
$.datepicker = new Datepicker(); | $.datepicker = new Datepicker(); | ||
$.datepicker.initialized = | $.datepicker.initialized = false; | ||
$.datepicker.uuid = new Date().getTime(); | $.datepicker.uuid = new Date().getTime(); | ||
$.datepicker.version = "1.9.2"; | $.datepicker.version = "1.9.2"; | ||
window['DP_jQuery_' + dpuuid] = $; | window['DP_jQuery_' + dpuuid] = $; | ||
})(jQuery); | })(jQuery); | ||
(function($, undefined) { | (function ($, undefined) { | ||
var uiDialogClasses = "ui-dialog ui-widget ui-widget-content ui-corner-all ", | var uiDialogClasses = "ui-dialog ui-widget ui-widget-content ui-corner-all ", sizeRelatedOptions = { | ||
buttons: true, | |||
height: true, | |||
maxHeight: true, | |||
maxWidth: true, | |||
minHeight: true, | |||
minWidth: true, | |||
width: true | |||
}, resizableRelatedOptions = { | |||
maxHeight: true, | |||
maxWidth: true, | |||
minHeight: true, | |||
minWidth: true | |||
}; | |||
$.widget("ui.dialog", { | $.widget("ui.dialog", { | ||
version: "1.9.2", | version: "1.9.2", | ||
options: { | options: { | ||
autoOpen: | autoOpen: true, | ||
buttons: {}, | buttons: {}, | ||
closeOnEscape: | closeOnEscape: true, | ||
closeText: "close", | closeText: "close", | ||
dialogClass: "", | dialogClass: "", | ||
draggable: | draggable: true, | ||
hide: null, | hide: null, | ||
height: "auto", | height: "auto", | ||
maxHeight: | maxHeight: false, | ||
maxWidth: | maxWidth: false, | ||
minHeight: 150, | minHeight: 150, | ||
minWidth: 150, | minWidth: 150, | ||
modal: | modal: false, | ||
position: { | position: { | ||
my: "center", | my: "center", | ||
| 第6,983行: | 第7,106行: | ||
of: window, | of: window, | ||
collision: "fit", | collision: "fit", | ||
using: function(pos) { | using: function (pos) { | ||
var topOffset = $(this).css(pos).offset().top; | var topOffset = $(this).css(pos).offset().top; | ||
if (topOffset < 0) { | if (topOffset < 0) { | ||
| 第6,990行: | 第7,113行: | ||
} | } | ||
}, | }, | ||
resizable: | resizable: true, | ||
show: null, | show: null, | ||
stack: | stack: true, | ||
title: "", | title: "", | ||
width: 300, | width: 300, | ||
zIndex: 1000 | zIndex: 1000 | ||
}, | }, | ||
_create: function() { | _create: function () { | ||
this.originalTitle = this.element.attr("title"); | this.originalTitle = this.element.attr("title"); | ||
if (typeof this.originalTitle !== "string") { | if (typeof this.originalTitle !== "string") { | ||
| 第7,007行: | 第7,130行: | ||
}; | }; | ||
this.options.title = this.options.title || this.originalTitle; | this.options.title = this.options.title || this.originalTitle; | ||
var that = this, | var that = this, options = this.options, title = options.title || " ", uiDialog, uiDialogTitlebar, uiDialogTitlebarClose, uiDialogTitle, uiDialogButtonPane; | ||
uiDialog = (this.uiDialog = $("<div>")) | |||
.addClass(uiDialogClasses + options.dialogClass) | |||
.css({ | |||
uiDialog = (this.uiDialog = $("<div>")).addClass(uiDialogClasses + options.dialogClass).css({ | |||
display: "none", | display: "none", | ||
outline: | outline: "none", | ||
zIndex: options.zIndex | zIndex: options.zIndex | ||
}).attr("tabIndex", -1).keydown(function(event) { | }) | ||
if (options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && event.keyCode === $.ui.keyCode.ESCAPE) { | .attr("tabIndex", -1) | ||
.keydown(function (event) { | |||
if (options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && | |||
event.keyCode === $.ui.keyCode.ESCAPE) { | |||
that.close(event); | that.close(event); | ||
event.preventDefault(); | event.preventDefault(); | ||
} | } | ||
}).mousedown(function(event) { | }) | ||
that.moveToTop( | .mousedown(function (event) { | ||
that.moveToTop(false, event); | |||
}).appendTo("body"); | }) | ||
this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(uiDialog); | .appendTo("body"); | ||
uiDialogTitlebar = (this.uiDialogTitlebar = $("<div>")).addClass("ui-dialog-titlebar ui-widget-header " + "ui-corner-all ui-helper-clearfix"). | this.element | ||
.show() | |||
.removeAttr("title") | |||
.addClass("ui-dialog-content ui-widget-content") | |||
.appendTo(uiDialog); | |||
uiDialogTitlebar = (this.uiDialogTitlebar = $("<div>")) | |||
.addClass("ui-dialog-titlebar ui-widget-header " + | |||
"ui-corner-all ui-helper-clearfix") | |||
.on("mousedown", function () { | |||
uiDialog.focus(); | uiDialog.focus(); | ||
}).prependTo(uiDialog); | }) | ||
uiDialogTitlebarClose = $("<a href='#'></a>").addClass("ui-dialog-titlebar-close ui-corner-all").attr("role", "button").click(function(event) { | .prependTo(uiDialog); | ||
uiDialogTitlebarClose = $("<a href='#'></a>") | |||
.addClass("ui-dialog-titlebar-close ui-corner-all") | |||
.attr("role", "button") | |||
.click(function (event) { | |||
event.preventDefault(); | event.preventDefault(); | ||
that.close(event); | that.close(event); | ||
}).appendTo(uiDialogTitlebar); | }) | ||
(this.uiDialogTitlebarCloseText = $("<span>")).addClass("ui-icon ui-icon-closethick").text(options.closeText).appendTo(uiDialogTitlebarClose); | .appendTo(uiDialogTitlebar); | ||
uiDialogTitle = $("<span>").uniqueId().addClass("ui-dialog-title").html(title).prependTo(uiDialogTitlebar); | (this.uiDialogTitlebarCloseText = $("<span>")) | ||
uiDialogButtonPane = (this.uiDialogButtonPane = $("<div>")).addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"); | .addClass("ui-icon ui-icon-closethick") | ||
(this.uiButtonSet = $("<div>")).addClass("ui-dialog-buttonset").appendTo( | .text(options.closeText) | ||
.appendTo(uiDialogTitlebarClose); | |||
uiDialogTitle = $("<span>") | |||
.uniqueId() | |||
.addClass("ui-dialog-title") | |||
.html(title) | |||
.prependTo(uiDialogTitlebar); | |||
uiDialogButtonPane = (this.uiDialogButtonPane = $("<div>")) | |||
.addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"); | |||
(this.uiButtonSet = $("<div>")) | |||
.addClass("ui-dialog-buttonset") | |||
.appendTo(uiDialogButtonPane); | |||
uiDialog.attr({ | uiDialog.attr({ | ||
role: "dialog", | role: "dialog", | ||
| 第7,051行: | 第7,198行: | ||
} | } | ||
this._createButtons(options.buttons); | this._createButtons(options.buttons); | ||
this._isOpen = | this._isOpen = false; | ||
if ($.fn.bgiframe) { | if ($.fn.bgiframe) { | ||
uiDialog.bgiframe(); | uiDialog.bgiframe(); | ||
} | } | ||
this._on(uiDialog, { | this._on(uiDialog, { keydown: function (event) { | ||
if (!options.modal || event.keyCode !== $.ui.keyCode.TAB) { | if (!options.modal || event.keyCode !== $.ui.keyCode.TAB) { | ||
return; | return; | ||
} | } | ||
var tabbables = $(":tabbable", uiDialog), | var tabbables = $(":tabbable", uiDialog), first = tabbables.filter(":first"), last = tabbables.filter(":last"); | ||
if (event.target === last[0] && !event.shiftKey) { | if (event.target === last[0] && !event.shiftKey) { | ||
first.focus(1); | first.focus(1); | ||
return false; | return false; | ||
} else if (event.target === first[0] && event.shiftKey) { | } | ||
else if (event.target === first[0] && event.shiftKey) { | |||
last.focus(1); | last.focus(1); | ||
return false; | return false; | ||
} | } | ||
} | } }); | ||
}, | }, | ||
_init: function() { | _init: function () { | ||
if (this.options.autoOpen) { | if (this.options.autoOpen) { | ||
this.open(); | this.open(); | ||
} | } | ||
}, | }, | ||
_destroy: function() { | _destroy: function () { | ||
var next, oldPosition = this.oldPosition; | var next, oldPosition = this.oldPosition; | ||
if (this.overlay) { | if (this.overlay) { | ||
| 第7,084行: | 第7,228行: | ||
} | } | ||
this.uiDialog.hide(); | this.uiDialog.hide(); | ||
this.element.removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"); | this.element | ||
.removeClass("ui-dialog-content ui-widget-content") | |||
.hide() | |||
.appendTo("body"); | |||
this.uiDialog.remove(); | this.uiDialog.remove(); | ||
if (this.originalTitle) { | if (this.originalTitle) { | ||
| 第7,092行: | 第7,239行: | ||
if (next.length && next[0] !== this.element[0]) { | if (next.length && next[0] !== this.element[0]) { | ||
next.before(this.element); | next.before(this.element); | ||
} else { | } | ||
else { | |||
oldPosition.parent.append(this.element); | oldPosition.parent.append(this.element); | ||
} | } | ||
}, | }, | ||
widget: function() { | widget: function () { | ||
return this.uiDialog; | return this.uiDialog; | ||
}, | }, | ||
close: function(event) { | close: function (event) { | ||
var that = this, | var that = this, maxZ, thisZ; | ||
if (!this._isOpen) { | if (!this._isOpen) { | ||
return; | return; | ||
| 第7,108行: | 第7,255行: | ||
return; | return; | ||
} | } | ||
this._isOpen = | this._isOpen = false; | ||
if (this.overlay) { | if (this.overlay) { | ||
this.overlay.destroy(); | this.overlay.destroy(); | ||
} | } | ||
if (this.options.hide) { | if (this.options.hide) { | ||
this._hide(this.uiDialog, this.options.hide, function() { | this._hide(this.uiDialog, this.options.hide, function () { | ||
that._trigger("close", event); | that._trigger("close", event); | ||
}); | }); | ||
} else { | } | ||
else { | |||
this.uiDialog.hide(); | this.uiDialog.hide(); | ||
this._trigger("close", event); | this._trigger("close", event); | ||
| 第7,123行: | 第7,271行: | ||
if (this.options.modal) { | if (this.options.modal) { | ||
maxZ = 0; | maxZ = 0; | ||
$(".ui-dialog").each(function() { | $(".ui-dialog").each(function () { | ||
if (this !== that.uiDialog[0]) { | if (this !== that.uiDialog[0]) { | ||
thisZ = $(this).css("z-index"); | thisZ = $(this).css("z-index"); | ||
| 第7,135行: | 第7,283行: | ||
return this; | return this; | ||
}, | }, | ||
isOpen: function() { | isOpen: function () { | ||
return this._isOpen; | return this._isOpen; | ||
}, | }, | ||
moveToTop: function(force, event) { | moveToTop: function (force, event) { | ||
var options = this.options, | var options = this.options, saveScroll; | ||
if ((options.modal && !force) || | |||
if ((options.modal && !force) || (!options.stack && !options.modal)) { | (!options.stack && !options.modal)) { | ||
return this._trigger("focus", event); | return this._trigger("focus", event); | ||
} | } | ||
| 第7,162行: | 第7,310行: | ||
return this; | return this; | ||
}, | }, | ||
open: function() { | open: function () { | ||
if (this._isOpen) { | if (this._isOpen) { | ||
return; | return; | ||
} | } | ||
var hasFocus, options = this.options, | var hasFocus, options = this.options, uiDialog = this.uiDialog; | ||
this._size(); | this._size(); | ||
this._position(options.position); | this._position(options.position); | ||
| 第7,176行: | 第7,323行: | ||
if (!hasFocus.length) { | if (!hasFocus.length) { | ||
hasFocus = this.uiDialogButtonPane.find(":tabbable"); | hasFocus = this.uiDialogButtonPane.find(":tabbable"); | ||
if (!hasFocus | if (!hasFocus.length) { | ||
hasFocus = uiDialog; | hasFocus = uiDialog; | ||
} | } | ||
} | } | ||
hasFocus.eq(0).focus(); | hasFocus.eq(0).focus(); | ||
this._isOpen = | this._isOpen = true; | ||
this._trigger("open"); | this._trigger("open"); | ||
return this; | return this; | ||
}, | }, | ||
_createButtons: function(buttons) { | _createButtons: function (buttons) { | ||
var that = this, | var that = this, hasButtons = false; | ||
this.uiDialogButtonPane.remove(); | this.uiDialogButtonPane.remove(); | ||
this.uiButtonSet.empty(); | this.uiButtonSet.empty(); | ||
if (typeof buttons === "object" && buttons !== null) { | if (typeof buttons === "object" && buttons !== null) { | ||
$.each(buttons, function() { | $.each(buttons, function () { | ||
return !(hasButtons = true); | return !(hasButtons = true); | ||
}); | }); | ||
} | } | ||
if (hasButtons) { | if (hasButtons) { | ||
$.each(buttons, function(name, props) { | $.each(buttons, function (name, props) { | ||
var button, click; | var button, click; | ||
props = | props = typeof props === 'function' ? | ||
click: props, | { click: props, text: name } : | ||
props; | |||
props = $.extend({ type: "button" }, props); | |||
props = $.extend({ | |||
click = props.click; | click = props.click; | ||
props.click = function() { | props.click = function () { | ||
click.apply(that.element[0], arguments); | click.apply(that.element[0], arguments); | ||
}; | }; | ||
button = $("<button></button>", props).appendTo(that.uiButtonSet); | button = $("<button></button>", props) | ||
.appendTo(that.uiButtonSet); | |||
if ($.fn.button) { | if ($.fn.button) { | ||
button.button(); | button.button(); | ||
| 第7,217行: | 第7,360行: | ||
this.uiDialog.addClass("ui-dialog-buttons"); | this.uiDialog.addClass("ui-dialog-buttons"); | ||
this.uiDialogButtonPane.appendTo(this.uiDialog); | this.uiDialogButtonPane.appendTo(this.uiDialog); | ||
} else { | } | ||
else { | |||
this.uiDialog.removeClass("ui-dialog-buttons"); | this.uiDialog.removeClass("ui-dialog-buttons"); | ||
} | } | ||
}, | }, | ||
_makeDraggable: function() { | _makeDraggable: function () { | ||
var that = this, | var that = this, options = this.options; | ||
function filteredUi(ui) { | function filteredUi(ui) { | ||
return { | return { | ||
| 第7,235行: | 第7,377行: | ||
handle: ".ui-dialog-titlebar", | handle: ".ui-dialog-titlebar", | ||
containment: "document", | containment: "document", | ||
start: function(event, ui) { | start: function (event, ui) { | ||
$(this).addClass("ui-dialog-dragging"); | $(this) | ||
.addClass("ui-dialog-dragging"); | |||
that._trigger("dragStart", event, filteredUi(ui)); | that._trigger("dragStart", event, filteredUi(ui)); | ||
}, | }, | ||
drag: function(event, ui) { | drag: function (event, ui) { | ||
that._trigger("drag", event, filteredUi(ui)); | that._trigger("drag", event, filteredUi(ui)); | ||
}, | }, | ||
stop: function(event, ui) { | stop: function (event, ui) { | ||
options.position = [ui.position.left - that.document.scrollLeft(), ui.position.top - that.document.scrollTop()]; | options.position = [ | ||
$(this).removeClass("ui-dialog-dragging"); | ui.position.left - that.document.scrollLeft(), | ||
ui.position.top - that.document.scrollTop() | |||
]; | |||
$(this) | |||
.removeClass("ui-dialog-dragging"); | |||
that._trigger("dragStop", event, filteredUi(ui)); | that._trigger("dragStop", event, filteredUi(ui)); | ||
$.ui.dialog.overlay.resize(); | $.ui.dialog.overlay.resize(); | ||
| 第7,250行: | 第7,397行: | ||
}); | }); | ||
}, | }, | ||
_makeResizable: function(handles) { | _makeResizable: function (handles) { | ||
handles = (handles === undefined ? this.options.resizable : handles); | handles = (handles === undefined ? this.options.resizable : handles); | ||
var that = this, | var that = this, options = this.options, position = this.uiDialog.css("position"), resizeHandles = typeof handles === 'string' ? | ||
handles : | |||
"n,e,s,w,se,sw,ne,nw"; | |||
function filteredUi(ui) { | function filteredUi(ui) { | ||
return { | return { | ||
| 第7,268行: | 第7,413行: | ||
cancel: ".ui-dialog-content", | cancel: ".ui-dialog-content", | ||
containment: "document", | containment: "document", | ||
alsoResize: this. | alsoResize: this.element, | ||
maxWidth: options.maxWidth, | maxWidth: options.maxWidth, | ||
maxHeight: options.maxHeight, | maxHeight: options.maxHeight, | ||
| 第7,275行: | 第7,419行: | ||
minHeight: this._minHeight(), | minHeight: this._minHeight(), | ||
handles: resizeHandles, | handles: resizeHandles, | ||
start: function(event, ui) { | start: function (event, ui) { | ||
$(this).addClass("ui-dialog-resizing"); | $(this).addClass("ui-dialog-resizing"); | ||
that._trigger("resizeStart", event, filteredUi(ui)); | that._trigger("resizeStart", event, filteredUi(ui)); | ||
}, | }, | ||
resize: function(event, ui) { | resize: function (event, ui) { | ||
that._trigger("resize", event, filteredUi(ui)); | that._trigger("resize", event, filteredUi(ui)); | ||
}, | }, | ||
stop: function(event, ui) { | stop: function (event, ui) { | ||
$(this).removeClass("ui-dialog-resizing"); | $(this).removeClass("ui-dialog-resizing"); | ||
options.height = $(this).height(); | options.height = $(this).height(); | ||
| 第7,289行: | 第7,433行: | ||
$.ui.dialog.overlay.resize(); | $.ui.dialog.overlay.resize(); | ||
} | } | ||
}).css("position", position).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se"); | }) | ||
.css("position", position) | |||
.find(".ui-resizable-se") | |||
.addClass("ui-icon ui-icon-grip-diagonal-se"); | |||
}, | }, | ||
_minHeight: function() { | _minHeight: function () { | ||
var options = this.options; | var options = this.options; | ||
if (options.height === "auto") { | if (options.height === "auto") { | ||
return options.minHeight; | return options.minHeight; | ||
} else { | } | ||
else { | |||
return Math.min(options.minHeight, options.height); | return Math.min(options.minHeight, options.height); | ||
} | } | ||
}, | }, | ||
_position: function(position) { | _position: function (position) { | ||
var myAt = [], | var myAt = [], offset = [0, 0], isVisible; | ||
if (position) { | if (position) { | ||
if (typeof position === "string" || (typeof position === "object" && "0" in position)) { | if (typeof position === "string" || (typeof position === "object" && "0" in position)) { | ||
myAt = position.split ? position.split(" ") : [position[0], | myAt = position.split ? position.split(" ") : [position[0], position[1]]; | ||
if (myAt.length === 1) { | if (myAt.length === 1) { | ||
myAt[1] = myAt[0]; | myAt[1] = myAt[0]; | ||
} | } | ||
$.each(["left", "top"], function(i, offsetPosition) { | $.each(["left", "top"], function (i, offsetPosition) { | ||
if (+myAt[i] === myAt[i]) { | if (+myAt[i] === myAt[i]) { | ||
offset[i] = myAt[i]; | offset[i] = myAt[i]; | ||
| 第7,318行: | 第7,462行: | ||
}); | }); | ||
position = { | position = { | ||
my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " + myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]), | my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " + | ||
myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]), | |||
at: myAt.join(" ") | at: myAt.join(" ") | ||
}; | }; | ||
} | } | ||
position = $.extend({}, $.ui.dialog.prototype.options.position, position); | position = $.extend({}, $.ui.dialog.prototype.options.position, position); | ||
} else { | } | ||
else { | |||
position = $.ui.dialog.prototype.options.position; | position = $.ui.dialog.prototype.options.position; | ||
} | } | ||
| 第7,335行: | 第7,481行: | ||
} | } | ||
}, | }, | ||
_setOptions: function(options) { | _setOptions: function (options) { | ||
var that = this, | var that = this, resizableOptions = {}, resize = false; | ||
$.each(options, function (key, value) { | |||
$.each(options, function(key, value) { | |||
that._setOption(key, value); | that._setOption(key, value); | ||
if (key in sizeRelatedOptions) { | if (key in sizeRelatedOptions) { | ||
resize = | resize = true; | ||
} | } | ||
if (key in resizableRelatedOptions) { | if (key in resizableRelatedOptions) { | ||
| 第7,355行: | 第7,499行: | ||
} | } | ||
}, | }, | ||
_setOption: function(key, value) { | _setOption: function (key, value) { | ||
var isDraggable, isResizable, | var isDraggable, isResizable, uiDialog = this.uiDialog; | ||
switch (key) { | switch (key) { | ||
case "buttons": | case "buttons": | ||
| 第7,366行: | 第7,509行: | ||
break; | break; | ||
case "dialogClass": | case "dialogClass": | ||
uiDialog.removeClass(this.options.dialogClass).addClass(uiDialogClasses + value); | uiDialog | ||
.removeClass(this.options.dialogClass) | |||
.addClass(uiDialogClasses + value); | |||
break; | break; | ||
case "disabled": | case "disabled": | ||
if (value) { | if (value) { | ||
uiDialog.addClass("ui-dialog-disabled"); | uiDialog.addClass("ui-dialog-disabled"); | ||
} else { | } | ||
else { | |||
uiDialog.removeClass("ui-dialog-disabled"); | uiDialog.removeClass("ui-dialog-disabled"); | ||
} | } | ||
| 第7,400行: | 第7,546行: | ||
break; | break; | ||
case "title": | case "title": | ||
$(".ui-dialog-title", this.uiDialogTitlebar).html("" + (value || " ")); | $(".ui-dialog-title", this.uiDialogTitlebar) | ||
.html("" + (value || " ")); | |||
break; | break; | ||
} | } | ||
this._super(key, value); | this._super(key, value); | ||
}, | }, | ||
_size: function() { | _size: function () { | ||
var | var nonContentHeight, minContentHeight, autoHeight, options = this.options, isVisible = this.uiDialog.is(":visible"); | ||
this.element.show().css({ | this.element.show().css({ | ||
width: "auto", | width: "auto", | ||
| 第7,420行: | 第7,565行: | ||
height: "auto", | height: "auto", | ||
width: options.width | width: options.width | ||
}).outerHeight(); | }) | ||
.outerHeight(); | |||
minContentHeight = Math.max(0, options.minHeight - nonContentHeight); | minContentHeight = Math.max(0, options.minHeight - nonContentHeight); | ||
if (options.height === "auto") { | if (options.height === "auto") { | ||
| 第7,428行: | 第7,574行: | ||
height: "auto" | height: "auto" | ||
}); | }); | ||
} else { | } | ||
else { | |||
this.uiDialog.show(); | this.uiDialog.show(); | ||
autoHeight = this.element.css("height", "auto").height(); | autoHeight = this.element.css("height", "auto").height(); | ||
| 第7,436行: | 第7,583行: | ||
this.element.height(Math.max(autoHeight, minContentHeight)); | this.element.height(Math.max(autoHeight, minContentHeight)); | ||
} | } | ||
} else { | } | ||
else { | |||
this.element.height(Math.max(options.height - nonContentHeight, 0)); | this.element.height(Math.max(options.height - nonContentHeight, 0)); | ||
} | } | ||
| 第7,447行: | 第7,595行: | ||
uuid: 0, | uuid: 0, | ||
maxZ: 0, | maxZ: 0, | ||
getTitleId: function($el) { | getTitleId: function ($el) { | ||
var id = $el.attr("id"); | var id = $el.attr("id"); | ||
if (!id) { | if (!id) { | ||
| 第7,453行: | 第7,601行: | ||
id = this.uuid; | id = this.uuid; | ||
} | } | ||
return "ui-dialog-title-" + | return "ui-dialog-title-" + id; | ||
}, | }, | ||
overlay: function(dialog) { | overlay: function (dialog) { | ||
this.$el = $.ui.dialog.overlay.create(dialog); | this.$el = $.ui.dialog.overlay.create(dialog); | ||
} | } | ||
| 第7,464行: | 第7,611行: | ||
oldInstances: [], | oldInstances: [], | ||
maxZ: 0, | maxZ: 0, | ||
events: $.map("focus,mousedown,mouseup,keydown,keypress,click".split(","), function(event) { | events: $.map("focus,mousedown,mouseup,keydown,keypress,click".split(","), function (event) { | ||
return event + ".dialog-overlay"; | return event + ".dialog-overlay"; | ||
}).join(" "), | }).join(" "), | ||
create: function(dialog) { | create: function (dialog) { | ||
if (this.instances.length === 0) { | if (this.instances.length === 0) { | ||
setTimeout(function() { | setTimeout(function () { | ||
if ($.ui.dialog.overlay.instances.length) { | if ($.ui.dialog.overlay.instances.length) { | ||
$(document). | $(document).on($.ui.dialog.overlay.events, function (event) { | ||
if ($(event.target).zIndex() < $.ui.dialog.overlay.maxZ) { | if ($(event.target).zIndex() < $.ui.dialog.overlay.maxZ) { | ||
return false; | return false; | ||
| 第7,478行: | 第7,625行: | ||
} | } | ||
}, 1); | }, 1); | ||
$(window). | $(window).on("resize.dialog-overlay", $.ui.dialog.overlay.resize); | ||
} | } | ||
var $el = (this.oldInstances.pop() || $("<div>").addClass("ui-widget-overlay")); | var $el = (this.oldInstances.pop() || $("<div>").addClass("ui-widget-overlay")); | ||
$(document). | $(document).on("keydown.dialog-overlay", function (event) { | ||
var instances = $.ui.dialog.overlay.instances; | var instances = $.ui.dialog.overlay.instances; | ||
if (instances.length !== 0 && instances[instances.length - 1] === $el && dialog.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && event.keyCode === $.ui.keyCode.ESCAPE) { | if (instances.length !== 0 && instances[instances.length - 1] === $el && | ||
dialog.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && | |||
event.keyCode === $.ui.keyCode.ESCAPE) { | |||
dialog.close(event); | dialog.close(event); | ||
event.preventDefault(); | event.preventDefault(); | ||
} | } | ||
}); | }); | ||
$el | $el.appendTo(document.body).css({ | ||
width: this.width(), | |||
height: this.height() | |||
}); | |||
if ($.fn.bgiframe) { | if ($.fn.bgiframe) { | ||
$el.bgiframe(); | $el.bgiframe(); | ||
| 第7,499行: | 第7,647行: | ||
return $el; | return $el; | ||
}, | }, | ||
destroy: function($el) { | destroy: function ($el) { | ||
var indexOf = $.inArray($el, this.instances), | var indexOf = $.inArray($el, this.instances), maxZ = 0; | ||
if (indexOf !== -1) { | if (indexOf !== -1) { | ||
this.oldInstances.push(this.instances.splice(indexOf, 1)[0]); | this.oldInstances.push(this.instances.splice(indexOf, 1)[0]); | ||
} | } | ||
if (this.instances.length === 0) { | if (this.instances.length === 0) { | ||
$([document, window]). | $([document, window]).off(".dialog-overlay"); | ||
} | } | ||
$el.height(0).width(0).remove(); | $el.height(0).width(0).remove(); | ||
$.each(this.instances, function() { | $.each(this.instances, function () { | ||
maxZ = Math.max(maxZ, this.css("z-index")); | maxZ = Math.max(maxZ, this.css("z-index")); | ||
}); | }); | ||
this.maxZ = maxZ; | this.maxZ = maxZ; | ||
}, | }, | ||
height: function() { | height: function () { | ||
var scrollHeight, offsetHeight; | var scrollHeight, offsetHeight; | ||
if ($.ui.ie) { | if ($.ui.ie) { | ||
| 第7,521行: | 第7,668行: | ||
if (scrollHeight < offsetHeight) { | if (scrollHeight < offsetHeight) { | ||
return $(window).height() + "px"; | return $(window).height() + "px"; | ||
} else { | } | ||
else { | |||
return scrollHeight + "px"; | return scrollHeight + "px"; | ||
} | } | ||
} else { | } | ||
else { | |||
return $(document).height() + "px"; | return $(document).height() + "px"; | ||
} | } | ||
}, | }, | ||
width: function() { | width: function () { | ||
var scrollWidth, offsetWidth; | var scrollWidth, offsetWidth; | ||
if ($.ui.ie) { | if ($.ui.ie) { | ||
| 第7,535行: | 第7,684行: | ||
if (scrollWidth < offsetWidth) { | if (scrollWidth < offsetWidth) { | ||
return $(window).width() + "px"; | return $(window).width() + "px"; | ||
} else { | } | ||
else { | |||
return scrollWidth + "px"; | return scrollWidth + "px"; | ||
} | } | ||
} else { | } | ||
else { | |||
return $(document).width() + "px"; | return $(document).width() + "px"; | ||
} | } | ||
}, | }, | ||
resize: function() { | resize: function () { | ||
var $overlays = $([]); | var $overlays = $([]); | ||
$.each($.ui.dialog.overlay.instances, function() { | $.each($.ui.dialog.overlay.instances, function () { | ||
$overlays = $overlays.add(this); | $overlays = $overlays.add(this); | ||
}); | }); | ||
| 第7,557行: | 第7,708行: | ||
}); | }); | ||
$.extend($.ui.dialog.overlay.prototype, { | $.extend($.ui.dialog.overlay.prototype, { | ||
destroy: function() { | destroy: function () { | ||
$.ui.dialog.overlay.destroy(this.$el); | $.ui.dialog.overlay.destroy(this.$el); | ||
} | } | ||
}); | }); | ||
}(jQuery)); | }(jQuery)); | ||
(function($, undefined) { | (function ($, undefined) { | ||
var rvertical = /up|down|vertical/, | var rvertical = /up|down|vertical/, rpositivemotion = /up|left|vertical|horizontal/; | ||
$.effects.effect.blind = function (o, done) { | |||
$.effects.effect.blind = function(o, done) { | var el = $(this), props = ["position", "top", "bottom", "left", "right", "height", "width"], mode = $.effects.setMode(el, o.mode || "hide"), direction = o.direction || "up", vertical = rvertical.test(direction), ref = vertical ? "height" : "width", ref2 = vertical ? "top" : "left", motion = rpositivemotion.test(direction), animation = {}, show = mode === "show", wrapper, distance, margin; | ||
var el = $(this), | |||
if (el.parent().is(".ui-effects-wrapper")) { | if (el.parent().is(".ui-effects-wrapper")) { | ||
$.effects.save(el.parent(), props); | $.effects.save(el.parent(), props); | ||
} else { | } | ||
else { | |||
$.effects.save(el, props); | $.effects.save(el, props); | ||
} | } | ||
| 第7,590行: | 第7,731行: | ||
animation[ref] = show ? distance : 0; | animation[ref] = show ? distance : 0; | ||
if (!motion) { | if (!motion) { | ||
el.css(vertical ? "bottom" : "right", 0).css(vertical ? "top" : "left", "auto").css({ | el | ||
.css(vertical ? "bottom" : "right", 0) | |||
.css(vertical ? "top" : "left", "auto") | |||
.css({ position: "absolute" }); | |||
animation[ref2] = show ? margin : distance + margin; | animation[ref2] = show ? margin : distance + margin; | ||
} | } | ||
| 第7,604行: | 第7,746行: | ||
duration: o.duration, | duration: o.duration, | ||
easing: o.easing, | easing: o.easing, | ||
queue: | queue: false, | ||
complete: function() { | complete: function () { | ||
if (mode === "hide") { | if (mode === "hide") { | ||
el.hide(); | el.hide(); | ||
| 第7,616行: | 第7,758行: | ||
}; | }; | ||
})(jQuery); | })(jQuery); | ||
(function($, undefined) { | (function ($, undefined) { | ||
$.effects.effect.clip = function(o, done) { | $.effects.effect.clip = function (o, done) { | ||
var el = $(this), | var el = $(this), props = ["position", "top", "bottom", "left", "right", "height", "width"], mode = $.effects.setMode(el, o.mode || "hide"), show = mode === "show", direction = o.direction || "vertical", vert = direction === "vertical", size = vert ? "height" : "width", position = vert ? "top" : "left", animation = {}, wrapper, animate, distance; | ||
$.effects.save(el, props); | $.effects.save(el, props); | ||
el.show(); | el.show(); | ||
| 第7,643行: | 第7,775行: | ||
animation[position] = show ? 0 : distance / 2; | animation[position] = show ? 0 : distance / 2; | ||
animate.animate(animation, { | animate.animate(animation, { | ||
queue: | queue: false, | ||
duration: o.duration, | duration: o.duration, | ||
easing: o.easing, | easing: o.easing, | ||
complete: function() { | complete: function () { | ||
if (!show) { | if (!show) { | ||
el.hide(); | el.hide(); | ||
| 第7,657行: | 第7,789行: | ||
}; | }; | ||
})(jQuery); | })(jQuery); | ||
(function($, undefined) { | (function ($, undefined) { | ||
$.effects.effect.drop = function(o, done) { | $.effects.effect.drop = function (o, done) { | ||
var el = $(this), | var el = $(this), props = ["position", "top", "bottom", "left", "right", "opacity", "height", "width"], mode = $.effects.setMode(el, o.mode || "hide"), show = mode === "show", direction = o.direction || "left", ref = (direction === "up" || direction === "down") ? "top" : "left", motion = (direction === "up" || direction === "left") ? "pos" : "neg", animation = { | ||
opacity: show ? 1 : 0 | |||
}, distance; | |||
$.effects.save(el, props); | $.effects.save(el, props); | ||
el.show(); | el.show(); | ||
| 第7,675行: | 第7,799行: | ||
distance = o.distance || el[ref === "top" ? "outerHeight" : "outerWidth"](true) / 2; | distance = o.distance || el[ref === "top" ? "outerHeight" : "outerWidth"](true) / 2; | ||
if (show) { | if (show) { | ||
el.css("opacity", 0).css(ref, motion === "pos" ? -distance : distance); | el | ||
.css("opacity", 0) | |||
.css(ref, motion === "pos" ? -distance : distance); | |||
} | } | ||
animation[ref] = (show ? (motion === "pos" ? "+=" : "-=") : (motion === "pos" ? "-=" : "+=")) + distance; | animation[ref] = (show ? | ||
(motion === "pos" ? "+=" : "-=") : | |||
(motion === "pos" ? "-=" : "+=")) + | |||
distance; | |||
el.animate(animation, { | el.animate(animation, { | ||
queue: | queue: false, | ||
duration: o.duration, | duration: o.duration, | ||
easing: o.easing, | easing: o.easing, | ||
complete: function() { | complete: function () { | ||
if (mode === "hide") { | if (mode === "hide") { | ||
el.hide(); | el.hide(); | ||
| 第7,693行: | 第7,822行: | ||
}; | }; | ||
})(jQuery); | })(jQuery); | ||
(function($, undefined) { | (function ($, undefined) { | ||
$.effects.effect.highlight = function(o, done) { | $.effects.effect.highlight = function (o, done) { | ||
var elem = $(this), | var elem = $(this), props = ["backgroundImage", "backgroundColor", "opacity"], mode = $.effects.setMode(elem, o.mode || "show"), animation = { | ||
backgroundColor: elem.css("backgroundColor") | |||
}; | |||
if (mode === "hide") { | if (mode === "hide") { | ||
animation.opacity = 0; | animation.opacity = 0; | ||
} | } | ||
$.effects.save(elem, props); | $.effects.save(elem, props); | ||
elem.show().css({ | elem | ||
.show() | |||
.css({ | |||
backgroundImage: "none", | backgroundImage: "none", | ||
backgroundColor: o.color || "#ffff99" | backgroundColor: o.color || "#ffff99" | ||
}).animate(animation, { | }) | ||
queue: | .animate(animation, { | ||
queue: false, | |||
duration: o.duration, | duration: o.duration, | ||
easing: o.easing, | easing: o.easing, | ||
complete: function() { | complete: function () { | ||
if (mode === "hide") { | if (mode === "hide") { | ||
elem.hide(); | elem.hide(); | ||
| 第7,722行: | 第7,851行: | ||
}; | }; | ||
})(jQuery); | })(jQuery); | ||
(function($, undefined) { | (function ($, undefined) { | ||
$.effects.effect.puff = function(o, done) { | $.effects.effect.puff = function (o, done) { | ||
var elem = $(this), | var elem = $(this), mode = $.effects.setMode(elem, o.mode || "hide"), hide = mode === "hide", percent = parseInt(o.percent, 10) || 150, factor = percent / 100, original = { | ||
height: elem.height(), | |||
width: elem.width(), | |||
outerHeight: elem.outerHeight(), | |||
outerWidth: elem.outerWidth() | |||
}; | |||
$.extend(o, { | $.extend(o, { | ||
effect: "scale", | effect: "scale", | ||
queue: | queue: false, | ||
fade: | fade: true, | ||
mode: mode, | mode: mode, | ||
complete: done, | complete: done, | ||
percent: hide ? percent : 100, | percent: hide ? percent : 100, | ||
from: hide ? original : { | from: hide ? | ||
original : | |||
{ | |||
height: original.height * factor, | |||
width: original.width * factor, | |||
outerHeight: original.outerHeight * factor, | |||
outerWidth: original.outerWidth * factor | |||
} | |||
}); | }); | ||
elem.effect(o); | elem.effect(o); | ||
}; | }; | ||
$.effects.effect.scale = function(o, done) { | $.effects.effect.scale = function (o, done) { | ||
var el = $(this), | var el = $(this), options = $.extend(true, {}, o), mode = $.effects.setMode(el, o.mode || "effect"), percent = parseInt(o.percent, 10) || | ||
(parseInt(o.percent, 10) === 0 ? 0 : (mode === "hide" ? 0 : 100)), direction = o.direction || "both", origin = o.origin, original = { | |||
height: el.height(), | |||
width: el.width(), | |||
outerHeight: el.outerHeight(), | |||
outerWidth: el.outerWidth() | |||
}, factor = { | |||
y: direction !== "horizontal" ? (percent / 100) : 1, | |||
x: direction !== "vertical" ? (percent / 100) : 1 | |||
}; | |||
options.effect = "size"; | options.effect = "size"; | ||
options.queue = | options.queue = false; | ||
options.complete = done; | options.complete = done; | ||
if (mode !== "effect") { | if (mode !== "effect") { | ||
options.origin = origin || ["middle", "center"]; | options.origin = origin || ["middle", "center"]; | ||
options.restore = | options.restore = true; | ||
} | } | ||
options.from = o.from || (mode === "show" ? { | options.from = o.from || (mode === "show" ? { | ||
| 第7,800行: | 第7,919行: | ||
el.effect(options); | el.effect(options); | ||
}; | }; | ||
$.effects.effect.size = function(o, done) { | $.effects.effect.size = function (o, done) { | ||
var original, baseline, factor, el = $(this), | var original, baseline, factor, el = $(this), props0 = ["position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity"], props1 = ["position", "top", "bottom", "left", "right", "overflow", "opacity"], props2 = ["width", "height", "overflow"], cProps = ["fontSize"], vProps = ["borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom"], hProps = ["borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight"], mode = $.effects.setMode(el, o.mode || "effect"), restore = o.restore || mode !== "effect", scale = o.scale || "both", origin = o.origin || ["middle", "center"], position = el.css("position"), props = restore ? props0 : props1, zero = { | ||
height: 0, | |||
width: 0, | |||
outerHeight: 0, | |||
outerWidth: 0 | |||
}; | |||
if (mode === "show") { | if (mode === "show") { | ||
el.show(); | el.show(); | ||
| 第7,834行: | 第7,938行: | ||
el.from = o.to || zero; | el.from = o.to || zero; | ||
el.to = o.from || original; | el.to = o.from || original; | ||
} else { | } | ||
else { | |||
el.from = o.from || (mode === "show" ? zero : original); | el.from = o.from || (mode === "show" ? zero : original); | ||
el.to = o.to || (mode === "hide" ? zero : original); | el.to = o.to || (mode === "hide" ? zero : original); | ||
| 第7,852行: | 第7,957行: | ||
props = props.concat(vProps); | props = props.concat(vProps); | ||
el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from); | el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from); | ||
el.to = $.effects. | el.to = $.effects.setTransition(el, vProps, factor.to.y, el.to); | ||
} | } | ||
if (factor.from.x !== factor.to.x) { | if (factor.from.x !== factor.to.x) { | ||
| 第7,884行: | 第7,988行: | ||
hProps = hProps.concat(["marginLeft", "marginRight"]); | hProps = hProps.concat(["marginLeft", "marginRight"]); | ||
props2 = props0.concat(vProps).concat(hProps); | props2 = props0.concat(vProps).concat(hProps); | ||
el.find("*[width]").each(function() { | el.find("*[width]").each(function () { | ||
var child = $(this), | var child = $(this), c_original = { | ||
height: child.height(), | |||
width: child.width(), | |||
outerHeight: child.outerHeight(), | |||
outerWidth: child.outerWidth() | |||
}; | |||
if (restore) { | if (restore) { | ||
$.effects.save(child, props2); | $.effects.save(child, props2); | ||
| 第7,913行: | 第8,016行: | ||
if (factor.from.x !== factor.to.x) { | if (factor.from.x !== factor.to.x) { | ||
child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from); | child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from); | ||
child.to = $.effects.setTransition(child, hProps, factor.to.x, | child.to = $.effects.setTransition(child, hProps, factor.to.x, child.to); | ||
} | } | ||
child.css(child.from); | child.css(child.from); | ||
child.animate(child.to, o.duration, o.easing, function() { | child.animate(child.to, o.duration, o.easing, function () { | ||
if (restore) { | if (restore) { | ||
$.effects.restore(child, props2); | $.effects.restore(child, props2); | ||
| 第7,925行: | 第8,027行: | ||
} | } | ||
el.animate(el.to, { | el.animate(el.to, { | ||
queue: | queue: false, | ||
duration: o.duration, | duration: o.duration, | ||
easing: o.easing, | easing: o.easing, | ||
complete: function() { | complete: function () { | ||
if (el.to.opacity === 0) { | if (el.to.opacity === 0) { | ||
el.css("opacity", el.from.opacity); | el.css("opacity", el.from.opacity); | ||
| 第7,943行: | 第8,045行: | ||
left: el.to.left | left: el.to.left | ||
}); | }); | ||
} else { | } | ||
$.each(["top", "left"], function(idx, pos) { | else { | ||
el.css(pos, function(_, str) { | $.each(["top", "left"], function (idx, pos) { | ||
var val = parseInt(str, 10), | el.css(pos, function (_, str) { | ||
var val = parseInt(str, 10), toRef = idx ? el.to.left : el.to.top; | |||
if (str === "auto") { | if (str === "auto") { | ||
return toRef + "px"; | return toRef + "px"; | ||
| 第7,962行: | 第8,064行: | ||
}; | }; | ||
})(jQuery); | })(jQuery); | ||
(function($, undefined) { | (function ($, undefined) { | ||
$.effects.effect.shake = function(o, done) { | $.effects.effect.shake = function (o, done) { | ||
var el = $(this), | var el = $(this), props = ["position", "top", "bottom", "left", "right", "height", "width"], mode = $.effects.setMode(el, o.mode || "effect"), direction = o.direction || "left", distance = o.distance || 20, times = o.times || 3, anims = times * 2 + 1, speed = Math.round(o.duration / anims), ref = (direction === "up" || direction === "down") ? "top" : "left", positiveMotion = (direction === "up" || direction === "left"), animation = {}, animation1 = {}, animation2 = {}, i, queue = el.queue(), queuelen = queue.length; | ||
$.effects.save(el, props); | $.effects.save(el, props); | ||
el.show(); | el.show(); | ||
| 第7,990行: | 第8,077行: | ||
el.animate(animation1, speed, o.easing).animate(animation2, speed, o.easing); | el.animate(animation1, speed, o.easing).animate(animation2, speed, o.easing); | ||
} | } | ||
el.animate(animation1, speed, o.easing).animate(animation, speed / 2, o.easing).queue(function() { | el | ||
.animate(animation1, speed, o.easing) | |||
.animate(animation, speed / 2, o.easing) | |||
.queue(function () { | |||
if (mode === "hide") { | if (mode === "hide") { | ||
el.hide(); | el.hide(); | ||
| 第8,004行: | 第8,094行: | ||
}; | }; | ||
})(jQuery); | })(jQuery); | ||
(function($, undefined) { | (function ($, undefined) { | ||
var mouseHandled = | var mouseHandled = false; | ||
$.widget("ui.menu", { | $.widget("ui.menu", { | ||
version: "1.9.2", | version: "1.9.2", | ||
| 第8,024行: | 第8,114行: | ||
select: null | select: null | ||
}, | }, | ||
_create: function() { | _create: function () { | ||
this.activeMenu = this.element; | this.activeMenu = this.element; | ||
this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content ui-corner-all").toggleClass("ui-menu-icons", !!this.element.find(".ui-icon").length).attr({ | this.element | ||
.uniqueId() | |||
.addClass("ui-menu ui-widget ui-widget-content ui-corner-all") | |||
.toggleClass("ui-menu-icons", !!this.element.find(".ui-icon").length) | |||
.attr({ | |||
role: this.options.role, | role: this.options.role, | ||
tabIndex: 0 | tabIndex: 0 | ||
}). | }) | ||
.on("click" + this.eventNamespace, $.proxy(function (event) { | |||
if (this.options.disabled) { | if (this.options.disabled) { | ||
event.preventDefault(); | event.preventDefault(); | ||
| 第8,035行: | 第8,130行: | ||
}, this)); | }, this)); | ||
if (this.options.disabled) { | if (this.options.disabled) { | ||
this.element.addClass("ui-state-disabled").attr("aria-disabled", "true"); | this.element | ||
.addClass("ui-state-disabled") | |||
.attr("aria-disabled", "true"); | |||
} | } | ||
this._on({ | this._on({ | ||
"mousedown .ui-menu-item > a": function(event) { | "mousedown .ui-menu-item > a": function (event) { | ||
event.preventDefault(); | event.preventDefault(); | ||
}, | }, | ||
"click .ui-state-disabled > a": function(event) { | "click .ui-state-disabled > a": function (event) { | ||
event.preventDefault(); | event.preventDefault(); | ||
}, | }, | ||
"click .ui-menu-item:has(a)": function(event) { | "click .ui-menu-item:has(a)": function (event) { | ||
var target = $(event.target).closest(".ui-menu-item"); | var target = $(event.target).closest(".ui-menu-item"); | ||
if (!mouseHandled && target.not(".ui-state-disabled").length) { | if (!mouseHandled && target.not(".ui-state-disabled").length) { | ||
mouseHandled = | mouseHandled = true; | ||
this.select(event); | this.select(event); | ||
if (target.has(".ui-menu").length) { | if (target.has(".ui-menu").length) { | ||
this.expand(event); | this.expand(event); | ||
} else if (!this.element.is(":focus")) { | } | ||
this. | else if (!this.element.is(":focus")) { | ||
this.element.trigger("focus", [true]); | |||
if (this.active && this.active.parents(".ui-menu").length === 1) { | if (this.active && this.active.parents(".ui-menu").length === 1) { | ||
clearTimeout(this.timer); | clearTimeout(this.timer); | ||
| 第8,060行: | 第8,157行: | ||
} | } | ||
}, | }, | ||
"mouseenter .ui-menu-item": function(event) { | "mouseenter .ui-menu-item": function (event) { | ||
var target = $(event.currentTarget); | var target = $(event.currentTarget); | ||
target.siblings().children(".ui-state-active").removeClass("ui-state-active"); | target.siblings().children(".ui-state-active").removeClass("ui-state-active"); | ||
| 第8,067行: | 第8,164行: | ||
mouseleave: "collapseAll", | mouseleave: "collapseAll", | ||
"mouseleave .ui-menu": "collapseAll", | "mouseleave .ui-menu": "collapseAll", | ||
focus: function(event, keepActiveItem) { | focus: function (event, keepActiveItem) { | ||
var item = this.active || this.element.children(".ui-menu-item").eq(0); | var item = this.active || this.element.children(".ui-menu-item").eq(0); | ||
if (!keepActiveItem) { | if (!keepActiveItem) { | ||
| 第8,073行: | 第8,170行: | ||
} | } | ||
}, | }, | ||
blur: function(event) { | blur: function (event) { | ||
this._delay(function() { | this._delay(function () { | ||
if (!$.contains(this.element[0], this.document[0].activeElement)) { | if (!$.contains(this.element[0], this.document[0].activeElement)) { | ||
this.collapseAll(event); | this.collapseAll(event); | ||
| 第8,084行: | 第8,181行: | ||
this.refresh(); | this.refresh(); | ||
this._on(this.document, { | this._on(this.document, { | ||
click: function(event) { | click: function (event) { | ||
if (!$(event.target).closest(".ui-menu").length) { | if (!$(event.target).closest(".ui-menu").length) { | ||
this.collapseAll(event); | this.collapseAll(event); | ||
} | } | ||
mouseHandled = | mouseHandled = false; | ||
} | } | ||
}); | }); | ||
}, | }, | ||
_destroy: function() { | _destroy: function () { | ||
this.element.removeAttr("aria-activedescendant").find(".ui-menu"). | this.element | ||
.removeAttr("aria-activedescendant") | |||
this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").children("a").removeUniqueId().removeClass("ui-corner-all ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function() { | .find(".ui-menu").addBack() | ||
.removeClass("ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons") | |||
.removeAttr("role") | |||
.removeAttr("tabIndex") | |||
.removeAttr("aria-labelledby") | |||
.removeAttr("aria-expanded") | |||
.removeAttr("aria-hidden") | |||
.removeAttr("aria-disabled") | |||
.removeUniqueId() | |||
.show(); | |||
this.element.find(".ui-menu-item") | |||
.removeClass("ui-menu-item") | |||
.removeAttr("role") | |||
.removeAttr("aria-disabled") | |||
.children("a") | |||
.removeUniqueId() | |||
.removeClass("ui-corner-all ui-state-hover") | |||
.removeAttr("tabIndex") | |||
.removeAttr("role") | |||
.removeAttr("aria-haspopup") | |||
.children().each(function () { | |||
var elem = $(this); | var elem = $(this); | ||
if (elem.data("ui-menu-submenu-carat")) { | if (elem.data("ui-menu-submenu-carat")) { | ||
| 第8,103行: | 第8,220行: | ||
this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content"); | this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content"); | ||
}, | }, | ||
_keydown: function(event) { | _keydown: function (event) { | ||
var match, prev, character, skip, regex, preventDefault = | var match, prev, character, skip, regex, preventDefault = true; | ||
function escape(value) { | function escape(value) { | ||
return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"); | return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"); | ||
| 第8,116行: | 第8,232行: | ||
this.nextPage(event); | this.nextPage(event); | ||
break; | break; | ||
case $.ui. | case $.ui.keyCode.HOME: | ||
this._move("first", "first", event); | this._move("first", "first", event); | ||
break; | break; | ||
| 第8,145行: | 第8,260行: | ||
break; | break; | ||
default: | default: | ||
preventDefault = | preventDefault = false; | ||
prev = this.previousFilter || ""; | prev = this.previousFilter || ""; | ||
character = String.fromCharCode(event.keyCode); | character = String.fromCharCode(event.keyCode); | ||
skip = | skip = false; | ||
clearTimeout(this.filterTimer); | clearTimeout(this.filterTimer); | ||
if (character === prev) { | if (character === prev) { | ||
skip = | skip = true; | ||
} else { | } | ||
else { | |||
character = prev + character; | character = prev + character; | ||
} | } | ||
regex = new RegExp("^" + escape(character), "i"); | regex = new RegExp("^" + escape(character), "i"); | ||
match = this.activeMenu.children(".ui-menu-item").filter(function() { | match = this.activeMenu.children(".ui-menu-item").filter(function () { | ||
return regex.test($(this).children("a").text()); | return regex.test($(this).children("a").text()); | ||
}); | }); | ||
match = skip && match.index(this.active.next()) !== -1 ? this.active.nextAll(".ui-menu-item") : match; | match = skip && match.index(this.active.next()) !== -1 ? | ||
this.active.nextAll(".ui-menu-item") : | |||
match; | |||
if (!match.length) { | if (!match.length) { | ||
character = String.fromCharCode( | character = String.fromCharCode(event.keyCode); | ||
regex = new RegExp("^" + escape(character), "i"); | regex = new RegExp("^" + escape(character), "i"); | ||
match = this.activeMenu.children(".ui-menu-item").filter(function() { | match = this.activeMenu.children(".ui-menu-item").filter(function () { | ||
return regex.test($(this).children("a").text()); | return regex.test($(this).children("a").text()); | ||
}); | }); | ||
| 第8,172行: | 第8,289行: | ||
if (match.length > 1) { | if (match.length > 1) { | ||
this.previousFilter = character; | this.previousFilter = character; | ||
this.filterTimer = this._delay(function() { | this.filterTimer = this._delay(function () { | ||
delete this.previousFilter; | delete this.previousFilter; | ||
}, 1000); | }, 1000); | ||
} else { | } | ||
else { | |||
delete this.previousFilter; | delete this.previousFilter; | ||
} | } | ||
} else { | } | ||
else { | |||
delete this.previousFilter; | delete this.previousFilter; | ||
} | } | ||
| 第8,186行: | 第8,305行: | ||
} | } | ||
}, | }, | ||
_activate: function(event) { | _activate: function (event) { | ||
if (!this.active.is(".ui-state-disabled")) { | if (!this.active.is(".ui-state-disabled")) { | ||
if (this.active.children("a[aria-haspopup='true']").length) { | if (this.active.children("a[aria-haspopup='true']").length) { | ||
this.expand(event); | this.expand(event); | ||
} else { | } | ||
else { | |||
this.select(event); | this.select(event); | ||
} | } | ||
} | } | ||
}, | }, | ||
refresh: function() { | refresh: function () { | ||
var menus, icon = this.options.icons.submenu, | var menus, icon = this.options.icons.submenu, submenus = this.element.find(this.options.menus); | ||
submenus.filter(":not(.ui-menu)") | |||
submenus.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-corner-all").hide().attr({ | .addClass("ui-menu ui-widget ui-widget-content ui-corner-all") | ||
.hide() | |||
.attr({ | |||
role: this.options.role, | role: this.options.role, | ||
"aria-hidden": "true", | "aria-hidden": "true", | ||
"aria-expanded": "false" | "aria-expanded": "false" | ||
}).each(function() { | }) | ||
var menu = $(this), | .each(function () { | ||
var menu = $(this), item = menu.prev("a"), submenuCarat = $("<span>") | |||
.addClass("ui-menu-icon ui-icon " + icon) | |||
.data("ui-menu-submenu-carat", true); | |||
item.attr("aria-haspopup", "true").prepend(submenuCarat); | item | ||
.attr("aria-haspopup", "true") | |||
.prepend(submenuCarat); | |||
menu.attr("aria-labelledby", item.attr("id")); | menu.attr("aria-labelledby", item.attr("id")); | ||
}); | }); | ||
menus = submenus.add(this.element); | menus = submenus.add(this.element); | ||
menus.children(":not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role", "presentation").children("a").uniqueId().addClass("ui-corner-all").attr({ | menus.children(":not(.ui-menu-item):has(a)") | ||
.addClass("ui-menu-item") | |||
.attr("role", "presentation") | |||
.children("a") | |||
.uniqueId() | |||
.addClass("ui-corner-all") | |||
.attr({ | |||
tabIndex: -1, | tabIndex: -1, | ||
role: this._itemRole() | role: this._itemRole() | ||
}); | }); | ||
menus.children(":not(.ui-menu-item)").each(function() { | menus.children(":not(.ui-menu-item)").each(function () { | ||
var item = $(this); | var item = $(this); | ||
if (!/[^\-—–\s]/.test(item.text())) { | if (!/[^\-—–\s]/.test(item.text())) { | ||
| 第8,226行: | 第8,356行: | ||
} | } | ||
}, | }, | ||
_itemRole: function() { | _itemRole: function () { | ||
return { | return { | ||
menu: "menuitem", | menu: "menuitem", | ||
listbox: "option" | listbox: "option" | ||
} [this.options.role]; | }[this.options.role]; | ||
}, | }, | ||
focus: function(event, item) { | focus: function (event, item) { | ||
var nested, focused; | var nested, focused; | ||
this.blur(event, event && event.type === "focus"); | this.blur(event, event && event.type === "focus"); | ||
| 第8,238行: | 第8,368行: | ||
this.active = item.first(); | this.active = item.first(); | ||
focused = this.active.children("a").addClass("ui-state-focus"); | focused = this.active.children("a").addClass("ui-state-focus"); | ||
if ( | if (this.options.role) { | ||
this.element.attr("aria-activedescendant", focused.attr("id")); | this.element.attr("aria-activedescendant", focused.attr("id")); | ||
} | } | ||
this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active"); | this.active | ||
.parent() | |||
.closest(".ui-menu-item") | |||
.children("a:first") | |||
.addClass("ui-state-active"); | |||
if (event && event.type === "keydown") { | if (event && event.type === "keydown") { | ||
this._close(); | this._close(); | ||
} else { | } | ||
this.timer = this._delay(function() { | else { | ||
this.timer = this._delay(function () { | |||
this._close(); | this._close(); | ||
}, this.delay); | }, this.delay); | ||
| 第8,255行: | 第8,389行: | ||
} | } | ||
this.activeMenu = item.parent(); | this.activeMenu = item.parent(); | ||
this._trigger("focus", event, { | this._trigger("focus", event, { item: item }); | ||
}, | }, | ||
_scrollIntoView: function(item) { | _scrollIntoView: function (item) { | ||
var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight; | var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight; | ||
if (this._hasScroll()) { | if (this._hasScroll()) { | ||
| 第8,270行: | 第8,402行: | ||
if (offset < 0) { | if (offset < 0) { | ||
this.activeMenu.scrollTop(scroll + offset); | this.activeMenu.scrollTop(scroll + offset); | ||
} else if (offset + itemHeight > elementHeight) { | } | ||
this. | else if (offset + itemHeight > elementHeight) { | ||
this.activeMenu.scrollTop(scroll + offset - elementHeight + itemHeight); | |||
} | } | ||
} | } | ||
}, | }, | ||
blur: function(event, fromFocus) { | blur: function (event, fromFocus) { | ||
if (!fromFocus) { | if (!fromFocus) { | ||
clearTimeout(this.timer); | clearTimeout(this.timer); | ||
| 第8,285行: | 第8,417行: | ||
this.active.children("a").removeClass("ui-state-focus"); | this.active.children("a").removeClass("ui-state-focus"); | ||
this.active = null; | this.active = null; | ||
this._trigger("blur", event, { | this._trigger("blur", event, { item: this.active }); | ||
}, | }, | ||
_startOpening: function(submenu) { | _startOpening: function (submenu) { | ||
clearTimeout(this.timer); | clearTimeout(this.timer); | ||
if (submenu.attr("aria-hidden") !== "true") { | if (submenu.attr("aria-hidden") !== "true") { | ||
return; | return; | ||
} | } | ||
this.timer = this._delay(function() { | this.timer = this._delay(function () { | ||
this._close(); | this._close(); | ||
this._open(submenu); | this._open(submenu); | ||
}, this.delay); | }, this.delay); | ||
}, | }, | ||
_open: function(submenu) { | _open: function (submenu) { | ||
var position = $.extend({ of: this.active | var position = $.extend({ | ||
of: this.active | |||
}, this.options.position); | }, this.options.position); | ||
clearTimeout(this.timer); | clearTimeout(this.timer); | ||
this.element.find(".ui-menu").not(submenu.parents(".ui-menu")).hide().attr("aria-hidden", "true"); | this.element.find(".ui-menu").not(submenu.parents(".ui-menu")) | ||
submenu.show().removeAttr("aria-hidden").attr("aria-expanded", "true").position(position); | .hide() | ||
.attr("aria-hidden", "true"); | |||
submenu | |||
.show() | |||
.removeAttr("aria-hidden") | |||
.attr("aria-expanded", "true") | |||
.position(position); | |||
}, | }, | ||
collapseAll: function(event, all) { | collapseAll: function (event, all) { | ||
clearTimeout(this.timer); | clearTimeout(this.timer); | ||
this.timer = this._delay(function() { | this.timer = this._delay(function () { | ||
var currentMenu = all ? this.element : $(event && event.target).closest(this.element.find(".ui-menu")); | var currentMenu = all ? this.element : | ||
$(event && event.target).closest(this.element.find(".ui-menu")); | |||
if (!currentMenu.length) { | if (!currentMenu.length) { | ||
currentMenu = this. | currentMenu = this.element; | ||
} | } | ||
this._close(currentMenu); | this._close(currentMenu); | ||
| 第8,319行: | 第8,456行: | ||
}, this.delay); | }, this.delay); | ||
}, | }, | ||
_close: function(startMenu) { | _close: function (startMenu) { | ||
if (!startMenu) { | if (!startMenu) { | ||
startMenu = this.active ? this.active.parent() : this.element; | startMenu = this.active ? this.active.parent() : this.element; | ||
} | } | ||
startMenu.find(".ui-menu").hide().attr("aria-hidden", "true").attr("aria-expanded", "false").end().find("a.ui-state-active").removeClass("ui-state-active"); | startMenu | ||
.find(".ui-menu") | |||
.hide() | |||
.attr("aria-hidden", "true") | |||
.attr("aria-expanded", "false") | |||
.end() | |||
.find("a.ui-state-active") | |||
.removeClass("ui-state-active"); | |||
}, | }, | ||
collapse: function(event) { | collapse: function (event) { | ||
var newItem = this.active && this.active.parent().closest(".ui-menu-item", this.element); | var newItem = this.active && | ||
this.active.parent().closest(".ui-menu-item", this.element); | |||
if (newItem && newItem.length) { | if (newItem && newItem.length) { | ||
this._close(); | this._close(); | ||
| 第8,332行: | 第8,477行: | ||
} | } | ||
}, | }, | ||
expand: function(event) { | expand: function (event) { | ||
var newItem = this.active && this.active.children(".ui-menu ").children(".ui-menu-item").first(); | var newItem = this.active && | ||
this.active | |||
.children(".ui-menu ") | |||
.children(".ui-menu-item") | |||
.first(); | |||
if (newItem && newItem.length) { | if (newItem && newItem.length) { | ||
this._open(newItem.parent()); | this._open(newItem.parent()); | ||
this._delay(function() { | this._delay(function () { | ||
this.focus(event, newItem); | this.focus(event, newItem); | ||
}); | }); | ||
} | } | ||
}, | }, | ||
next: function(event) { | next: function (event) { | ||
this._move("next", "first", event); | this._move("next", "first", event); | ||
}, | }, | ||
previous: function(event) { | previous: function (event) { | ||
this._move("prev", "last", event); | this._move("prev", "last", event); | ||
}, | }, | ||
isFirstItem: function() { | isFirstItem: function () { | ||
return this.active && !this.active.prevAll(".ui-menu-item").length; | return this.active && !this.active.prevAll(".ui-menu-item").length; | ||
}, | }, | ||
isLastItem: function() { | isLastItem: function () { | ||
return this. | return this.active && !this.active.nextAll(".ui-menu-item").length; | ||
}, | }, | ||
_move: function(direction, filter, event) { | _move: function (direction, filter, event) { | ||
var next; | var next; | ||
if (this.active) { | if (this.active) { | ||
if (direction === "first" || direction === "last") { | if (direction === "first" || direction === "last") { | ||
next = this.active[direction === "first" ? "prevAll" : "nextAll"](".ui-menu-item").eq(-1); | next = this.active[direction === "first" ? "prevAll" : "nextAll"](".ui-menu-item") | ||
} else { | .eq(-1); | ||
next = this.active[direction + "All"](".ui-menu-item").eq(0); | } | ||
else { | |||
next = this.active[direction + "All"](".ui-menu-item") | |||
.eq(0); | |||
} | } | ||
} | } | ||
| 第8,368行: | 第8,519行: | ||
this.focus(event, next); | this.focus(event, next); | ||
}, | }, | ||
nextPage: function(event) { | nextPage: function (event) { | ||
var item, base, height; | var item, base, height; | ||
if (!this.active) { | if (!this.active) { | ||
| 第8,380行: | 第8,531行: | ||
base = this.active.offset().top; | base = this.active.offset().top; | ||
height = this.element.height(); | height = this.element.height(); | ||
this.active.nextAll(".ui-menu-item").each(function() { | this.active.nextAll(".ui-menu-item").each(function () { | ||
item = $(this); | item = $(this); | ||
return item.offset().top - base - height < 0; | return item.offset().top - base - height < 0; | ||
}); | }); | ||
this.focus(event, item); | this.focus(event, item); | ||
} else { | } | ||
else { | |||
this.focus(event, this.activeMenu.children(".ui-menu-item")[!this.active ? "first" : "last"]()); | this.focus(event, this.activeMenu.children(".ui-menu-item")[!this.active ? "first" : "last"]()); | ||
} | } | ||
}, | }, | ||
previousPage: function(event) { | previousPage: function (event) { | ||
var item, base, height; | var item, base, height; | ||
if (!this.active) { | if (!this.active) { | ||
| 第8,401行: | 第8,553行: | ||
base = this.active.offset().top; | base = this.active.offset().top; | ||
height = this.element.height(); | height = this.element.height(); | ||
this.active.prevAll(".ui-menu-item").each(function() { | this.active.prevAll(".ui-menu-item").each(function () { | ||
item = $(this); | item = $(this); | ||
return item.offset().top - base + height > 0; | return item.offset().top - base + height > 0; | ||
}); | }); | ||
this.focus(event, item); | this.focus(event, item); | ||
} else { | } | ||
else { | |||
this.focus(event, this.activeMenu.children(".ui-menu-item").first()); | this.focus(event, this.activeMenu.children(".ui-menu-item").first()); | ||
} | } | ||
}, | }, | ||
_hasScroll: function() { | _hasScroll: function () { | ||
return this.element.outerHeight() < this.element.prop("scrollHeight"); | return this.element.outerHeight() < this.element.prop("scrollHeight"); | ||
}, | }, | ||
select: function(event) { | select: function (event) { | ||
this.active = this.active || $(event.target).closest(".ui-menu-item"); | this.active = this.active || $(event.target).closest(".ui-menu-item"); | ||
var ui = { | var ui = { item: this.active }; | ||
if (!this.active.has(".ui-menu").length) { | if (!this.active.has(".ui-menu").length) { | ||
this.collapseAll(event, true); | this.collapseAll(event, true); | ||
| 第8,425行: | 第8,576行: | ||
}); | }); | ||
}(jQuery)); | }(jQuery)); | ||
(function($, undefined) { | (function ($, undefined) { | ||
$.ui = $.ui || {}; | $.ui = $.ui || {}; | ||
var cachedScrollbarWidth, max = Math.max, | var cachedScrollbarWidth, max = Math.max, abs = Math.abs, round = Math.round, rhorizontal = /left|center|right/, rvertical = /top|center|bottom/, roffset = /[\+\-]\d+%?/, rposition = /^\w+/, rpercent = /%$/, _position = $.fn.position; | ||
function getOffsets(offsets, width, height) { | function getOffsets(offsets, width, height) { | ||
return [parseInt(offsets[0], 10) * (rpercent.test(offsets[0]) ? width / 100 : 1), parseInt(offsets[1], 10) * (rpercent.test(offsets[1]) ? height / 100 : 1)]; | return [ | ||
parseInt(offsets[0], 10) * (rpercent.test(offsets[0]) ? width / 100 : 1), | |||
parseInt(offsets[1], 10) * (rpercent.test(offsets[1]) ? height / 100 : 1) | |||
]; | |||
} | } | ||
function parseCss(element, property) { | function parseCss(element, property) { | ||
return parseInt($.css(element, property), 10) || 0; | return parseInt($.css(element, property), 10) || 0; | ||
} | } | ||
$.position = { | $.position = { | ||
scrollbarWidth: function() { | scrollbarWidth: function () { | ||
if (cachedScrollbarWidth !== undefined) { | if (cachedScrollbarWidth !== undefined) { | ||
return cachedScrollbarWidth; | return cachedScrollbarWidth; | ||
} | } | ||
var w1, w2, div = $("<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"), | var w1, w2, div = $("<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"), innerDiv = div.children()[0]; | ||
$("body").append(div); | $("body").append(div); | ||
w1 = innerDiv.offsetWidth; | w1 = innerDiv.offsetWidth; | ||
| 第8,461行: | 第8,604行: | ||
return (cachedScrollbarWidth = w1 - w2); | return (cachedScrollbarWidth = w1 - w2); | ||
}, | }, | ||
getScrollInfo: function(within) { | getScrollInfo: function (within) { | ||
var overflowX = within.isWindow ? "" : within.element.css("overflow-x"), | var overflowX = within.isWindow ? "" : within.element.css("overflow-x"), overflowY = within.isWindow ? "" : 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 { | return { | ||
width: hasOverflowX ? $.position.scrollbarWidth() : 0, | width: hasOverflowX ? $.position.scrollbarWidth() : 0, | ||
| 第8,471行: | 第8,613行: | ||
}; | }; | ||
}, | }, | ||
getWithinInfo: function(element) { | isWindow: function (obj) { | ||
var withinElement = $(element || window), | return obj != null && obj === obj.window; | ||
}, | |||
getWithinInfo: function (element) { | |||
var withinElement = $(element || window), isWindow = this.isWindow(withinElement[0]), isDocument = !!withinElement[0] && withinElement[0].nodeType === 9, hasOffset = !isWindow && !isDocument; | |||
return { | return { | ||
element: withinElement, | element: withinElement, | ||
isWindow: isWindow, | isWindow: isWindow, | ||
offset: | offset: hasOffset ? $(element).offset() : { left: 0, top: 0 }, | ||
scrollLeft: withinElement.scrollLeft(), | scrollLeft: withinElement.scrollLeft(), | ||
scrollTop: withinElement.scrollTop(), | scrollTop: withinElement.scrollTop(), | ||
| 第8,488行: | 第8,629行: | ||
} | } | ||
}; | }; | ||
$.fn.position = function(options) { | $.fn.position = function (options) { | ||
if (!options || !options.of) { | if (!options || !options.of) { | ||
return _position.apply(this, arguments); | return _position.apply(this, arguments); | ||
} | } | ||
options = $.extend({}, options); | options = $.extend({}, options); | ||
var atOffset, targetWidth, targetHeight, targetOffset, basePosition, target = $(options.of), | var atOffset, targetWidth, targetHeight, targetOffset, basePosition, target = $(options.of), within = $.position.getWithinInfo(options.within), scrollInfo = $.position.getScrollInfo(within), targetElem = target[0], collision = (options.collision || "flip").split(" "), offsets = {}; | ||
if (targetElem.nodeType === 9) { | if (targetElem.nodeType === 9) { | ||
targetWidth = target.width(); | targetWidth = target.width(); | ||
targetHeight = target.height(); | targetHeight = target.height(); | ||
targetOffset = { | targetOffset = { top: 0, left: 0 }; | ||
} | |||
else if ($.position.isWindow(targetElem)) { | |||
targetWidth = target.width(); | |||
} else if ($.isWindow(targetElem)) { | |||
targetWidth = | |||
targetHeight = target.height(); | targetHeight = target.height(); | ||
targetOffset = { | targetOffset = { top: target.scrollTop(), left: target.scrollLeft() }; | ||
} | |||
else if (targetElem.preventDefault) { | |||
} else if (targetElem.preventDefault) { | |||
options.at = "left top"; | options.at = "left top"; | ||
targetWidth = targetHeight = 0; | targetWidth = targetHeight = 0; | ||
targetOffset = { | targetOffset = { top: targetElem.pageY, left: targetElem.pageX }; | ||
} | |||
else { | |||
} else { | |||
targetWidth = target.outerWidth(); | targetWidth = target.outerWidth(); | ||
targetHeight = target.outerHeight(); | targetHeight = target.outerHeight(); | ||
| 第8,527行: | 第8,656行: | ||
} | } | ||
basePosition = $.extend({}, targetOffset); | basePosition = $.extend({}, targetOffset); | ||
$.each(["my", "at"], function() { | $.each(["my", "at"], function () { | ||
var pos = (options[this] || "").split(" "), | var pos = (options[this] || "").split(" "), horizontalOffset, verticalOffset; | ||
if (pos.length === 1) { | if (pos.length === 1) { | ||
pos = rhorizontal.test(pos[0]) ? pos.concat(["center"]) : rvertical.test(pos[0]) ? ["center"].concat(pos) : ["center", "center"]; | 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[0] = rhorizontal.test(pos[0]) ? pos[0] : "center"; | ||
| 第8,537行: | 第8,669行: | ||
horizontalOffset = roffset.exec(pos[0]); | horizontalOffset = roffset.exec(pos[0]); | ||
verticalOffset = roffset.exec(pos[1]); | verticalOffset = roffset.exec(pos[1]); | ||
offsets[this] = [horizontalOffset ? horizontalOffset[0] : 0, verticalOffset ? verticalOffset[0] : 0]; | offsets[this] = [ | ||
options[this] = [rposition.exec(pos[0])[0], rposition.exec(pos[1])[0]]; | horizontalOffset ? horizontalOffset[0] : 0, | ||
verticalOffset ? verticalOffset[0] : 0 | |||
]; | |||
options[this] = [ | |||
rposition.exec(pos[0])[0], | |||
rposition.exec(pos[1])[0] | |||
]; | |||
}); | }); | ||
if (collision.length === 1) { | if (collision.length === 1) { | ||
collision[1] = | collision[1] = collision[0]; | ||
} | } | ||
if (options.at[0] === "right") { | if (options.at[0] === "right") { | ||
basePosition.left += targetWidth; | basePosition.left += targetWidth; | ||
} else if (options.at[0] === "center") { | } | ||
else if (options.at[0] === "center") { | |||
basePosition.left += targetWidth / 2; | basePosition.left += targetWidth / 2; | ||
} | } | ||
if (options.at[1] === "bottom") { | if (options.at[1] === "bottom") { | ||
basePosition.top += targetHeight; | basePosition.top += targetHeight; | ||
} else if (options.at[1] === "center") { | } | ||
else if (options.at[1] === "center") { | |||
basePosition.top += targetHeight / 2; | basePosition.top += targetHeight / 2; | ||
} | } | ||
| 第8,557行: | 第8,696行: | ||
basePosition.left += atOffset[0]; | basePosition.left += atOffset[0]; | ||
basePosition.top += atOffset[1]; | basePosition.top += atOffset[1]; | ||
return this.each(function() { | return this.each(function () { | ||
var collisionPosition, using, elem = $(this), | 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") { | if (options.my[0] === "right") { | ||
position.left -= elemWidth; | position.left -= elemWidth; | ||
} else if (options.my[0] === "center") { | } | ||
else if (options.my[0] === "center") { | |||
position.left -= elemWidth / 2; | position.left -= elemWidth / 2; | ||
} | } | ||
if (options.my[1] === | if (options.my[1] === "bottom") { | ||
position.top -= elemHeight; | position.top -= elemHeight; | ||
} else if (options.my[1] === "center") { | } | ||
else if (options.my[1] === "center") { | |||
position.top -= elemHeight / 2; | position.top -= elemHeight / 2; | ||
} | } | ||
| 第8,588行: | 第8,720行: | ||
marginTop: marginTop | marginTop: marginTop | ||
}; | }; | ||
$.each(["left", "top"], function(i, dir) { | $.each(["left", "top"], function (i, dir) { | ||
if ($.ui.position[collision[i]]) { | if ($.ui.position[collision[i]]) { | ||
$.ui.position[collision[i]][dir](position, { | $.ui.position[collision[i]][dir](position, { | ||
| 第8,610行: | 第8,742行: | ||
} | } | ||
if (options.using) { | if (options.using) { | ||
using = function(props) { | using = function (props) { | ||
var left = targetOffset.left - position.left, | 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) { | if (targetWidth < elemWidth && abs(left + right) < targetWidth) { | ||
feedback.horizontal = "center"; | feedback.horizontal = "center"; | ||
| 第8,642行: | 第8,769行: | ||
if (max(abs(left), abs(right)) > max(abs(top), abs(bottom))) { | if (max(abs(left), abs(right)) > max(abs(top), abs(bottom))) { | ||
feedback.important = "horizontal"; | feedback.important = "horizontal"; | ||
} else { | } | ||
else { | |||
feedback.important = "vertical"; | feedback.important = "vertical"; | ||
} | } | ||
| 第8,648行: | 第8,776行: | ||
}; | }; | ||
} | } | ||
elem.offset($.extend(position, { | elem.offset($.extend(position, { using: using })); | ||
}); | }); | ||
}; | }; | ||
$.ui.position = { | $.ui.position = { | ||
fit: { | fit: { | ||
left: function(position, data) { | left: function (position, data) { | ||
var within = data.within, | var within = data.within, withinOffset = within.isWindow ? within.scrollLeft : within.offset.left, outerWidth = within.width, collisionPosLeft = position.left - data.collisionPosition.marginLeft, overLeft = withinOffset - collisionPosLeft, overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset, newOverRight; | ||
if (data.collisionWidth > outerWidth) { | |||
if ( | |||
if (overLeft > 0 && overRight <= 0) { | if (overLeft > 0 && overRight <= 0) { | ||
newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset; | newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset; | ||
position.left += overLeft - newOverRight; | position.left += overLeft - newOverRight; | ||
} else if (overRight > 0 && overLeft <= 0) { | } | ||
else if (overRight > 0 && overLeft <= 0) { | |||
position.left = withinOffset; | position.left = withinOffset; | ||
} else { | } | ||
else { | |||
if (overLeft > overRight) { | if (overLeft > overRight) { | ||
position.left = withinOffset + outerWidth - data.collisionWidth; | position.left = withinOffset + outerWidth - data.collisionWidth; | ||
} else { | } | ||
else { | |||
position.left = withinOffset; | position.left = withinOffset; | ||
} | } | ||
} | } | ||
} else if (overLeft > 0) { | } | ||
else if (overLeft > 0) { | |||
position.left += overLeft; | position.left += overLeft; | ||
} else if (overRight > 0) { | } | ||
else if (overRight > 0) { | |||
position.left -= overRight; | position.left -= overRight; | ||
} else { | } | ||
else { | |||
position.left = max(position.left - collisionPosLeft, position.left); | position.left = max(position.left - collisionPosLeft, position.left); | ||
} | } | ||
}, | }, | ||
top: function(position, data) { | top: function (position, data) { | ||
var within = data.within, | var within = data.within, withinOffset = within.isWindow ? within.scrollTop : within.offset.top, outerHeight = data.within.height, collisionPosTop = position.top - data.collisionPosition.marginTop, overTop = withinOffset - collisionPosTop, overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset, newOverBottom; | ||
if (data.collisionHeight > outerHeight) { | if (data.collisionHeight > outerHeight) { | ||
if (overTop > 0 && overBottom <= 0) { | if (overTop > 0 && overBottom <= 0) { | ||
newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - | newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset; | ||
position.top += overTop - newOverBottom; | position.top += overTop - newOverBottom; | ||
} else if (overBottom > 0 && overTop <= 0) { | } | ||
else if (overBottom > 0 && overTop <= 0) { | |||
position.top = withinOffset; | position.top = withinOffset; | ||
} else { | } | ||
else { | |||
if (overTop > overBottom) { | if (overTop > overBottom) { | ||
position.top = withinOffset + outerHeight - data.collisionHeight; | position.top = withinOffset + outerHeight - data.collisionHeight; | ||
} else { | } | ||
else { | |||
position.top = withinOffset; | position.top = withinOffset; | ||
} | } | ||
} | } | ||
} else if (overTop > 0) { | } | ||
else if (overTop > 0) { | |||
position.top += overTop; | position.top += overTop; | ||
} else if (overBottom > 0) { | } | ||
else if (overBottom > 0) { | |||
position.top -= overBottom; | position.top -= overBottom; | ||
} else { | } | ||
else { | |||
position.top = max(position.top - collisionPosTop, position.top); | position.top = max(position.top - collisionPosTop, position.top); | ||
} | } | ||
| 第8,717行: | 第8,841行: | ||
}, | }, | ||
flip: { | flip: { | ||
left: function(position, data) { | left: function (position, data) { | ||
var within = data.within, | 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) { | if (overLeft < 0) { | ||
newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset; | newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset; | ||
| 第8,734行: | 第8,856行: | ||
position.left += myOffset + atOffset + offset; | position.left += myOffset + atOffset + offset; | ||
} | } | ||
} else if (overRight > 0) { | } | ||
else if (overRight > 0) { | |||
newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft; | newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft; | ||
if (newOverLeft > 0 || abs(newOverLeft) < overRight) { | if (newOverLeft > 0 || abs(newOverLeft) < overRight) { | ||
| 第8,741行: | 第8,864行: | ||
} | } | ||
}, | }, | ||
top: function(position, data) { | top: function (position, data) { | ||
var within = data.within, | 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) { | if (overTop < 0) { | ||
newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset; | newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset; | ||
| 第8,759行: | 第8,879行: | ||
position.top += myOffset + atOffset + offset; | position.top += myOffset + atOffset + offset; | ||
} | } | ||
} else if (overBottom > 0) { | } | ||
else if (overBottom > 0) { | |||
newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop; | newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop; | ||
if ((position.top + myOffset + atOffset + offset) > overBottom && (newOverTop > 0 || abs(newOverTop) < overBottom)) { | if ((position.top + myOffset + atOffset + offset) > overBottom && (newOverTop > 0 || abs(newOverTop) < overBottom)) { | ||
| 第8,768行: | 第8,889行: | ||
}, | }, | ||
flipfit: { | flipfit: { | ||
left: function() { | left: function () { | ||
$.ui.position.flip.left.apply(this, arguments); | $.ui.position.flip.left.apply(this, arguments); | ||
$.ui.position.fit.left.apply(this, arguments); | $.ui.position.fit.left.apply(this, arguments); | ||
}, | }, | ||
top: function() { | top: function () { | ||
$.ui.position.flip.top.apply(this, arguments); | $.ui.position.flip.top.apply(this, arguments); | ||
$.ui.position.fit.top.apply(this, arguments); | $.ui.position.fit.top.apply(this, arguments); | ||
| 第8,778行: | 第8,899行: | ||
} | } | ||
}; | }; | ||
(function() { | (function () { | ||
var testElement, testElementParent, testElementStyle, offsetLeft, i, body = document.getElementsByTagName("body")[0], | var testElement, testElementParent, testElementStyle, offsetLeft, i, body = document.getElementsByTagName("body")[0], div = document.createElement("div"); | ||
testElement = document.createElement(body ? "div" : "body"); | testElement = document.createElement(body ? "div" : "body"); | ||
testElementStyle = { | testElementStyle = { | ||
| 第8,810行: | 第8,930行: | ||
})(); | })(); | ||
if ($.uiBackCompat !== false) { | if ($.uiBackCompat !== false) { | ||
(function($) { | (function ($) { | ||
var _position = $.fn.position; | var _position = $.fn.position; | ||
$.fn.position = function(options) { | $.fn.position = function (options) { | ||
if (!options || !options.offset) { | if (!options || !options.offset) { | ||
return _position.call(this, options); | return _position.call(this, options); | ||
} | } | ||
var offset = options.offset.split(" "), | var offset = options.offset.split(" "), at = options.at.split(" "); | ||
if (offset.length === 1) { | if (offset.length === 1) { | ||
offset[1] = offset[0]; | offset[1] = offset[0]; | ||
| 第8,830行: | 第8,949行: | ||
if (/left|center|right/.test(at[0])) { | if (/left|center|right/.test(at[0])) { | ||
at[1] = "center"; | at[1] = "center"; | ||
} else { | } | ||
else { | |||
at[1] = at[0]; | at[1] = at[0]; | ||
at[0] = "center"; | at[0] = "center"; | ||
| 第8,843行: | 第8,963行: | ||
} | } | ||
}(jQuery)); | }(jQuery)); | ||
(function($, undefined) { | (function ($, undefined) { | ||
$.widget("ui.progressbar", { | $.widget("ui.progressbar", { | ||
version: "1.9.2", | version: "1.9.2", | ||
| 第8,851行: | 第8,971行: | ||
}, | }, | ||
min: 0, | min: 0, | ||
_create: function() { | _create: function () { | ||
this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({ | this.element | ||
.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all") | |||
.attr({ | |||
role: "progressbar", | role: "progressbar", | ||
"aria-valuemin": this.min, | "aria-valuemin": this.min, | ||
| 第8,858行: | 第8,980行: | ||
"aria-valuenow": this._value() | "aria-valuenow": this._value() | ||
}); | }); | ||
this.valueDiv = $("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element); | this.valueDiv = $("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>") | ||
.appendTo(this.element); | |||
this.oldValue = this._value(); | this.oldValue = this._value(); | ||
this._refreshValue(); | this._refreshValue(); | ||
}, | }, | ||
_destroy: function() { | _destroy: function () { | ||
this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"); | this.element | ||
.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all") | |||
.removeAttr("role") | |||
.removeAttr("aria-valuemin") | |||
.removeAttr("aria-valuemax") | |||
.removeAttr("aria-valuenow"); | |||
this.valueDiv.remove(); | this.valueDiv.remove(); | ||
}, | }, | ||
value: function(newValue) { | value: function (newValue) { | ||
if (newValue === undefined) { | if (newValue === undefined) { | ||
return this._value(); | return this._value(); | ||
| 第8,873行: | 第9,001行: | ||
return this; | return this; | ||
}, | }, | ||
_setOption: function(key, value) { | _setOption: function (key, value) { | ||
if (key === "value") { | if (key === "value") { | ||
this.options.value = value; | this.options.value = value; | ||
| 第8,883行: | 第9,011行: | ||
this._super(key, value); | this._super(key, value); | ||
}, | }, | ||
_value: function() { | _value: function () { | ||
var val = this.options.value; | var val = this.options.value; | ||
if (typeof val !== "number") { | if (typeof val !== "number") { | ||
| 第8,890行: | 第9,018行: | ||
return Math.min(this.options.max, Math.max(this.min, val)); | return Math.min(this.options.max, Math.max(this.min, val)); | ||
}, | }, | ||
_percentage: function() { | _percentage: function () { | ||
return 100 * this._value() / this.options.max; | return 100 * this._value() / this.options.max; | ||
}, | }, | ||
_refreshValue: function() { | _refreshValue: function () { | ||
var value = this.value(), | var value = this.value(), percentage = this._percentage(); | ||
if (this.oldValue !== value) { | if (this.oldValue !== value) { | ||
this.oldValue = value; | this.oldValue = value; | ||
this._trigger("change"); | this._trigger("change"); | ||
} | } | ||
this.valueDiv.toggle(value > this.min).toggleClass("ui-corner-right", value === this.options.max).width(percentage.toFixed(0) + "%"); | this.valueDiv | ||
.toggle(value > this.min) | |||
.toggleClass("ui-corner-right", value === this.options.max) | |||
.width(percentage.toFixed(0) + "%"); | |||
this.element.attr("aria-valuenow", value); | this.element.attr("aria-valuenow", value); | ||
} | } | ||
}); | }); | ||
})(jQuery); | })(jQuery); | ||
(function($, undefined) { | (function ($, undefined) { | ||
var numPages = 5; | var numPages = 5; | ||
$.widget("ui.slider", $.ui.mouse, { | $.widget("ui.slider", $.ui.mouse, { | ||
| 第8,911行: | 第9,041行: | ||
widgetEventPrefix: "slide", | widgetEventPrefix: "slide", | ||
options: { | options: { | ||
animate: | animate: false, | ||
distance: 0, | distance: 0, | ||
max: 100, | max: 100, | ||
min: 0, | min: 0, | ||
orientation: "horizontal", | orientation: "horizontal", | ||
range: | range: false, | ||
step: 1, | step: 1, | ||
value: 0, | value: 0, | ||
values: null | values: null | ||
}, | }, | ||
_create: function() { | _create: function () { | ||
var i, handleCount, o = this.options, | var i, handleCount, o = this.options, existingHandles = this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"), handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>", handles = []; | ||
this._keySliding = false; | |||
this._mouseSliding = false; | |||
this._animateOff = true; | |||
this._keySliding = | |||
this._mouseSliding = | |||
this._animateOff = | |||
this._handleIndex = null; | this._handleIndex = null; | ||
this._detectOrientation(); | this._detectOrientation(); | ||
this._mouseInit(); | this._mouseInit(); | ||
this.element.addClass("ui-slider" + " ui-slider-" + this.orientation + " ui-widget" + " ui-widget-content" + " ui-corner-all" + (o.disabled ? " ui-slider-disabled ui-disabled" : "")); | this.element | ||
.addClass("ui-slider" + | |||
" ui-slider-" + this.orientation + | |||
" ui-widget" + | |||
" ui-widget-content" + | |||
" ui-corner-all" + | |||
(o.disabled ? " ui-slider-disabled ui-disabled" : "")); | |||
this.range = $([]); | this.range = $([]); | ||
if (o.range) { | if (o.range) { | ||
| 第8,943行: | 第9,076行: | ||
} | } | ||
} | } | ||
this.range = $("<div></div>").appendTo(this.element).addClass("ui-slider-range" + " ui-widget-header" + ((o.range === "min" || o.range === "max") ? " ui-slider-range-" + o.range : "")); | this.range = $("<div></div>") | ||
.appendTo(this.element) | |||
.addClass("ui-slider-range" + | |||
" ui-widget-header" + | |||
((o.range === "min" || o.range === "max") ? " ui-slider-range-" + o.range : "")); | |||
} | } | ||
handleCount = (o.values && o.values.length) || 1; | handleCount = (o.values && o.values.length) || 1; | ||
| 第8,949行: | 第9,086行: | ||
handles.push(handle); | handles.push(handle); | ||
} | } | ||
this.handles = existingHandles.add($( | this.handles = existingHandles.add($(handles.join("")).appendTo(this.element)); | ||
this.handle = this.handles.eq(0); | this.handle = this.handles.eq(0); | ||
this.handles.add(this.range).filter("a").click(function(event) { | this.handles.add(this.range).filter("a") | ||
.click(function (event) { | |||
event.preventDefault(); | event.preventDefault(); | ||
}).mouseenter(function() { | }) | ||
.mouseenter(function () { | |||
if (!o.disabled) { | if (!o.disabled) { | ||
$(this).addClass("ui-state-hover"); | $(this).addClass("ui-state-hover"); | ||
} | } | ||
}).mouseleave(function() { | }) | ||
.mouseleave(function () { | |||
$(this).removeClass("ui-state-hover"); | $(this).removeClass("ui-state-hover"); | ||
}).focus(function() { | }) | ||
.focus(function () { | |||
if (!o.disabled) { | if (!o.disabled) { | ||
$(".ui-slider .ui-state-focus").removeClass("ui-state-focus"); | $(".ui-slider .ui-state-focus").removeClass("ui-state-focus"); | ||
$(this).addClass("ui-state-focus"); | $(this).addClass("ui-state-focus"); | ||
} else { | } | ||
else { | |||
$(this).blur(); | $(this).blur(); | ||
} | } | ||
}).blur(function() { | }) | ||
.blur(function () { | |||
$(this).removeClass("ui-state-focus"); | $(this).removeClass("ui-state-focus"); | ||
}); | }); | ||
this.handles.each(function(i) { | this.handles.each(function (i) { | ||
$(this).data("ui-slider-handle-index", i); | $(this).data("ui-slider-handle-index", i); | ||
}); | }); | ||
this._on(this.handles, { | this._on(this.handles, { | ||
keydown: function(event) { | keydown: function (event) { | ||
var allowed, curVal, newVal, step, index = $(event.target).data("ui-slider-handle-index"); | var allowed, curVal, newVal, step, index = $(event.target).data("ui-slider-handle-index"); | ||
switch (event.keyCode) { | switch (event.keyCode) { | ||
| 第8,987行: | 第9,129行: | ||
event.preventDefault(); | event.preventDefault(); | ||
if (!this._keySliding) { | if (!this._keySliding) { | ||
this._keySliding = | this._keySliding = true; | ||
$( | $(event.target).addClass("ui-state-active"); | ||
allowed = this._start(event, index); | allowed = this._start(event, index); | ||
if (allowed === false) { | if (allowed === false) { | ||
| 第9,000行: | 第9,141行: | ||
if (this.options.values && this.options.values.length) { | if (this.options.values && this.options.values.length) { | ||
curVal = newVal = this.values(index); | curVal = newVal = this.values(index); | ||
} else { | } | ||
else { | |||
curVal = newVal = this.value(); | curVal = newVal = this.value(); | ||
} | } | ||
| 第9,033行: | 第9,175行: | ||
this._slide(event, index, newVal); | this._slide(event, index, newVal); | ||
}, | }, | ||
keyup: function(event) { | keyup: function (event) { | ||
var index = $(event.target).data("ui-slider-handle-index"); | var index = $(event.target).data("ui-slider-handle-index"); | ||
if (this._keySliding) { | if (this._keySliding) { | ||
this._keySliding = | this._keySliding = false; | ||
this._stop(event, index); | this._stop(event, index); | ||
this._change(event, index); | this._change(event, index); | ||
| 第9,044行: | 第9,186行: | ||
}); | }); | ||
this._refreshValue(); | this._refreshValue(); | ||
this._animateOff = | this._animateOff = false; | ||
}, | }, | ||
_destroy: function() { | _destroy: function () { | ||
this.handles.remove(); | this.handles.remove(); | ||
this.range.remove(); | this.range.remove(); | ||
this.element.removeClass("ui-slider" + " ui-slider-horizontal" + " ui-slider-vertical" + " ui-slider-disabled" + " ui-widget" + " ui-widget-content" + " ui-corner-all"); | this.element | ||
.removeClass("ui-slider" + | |||
" ui-slider-horizontal" + | |||
" ui-slider-vertical" + | |||
" ui-slider-disabled" + | |||
" ui-widget" + | |||
" ui-widget-content" + | |||
" ui-corner-all"); | |||
this._mouseDestroy(); | this._mouseDestroy(); | ||
}, | }, | ||
_mouseCapture: function(event) { | _mouseCapture: function (event) { | ||
var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle, that = this, | var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle, that = this, o = this.options; | ||
if (o.disabled) { | if (o.disabled) { | ||
return false; | return false; | ||
| 第9,063行: | 第9,211行: | ||
}; | }; | ||
this.elementOffset = this.element.offset(); | this.elementOffset = this.element.offset(); | ||
position = { | position = { x: event.pageX, y: event.pageY }; | ||
normValue = this._normValueFromMouse(position); | normValue = this._normValueFromMouse(position); | ||
distance = this._valueMax() - this._valueMin() + 1; | distance = this._valueMax() - this._valueMin() + 1; | ||
this.handles.each(function(i) { | this.handles.each(function (i) { | ||
var thisDistance = Math.abs(normValue - that.values(i)); | var thisDistance = Math.abs(normValue - that.values(i)); | ||
if (distance > thisDistance) { | if (distance > thisDistance) { | ||
| 第9,085行: | 第9,230行: | ||
return false; | return false; | ||
} | } | ||
this._mouseSliding = | this._mouseSliding = true; | ||
this._handleIndex = index; | this._handleIndex = index; | ||
closestHandle.addClass("ui-state-active").focus(); | closestHandle | ||
.addClass("ui-state-active") | |||
.focus(); | |||
offset = closestHandle.offset(); | offset = closestHandle.offset(); | ||
mouseOverHandle = !$(event.target).parents(). | mouseOverHandle = !$(event.target).parents().addBack().is(".ui-slider-handle"); | ||
this._clickOffset = mouseOverHandle ? { | this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : { | ||
left: event.pageX - offset.left - (closestHandle.width() / 2), | left: event.pageX - offset.left - (closestHandle.width() / 2), | ||
top: event.pageY - offset.top - (closestHandle.height() / 2) - (parseInt(closestHandle.css("borderTopWidth"), 10) || 0) - (parseInt(closestHandle.css("borderBottomWidth"), 10) || 0) + (parseInt(closestHandle.css("marginTop"), 10) || 0) | top: event.pageY - offset.top - | ||
(closestHandle.height() / 2) - | |||
(parseInt(closestHandle.css("borderTopWidth"), 10) || 0) - | |||
(parseInt(closestHandle.css("borderBottomWidth"), 10) || 0) + | |||
(parseInt(closestHandle.css("marginTop"), 10) || 0) | |||
}; | }; | ||
if (!this.handles.hasClass("ui-state-hover")) { | if (!this.handles.hasClass("ui-state-hover")) { | ||
this._slide(event, index, normValue); | this._slide(event, index, normValue); | ||
} | } | ||
this._animateOff = | this._animateOff = true; | ||
return true; | return true; | ||
}, | }, | ||
_mouseStart: function() { | _mouseStart: function () { | ||
return true; | return true; | ||
}, | }, | ||
_mouseDrag: function(event) { | _mouseDrag: function (event) { | ||
var position = { | var position = { x: event.pageX, y: event.pageY }, normValue = this._normValueFromMouse(position); | ||
this._slide(event, this._handleIndex, normValue); | |||
this._slide(event, this._handleIndex, | |||
return false; | return false; | ||
}, | }, | ||
_mouseStop: function(event) { | _mouseStop: function (event) { | ||
this.handles.removeClass("ui-state-active"); | this.handles.removeClass("ui-state-active"); | ||
this._mouseSliding = | this._mouseSliding = false; | ||
this._stop(event, this._handleIndex); | this._stop(event, this._handleIndex); | ||
this._change(event, this._handleIndex); | this._change(event, this._handleIndex); | ||
this._handleIndex = null; | this._handleIndex = null; | ||
this._clickOffset = null; | this._clickOffset = null; | ||
this._animateOff = | this._animateOff = false; | ||
return false; | return false; | ||
}, | }, | ||
_detectOrientation: function() { | _detectOrientation: function () { | ||
this.orientation = (this.options.orientation === "vertical") ? "vertical" : "horizontal"; | this.orientation = (this.options.orientation === "vertical") ? "vertical" : "horizontal"; | ||
}, | }, | ||
_normValueFromMouse: function(position) { | _normValueFromMouse: function (position) { | ||
var pixelTotal, pixelMouse, percentMouse, valueTotal, valueMouse; | var pixelTotal, pixelMouse, percentMouse, valueTotal, valueMouse; | ||
if (this.orientation === "horizontal") { | if (this.orientation === "horizontal") { | ||
pixelTotal = this.elementSize.width; | pixelTotal = this.elementSize.width; | ||
pixelMouse = position.x - this.elementOffset.left - (this._clickOffset ? this._clickOffset.left : 0); | pixelMouse = position.x - this.elementOffset.left - (this._clickOffset ? this._clickOffset.left : 0); | ||
} else { | } | ||
else { | |||
pixelTotal = this.elementSize.height; | pixelTotal = this.elementSize.height; | ||
pixelMouse = position.y - this.elementOffset.top - (this._clickOffset ? this._clickOffset.top : 0); | pixelMouse = position.y - this.elementOffset.top - (this._clickOffset ? this._clickOffset.top : 0); | ||
| 第9,152行: | 第9,296行: | ||
return this._trimAlignValue(valueMouse); | return this._trimAlignValue(valueMouse); | ||
}, | }, | ||
_start: function(event, index) { | _start: function (event, index) { | ||
var uiHash = { | var uiHash = { | ||
handle: this.handles[index], | handle: this.handles[index], | ||
| 第9,163行: | 第9,307行: | ||
return this._trigger("start", event, uiHash); | return this._trigger("start", event, uiHash); | ||
}, | }, | ||
_slide: function(event, index, newVal) { | _slide: function (event, index, newVal) { | ||
var otherVal, newValues, allowed; | var otherVal, newValues, allowed; | ||
if (this.options.values && this.options.values.length) { | if (this.options.values && this.options.values.length) { | ||
otherVal = this.values(index ? 0 : 1); | otherVal = this.values(index ? 0 : 1); | ||
if ((this.options.values.length === 2 && this.options.range === true) && ((index === 0 && newVal > otherVal) || (index === 1 && newVal < otherVal))) { | if ((this.options.values.length === 2 && this.options.range === true) && | ||
((index === 0 && newVal > otherVal) || (index === 1 && newVal < otherVal))) { | |||
newVal = otherVal; | newVal = otherVal; | ||
} | } | ||
| 第9,183行: | 第9,328行: | ||
} | } | ||
} | } | ||
} else { | } | ||
else { | |||
if (newVal !== this.value()) { | if (newVal !== this.value()) { | ||
allowed = this._trigger("slide", event, { | allowed = this._trigger("slide", event, { | ||
| 第9,195行: | 第9,341行: | ||
} | } | ||
}, | }, | ||
_stop: function(event, index) { | _stop: function (event, index) { | ||
var uiHash = { | var uiHash = { | ||
handle: this.handles[index], | handle: this.handles[index], | ||
| 第9,206行: | 第9,352行: | ||
this._trigger("stop", event, uiHash); | this._trigger("stop", event, uiHash); | ||
}, | }, | ||
_change: function(event, index) { | _change: function (event, index) { | ||
if (!this._keySliding && !this._mouseSliding) { | if (!this._keySliding && !this._mouseSliding) { | ||
var uiHash = { | var uiHash = { | ||
| 第9,219行: | 第9,365行: | ||
} | } | ||
}, | }, | ||
value: function(newValue) { | value: function (newValue) { | ||
if (arguments.length) { | if (arguments.length) { | ||
this.options.value = this._trimAlignValue(newValue); | this.options.value = this._trimAlignValue(newValue); | ||
| 第9,228行: | 第9,374行: | ||
return this._value(); | return this._value(); | ||
}, | }, | ||
values: function(index, newValue) { | values: function (index, newValue) { | ||
var vals, newValues, i; | var vals, newValues, i; | ||
if (arguments.length > 1) { | if (arguments.length > 1) { | ||
| 第9,237行: | 第9,383行: | ||
} | } | ||
if (arguments.length) { | if (arguments.length) { | ||
if ( | if (Array.isArray(arguments[0])) { | ||
vals = this.options. | vals = this.options.values; | ||
newValues = arguments[0]; | newValues = arguments[0]; | ||
for (i = 0; i < vals.length; i += 1) { | for (i = 0; i < vals.length; i += 1) { | ||
| 第9,246行: | 第9,391行: | ||
} | } | ||
this._refreshValue(); | this._refreshValue(); | ||
} else { | } | ||
else { | |||
if (this.options.values && this.options.values.length) { | if (this.options.values && this.options.values.length) { | ||
return this._values(index); | return this._values(index); | ||
} else { | } | ||
else { | |||
return this.value(); | return this.value(); | ||
} | } | ||
} | } | ||
} else { | } | ||
else { | |||
return this._values(); | return this._values(); | ||
} | } | ||
}, | }, | ||
_setOption: function(key, value) { | _setOption: function (key, value) { | ||
var i, valsLength = 0; | var i, valsLength = 0; | ||
if ( | if (Array.isArray(this.options.values)) { | ||
valsLength = this.options.values.length; | valsLength = this.options.values.length; | ||
} | } | ||
| 第9,270行: | 第9,418行: | ||
this.handles.prop("disabled", true); | this.handles.prop("disabled", true); | ||
this.element.addClass("ui-disabled"); | this.element.addClass("ui-disabled"); | ||
} else { | } | ||
else { | |||
this.handles.prop("disabled", false); | this.handles.prop("disabled", false); | ||
this.element.removeClass("ui-disabled"); | this.element.removeClass("ui-disabled"); | ||
| 第9,277行: | 第9,426行: | ||
case "orientation": | case "orientation": | ||
this._detectOrientation(); | this._detectOrientation(); | ||
this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-" + this.orientation); | this.element | ||
.removeClass("ui-slider-horizontal ui-slider-vertical") | |||
.addClass("ui-slider-" + this.orientation); | |||
this._refreshValue(); | this._refreshValue(); | ||
break; | break; | ||
case "value": | case "value": | ||
this._animateOff = | this._animateOff = true; | ||
this._refreshValue(); | this._refreshValue(); | ||
this._change( | this._change(null, 0); | ||
this._animateOff = false; | |||
this._animateOff = | |||
break; | break; | ||
case "values": | case "values": | ||
this._animateOff = | this._animateOff = true; | ||
this._refreshValue(); | this._refreshValue(); | ||
for (i = 0; i < valsLength; i += 1) { | for (i = 0; i < valsLength; i += 1) { | ||
this._change(null, i); | this._change(null, i); | ||
} | } | ||
this._animateOff = | this._animateOff = false; | ||
break; | break; | ||
case "min": | case "min": | ||
case "max": | case "max": | ||
this._animateOff = | this._animateOff = true; | ||
this._refreshValue(); | this._refreshValue(); | ||
this._animateOff = | this._animateOff = false; | ||
break; | break; | ||
} | } | ||
}, | }, | ||
_value: function() { | _value: function () { | ||
var val = this.options.value; | var val = this.options.value; | ||
val = this._trimAlignValue(val); | val = this._trimAlignValue(val); | ||
return val; | return val; | ||
}, | }, | ||
_values: function(index) { | _values: function (index) { | ||
var val, vals, i; | var val, vals, i; | ||
if (arguments.length) { | if (arguments.length) { | ||
| 第9,314行: | 第9,464行: | ||
val = this._trimAlignValue(val); | val = this._trimAlignValue(val); | ||
return val; | return val; | ||
} else { | } | ||
else { | |||
vals = this.options.values.slice(); | vals = this.options.values.slice(); | ||
for (i = 0; i < vals.length; i += 1) { | for (i = 0; i < vals.length; i += 1) { | ||
| 第9,322行: | 第9,473行: | ||
} | } | ||
}, | }, | ||
_trimAlignValue: function(val) { | _trimAlignValue: function (val) { | ||
if (val <= this._valueMin()) { | if (val <= this._valueMin()) { | ||
return this._valueMin(); | return this._valueMin(); | ||
| 第9,329行: | 第9,480行: | ||
return this._valueMax(); | return this._valueMax(); | ||
} | } | ||
var step = (this.options.step > 0) ? this.options.step : 1, | var step = (this.options.step > 0) ? this.options.step : 1, valModStep = (val - this._valueMin()) % step, alignValue = val - valModStep; | ||
if (Math.abs(valModStep) * 2 >= step) { | if (Math.abs(valModStep) * 2 >= step) { | ||
alignValue += (valModStep > 0) ? step : (-step); | alignValue += (valModStep > 0) ? step : (-step); | ||
| 第9,337行: | 第9,486行: | ||
return parseFloat(alignValue.toFixed(5)); | return parseFloat(alignValue.toFixed(5)); | ||
}, | }, | ||
_valueMin: function() { | _valueMin: function () { | ||
return this | return this.options.min; | ||
}, | }, | ||
_valueMax: function() { | _valueMax: function () { | ||
return this.options.max; | return this.options.max; | ||
}, | }, | ||
_refreshValue: function() { | _refreshValue: function () { | ||
var lastValPercent, valPercent, value, valueMin, valueMax, oRange = this.options.range, | var lastValPercent, valPercent, value, valueMin, valueMax, oRange = this.options.range, o = this.options, that = this, animate = (!this._animateOff) ? o.animate : false, _set = {}; | ||
if (this.options.values && this.options.values.length) { | if (this.options.values && this.options.values.length) { | ||
this.handles.each(function(i) { | this.handles.each(function (i) { | ||
valPercent = (that.values(i) - that._valueMin()) / (that._valueMax() - that._valueMin()) * 100; | valPercent = (that.values(i) - that._valueMin()) / (that._valueMax() - that._valueMin()) * 100; | ||
_set[that.orientation === "horizontal" ? "left" : "bottom"] = valPercent + "%"; | _set[that.orientation === "horizontal" ? "left" : "bottom"] = valPercent + "%"; | ||
| 第9,358行: | 第9,502行: | ||
if (that.orientation === "horizontal") { | if (that.orientation === "horizontal") { | ||
if (i === 0) { | if (i === 0) { | ||
that.range.stop(1, 1)[animate ? "animate" : "css"]({ | that.range.stop(1, 1)[animate ? "animate" : "css"]({ left: valPercent + "%" }, o.animate); | ||
} | } | ||
if (i === 1) { | if (i === 1) { | ||
that.range[animate ? "animate" : "css"]({ | that.range[animate ? "animate" : "css"]({ width: (valPercent - lastValPercent) + "%" }, { queue: false, duration: o.animate }); | ||
} | } | ||
} else { | } | ||
else { | |||
if (i === 0) { | if (i === 0) { | ||
that.range.stop(1, 1)[animate ? "animate" : "css"]({ | that.range.stop(1, 1)[animate ? "animate" : "css"]({ bottom: (valPercent) + "%" }, o.animate); | ||
} | } | ||
if (i === 1) { | if (i === 1) { | ||
that.range[animate ? "animate" : "css"]({ | that.range[animate ? "animate" : "css"]({ height: (valPercent - lastValPercent) + "%" }, { queue: false, duration: o.animate }); | ||
} | } | ||
} | } | ||
| 第9,389行: | 第9,519行: | ||
lastValPercent = valPercent; | lastValPercent = valPercent; | ||
}); | }); | ||
} else { | } | ||
else { | |||
value = this.value(); | value = this.value(); | ||
valueMin = this._valueMin(); | valueMin = this._valueMin(); | ||
valueMax = this._valueMax(); | valueMax = this._valueMax(); | ||
valPercent = (valueMax !== valueMin) ? (value - valueMin) / (valueMax - valueMin) * 100 : 0; | valPercent = (valueMax !== valueMin) ? | ||
(value - valueMin) / (valueMax - valueMin) * 100 : | |||
0; | |||
_set[this.orientation === "horizontal" ? "left" : "bottom"] = valPercent + "%"; | _set[this.orientation === "horizontal" ? "left" : "bottom"] = valPercent + "%"; | ||
this.handle.stop(1, 1)[animate ? "animate" : "css"](_set, o.animate); | this.handle.stop(1, 1)[animate ? "animate" : "css"](_set, o.animate); | ||
if (oRange === "min" && this.orientation === "horizontal") { | if (oRange === "min" && this.orientation === "horizontal") { | ||
this.range.stop(1, 1)[animate ? "animate" : "css"]({ | this.range.stop(1, 1)[animate ? "animate" : "css"]({ width: valPercent + "%" }, o.animate); | ||
} | } | ||
if (oRange === "max" && this.orientation === "horizontal") { | if (oRange === "max" && this.orientation === "horizontal") { | ||
this.range[animate ? "animate" : "css"]({ | this.range[animate ? "animate" : "css"]({ width: (100 - valPercent) + "%" }, { queue: false, duration: o.animate }); | ||
} | } | ||
if (oRange === "min" && this.orientation === "vertical") { | if (oRange === "min" && this.orientation === "vertical") { | ||
this.range.stop(1, 1)[animate ? "animate" : "css"]({ | this.range.stop(1, 1)[animate ? "animate" : "css"]({ height: valPercent + "%" }, o.animate); | ||
} | } | ||
if (oRange === "max" && this.orientation === "vertical") { | if (oRange === "max" && this.orientation === "vertical") { | ||
this.range[animate ? "animate" : "css"]({ | this.range[animate ? "animate" : "css"]({ height: (100 - valPercent) + "%" }, { queue: false, duration: o.animate }); | ||
} | } | ||
} | } | ||
| 第9,426行: | 第9,545行: | ||
}); | }); | ||
}(jQuery)); | }(jQuery)); | ||
(function($, undefined) { | (function ($, undefined) { | ||
var tabId = 0, | var tabId = 0, rhash = /#.*$/; | ||
function getNextTabId() { | |||
function | |||
return ++tabId; | return ++tabId; | ||
} | } | ||
function isLocal(anchor) { | function isLocal(anchor) { | ||
return anchor.hash.length > 1 && anchor.href.replace(rhash, "") === location.href.replace(rhash, "").replace(/\s/g, "%20"); | return anchor.hash.length > 1 && | ||
anchor.href.replace(rhash, "") === | |||
location.href.replace(rhash, "") | |||
.replace(/\s/g, "%20"); | |||
} | } | ||
$.widget("ui.tabs", { | $.widget("ui.tabs", { | ||
| 第9,443行: | 第9,561行: | ||
options: { | options: { | ||
active: null, | active: null, | ||
collapsible: | collapsible: false, | ||
event: "click", | event: "click", | ||
heightStyle: "content", | heightStyle: "content", | ||
| 第9,453行: | 第9,571行: | ||
load: null | load: null | ||
}, | }, | ||
_create: function() { | _create: function () { | ||
var that = this, | var that = this, options = this.options, active = options.active, locationHash = location.hash.substring(1); | ||
this.running = false; | |||
this.element | |||
.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all") | |||
this.running = | .toggleClass("ui-tabs-collapsible", options.collapsible) | ||
this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible", options.collapsible). | .on("mousedown" + this.eventNamespace, ".ui-tabs-nav > li", function (event) { | ||
if ($(this).is(".ui-state-disabled")) { | if ($(this).is(".ui-state-disabled")) { | ||
event.preventDefault(); | event.preventDefault(); | ||
} | } | ||
}). | }) | ||
.on("focus" + this.eventNamespace, ".ui-tabs-anchor", function () { | |||
if ($(this).closest("li").is(".ui-state-disabled")) { | if ($(this).closest("li").is(".ui-state-disabled")) { | ||
this.blur(); | this.blur(); | ||
| 第9,471行: | 第9,590行: | ||
if (active === null) { | if (active === null) { | ||
if (locationHash) { | if (locationHash) { | ||
this.tabs.each(function(i, tab) { | this.tabs.each(function (i, tab) { | ||
if ( | if ($(tab).attr("aria-controls") === locationHash) { | ||
active = i; | active = i; | ||
return false; | return false; | ||
| 第9,483行: | 第9,601行: | ||
} | } | ||
if (active === null || active === -1) { | if (active === null || active === -1) { | ||
active = this.tabs.length ? 0 : | active = this.tabs.length ? 0 : false; | ||
} | } | ||
} | } | ||
| 第9,496行: | 第9,614行: | ||
options.active = 0; | options.active = 0; | ||
} | } | ||
if ( | if (Array.isArray(options.disabled)) { | ||
options.disabled = $.unique(options.disabled.concat($.map(this.tabs.filter(".ui-state-disabled"), function(li) { | options.disabled = $.unique(options.disabled.concat($.map(this.tabs.filter(".ui-state-disabled"), function (li) { | ||
return that.tabs.index(li); | return that.tabs.index(li); | ||
}))).sort(); | }))).sort(); | ||
| 第9,503行: | 第9,621行: | ||
if (this.options.active !== false && this.anchors.length) { | if (this.options.active !== false && this.anchors.length) { | ||
this.active = this._findActive(this.options.active); | this.active = this._findActive(this.options.active); | ||
} else { | } | ||
else { | |||
this.active = $(); | this.active = $(); | ||
} | } | ||
| 第9,511行: | 第9,630行: | ||
} | } | ||
}, | }, | ||
_getCreateEventData: function() { | _getCreateEventData: function () { | ||
return { | return { | ||
tab: this.active, | tab: this.active, | ||
| 第9,517行: | 第9,636行: | ||
}; | }; | ||
}, | }, | ||
_tabKeydown: function(event) { | _tabKeydown: function (event) { | ||
var focusedTab = $(this.document[0].activeElement).closest("li"), | var focusedTab = $(this.document[0].activeElement).closest("li"), selectedIndex = this.tabs.index(focusedTab), goingForward = true; | ||
if (this._handlePageNav(event)) { | if (this._handlePageNav(event)) { | ||
return; | return; | ||
| 第9,531行: | 第9,648行: | ||
case $.ui.keyCode.UP: | case $.ui.keyCode.UP: | ||
case $.ui.keyCode.LEFT: | case $.ui.keyCode.LEFT: | ||
goingForward = | goingForward = false; | ||
selectedIndex--; | selectedIndex--; | ||
break; | break; | ||
| 第9,559行: | 第9,676行: | ||
focusedTab.attr("aria-selected", "false"); | focusedTab.attr("aria-selected", "false"); | ||
this.tabs.eq(selectedIndex).attr("aria-selected", "true"); | this.tabs.eq(selectedIndex).attr("aria-selected", "true"); | ||
this.activating = this._delay(function() { | this.activating = this._delay(function () { | ||
this.option("active", | this.option("active", selectedIndex); | ||
}, this.delay); | }, this.delay); | ||
} | } | ||
}, | }, | ||
_panelKeydown: function(event) { | _panelKeydown: function (event) { | ||
if (this._handlePageNav(event)) { | if (this._handlePageNav(event)) { | ||
return; | return; | ||
| 第9,574行: | 第9,690行: | ||
} | } | ||
}, | }, | ||
_handlePageNav: function(event) { | _handlePageNav: function (event) { | ||
if (event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP) { | if (event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP) { | ||
this._activate(this._focusNextTab(this.options.active - 1, false)); | this._activate(this._focusNextTab(this.options.active - 1, false)); | ||
| 第9,584行: | 第9,700行: | ||
} | } | ||
}, | }, | ||
_findNextTab: function(index, goingForward) { | _findNextTab: function (index, goingForward) { | ||
var lastTabIndex = this.tabs.length - 1; | var lastTabIndex = this.tabs.length - 1; | ||
function constrain() { | function constrain() { | ||
if (index > lastTabIndex) { | if (index > lastTabIndex) { | ||
| 第9,601行: | 第9,716行: | ||
return index; | return index; | ||
}, | }, | ||
_focusNextTab: function(index, goingForward) { | _focusNextTab: function (index, goingForward) { | ||
index = this._findNextTab(index, goingForward); | index = this._findNextTab(index, goingForward); | ||
this.tabs.eq(index).focus(); | this.tabs.eq(index).focus(); | ||
return index; | return index; | ||
}, | }, | ||
_setOption: function(key, value) { | _setOption: function (key, value) { | ||
if (key === "active") { | if (key === "active") { | ||
this._activate(value); | this._activate(value); | ||
return; | return; | ||
} | } | ||
if (key === | if (key === "disabled") { | ||
this._setupDisabled(value); | this._setupDisabled(value); | ||
return; | return; | ||
| 第9,630行: | 第9,744行: | ||
} | } | ||
}, | }, | ||
_tabId: function(tab) { | _tabId: function (tab) { | ||
return tab.attr("aria-controls") || "ui-tabs-" + getNextTabId(); | return tab.attr("aria-controls") || "ui-tabs-" + getNextTabId(); | ||
}, | }, | ||
_sanitizeSelector: function(hash) { | _sanitizeSelector: function (hash) { | ||
return hash ? hash.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&") : ""; | return hash ? hash.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&") : ""; | ||
}, | }, | ||
refresh: function() { | refresh: function () { | ||
var options = this.options, | var options = this.options, lis = this.tablist.children(":has(a[href])"); | ||
options.disabled = $.map(lis.filter(".ui-state-disabled"), function (tab) { | |||
options.disabled = $.map(lis.filter(".ui-state-disabled"), function(tab) { | |||
return lis.index(tab); | return lis.index(tab); | ||
}); | }); | ||
this._processTabs(); | this._processTabs(); | ||
if (options.active === false || !this.anchors.length) { | if (options.active === false || !this.anchors.length) { | ||
options.active = | options.active = false; | ||
this.active = $(); | this.active = $(); | ||
} else if (this.active.length && !$.contains(this.tablist[0], this.active[0])) { | } | ||
else if (this.active.length && !$.contains(this.tablist[0], this.active[0])) { | |||
if (this.tabs.length === options.disabled.length) { | if (this.tabs.length === options.disabled.length) { | ||
options.active = | options.active = false; | ||
this.active = $(); | this.active = $(); | ||
} | } | ||
} else { | else { | ||
this._activate(this._findNextTab(Math.max(0, options.active - 1), false)); | |||
} | |||
} | |||
else { | |||
options.active = this.tabs.index(this.active); | options.active = this.tabs.index(this.active); | ||
} | } | ||
this._refresh(); | this._refresh(); | ||
}, | }, | ||
_refresh: function() { | _refresh: function () { | ||
this._setupDisabled(this.options.disabled); | this._setupDisabled(this.options.disabled); | ||
this._setupEvents(this.options.event); | this._setupEvents(this.options.event); | ||
| 第9,667行: | 第9,782行: | ||
tabIndex: -1 | tabIndex: -1 | ||
}); | }); | ||
this.panels.not(this._getPanelForTab(this.active)).hide().attr({ | this.panels.not(this._getPanelForTab(this.active)) | ||
.hide() | |||
.attr({ | |||
"aria-expanded": "false", | "aria-expanded": "false", | ||
"aria-hidden": "true" | "aria-hidden": "true" | ||
| 第9,673行: | 第9,790行: | ||
if (!this.active.length) { | if (!this.active.length) { | ||
this.tabs.eq(0).attr("tabIndex", 0); | this.tabs.eq(0).attr("tabIndex", 0); | ||
} else { | } | ||
this.active.addClass("ui-tabs-active ui-state-active").attr({ | else { | ||
this.active | |||
.addClass("ui-tabs-active ui-state-active") | |||
.attr({ | |||
"aria-selected": "true", | "aria-selected": "true", | ||
tabIndex: 0 | tabIndex: 0 | ||
}); | }); | ||
this._getPanelForTab(this.active).show().attr({ | this._getPanelForTab(this.active) | ||
.show() | |||
.attr({ | |||
"aria-expanded": "true", | "aria-expanded": "true", | ||
"aria-hidden": "false" | "aria-hidden": "false" | ||
| 第9,684行: | 第9,806行: | ||
} | } | ||
}, | }, | ||
_processTabs: function() { | _processTabs: function () { | ||
var that = this; | var that = this; | ||
this.tablist = this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role", "tablist"); | this.tablist = this._getList() | ||
this.tabs = this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({ | .addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all") | ||
.attr("role", "tablist"); | |||
this.tabs = this.tablist.find("> li:has(a[href])") | |||
.addClass("ui-state-default ui-corner-top") | |||
.attr({ | |||
role: "tab", | role: "tab", | ||
tabIndex: -1 | tabIndex: -1 | ||
}); | }); | ||
this. | this.anchors = this.tabs.map(function () { | ||
return $("a", this)[0]; | return $("a", this)[0]; | ||
}).addClass("ui-tabs-anchor").attr({ | }) | ||
.addClass("ui-tabs-anchor") | |||
.attr({ | |||
role: "presentation", | role: "presentation", | ||
tabIndex: -1 | tabIndex: -1 | ||
}); | }); | ||
this.panels = $(); | this.panels = $(); | ||
this.anchors.each(function(i, anchor) { | this.anchors.each(function (i, anchor) { | ||
var selector, panel, panelId, anchorId = $(anchor).uniqueId().attr("id"), | var selector, panel, panelId, anchorId = $(anchor).uniqueId().attr("id"), tab = $(anchor).closest("li"), originalAriaControls = tab.attr("aria-controls"); | ||
if (isLocal(anchor)) { | if (isLocal(anchor)) { | ||
selector = anchor.hash; | selector = anchor.hash; | ||
panel = that.element.find(that._sanitizeSelector(selector)); | panel = that.element.find(that._sanitizeSelector(selector)); | ||
} else { | } | ||
else { | |||
panelId = that._tabId(tab); | panelId = that._tabId(tab); | ||
selector = "#" + panelId; | selector = "#" + panelId; | ||
| 第9,728行: | 第9,854行: | ||
panel.attr("aria-labelledby", anchorId); | panel.attr("aria-labelledby", anchorId); | ||
}); | }); | ||
this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role", "tabpanel"); | this.panels | ||
.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom") | |||
.attr("role", "tabpanel"); | |||
}, | }, | ||
_getList: function() { | _getList: function () { | ||
return this.element.find("ol,ul").eq(0); | return this.element.find("ol,ul").eq(0); | ||
}, | }, | ||
_createPanel: function(id) { | _createPanel: function (id) { | ||
return $("<div>").attr("id", id).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy", true); | return $("<div>") | ||
.attr("id", id) | |||
.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom") | |||
.data("ui-tabs-destroy", true); | |||
}, | }, | ||
_setupDisabled: function(disabled) { | _setupDisabled: function (disabled) { | ||
if ( | if (Array.isArray(disabled)) { | ||
if (!disabled.length) { | if (!disabled.length) { | ||
disabled = | disabled = false; | ||
} else if (disabled.length === this.anchors.length) { | } | ||
disabled = | else if (disabled.length === this.anchors.length) { | ||
disabled = true; | |||
} | } | ||
} | } | ||
for (var i = 0, li; | for (var i = 0, li; (li = this.tabs[i]); i++) { | ||
if (disabled === true || $.inArray(i, disabled) !== -1) { | if (disabled === true || $.inArray(i, disabled) !== -1) { | ||
$(li).addClass("ui-state-disabled").attr("aria-disabled", "true"); | $(li) | ||
} else { | .addClass("ui-state-disabled") | ||
$(li).removeClass("ui-state-disabled").removeAttr("aria-disabled"); | .attr("aria-disabled", "true"); | ||
} | |||
else { | |||
$(li) | |||
.removeClass("ui-state-disabled") | |||
.removeAttr("aria-disabled"); | |||
} | } | ||
} | } | ||
this.options.disabled = disabled; | this.options.disabled = disabled; | ||
}, | }, | ||
_setupEvents: function(event) { | _setupEvents: function (event) { | ||
var events = { | var events = { | ||
click: function(event) { | click: function (event) { | ||
event.preventDefault(); | event.preventDefault(); | ||
} | } | ||
}; | }; | ||
if (event) { | if (event) { | ||
$.each(event.split(" "), function(index, eventName) { | $.each(event.split(" "), function (index, eventName) { | ||
events[eventName] = "_eventHandler"; | events[eventName] = "_eventHandler"; | ||
}); | }); | ||
| 第9,767行: | 第9,903行: | ||
this._off(this.anchors.add(this.tabs).add(this.panels)); | this._off(this.anchors.add(this.tabs).add(this.panels)); | ||
this._on(this.anchors, events); | this._on(this.anchors, events); | ||
this._on(this.tabs, { | this._on(this.tabs, { keydown: "_tabKeydown" }); | ||
this._on(this.panels, { keydown: "_panelKeydown" }); | |||
this._focusable(this.tabs); | |||
this._on(this.panels, { | |||
this. | |||
this._hoverable(this.tabs); | this._hoverable(this.tabs); | ||
}, | }, | ||
_setupHeightStyle: function(heightStyle) { | _setupHeightStyle: function (heightStyle) { | ||
var maxHeight, overflow, parent = this.element.parent(); | var maxHeight, overflow, parent = this.element.parent(); | ||
if (heightStyle === "fill") { | if (heightStyle === "fill") { | ||
| 第9,785行: | 第9,916行: | ||
} | } | ||
maxHeight = parent.height(); | maxHeight = parent.height(); | ||
this.element.siblings(":visible").each(function() { | this.element.siblings(":visible").each(function () { | ||
var elem = $(this), | var elem = $(this), position = elem.css("position"); | ||
if (position === "absolute" || position === "fixed") { | if (position === "absolute" || position === "fixed") { | ||
return; | return; | ||
| 第9,796行: | 第9,926行: | ||
parent.css("overflow", overflow); | parent.css("overflow", overflow); | ||
} | } | ||
this.element.children().not(this.panels).each(function() { | this.element.children().not(this.panels).each(function () { | ||
maxHeight -= $(this).outerHeight(true); | maxHeight -= $(this).outerHeight(true); | ||
}); | }); | ||
this.panels.each(function() { | this.panels.each(function () { | ||
$(this).height(Math.max(0, maxHeight - $(this).innerHeight() + $(this).height())); | $(this).height(Math.max(0, maxHeight - | ||
}).css("overflow", "auto"); | $(this).innerHeight() + $(this).height())); | ||
} else if (heightStyle === "auto") { | }) | ||
.css("overflow", "auto"); | |||
} | |||
else if (heightStyle === "auto") { | |||
maxHeight = 0; | maxHeight = 0; | ||
this.panels.each(function() { | this.panels.each(function () { | ||
maxHeight = Math.max(maxHeight, $(this).height("").height()); | maxHeight = Math.max(maxHeight, $(this).height("").height()); | ||
}).height(maxHeight); | }).height(maxHeight); | ||
} | } | ||
}, | }, | ||
_eventHandler: function(event) { | _eventHandler: function (event) { | ||
var options = this.options, | var options = this.options, active = this.active, anchor = $(event.currentTarget), tab = anchor.closest("li"), clickedIsActive = tab[0] === active[0], collapsing = clickedIsActive && options.collapsible, toShow = collapsing ? $() : this._getPanelForTab(tab), toHide = !active.length ? $() : this._getPanelForTab(active), eventData = { | ||
oldTab: active, | |||
oldPanel: toHide, | |||
newTab: collapsing ? $() : tab, | |||
newPanel: toShow | |||
}; | |||
event.preventDefault(); | event.preventDefault(); | ||
if (tab.hasClass("ui-state-disabled") || tab.hasClass("ui-tabs-loading") || this.running || (clickedIsActive && !options.collapsible) || (this._trigger("beforeActivate", event, eventData) === false)) { | if (tab.hasClass("ui-state-disabled") || | ||
tab.hasClass("ui-tabs-loading") || | |||
this.running || | |||
(clickedIsActive && !options.collapsible) || | |||
(this._trigger("beforeActivate", event, eventData) === false)) { | |||
return; | return; | ||
} | } | ||
| 第9,841行: | 第9,970行: | ||
this._toggle(event, eventData); | this._toggle(event, eventData); | ||
}, | }, | ||
_toggle: function(event, eventData) { | _toggle: function (event, eventData) { | ||
var that = this, | var that = this, toShow = eventData.newPanel, toHide = eventData.oldPanel; | ||
this.running = true; | |||
this.running = | |||
function complete() { | function complete() { | ||
that.running = | that.running = false; | ||
that. | that._trigger("activate", event, eventData); | ||
} | } | ||
function show() { | function show() { | ||
eventData.newTab.closest("li").addClass("ui-tabs-active ui-state-active"); | eventData.newTab.closest("li").addClass("ui-tabs-active ui-state-active"); | ||
if (toShow.length && that.options.show) { | if (toShow.length && that.options.show) { | ||
that._show(toShow, that.options.show, complete); | that._show(toShow, that.options.show, complete); | ||
} else { | } | ||
else { | |||
toShow.show(); | toShow.show(); | ||
complete(); | complete(); | ||
| 第9,863行: | 第9,988行: | ||
} | } | ||
if (toHide.length && this.options.hide) { | if (toHide.length && this.options.hide) { | ||
this._hide(toHide, this.options.hide, function() { | this._hide(toHide, this.options.hide, function () { | ||
eventData.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"); | eventData.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"); | ||
show(); | show(); | ||
}); | }); | ||
} else { | } | ||
else { | |||
eventData.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"); | eventData.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"); | ||
toHide.hide(); | toHide.hide(); | ||
| 第9,879行: | 第10,005行: | ||
if (toShow.length && toHide.length) { | if (toShow.length && toHide.length) { | ||
eventData.oldTab.attr("tabIndex", -1); | eventData.oldTab.attr("tabIndex", -1); | ||
} else if (toShow.length) { | } | ||
this.tabs.filter(function() { | else if (toShow.length) { | ||
this.tabs.filter(function () { | |||
return $(this).attr("tabIndex") === 0; | return $(this).attr("tabIndex") === 0; | ||
}).attr("tabIndex", -1); | }) | ||
.attr("tabIndex", -1); | |||
} | } | ||
toShow.attr({ | toShow.attr({ | ||
| 第9,893行: | 第10,021行: | ||
}); | }); | ||
}, | }, | ||
_activate: function(index) { | _activate: function (index) { | ||
var anchor, active = this._findActive(index); | var anchor, active = this._findActive(index); | ||
if (active[0] === this.active[0]) { | if (active[0] === this.active[0]) { | ||
| 第9,908行: | 第10,036行: | ||
}); | }); | ||
}, | }, | ||
_findActive: function(index) { | _findActive: function (index) { | ||
return index === | return index === false ? $() : this.tabs.eq(index); | ||
}, | }, | ||
_getIndex: function(index) { | _getIndex: function (index) { | ||
if (typeof index === "string") { | if (typeof index === "string") { | ||
index = this.anchors.index(this.anchors.filter("[href$='" + index + "']")); | index = this.anchors.index(this.anchors.filter("[href$='" + index + "']")); | ||
| 第9,917行: | 第10,045行: | ||
return index; | return index; | ||
}, | }, | ||
_destroy: function() { | _destroy: function () { | ||
if (this.xhr) { | if (this.xhr) { | ||
this.xhr.abort(); | this.xhr.abort(); | ||
} | } | ||
this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"); | this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"); | ||
this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"); | this.tablist | ||
this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeData("href.tabs").removeData("load.tabs").removeUniqueId(); | .removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all") | ||
this.tabs.add(this.panels).each(function() { | .removeAttr("role"); | ||
this.anchors | |||
.removeClass("ui-tabs-anchor") | |||
.removeAttr("role") | |||
.removeAttr("tabIndex") | |||
.removeData("href.tabs") | |||
.removeData("load.tabs") | |||
.removeUniqueId(); | |||
this.tabs.add(this.panels).each(function () { | |||
if ($.data(this, "ui-tabs-destroy")) { | if ($.data(this, "ui-tabs-destroy")) { | ||
$(this).remove(); | $(this).remove(); | ||
} else { | } | ||
$(this).removeClass( | else { | ||
$(this) | |||
.removeClass("ui-state-default ui-state-active ui-state-disabled " + | |||
"ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel") | |||
.removeAttr("tabIndex") | |||
.removeAttr("aria-live") | |||
.removeAttr("aria-busy") | |||
.removeAttr("aria-selected") | |||
.removeAttr("aria-labelledby") | |||
.removeAttr("aria-hidden") | |||
.removeAttr("aria-expanded") | |||
.removeAttr("role"); | |||
} | } | ||
}); | }); | ||
this.tabs.each(function() { | this.tabs.each(function () { | ||
var li = $(this), | var li = $(this), prev = li.data("ui-tabs-aria-controls"); | ||
if (prev) { | if (prev) { | ||
li.attr("aria-controls", prev); | li.attr("aria-controls", prev); | ||
} else { | } | ||
else { | |||
li.removeAttr("aria-controls"); | li.removeAttr("aria-controls"); | ||
} | } | ||
| 第9,946行: | 第10,092行: | ||
} | } | ||
}, | }, | ||
enable: function(index) { | enable: function (index) { | ||
var disabled = this.options.disabled; | var disabled = this.options.disabled; | ||
if (disabled === false) { | if (disabled === false) { | ||
| 第9,952行: | 第10,098行: | ||
} | } | ||
if (index === undefined) { | if (index === undefined) { | ||
disabled = | disabled = false; | ||
} else { | } | ||
else { | |||
index = this._getIndex(index); | index = this._getIndex(index); | ||
if ( | if (Array.isArray(disabled)) { | ||
disabled = $.map(disabled, function(num) { | disabled = $.map(disabled, function (num) { | ||
return num !== index ? num : null; | return num !== index ? num : null; | ||
}); | }); | ||
} else { | } | ||
disabled = $.map(this.tabs, function(li, num) { | else { | ||
disabled = $.map(this.tabs, function (li, num) { | |||
return num !== index ? num : null; | return num !== index ? num : null; | ||
}); | }); | ||
| 第9,967行: | 第10,115行: | ||
this._setupDisabled(disabled); | this._setupDisabled(disabled); | ||
}, | }, | ||
disable: function(index) { | disable: function (index) { | ||
var disabled = this. | var disabled = this.options.disabled; | ||
if (disabled === true) { | if (disabled === true) { | ||
return; | return; | ||
} | } | ||
if (index === undefined) { | if (index === undefined) { | ||
disabled = | disabled = true; | ||
} else { | } | ||
else { | |||
index = this._getIndex(index); | index = this._getIndex(index); | ||
if ($.inArray(index, disabled) !== -1) { | if ($.inArray(index, disabled) !== -1) { | ||
return; | return; | ||
} | } | ||
if ( | if (Array.isArray(disabled)) { | ||
disabled = $.merge([index], disabled).sort(); | disabled = $.merge([index], disabled).sort(); | ||
} else { | } | ||
else { | |||
disabled = [index]; | disabled = [index]; | ||
} | } | ||
| 第9,988行: | 第10,137行: | ||
this._setupDisabled(disabled); | this._setupDisabled(disabled); | ||
}, | }, | ||
load: function(index, event) { | load: function (index, event) { | ||
index = this._getIndex(index); | index = this._getIndex(index); | ||
var that = this, | var that = this, tab = this.tabs.eq(index), anchor = tab.find(".ui-tabs-anchor"), panel = this._getPanelForTab(tab), eventData = { | ||
tab: tab, | |||
panel: panel | |||
}; | |||
if (isLocal(anchor[0])) { | if (isLocal(anchor[0])) { | ||
return; | return; | ||
| 第10,005行: | 第10,150行: | ||
tab.addClass("ui-tabs-loading"); | tab.addClass("ui-tabs-loading"); | ||
panel.attr("aria-busy", "true"); | panel.attr("aria-busy", "true"); | ||
this.xhr.success(function(response) { | this.xhr | ||
setTimeout(function() { | .success(function (response) { | ||
setTimeout(function () { | |||
panel.html(response); | panel.html(response); | ||
that._trigger("load", event, eventData); | that._trigger("load", event, eventData); | ||
}, 1); | }, 1); | ||
}).complete(function(jqXHR, status) { | }) | ||
setTimeout(function() { | .complete(function (jqXHR, status) { | ||
setTimeout(function () { | |||
if (status === "abort") { | if (status === "abort") { | ||
that.panels.stop(false, true); | that.panels.stop(false, true); | ||
| 第10,018行: | 第10,165行: | ||
panel.removeAttr("aria-busy"); | panel.removeAttr("aria-busy"); | ||
if (jqXHR === that.xhr) { | if (jqXHR === that.xhr) { | ||
delete that | delete that.xhr; | ||
} | } | ||
}, 1); | }, 1); | ||
| 第10,025行: | 第10,171行: | ||
} | } | ||
}, | }, | ||
_ajaxSettings: function(anchor, event, eventData) { | _ajaxSettings: function (anchor, event, eventData) { | ||
var that = this; | var that = this; | ||
return { | return { | ||
url: anchor.attr("href"), | url: anchor.attr("href"), | ||
beforeSend: function(jqXHR, settings) { | beforeSend: function (jqXHR, settings) { | ||
return that._trigger("beforeLoad", event, $.extend({ | return that._trigger("beforeLoad", event, $.extend({ jqXHR: jqXHR, ajaxSettings: settings }, eventData)); | ||
} | } | ||
}; | }; | ||
}, | }, | ||
_getPanelForTab: function(tab) { | _getPanelForTab: function (tab) { | ||
var id = $(tab).attr("aria-controls"); | var id = $(tab).attr("aria-controls"); | ||
return this.element.find(this._sanitizeSelector("#" + id)); | return this.element.find(this._sanitizeSelector("#" + id)); | ||
| 第10,043行: | 第10,186行: | ||
}); | }); | ||
if ($.uiBackCompat !== false) { | if ($.uiBackCompat !== false) { | ||
$.ui.tabs.prototype._ui = function(tab, panel) { | $.ui.tabs.prototype._ui = function (tab, panel) { | ||
return { | return { | ||
tab: tab, | tab: tab, | ||
| 第10,051行: | 第10,194行: | ||
}; | }; | ||
$.widget("ui.tabs", $.ui.tabs, { | $.widget("ui.tabs", $.ui.tabs, { | ||
url: function(index, url) { | url: function (index, url) { | ||
this.anchors.eq(index).attr("href", url); | this.anchors.eq(index).attr("href", url); | ||
} | } | ||
| 第10,058行: | 第10,201行: | ||
options: { | options: { | ||
ajaxOptions: null, | ajaxOptions: null, | ||
cache: | cache: false | ||
}, | }, | ||
_create: function() { | _create: function () { | ||
this._super(); | this._super(); | ||
var that = this; | var that = this; | ||
this._on({ | this._on({ tabsbeforeload: function (event, ui) { | ||
if ($.data(ui.tab[0], "cache.tabs")) { | if ($.data(ui.tab[0], "cache.tabs")) { | ||
event.preventDefault(); | event.preventDefault(); | ||
return; | return; | ||
} | } | ||
ui.jqXHR.success(function() { | ui.jqXHR.success(function () { | ||
if (that.options.cache) { | if (that.options.cache) { | ||
$.data(ui.tab[0], "cache.tabs", true); | $.data(ui.tab[0], "cache.tabs", true); | ||
} | } | ||
}); | }); | ||
} | } }); | ||
}, | }, | ||
_ajaxSettings: function(anchor, event, ui) { | _ajaxSettings: function (anchor, event, ui) { | ||
var ajaxOptions = this.options. | var ajaxOptions = this.options.ajaxOptions; | ||
return $.extend({}, ajaxOptions, { | return $.extend({}, ajaxOptions, { | ||
error: function(xhr, status) { | error: function (xhr, status) { | ||
try { | try { | ||
ajaxOptions.error(xhr, status, ui.tab.closest("li").index(), ui.tab[0]); | ajaxOptions.error(xhr, status, ui.tab.closest("li").index(), ui.tab[0]); | ||
} catch (error) {} | } | ||
catch (error) { } | |||
} | } | ||
}, this._superApply(arguments)); | }, this._superApply(arguments)); | ||
}, | }, | ||
_setOption: function(key, value) { | _setOption: function (key, value) { | ||
if (key === "cache" && value === false) { | if (key === "cache" && value === false) { | ||
this.anchors.removeData("cache.tabs"); | this.anchors.removeData("cache.tabs"); | ||
| 第10,094行: | 第10,235行: | ||
this._super(key, value); | this._super(key, value); | ||
}, | }, | ||
_destroy: function() { | _destroy: function () { | ||
this.anchors.removeData("cache.tabs"); | this.anchors.removeData("cache.tabs"); | ||
this._super(); | this._super(); | ||
}, | }, | ||
url: function(index) { | url: function (index) { | ||
this.anchors.eq(index).removeData("cache.tabs"); | this.anchors.eq(index).removeData("cache.tabs"); | ||
this._superApply(arguments); | this._superApply(arguments); | ||
| 第10,104行: | 第10,245行: | ||
}); | }); | ||
$.widget("ui.tabs", $.ui.tabs, { | $.widget("ui.tabs", $.ui.tabs, { | ||
abort: function() { | abort: function () { | ||
if (this.xhr) { | if (this.xhr) { | ||
this.xhr.abort(); | this.xhr.abort(); | ||
| 第10,114行: | 第10,255行: | ||
spinner: "<em>Loading…</em>" | spinner: "<em>Loading…</em>" | ||
}, | }, | ||
_create: function() { | _create: function () { | ||
this._super(); | this._super(); | ||
this._on({ | this._on({ | ||
tabsbeforeload: function(event, ui) { | tabsbeforeload: function (event, ui) { | ||
if (event.target !== this.element[0] || !this.options.spinner) { | if (event.target !== this.element[0] || | ||
!this.options.spinner) { | |||
return; | return; | ||
} | } | ||
var span = ui.tab.find("span"), | var span = ui.tab.find("span"), html = span.html(); | ||
span.html(this.options.spinner); | span.html(this.options.spinner); | ||
ui.jqXHR.complete(function() { | ui.jqXHR.complete(function () { | ||
span.html(html); | span.html(html); | ||
}); | }); | ||
| 第10,136行: | 第10,277行: | ||
disable: null | disable: null | ||
}, | }, | ||
enable: function(index) { | enable: function (index) { | ||
var options = this.options, | var options = this.options, trigger; | ||
if (index && options.disabled === true || | |||
if (index && options.disabled === true || ( | (Array.isArray(options.disabled) && $.inArray(index, options.disabled) !== -1)) { | ||
trigger = | trigger = true; | ||
} | } | ||
this._superApply(arguments); | this._superApply(arguments); | ||
| 第10,147行: | 第10,288行: | ||
} | } | ||
}, | }, | ||
disable: function(index) { | disable: function (index) { | ||
var options = this.options, | var options = this.options, trigger; | ||
if (index && options.disabled === false || | |||
if (index && options.disabled === false || ( | (Array.isArray(options.disabled) && $.inArray(index, options.disabled) === -1)) { | ||
trigger = | trigger = true; | ||
} | } | ||
this._superApply(arguments); | this._superApply(arguments); | ||
| 第10,165行: | 第10,306行: | ||
tabTemplate: "<li><a href='#{href}'><span>#{label}</span></a></li>" | tabTemplate: "<li><a href='#{href}'><span>#{label}</span></a></li>" | ||
}, | }, | ||
add: function(url, label, index) { | add: function (url, label, index) { | ||
if (index === undefined) { | if (index === undefined) { | ||
index = this.anchors.length; | index = this.anchors.length; | ||
} | } | ||
var doInsertAfter, panel, options = this.options, | var doInsertAfter, panel, options = this.options, li = $(options.tabTemplate | ||
.replace(/#\{href\}/g, url) | |||
.replace(/#\{label\}/g, label)), id = !url.indexOf("#") ? | |||
li.addClass( | url.replace("#", "") : | ||
this._tabId(li); | |||
li.addClass("ui-state-default ui-corner-top").data("ui-tabs-destroy", true); | |||
li.attr("aria-controls", id); | li.attr("aria-controls", id); | ||
doInsertAfter = index >= this.tabs.length; | doInsertAfter = index >= this.tabs.length; | ||
| 第10,182行: | 第10,324行: | ||
if (index > 0) { | if (index > 0) { | ||
panel.insertAfter(this.panels.eq(-1)); | panel.insertAfter(this.panels.eq(-1)); | ||
} else { | } | ||
else { | |||
panel.appendTo(this.element); | panel.appendTo(this.element); | ||
} | } | ||
} else { | } | ||
else { | |||
panel.insertBefore(this.panels[index]); | panel.insertBefore(this.panels[index]); | ||
} | } | ||
| 第10,192行: | 第10,336行: | ||
if (doInsertAfter) { | if (doInsertAfter) { | ||
li.appendTo(this.tablist); | li.appendTo(this.tablist); | ||
} else { | } | ||
else { | |||
li.insertBefore(this.tabs[index]); | li.insertBefore(this.tabs[index]); | ||
} | } | ||
options.disabled = $.map(options.disabled, function(n) { | options.disabled = $.map(options.disabled, function (n) { | ||
return n >= index ? ++n : n; | return n >= index ? ++n : n; | ||
}); | }); | ||
| 第10,205行: | 第10,350行: | ||
return this; | return this; | ||
}, | }, | ||
remove: function(index) { | remove: function (index) { | ||
index = this._getIndex(index); | index = this._getIndex(index); | ||
var options = this.options, | var options = this.options, tab = this.tabs.eq(index).remove(), panel = this._getPanelForTab(tab).remove(); | ||
if (tab.hasClass("ui-tabs-active") && this.anchors.length > 2) { | if (tab.hasClass("ui-tabs-active") && this.anchors.length > 2) { | ||
this._activate(index + | this._activate(index + (index + 1 < this.anchors.length ? 1 : -1)); | ||
} | } | ||
options.disabled = $.map($.grep(options.disabled, function(n) { | options.disabled = $.map($.grep(options.disabled, function (n) { | ||
return n !== index; | return n !== index; | ||
}), function(n) { | }), function (n) { | ||
return n >= index ? --n : n; | return n >= index ? --n : n; | ||
}); | }); | ||
| 第10,225行: | 第10,367行: | ||
}); | }); | ||
$.widget("ui.tabs", $.ui.tabs, { | $.widget("ui.tabs", $.ui.tabs, { | ||
length: function() { | length: function () { | ||
return this.anchors.length; | return this.anchors.length; | ||
} | } | ||
| 第10,233行: | 第10,375行: | ||
idPrefix: "ui-tabs-" | idPrefix: "ui-tabs-" | ||
}, | }, | ||
_tabId: function(tab) { | _tabId: function (tab) { | ||
var a = tab.is("li") ? tab.find("a[href]") : tab; | var a = tab.is("li") ? tab.find("a[href]") : tab; | ||
a = a[0]; | a = a[0]; | ||
return $(a).closest("li").attr("aria-controls") || a.title && a.title.replace(/\s/g, "_").replace(/[^\w\u00c0-\uFFFF\-]/g, "") || this.options.idPrefix + getNextTabId(); | return $(a).closest("li").attr("aria-controls") || | ||
a.title && a.title.replace(/\s/g, "_").replace(/[^\w\u00c0-\uFFFF\-]/g, "") || | |||
this.options.idPrefix + getNextTabId(); | |||
} | } | ||
}); | }); | ||
| 第10,243行: | 第10,387行: | ||
panelTemplate: "<div></div>" | panelTemplate: "<div></div>" | ||
}, | }, | ||
_createPanel: function(id) { | _createPanel: function (id) { | ||
return $(this.options.panelTemplate).attr("id", id).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy", true); | return $(this.options.panelTemplate) | ||
.attr("id", id) | |||
.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom") | |||
.data("ui-tabs-destroy", true); | |||
} | } | ||
}); | }); | ||
$.widget("ui.tabs", $.ui.tabs, { | $.widget("ui.tabs", $.ui.tabs, { | ||
_create: function() { | _create: function () { | ||
var options = this.options; | var options = this.options; | ||
if (options.active === null && options.selected !== undefined) { | if (options.active === null && options.selected !== undefined) { | ||
options. | options.active = options.selected === -1 ? false : options.selected; | ||
} | } | ||
this._super(); | this._super(); | ||
| 第10,260行: | 第10,406行: | ||
} | } | ||
}, | }, | ||
_setOption: function(key, value) { | _setOption: function (key, value) { | ||
if (key !== "selected") { | if (key !== "selected") { | ||
return this._super(key, value); | return this._super(key, value); | ||
| 第10,271行: | 第10,417行: | ||
} | } | ||
}, | }, | ||
_eventHandler: function() { | _eventHandler: function () { | ||
this._superApply(arguments); | this._superApply(arguments); | ||
this.options.selected = this.options.active; | this.options.selected = this.options.active; | ||
| 第10,284行: | 第10,430行: | ||
select: null | select: null | ||
}, | }, | ||
_create: function() { | _create: function () { | ||
this._super(); | this._super(); | ||
if (this.options.active !== false) { | if (this.options.active !== false) { | ||
| 第10,290行: | 第10,436行: | ||
} | } | ||
}, | }, | ||
_trigger: function(type, event, data) { | _trigger: function (type, event, data) { | ||
var tab, panel, ret = this._superApply(arguments); | var tab, panel, ret = this._superApply(arguments); | ||
if (!ret) { | if (!ret) { | ||
| 第10,297行: | 第10,443行: | ||
if (type === "beforeActivate") { | if (type === "beforeActivate") { | ||
tab = data.newTab.length ? data.newTab : data.oldTab; | tab = data.newTab.length ? data.newTab : data.oldTab; | ||
panel = data.newPanel.length ? data | panel = data.newPanel.length ? data.newPanel : data.oldPanel; | ||
ret = this._super("select", event, { | ret = this._super("select", event, { | ||
tab: tab.find(".ui-tabs-anchor")[0], | tab: tab.find(".ui-tabs-anchor")[0], | ||
| 第10,304行: | 第10,449行: | ||
index: tab.closest("li").index() | index: tab.closest("li").index() | ||
}); | }); | ||
} else if (type === "activate" && data.newTab.length) { | } | ||
else if (type === "activate" && data.newTab.length) { | |||
ret = this._super("show", event, { | ret = this._super("show", event, { | ||
tab: data.newTab.find(".ui-tabs-anchor")[0], | tab: data.newTab.find(".ui-tabs-anchor")[0], | ||
| 第10,315行: | 第10,461行: | ||
}); | }); | ||
$.widget("ui.tabs", $.ui.tabs, { | $.widget("ui.tabs", $.ui.tabs, { | ||
select: function(index) { | select: function (index) { | ||
index = this._getIndex(index); | index = this._getIndex(index); | ||
if (index === -1) { | if (index === -1) { | ||
if (this.options.collapsible && this.options.selected !== -1) { | if (this.options.collapsible && this.options.selected !== -1) { | ||
index = this.options.selected; | index = this.options.selected; | ||
} else { | } | ||
else { | |||
return; | return; | ||
} | } | ||
| 第10,327行: | 第10,474行: | ||
} | } | ||
}); | }); | ||
(function() { | (function () { | ||
var listId = 0; | var listId = 0; | ||
$.widget("ui.tabs", $.ui.tabs, { | $.widget("ui.tabs", $.ui.tabs, { | ||
| 第10,333行: | 第10,480行: | ||
cookie: null | cookie: null | ||
}, | }, | ||
_create: function() { | _create: function () { | ||
var options = this.options, | var options = this.options, active; | ||
if (options.active == null && options.cookie) { | if (options.active == null && options.cookie) { | ||
active = parseInt(this._cookie(), 10); | active = parseInt(this._cookie(), 10); | ||
if (active === -1) { | if (active === -1) { | ||
active = | active = false; | ||
} | } | ||
options.active = active; | options.active = active; | ||
| 第10,345行: | 第10,491行: | ||
this._super(); | this._super(); | ||
}, | }, | ||
_cookie: function(active) { | _cookie: function (active) { | ||
var cookie = [this.cookie || (this.cookie = this.options.cookie.name || "ui-tabs-" + (++listId))]; | var cookie = [this.cookie || | ||
(this.cookie = this.options.cookie.name || "ui-tabs-" + (++listId))]; | |||
if (arguments.length) { | if (arguments.length) { | ||
cookie.push(active === false ? -1 : active); | cookie.push(active === false ? -1 : active); | ||
| 第10,353行: | 第10,500行: | ||
return $.cookie.apply(null, cookie); | return $.cookie.apply(null, cookie); | ||
}, | }, | ||
_refresh: function() { | _refresh: function () { | ||
this._super(); | this._super(); | ||
if (this.options.cookie) { | if (this.options.cookie) { | ||
| 第10,359行: | 第10,506行: | ||
} | } | ||
}, | }, | ||
_eventHandler: function() { | _eventHandler: function () { | ||
this._superApply(arguments); | this._superApply(arguments); | ||
if (this.options.cookie) { | if (this.options.cookie) { | ||
| 第10,365行: | 第10,512行: | ||
} | } | ||
}, | }, | ||
_destroy: function() { | _destroy: function () { | ||
this._super(); | this._super(); | ||
if (this.options.cookie) { | if (this.options.cookie) { | ||
| 第10,374行: | 第10,521行: | ||
})(); | })(); | ||
$.widget("ui.tabs", $.ui.tabs, { | $.widget("ui.tabs", $.ui.tabs, { | ||
_trigger: function(type, event, data) { | _trigger: function (type, event, data) { | ||
var _data = $.extend({}, data); | var _data = $.extend({}, data); | ||
if (type === "load") { | if (type === "load") { | ||
| 第10,387行: | 第10,534行: | ||
fx: null | fx: null | ||
}, | }, | ||
_getFx: function() { | _getFx: function () { | ||
var hide, show, fx = this.options.fx; | var hide, show, fx = this.options.fx; | ||
if (fx) { | if (fx) { | ||
if ( | if (Array.isArray(fx)) { | ||
hide = fx[0]; | hide = fx[0]; | ||
show = fx[1]; | show = fx[1]; | ||
} else { | } | ||
else { | |||
hide = show = fx; | hide = show = fx; | ||
} | } | ||
} | } | ||
return fx ? { | return fx ? { show: show, hide: hide } : null; | ||
}, | }, | ||
_toggle: function(event, eventData) { | _toggle: function (event, eventData) { | ||
var that = this, | var that = this, toShow = eventData.newPanel, toHide = eventData.oldPanel, fx = this._getFx(); | ||
if (!fx) { | if (!fx) { | ||
return this._super(event, eventData); | return this._super(event, eventData); | ||
} | } | ||
that.running = | that.running = true; | ||
function complete() { | function complete() { | ||
that.running = | that.running = false; | ||
that._trigger("activate", event, eventData); | that._trigger("activate", event, eventData); | ||
} | } | ||
function show() { | function show() { | ||
eventData.newTab.closest("li").addClass("ui-tabs-active ui-state-active"); | eventData.newTab.closest("li").addClass("ui-tabs-active ui-state-active"); | ||
if (toShow.length && fx.show) { | if (toShow.length && fx.show) { | ||
toShow.animate(fx.show, fx.show.duration, function() { | toShow | ||
.animate(fx.show, fx.show.duration, function () { | |||
complete(); | complete(); | ||
}); | }); | ||
} else { | } | ||
else { | |||
toShow.show(); | toShow.show(); | ||
complete(); | complete(); | ||
| 第10,430行: | 第10,571行: | ||
} | } | ||
if (toHide.length && fx.hide) { | if (toHide.length && fx.hide) { | ||
toHide.animate(fx.hide, fx.hide.duration, function() { | toHide.animate(fx.hide, fx.hide.duration, function () { | ||
eventData.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"); | eventData.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"); | ||
show(); | show(); | ||
}); | }); | ||
} else { | } | ||
else { | |||
eventData.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"); | eventData.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"); | ||
toHide.hide(); | toHide.hide(); | ||
| 第10,443行: | 第10,585行: | ||
} | } | ||
})(jQuery); | })(jQuery); | ||
(function($) { | (function ($) { | ||
var increments = 0; | var increments = 0; | ||
function addDescribedBy(elem, id) { | function addDescribedBy(elem, id) { | ||
var describedby = (elem.attr("aria-describedby") || "").split(/\s+/); | var describedby = (elem.attr("aria-describedby") || "").split(/\s+/); | ||
describedby.push(id); | describedby.push(id); | ||
elem.data("ui-tooltip-id", id).attr("aria-describedby", | elem | ||
.data("ui-tooltip-id", id) | |||
.attr("aria-describedby", describedby.join(" ").trim()); | |||
} | } | ||
function removeDescribedBy(elem) { | function removeDescribedBy(elem) { | ||
var id = elem.data("ui-tooltip-id"), | var id = elem.data("ui-tooltip-id"), describedby = (elem.attr("aria-describedby") || "").split(/\s+/), index = $.inArray(id, describedby); | ||
if (index !== -1) { | if (index !== -1) { | ||
describedby.splice(index, 1); | describedby.splice(index, 1); | ||
} | } | ||
elem.removeData("ui-tooltip-id"); | elem.removeData("ui-tooltip-id"); | ||
describedby = | describedby = describedby.join(" ").trim(); | ||
if (describedby) { | if (describedby) { | ||
elem.attr("aria-describedby", describedby); | elem.attr("aria-describedby", describedby); | ||
} else { | } | ||
else { | |||
elem.removeAttr("aria-describedby"); | elem.removeAttr("aria-describedby"); | ||
} | } | ||
| 第10,471行: | 第10,611行: | ||
version: "1.9.2", | version: "1.9.2", | ||
options: { | options: { | ||
content: function() { | content: function () { | ||
return $(this).attr("title"); | return $(this).attr("title"); | ||
}, | }, | ||
hide: | hide: true, | ||
items: "[title]:not([disabled])", | items: "[title]:not([disabled])", | ||
position: { | position: { | ||
| 第10,481行: | 第10,621行: | ||
collision: "flipfit flip" | collision: "flipfit flip" | ||
}, | }, | ||
show: | show: true, | ||
tooltipClass: null, | tooltipClass: null, | ||
track: | track: false, | ||
close: null, | close: null, | ||
open: null | open: null | ||
}, | }, | ||
_create: function() { | _create: function () { | ||
this._on({ | this._on({ | ||
mouseover: "open", | mouseover: "open", | ||
| 第10,498行: | 第10,638行: | ||
} | } | ||
}, | }, | ||
_setOption: function(key, value) { | _setOption: function (key, value) { | ||
var that = this; | var that = this; | ||
if (key === "disabled") { | if (key === "disabled") { | ||
| 第10,507行: | 第10,647行: | ||
this._super(key, value); | this._super(key, value); | ||
if (key === "content") { | if (key === "content") { | ||
$.each(this.tooltips, function(id, element) { | $.each(this.tooltips, function (id, element) { | ||
that._updateContent(element); | that._updateContent(element); | ||
}); | }); | ||
} | } | ||
}, | }, | ||
_disable: function() { | _disable: function () { | ||
var that = this; | var that = this; | ||
$.each(this.tooltips, function(id, element) { | $.each(this.tooltips, function (id, element) { | ||
var event = $.Event("blur"); | var event = $.Event("blur"); | ||
event.target = event.currentTarget = element[0]; | event.target = event.currentTarget = element[0]; | ||
that.close(event, true); | that.close(event, true); | ||
}); | }); | ||
this.element.find(this.options.items). | this.element.find(this.options.items).addBack().each(function () { | ||
var element = $(this); | var element = $(this); | ||
if (element.is("[title]")) { | if (element.is("[title]")) { | ||
element.data("ui-tooltip-title", element.attr("title")).attr("title", ""); | element | ||
.data("ui-tooltip-title", element.attr("title")) | |||
.attr("title", ""); | |||
} | } | ||
}); | }); | ||
}, | }, | ||
_enable: function() { | _enable: function () { | ||
this.element.find(this.options.items). | this.element.find(this.options.items).addBack().each(function () { | ||
var element = $(this); | var element = $(this); | ||
if (element.data("ui-tooltip-title")) { | if (element.data("ui-tooltip-title")) { | ||
| 第10,534行: | 第10,676行: | ||
}); | }); | ||
}, | }, | ||
open: function(event) { | open: function (event) { | ||
var that = this, | var that = this, target = $(event ? event.target : this.element) | ||
.closest(this.options.items); | |||
if (!target.length || target.data("ui-tooltip-id")) { | if (!target.length || target.data("ui-tooltip-id")) { | ||
return; | return; | ||
| 第10,545行: | 第10,687行: | ||
target.data("ui-tooltip-open", true); | target.data("ui-tooltip-open", true); | ||
if (event && event.type === "mouseover") { | if (event && event.type === "mouseover") { | ||
target.parents().each(function() { | target.parents().each(function () { | ||
var parent = $(this), | var parent = $(this), blurEvent; | ||
if (parent.data("ui-tooltip-open")) { | if (parent.data("ui-tooltip-open")) { | ||
blurEvent = $.Event("blur"); | blurEvent = $.Event("blur"); | ||
blurEvent.target = blurEvent. | blurEvent.target = blurEvent.currentTarget = this; | ||
that.close(blurEvent, true); | that.close(blurEvent, true); | ||
} | } | ||
| 第10,566行: | 第10,706行: | ||
this._updateContent(target, event); | this._updateContent(target, event); | ||
}, | }, | ||
_updateContent: function(target, event) { | _updateContent: function (target, event) { | ||
var content, contentOption = this.options.content, | var content, contentOption = this.options.content, that = this, eventType = event ? event.type : null; | ||
if (typeof contentOption === "string") { | if (typeof contentOption === "string") { | ||
return this._open(event, target, contentOption); | return this._open(event, target, contentOption); | ||
} | } | ||
content = contentOption.call(target[0], function(response) { | content = contentOption.call(target[0], function (response) { | ||
if (!target.data("ui-tooltip-open")) { | if (!target.data("ui-tooltip-open")) { | ||
return; | return; | ||
} | } | ||
that._delay(function() { | that._delay(function () { | ||
if (event) { | if (event) { | ||
event.type = eventType; | event.type = eventType; | ||
| 第10,588行: | 第10,726行: | ||
} | } | ||
}, | }, | ||
_open: function(event, target, content) { | _open: function (event, target, content) { | ||
var tooltip, events, delayedShow, positionOption = $.extend({}, this.options.position); | var tooltip, events, delayedShow, positionOption = $.extend({}, this.options.position); | ||
if (!content) { | if (!content) { | ||
| 第10,601行: | 第10,739行: | ||
if (event && event.type === "mouseover") { | if (event && event.type === "mouseover") { | ||
target.attr("title", ""); | target.attr("title", ""); | ||
} else { | } | ||
else { | |||
target.removeAttr("title"); | target.removeAttr("title"); | ||
} | } | ||
| 第10,608行: | 第10,747行: | ||
addDescribedBy(target, tooltip.attr("id")); | addDescribedBy(target, tooltip.attr("id")); | ||
tooltip.find(".ui-tooltip-content").html(content); | tooltip.find(".ui-tooltip-content").html(content); | ||
function position(event) { | function position(event) { | ||
positionOption.of = event; | positionOption.of = event; | ||
| 第10,621行: | 第10,759行: | ||
}); | }); | ||
position(event); | position(event); | ||
} else { | } | ||
tooltip.position($.extend({ of: target | else { | ||
tooltip.position($.extend({ | |||
of: target | |||
}, this.options.position)); | }, this.options.position)); | ||
} | } | ||
| 第10,628行: | 第10,768行: | ||
this._show(tooltip, this.options.show); | this._show(tooltip, this.options.show); | ||
if (this.options.show && this.options.show.delay) { | if (this.options.show && this.options.show.delay) { | ||
delayedShow = setInterval(function() { | delayedShow = setInterval(function () { | ||
if (tooltip.is(":visible")) { | if (tooltip.is(":visible")) { | ||
position(positionOption.of); | position(positionOption.of); | ||
| 第10,635行: | 第10,775行: | ||
}, $.fx.interval); | }, $.fx.interval); | ||
} | } | ||
this._trigger("open", event, { | this._trigger("open", event, { tooltip: tooltip }); | ||
events = { | events = { | ||
keyup: function(event) { | keyup: function (event) { | ||
if (event.keyCode === $.ui.keyCode.ESCAPE) { | if (event.keyCode === $.ui.keyCode.ESCAPE) { | ||
var fakeEvent = $.Event(event); | var fakeEvent = $.Event(event); | ||
| 第10,646行: | 第10,784行: | ||
} | } | ||
}, | }, | ||
remove: function() { | remove: function () { | ||
this._removeTooltip(tooltip); | this._removeTooltip(tooltip); | ||
} | } | ||
}; | }; | ||
if (!event || event.type === "mouseover") { | if (!event || event.type === "mouseover") { | ||
events. | events.mouseleave = "close"; | ||
} | } | ||
if (!event || event.type === "focusin") { | if (!event || event.type === "focusin") { | ||
| 第10,659行: | 第10,796行: | ||
this._on(true, target, events); | this._on(true, target, events); | ||
}, | }, | ||
close: function(event) { | close: function (event) { | ||
var that = this, | var that = this, target = $(event ? event.currentTarget : this.element), tooltip = this._find(target); | ||
if (this.closing) { | if (this.closing) { | ||
return; | return; | ||
| 第10,671行: | 第10,806行: | ||
removeDescribedBy(target); | removeDescribedBy(target); | ||
tooltip.stop(true); | tooltip.stop(true); | ||
this._hide(tooltip, this.options.hide, function() { | this._hide(tooltip, this.options.hide, function () { | ||
that._removeTooltip($(this)); | that._removeTooltip($(this)); | ||
}); | }); | ||
| 第10,681行: | 第10,816行: | ||
this._off(this.document, "mousemove"); | this._off(this.document, "mousemove"); | ||
if (event && event.type === "mouseleave") { | if (event && event.type === "mouseleave") { | ||
$.each(this.parents, function(id, parent) { | $.each(this.parents, function (id, parent) { | ||
$(parent.element).attr("title", parent.title); | $(parent.element).attr("title", parent.title); | ||
delete that.parents[id]; | delete that.parents[id]; | ||
}); | }); | ||
} | } | ||
this.closing = | this.closing = true; | ||
this._trigger("close", event, { | this._trigger("close", event, { tooltip: tooltip }); | ||
this.closing = false; | |||
this.closing = | |||
}, | }, | ||
_tooltip: function(element) { | _tooltip: function (element) { | ||
var id = "ui-tooltip-" + increments++, | var id = "ui-tooltip-" + increments++, tooltip = $("<div>") | ||
.attr({ | |||
id: id, | |||
role: "tooltip" | |||
}) | |||
.addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content " + | |||
$("<div>").addClass("ui-tooltip-content").appendTo(tooltip); | (this.options.tooltipClass || "")); | ||
$("<div>") | |||
.addClass("ui-tooltip-content") | |||
.appendTo(tooltip); | |||
tooltip.appendTo(this.document[0].body); | tooltip.appendTo(this.document[0].body); | ||
if ($.fn.bgiframe) { | if ($.fn.bgiframe) { | ||
| 第10,707行: | 第10,843行: | ||
return tooltip; | return tooltip; | ||
}, | }, | ||
_find: function(target) { | _find: function (target) { | ||
var id = target.data("ui-tooltip-id"); | var id = target.data("ui-tooltip-id"); | ||
return id ? $("#" + id) : $(); | return id ? $("#" + id) : $(); | ||
}, | }, | ||
_removeTooltip: function(tooltip) { | _removeTooltip: function (tooltip) { | ||
tooltip.remove(); | tooltip.remove(); | ||
delete this.tooltips[tooltip.attr("id")]; | delete this.tooltips[tooltip.attr("id")]; | ||
}, | }, | ||
_destroy: function() { | _destroy: function () { | ||
var that = this; | var that = this; | ||
$.each(this.tooltips, function(id, element) { | $.each(this.tooltips, function (id, element) { | ||
var event = $.Event("blur"); | var event = $.Event("blur"); | ||
event.target = event.currentTarget = element[0]; | event.target = event.currentTarget = element[0]; | ||
| 第10,730行: | 第10,866行: | ||
}); | }); | ||
}(jQuery)); | }(jQuery)); | ||
jQuery(function($) { | jQuery(function ($) { | ||
$.datepicker.regional['zh-CN'] = { | $.datepicker.regional['zh-CN'] = { | ||
closeText: '关闭', | closeText: '关闭', | ||
| 第10,736行: | 第10,872行: | ||
nextText: '下月>', | nextText: '下月>', | ||
currentText: '今天', | currentText: '今天', | ||
monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', | monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', | ||
'七月', '八月', '九月', '十月', '十一月', '十二月'], | |||
monthNamesShort: ['一月', '二月', '三月', '四月', '五月', '六月', | |||
monthNamesShort: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], | '七月', '八月', '九月', '十月', '十一月', '十二月'], | ||
dayNames: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'], | dayNames: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'], | ||
dayNamesShort: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'], | dayNamesShort: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'], | ||
| 第10,746行: | 第10,882行: | ||
dateFormat: 'yy-mm-dd', | dateFormat: 'yy-mm-dd', | ||
firstDay: 1, | firstDay: 1, | ||
isRTL: | isRTL: false, | ||
showMonthAfterYear: | showMonthAfterYear: true, | ||
yearSuffix: '年' | yearSuffix: '年' | ||
}; | }; | ||
$.datepicker.setDefaults($.datepicker.regional['zh-CN']); | $.datepicker.setDefaults($.datepicker.regional['zh-CN']); | ||
}); | }); | ||
mw.loader.state({ | |||
"jquery.ui": "ready" | |||
}); | |||
/* </pre> */ | |||
2022年9月6日 (二) 01:34的最新版本
/* <pre> */
/**
* -------------------------------------------------------------------------
* !!! DON'T MODIFY THIS PAGE MANUALLY, YOUR CHANGES WILL BE OVERWRITTEN !!!
* -------------------------------------------------------------------------
*/
var _addText = '{{GHIACode|page=GHIA:MoegirlPediaInterfaceCodes/blob/master/src/gadgets/jquery.ui/MediaWiki:Gadget-jquery.ui.js|user=[[U:AnnAngela]]|longId=95ea4fd62f6aa66f83f138743a52cf0a8d1c35a4|shortId=95ea4fd|message=auto: auto prefetch - commit from GitHub Actions}}';
"use strict";
mw.log.warn("This page is using the deprecated ResourceLoader module \"jquery.ui\".\nPlease use OOUI instead.");
(function ($, undefined) {
var uuid = 0, runiqueId = /^ui-id-\d+$/;
$.ui = $.ui || {};
if ($.ui.version) {
return;
}
$.extend($.ui, {
version: "1.9.2",
keyCode: {
BACKSPACE: 8,
COMMA: 188,
DELETE: 46,
DOWN: 40,
END: 35,
ENTER: 13,
ESCAPE: 27,
HOME: 36,
LEFT: 37,
NUMPAD_ADD: 107,
NUMPAD_DECIMAL: 110,
NUMPAD_DIVIDE: 111,
NUMPAD_ENTER: 108,
NUMPAD_MULTIPLY: 106,
NUMPAD_SUBTRACT: 109,
PAGE_DOWN: 34,
PAGE_UP: 33,
PERIOD: 190,
RIGHT: 39,
SPACE: 32,
TAB: 9,
UP: 38
}
});
$.fn.extend({
_focus: $.fn.focus,
focus: function (delay, fn) {
return typeof delay === "number" ?
this.each(function () {
var elem = this;
setTimeout(function () {
$(elem).focus();
if (fn) {
fn.call(elem);
}
}, delay);
}) :
this._focus.apply(this, arguments);
},
scrollParent: function () {
var scrollParent;
if (($.ui.ie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) {
scrollParent = this.parents().filter(function () {
return (/(relative|absolute|fixed)/).test($.css(this, 'position')) && (/(auto|scroll)/).test($.css(this, 'overflow') + $.css(this, 'overflow-y') + $.css(this, 'overflow-x'));
}).eq(0);
}
else {
scrollParent = this.parents().filter(function () {
return (/(auto|scroll)/).test($.css(this, 'overflow') + $.css(this, 'overflow-y') + $.css(this, 'overflow-x'));
}).eq(0);
}
return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent;
},
zIndex: function (zIndex) {
if (zIndex !== undefined) {
return this.css("zIndex", zIndex);
}
if (this.length) {
var elem = $(this[0]), position, value;
while (elem.length && elem[0] !== document) {
position = elem.css("position");
if (position === "absolute" || position === "relative" || position === "fixed") {
value = parseInt(elem.css("zIndex"), 10);
if (!isNaN(value) && value !== 0) {
return value;
}
}
elem = elem.parent();
}
}
return 0;
},
uniqueId: function () {
return this.each(function () {
if (!this.id) {
this.id = "ui-id-" + (++uuid);
}
});
},
removeUniqueId: function () {
return this.each(function () {
if (runiqueId.test(this.id)) {
$(this).removeAttr("id");
}
});
}
});
function focusable(element, isTabIndexNotNaN) {
var map, mapName, img, 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 + "]")[0];
return !!img && visible(img);
}
return (/input|select|textarea|button|object/.test(nodeName) ?
!element.disabled :
"a" === nodeName ?
element.href || isTabIndexNotNaN :
isTabIndexNotNaN) &&
visible(element);
}
function visible(element) {
return $.expr.pseudos.visible(element) &&
!$(element).parents().addBack().filter(function () {
return $.css(this, "visibility") === "hidden";
}).length;
}
$.extend($.expr.pseudos, {
data: $.expr.createPseudo ?
$.expr.createPseudo(function (dataName) {
return function (elem) {
return !!$.data(elem, dataName);
};
}) :
function (elem, i, match) {
return !!$.data(elem, match[3]);
},
focusable: function (element) {
return focusable(element, !isNaN($.attr(element, "tabindex")));
},
tabbable: function (element) {
var tabIndex = $.attr(element, "tabindex"), isTabIndexNaN = isNaN(tabIndex);
return (isTabIndexNaN || tabIndex >= 0) && focusable(element, !isTabIndexNaN);
}
});
$(function () {
var body = document.body, div = body.appendChild(div = document.createElement("div"));
div.offsetHeight;
$.extend(div.style, {
minHeight: "100px",
height: "auto",
padding: 0,
borderWidth: 0
});
$.support.minHeight = div.offsetHeight === 100;
$.support.selectstart = "onselectstart" in div;
body.removeChild(div).style.display = "none";
});
if (!$("<a>").outerWidth(1).jquery) {
$.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");
});
};
});
}
if ($("<a>").data("a-b", "a").removeData("a-b").data("a-b")) {
$.fn.removeData = (function (removeData) {
return function (key) {
if (arguments.length) {
return removeData.call(this, $.camelCase(key));
}
else {
return removeData.call(this);
}
};
})($.fn.removeData);
}
(function () {
var uaMatch = /msie ([\w.]+)/.exec(navigator.userAgent.toLowerCase()) || [];
$.ui.ie = uaMatch.length ? true : false;
$.ui.ie6 = parseFloat(uaMatch[1], 10) === 6;
})();
$.fn.extend({
disableSelection: function () {
return this.bind(($.support.selectstart ? "selectstart" : "mousedown") +
".ui-disableSelection", function (event) {
event.preventDefault();
});
},
enableSelection: function () {
return this.unbind(".ui-disableSelection");
}
});
$.extend($.ui, {
plugin: {
add: function (module, option, set) {
var i, proto = $.ui[module].prototype;
for (i in set) {
proto.plugins[i] = proto.plugins[i] || [];
proto.plugins[i].push([option, set[i]]);
}
},
call: function (instance, name, args) {
var i, set = instance.plugins[name];
if (!set || !instance.element[0].parentNode || instance.element[0].parentNode.nodeType === 11) {
return;
}
for (i = 0; i < set.length; i++) {
if (instance.options[set[i][0]]) {
set[i][1].apply(instance.element, args);
}
}
}
},
contains: $.contains,
hasScroll: function (el, a) {
if ($(el).css("overflow") === "hidden") {
return false;
}
var scroll = (a && a === "left") ? "scrollLeft" : "scrollTop", has = false;
if (el[scroll] > 0) {
return true;
}
el[scroll] = 1;
has = (el[scroll] > 0);
el[scroll] = 0;
return has;
},
isOverAxis: function (x, reference, size) {
return (x > reference) && (x < (reference + size));
},
isOver: function (y, x, top, left, height, width) {
return $.ui.isOverAxis(y, top, height) && $.ui.isOverAxis(x, left, width);
}
});
})(jQuery);
(function ($, undefined) {
var uuid = 0, slice = Array.prototype.slice, _cleanData = $.cleanData;
$.cleanData = function (elems) {
for (var i = 0, elem; (elem = elems[i]) != null; i++) {
try {
$(elem).triggerHandler("remove");
}
catch (e) { }
}
_cleanData(elems);
};
$.widget = function (name, base, prototype) {
var fullName, existingConstructor, constructor, basePrototype, namespace = name.split(".")[0];
name = name.split(".")[1];
fullName = namespace + "-" + name;
if (!prototype) {
prototype = base;
base = $.Widget;
}
$.expr.pseudos[fullName.toLowerCase()] = function (elem) {
return !!$.data(elem, fullName);
};
$[namespace] = $[namespace] || {};
existingConstructor = $[namespace][name];
constructor = $[namespace][name] = function (options, element) {
if (!this._createWidget) {
return new constructor(options, element);
}
if (arguments.length) {
this._createWidget(options, element);
}
};
$.extend(constructor, existingConstructor, {
version: prototype.version,
_proto: $.extend({}, prototype),
_childConstructors: []
});
basePrototype = new base();
basePrototype.options = $.widget.extend({}, basePrototype.options);
$.each(prototype, function (prop, value) {
if (typeof value === "function") {
prototype[prop] = (function () {
var _super = function () {
return base.prototype[prop].apply(this, arguments);
}, _superApply = function (args) {
return base.prototype[prop].apply(this, args);
};
return function () {
var __super = this._super, __superApply = this._superApply, returnValue;
this._super = _super;
this._superApply = _superApply;
returnValue = value.apply(this, arguments);
this._super = __super;
this._superApply = __superApply;
return returnValue;
};
})();
}
});
constructor.prototype = $.widget.extend(basePrototype, {
widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name
}, prototype, {
constructor: constructor,
namespace: namespace,
widgetName: name,
widgetBaseClass: fullName,
widgetFullName: fullName
});
if (existingConstructor) {
$.each(existingConstructor._childConstructors, function (i, child) {
var childPrototype = child.prototype;
$.widget(childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto);
});
delete existingConstructor._childConstructors;
}
else {
base._childConstructors.push(constructor);
}
$.widget.bridge(name, constructor);
};
$.widget.extend = function (target) {
var input = slice.call(arguments, 1), inputIndex = 0, inputLength = input.length, key, value;
for (; inputIndex < inputLength; inputIndex++) {
for (key in input[inputIndex]) {
value = input[inputIndex][key];
if (input[inputIndex].hasOwnProperty(key) && value !== undefined) {
if ($.isPlainObject(value)) {
target[key] = $.isPlainObject(target[key]) ?
$.widget.extend({}, target[key], value) :
$.widget.extend({}, value);
}
else {
target[key] = value;
}
}
}
}
return target;
};
$.widget.bridge = function (name, object) {
var fullName = object.prototype.widgetFullName || name;
$.fn[name] = function (options) {
var isMethodCall = typeof options === "string", args = slice.call(arguments, 1), returnValue = this;
options = !isMethodCall && args.length ?
$.widget.extend.apply(null, [options].concat(args)) :
options;
if (isMethodCall) {
this.each(function () {
var methodValue, instance = $.data(this, fullName);
if (!instance) {
return $.error("cannot call methods on " + name + " prior to initialization; " +
"attempted to call method '" + options + "'");
}
if (typeof instance[options] !== "function" || 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 {
this.each(function () {
var instance = $.data(this, fullName);
if (instance) {
instance.option(options || {})._init();
}
else {
$.data(this, fullName, new object(options, this));
}
});
}
return returnValue;
};
};
$.Widget = function () { };
$.Widget._childConstructors = [];
$.Widget.prototype = {
widgetName: "widget",
widgetEventPrefix: "",
defaultElement: "<div>",
options: {
disabled: false,
create: null
},
_createWidget: function (options, element) {
element = $(element || this.defaultElement || this)[0];
this.element = $(element);
this.uuid = uuid++;
this.eventNamespace = "." + this.widgetName + this.uuid;
this.options = $.widget.extend({}, this.options, this._getCreateOptions(), options);
this.bindings = $();
this.hoverable = $();
this.focusable = $();
if (element !== this) {
$.data(element, this.widgetName, this);
$.data(element, this.widgetFullName, this);
this._on(true, this.element, {
remove: function (event) {
if (event.target === element) {
this.destroy();
}
}
});
this.document = $(element.style ?
element.ownerDocument :
element.document || element);
this.window = $(this.document[0].defaultView || this.document[0].parentWindow);
}
this._create();
this._trigger("create", null, this._getCreateEventData());
this._init();
},
_getCreateOptions: $.noop,
_getCreateEventData: $.noop,
_create: $.noop,
_init: $.noop,
destroy: function () {
this._destroy();
this.element
.off(this.eventNamespace)
.removeData(this.widgetName)
.removeData(this.widgetFullName)
.removeData($.camelCase(this.widgetFullName));
this.widget()
.off(this.eventNamespace)
.removeAttr("aria-disabled")
.removeClass(this.widgetFullName + "-disabled " +
"ui-state-disabled");
this.bindings.off(this.eventNamespace);
this.hoverable.removeClass("ui-state-hover");
this.focusable.removeClass("ui-state-focus");
},
_destroy: $.noop,
widget: function () {
return this.element;
},
option: function (key, value) {
var options = key, parts, curOption, i;
if (arguments.length === 0) {
return $.widget.extend({}, this.options);
}
if (typeof key === "string") {
options = {};
parts = key.split(".");
key = parts.shift();
if (parts.length) {
curOption = options[key] = $.widget.extend({}, this.options[key]);
for (i = 0; i < parts.length - 1; i++) {
curOption[parts[i]] = curOption[parts[i]] || {};
curOption = curOption[parts[i]];
}
key = parts.pop();
if (value === undefined) {
return curOption[key] === undefined ? null : curOption[key];
}
curOption[key] = value;
}
else {
if (value === undefined) {
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) {
this.options[key] = value;
if (key === "disabled") {
this.widget()
.toggleClass(this.widgetFullName + "-disabled ui-state-disabled", !!value)
.attr("aria-disabled", value);
this.hoverable.removeClass("ui-state-hover");
this.focusable.removeClass("ui-state-focus");
}
return this;
},
enable: function () {
return this._setOption("disabled", false);
},
disable: function () {
return this._setOption("disabled", true);
},
_on: function (suppressDisabledCheck, element, handlers) {
var delegateElement, instance = this;
if (typeof suppressDisabledCheck !== "boolean") {
handlers = element;
element = suppressDisabledCheck;
suppressDisabledCheck = false;
}
if (!handlers) {
handlers = element;
element = this.element;
delegateElement = this.widget();
}
else {
element = delegateElement = $(element);
this.bindings = this.bindings.add(element);
}
$.each(handlers, function (event, handler) {
function handlerProxy() {
if (!suppressDisabledCheck &&
(instance.options.disabled === true ||
$(this).hasClass("ui-state-disabled"))) {
return;
}
return (typeof handler === "string" ? instance[handler] : handler)
.apply(instance, arguments);
}
if (typeof handler !== "string") {
handlerProxy.guid = handler.guid =
handler.guid || handlerProxy.guid || $.guid++;
}
var match = event.match(/^(\w+)\s*(.*)$/), eventName = match[1] + instance.eventNamespace, 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);
},
_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) {
$(event.currentTarget).addClass("ui-state-hover");
},
mouseleave: function (event) {
$(event.currentTarget).removeClass("ui-state-hover");
}
});
},
_focusable: function (element) {
this.focusable = this.focusable.add(element);
this._on(element, {
focusin: function (event) {
$(event.currentTarget).addClass("ui-state-focus");
},
focusout: function (event) {
$(event.currentTarget).removeClass("ui-state-focus");
}
});
},
_trigger: function (type, event, data) {
var prop, orig, callback = this.options[type];
data = data || {};
event = $.Event(event);
event.type = (type === this.widgetEventPrefix ?
type :
this.widgetEventPrefix + type).toLowerCase();
event.target = this.element[0];
orig = event.originalEvent;
if (orig) {
for (prop in orig) {
if (!(prop in event)) {
event[prop] = orig[prop];
}
}
}
this.element.trigger(event, data);
return !(typeof callback === 'function' &&
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, 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] || $.uiBackCompat !== false && $.effects[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();
});
}
};
});
if ($.uiBackCompat !== false) {
$.Widget.prototype._getCreateOptions = function () {
return $.metadata && $.metadata.get(this.element[0])[this.widgetName];
};
}
})(jQuery);
(function ($, undefined) {
var mouseHandled = false;
$(document).mouseup(function (e) {
mouseHandled = false;
});
$.widget("ui.mouse", {
version: "1.9.2",
options: {
cancel: 'input,textarea,button,select,option',
distance: 1,
delay: 0
},
_mouseInit: function () {
var that = this;
this.element
.on('mousedown.' + this.widgetName, function (event) {
return that._mouseDown(event);
})
.on('click.' + this.widgetName, function (event) {
if (true === $.data(event.target, that.widgetName + '.preventClickEvent')) {
$.removeData(event.target, that.widgetName + '.preventClickEvent');
event.stopImmediatePropagation();
return false;
}
});
this.started = false;
},
_mouseDestroy: function () {
this.element.off('.' + this.widgetName);
if (this._mouseMoveDelegate) {
$(document)
.off('mousemove.' + this.widgetName, this._mouseMoveDelegate)
.off('mouseup.' + this.widgetName, this._mouseUpDelegate);
}
},
_mouseDown: function (event) {
if (mouseHandled) {
return;
}
(this._mouseStarted && this._mouseUp(event));
this._mouseDownEvent = event;
var that = this, btnIsLeft = (event.which === 1), elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
return true;
}
this.mouseDelayMet = !this.options.delay;
if (!this.mouseDelayMet) {
this._mouseDelayTimer = setTimeout(function () {
that.mouseDelayMet = true;
}, this.options.delay);
}
if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
this._mouseStarted = (this._mouseStart(event) !== false);
if (!this._mouseStarted) {
event.preventDefault();
return true;
}
}
if (true === $.data(event.target, this.widgetName + '.preventClickEvent')) {
$.removeData(event.target, this.widgetName + '.preventClickEvent');
}
this._mouseMoveDelegate = function (event) {
return that._mouseMove(event);
};
this._mouseUpDelegate = function (event) {
return that._mouseUp(event);
};
$(document)
.on('mousemove.' + this.widgetName, this._mouseMoveDelegate)
.on('mouseup.' + this.widgetName, this._mouseUpDelegate);
event.preventDefault();
mouseHandled = true;
return true;
},
_mouseMove: function (event) {
if ($.ui.ie && !(document.documentMode >= 9) && !event.button) {
return this._mouseUp(event);
}
if (this._mouseStarted) {
this._mouseDrag(event);
return event.preventDefault();
}
if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
this._mouseStarted =
(this._mouseStart(this._mouseDownEvent, event) !== false);
(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
}
return !this._mouseStarted;
},
_mouseUp: function (event) {
$(document)
.off('mousemove.' + this.widgetName, this._mouseMoveDelegate)
.off('mouseup.' + this.widgetName, this._mouseUpDelegate);
if (this._mouseStarted) {
this._mouseStarted = false;
if (event.target === this._mouseDownEvent.target) {
$.data(event.target, this.widgetName + '.preventClickEvent', true);
}
this._mouseStop(event);
}
return false;
},
_mouseDistanceMet: function (event) {
return (Math.max(Math.abs(this._mouseDownEvent.pageX - event.pageX), Math.abs(this._mouseDownEvent.pageY - event.pageY)) >= this.options.distance);
},
_mouseDelayMet: function (event) {
return this.mouseDelayMet;
},
_mouseStart: function (event) { },
_mouseDrag: function (event) { },
_mouseStop: function (event) { },
_mouseCapture: function (event) { return true; }
});
})(jQuery);
(function ($, undefined) {
$.widget("ui.draggable", $.ui.mouse, {
version: "1.9.2",
widgetEventPrefix: "drag",
options: {
addClasses: true,
appendTo: "parent",
axis: false,
connectToSortable: false,
containment: false,
cursor: "auto",
cursorAt: false,
grid: false,
handle: false,
helper: "original",
iframeFix: false,
opacity: false,
refreshPositions: false,
revert: false,
revertDuration: 500,
scope: "default",
scroll: true,
scrollSensitivity: 20,
scrollSpeed: 20,
snap: false,
snapMode: "both",
snapTolerance: 20,
stack: false,
zIndex: false
},
_create: function () {
if (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css("position")))
this.element[0].style.position = 'relative';
(this.options.addClasses && this.element.addClass("ui-draggable"));
(this.options.disabled && this.element.addClass("ui-draggable-disabled"));
this._mouseInit();
},
_destroy: function () {
this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");
this._mouseDestroy();
},
_mouseCapture: function (event) {
var o = this.options;
if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle'))
return false;
this.handle = this._getHandle(event);
if (!this.handle)
return false;
$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function () {
$('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>')
.css({
width: this.offsetWidth + "px", height: this.offsetHeight + "px",
position: "absolute", opacity: "0.001", zIndex: 1000
})
.css($(this).offset())
.appendTo("body");
});
return true;
},
_mouseStart: function (event) {
var o = this.options;
this.helper = this._createHelper(event);
this.helper.addClass("ui-draggable-dragging");
this._cacheHelperProportions();
if ($.ui.ddmanager)
$.ui.ddmanager.current = this;
this._cacheMargins();
this.cssPosition = this.helper.css("position");
this.scrollParent = this.helper.scrollParent();
this.offset = this.positionAbs = this.element.offset();
this.offset = {
top: this.offset.top - this.margins.top,
left: this.offset.left - this.margins.left
};
$.extend(this.offset, {
click: {
left: event.pageX - this.offset.left,
top: event.pageY - this.offset.top
},
parent: this._getParentOffset(),
relative: this._getRelativeOffset()
});
this.originalPageX = event.pageX;
this.originalPageY = event.pageY;
this.originalPosition = this.position = this._generatePosition(event);
(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
if (o.containment)
this._setContainment();
if (this._trigger("start", event) === false) {
this._clear();
return false;
}
this._cacheHelperProportions();
if ($.ui.ddmanager && !o.dropBehaviour)
$.ui.ddmanager.prepareOffsets(this, event);
this._mouseDrag(event, true);
if ($.ui.ddmanager)
$.ui.ddmanager.dragStart(this, event);
return true;
},
_mouseDrag: function (event, noPropagation) {
this.position = this._generatePosition(event);
this.positionAbs = this._convertPositionTo("absolute");
if (!noPropagation) {
var ui = this._uiHash();
if (this._trigger('drag', event, ui) === false) {
this._mouseUp({});
return false;
}
this.position = ui.position;
}
if (!this.options.axis || this.options.axis != "y")
this.helper[0].style.left = this.position.left + 'px';
if (!this.options.axis || this.options.axis != "x")
this.helper[0].style.top = this.position.top + 'px';
if ($.ui.ddmanager)
$.ui.ddmanager.drag(this, event);
return false;
},
_mouseStop: function (event) {
var dropped = false;
if ($.ui.ddmanager && !this.options.dropBehaviour)
dropped = $.ui.ddmanager.drop(this, event);
if (this.dropped) {
dropped = this.dropped;
this.dropped = false;
}
var element = this.element[0], elementInDom = false;
while (element && (element = element.parentNode)) {
if (element == document) {
elementInDom = true;
}
}
if (!elementInDom && this.options.helper === "original")
return false;
if ((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || (typeof this.options.revert === 'function' && this.options.revert.call(this.element, dropped))) {
var that = this;
$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function () {
if (that._trigger("stop", event) !== false) {
that._clear();
}
});
}
else {
if (this._trigger("stop", event) !== false) {
this._clear();
}
}
return false;
},
_mouseUp: function (event) {
$("div.ui-draggable-iframeFix").each(function () {
this.parentNode.removeChild(this);
});
if ($.ui.ddmanager)
$.ui.ddmanager.dragStop(this, event);
return $.ui.mouse.prototype._mouseUp.call(this, event);
},
cancel: function () {
if (this.helper.is(".ui-draggable-dragging")) {
this._mouseUp({});
}
else {
this._clear();
}
return this;
},
_getHandle: function (event) {
var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false;
$(this.options.handle, this.element)
.find("*")
.addBack()
.each(function () {
if (this == event.target)
handle = true;
});
return handle;
},
_createHelper: function (event) {
var o = this.options;
var helper = typeof o.helper === 'function' ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone().removeAttr('id') : this.element);
if (!helper.parents('body').length)
helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo));
if (helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position")))
helper.css("position", "absolute");
return helper;
},
_adjustOffsetFromHelper: function (obj) {
if (typeof obj == 'string') {
obj = obj.split(' ');
}
if (Array.isArray(obj)) {
obj = { left: +obj[0], top: +obj[1] || 0 };
}
if ('left' in obj) {
this.offset.click.left = obj.left + this.margins.left;
}
if ('right' in obj) {
this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
}
if ('top' in obj) {
this.offset.click.top = obj.top + this.margins.top;
}
if ('bottom' in obj) {
this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
}
},
_getParentOffset: function () {
this.offsetParent = this.helper.offsetParent();
var po = this.offsetParent.offset();
if (this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
po.left += this.scrollParent.scrollLeft();
po.top += this.scrollParent.scrollTop();
}
if ((this.offsetParent[0] == document.body)
|| (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.ui.ie))
po = { top: 0, left: 0 };
return {
top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
};
},
_getRelativeOffset: function () {
if (this.cssPosition == "relative") {
var p = this.element.position();
return {
top: p.top - (parseInt(this.helper.css("top"), 10) || 0) + this.scrollParent.scrollTop(),
left: p.left - (parseInt(this.helper.css("left"), 10) || 0) + this.scrollParent.scrollLeft()
};
}
else {
return { top: 0, left: 0 };
}
},
_cacheMargins: function () {
this.margins = {
left: (parseInt(this.element.css("marginLeft"), 10) || 0),
top: (parseInt(this.element.css("marginTop"), 10) || 0),
right: (parseInt(this.element.css("marginRight"), 10) || 0),
bottom: (parseInt(this.element.css("marginBottom"), 10) || 0)
};
},
_cacheHelperProportions: function () {
this.helperProportions = {
width: this.helper.outerWidth(),
height: this.helper.outerHeight()
};
},
_setContainment: function () {
var o = this.options;
if (o.containment == 'parent')
o.containment = this.helper[0].parentNode;
if (o.containment == 'document' || o.containment == 'window')
this.containment = [
o.containment == 'document' ? 0 : $(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
o.containment == 'document' ? 0 : $(window).scrollTop() - this.offset.relative.top - this.offset.parent.top,
(o.containment == 'document' ? 0 : $(window).scrollLeft()) + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
(o.containment == 'document' ? 0 : $(window).scrollTop()) + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
];
if (!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) {
var c = $(o.containment);
var ce = c[0];
if (!ce)
return;
var co = c.offset();
var over = ($(ce).css("overflow") != 'hidden');
this.containment = [
(parseInt($(ce).css("borderLeftWidth"), 10) || 0) + (parseInt($(ce).css("paddingLeft"), 10) || 0),
(parseInt($(ce).css("borderTopWidth"), 10) || 0) + (parseInt($(ce).css("paddingTop"), 10) || 0),
(over ? Math.max(ce.scrollWidth, ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"), 10) || 0) - (parseInt($(ce).css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right,
(over ? Math.max(ce.scrollHeight, ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"), 10) || 0) - (parseInt($(ce).css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top - this.margins.bottom
];
this.relative_container = c;
}
else if (o.containment.constructor == Array) {
this.containment = o.containment;
}
},
_convertPositionTo: function (d, pos) {
if (!pos)
pos = this.position;
var mod = d == "absolute" ? 1 : -1;
var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
return {
top: (pos.top
+ this.offset.relative.top * mod
+ this.offset.parent.top * mod
- ((this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : (scrollIsRootNode ? 0 : scroll.scrollTop())) * mod)),
left: (pos.left
+ this.offset.relative.left * mod
+ this.offset.parent.left * mod
- ((this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft()) * mod))
};
},
_generatePosition: function (event) {
var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
var pageX = event.pageX;
var pageY = event.pageY;
if (this.originalPosition) {
var containment;
if (this.containment) {
if (this.relative_container) {
var co = this.relative_container.offset();
containment = [this.containment[0] + co.left,
this.containment[1] + co.top,
this.containment[2] + co.left,
this.containment[3] + co.top];
}
else {
containment = this.containment;
}
if (event.pageX - this.offset.click.left < containment[0])
pageX = containment[0] + this.offset.click.left;
if (event.pageY - this.offset.click.top < containment[1])
pageY = containment[1] + this.offset.click.top;
if (event.pageX - this.offset.click.left > containment[2])
pageX = containment[2] + this.offset.click.left;
if (event.pageY - this.offset.click.top > containment[3])
pageY = containment[3] + this.offset.click.top;
}
if (o.grid) {
var top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
pageY = containment ? (!(top - this.offset.click.top < containment[1] || top - this.offset.click.top > containment[3]) ? top : (!(top - this.offset.click.top < containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
var left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
pageX = containment ? (!(left - this.offset.click.left < containment[0] || left - this.offset.click.left > containment[2]) ? left : (!(left - this.offset.click.left < containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
}
}
return {
top: (pageY
- this.offset.click.top
- this.offset.relative.top
- this.offset.parent.top
+ ((this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : (scrollIsRootNode ? 0 : scroll.scrollTop())))),
left: (pageX
- this.offset.click.left
- this.offset.relative.left
- this.offset.parent.left
+ ((this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft())))
};
},
_clear: function () {
this.helper.removeClass("ui-draggable-dragging");
if (this.helper[0] != this.element[0] && !this.cancelHelperRemoval)
this.helper.remove();
this.helper = null;
this.cancelHelperRemoval = false;
},
_trigger: function (type, event, ui) {
ui = ui || this._uiHash();
$.ui.plugin.call(this, type, [event, ui]);
if (type == "drag")
this.positionAbs = this._convertPositionTo("absolute");
return $.Widget.prototype._trigger.call(this, type, event, ui);
},
plugins: {},
_uiHash: function (event) {
return {
helper: this.helper,
position: this.position,
originalPosition: this.originalPosition,
offset: this.positionAbs
};
}
});
$.ui.plugin.add("draggable", "connectToSortable", {
start: function (event, ui) {
var inst = $(this).data("draggable"), o = inst.options, uiSortable = $.extend({}, ui, { item: inst.element });
inst.sortables = [];
$(o.connectToSortable).each(function () {
var sortable = $.data(this, 'sortable');
if (sortable && !sortable.options.disabled) {
inst.sortables.push({
instance: sortable,
shouldRevert: sortable.options.revert
});
sortable.refreshPositions();
sortable._trigger("activate", event, uiSortable);
}
});
},
stop: function (event, ui) {
var inst = $(this).data("draggable"), uiSortable = $.extend({}, ui, { item: inst.element });
$.each(inst.sortables, function () {
if (this.instance.isOver) {
this.instance.isOver = 0;
inst.cancelHelperRemoval = true;
this.instance.cancelHelperRemoval = false;
if (this.shouldRevert)
this.instance.options.revert = true;
this.instance._mouseStop(event);
this.instance.options.helper = this.instance.options._helper;
if (inst.options.helper == 'original')
this.instance.currentItem.css({ top: 'auto', left: 'auto' });
}
else {
this.instance.cancelHelperRemoval = false;
this.instance._trigger("deactivate", event, uiSortable);
}
});
},
drag: function (event, ui) {
var inst = $(this).data("draggable"), that = this;
var checkPos = function (o) {
var dyClick = this.offset.click.top, dxClick = this.offset.click.left;
var helperTop = this.positionAbs.top, helperLeft = this.positionAbs.left;
var itemHeight = o.height, itemWidth = o.width;
var itemTop = o.top, itemLeft = o.left;
return $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth);
};
$.each(inst.sortables, function (i) {
var innermostIntersecting = false;
var thisSortable = this;
this.instance.positionAbs = inst.positionAbs;
this.instance.helperProportions = inst.helperProportions;
this.instance.offset.click = inst.offset.click;
if (this.instance._intersectsWith(this.instance.containerCache)) {
innermostIntersecting = true;
$.each(inst.sortables, function () {
this.instance.positionAbs = inst.positionAbs;
this.instance.helperProportions = inst.helperProportions;
this.instance.offset.click = inst.offset.click;
if (this != thisSortable
&& this.instance._intersectsWith(this.instance.containerCache)
&& $.ui.contains(thisSortable.instance.element[0], this.instance.element[0]))
innermostIntersecting = false;
return innermostIntersecting;
});
}
if (innermostIntersecting) {
if (!this.instance.isOver) {
this.instance.isOver = 1;
this.instance.currentItem = $(that).clone().removeAttr('id').appendTo(this.instance.element).data("sortable-item", true);
this.instance.options._helper = this.instance.options.helper;
this.instance.options.helper = function () { return ui.helper[0]; };
event.target = this.instance.currentItem[0];
this.instance._mouseCapture(event, true);
this.instance._mouseStart(event, true, true);
this.instance.offset.click.top = inst.offset.click.top;
this.instance.offset.click.left = inst.offset.click.left;
this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
inst._trigger("toSortable", event);
inst.dropped = this.instance.element;
inst.currentItem = inst.element;
this.instance.fromOutside = inst;
}
if (this.instance.currentItem)
this.instance._mouseDrag(event);
}
else {
if (this.instance.isOver) {
this.instance.isOver = 0;
this.instance.cancelHelperRemoval = true;
this.instance.options.revert = false;
this.instance._trigger('out', event, this.instance._uiHash(this.instance));
this.instance._mouseStop(event, true);
this.instance.options.helper = this.instance.options._helper;
this.instance.currentItem.remove();
if (this.instance.placeholder)
this.instance.placeholder.remove();
inst._trigger("fromSortable", event);
inst.dropped = false;
}
}
;
});
}
});
$.ui.plugin.add("draggable", "cursor", {
start: function (event, ui) {
var t = $('body'), o = $(this).data('draggable').options;
if (t.css("cursor"))
o._cursor = t.css("cursor");
t.css("cursor", o.cursor);
},
stop: function (event, ui) {
var o = $(this).data('draggable').options;
if (o._cursor)
$('body').css("cursor", o._cursor);
}
});
$.ui.plugin.add("draggable", "opacity", {
start: function (event, ui) {
var t = $(ui.helper), o = $(this).data('draggable').options;
if (t.css("opacity"))
o._opacity = t.css("opacity");
t.css('opacity', o.opacity);
},
stop: function (event, ui) {
var o = $(this).data('draggable').options;
if (o._opacity)
$(ui.helper).css('opacity', o._opacity);
}
});
$.ui.plugin.add("draggable", "scroll", {
start: function (event, ui) {
var i = $(this).data("draggable");
if (i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML')
i.overflowOffset = i.scrollParent.offset();
},
drag: function (event, ui) {
var i = $(this).data("draggable"), o = i.options, scrolled = false;
if (i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') {
if (!o.axis || o.axis != 'x') {
if ((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
else if (event.pageY - i.overflowOffset.top < o.scrollSensitivity)
i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
}
if (!o.axis || o.axis != 'y') {
if ((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
else if (event.pageX - i.overflowOffset.left < o.scrollSensitivity)
i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
}
}
else {
if (!o.axis || o.axis != 'x') {
if (event.pageY - $(document).scrollTop() < o.scrollSensitivity)
scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
else if ($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
}
if (!o.axis || o.axis != 'y') {
if (event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
else if ($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
}
}
if (scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
$.ui.ddmanager.prepareOffsets(i, event);
}
});
$.ui.plugin.add("draggable", "snap", {
start: function (event, ui) {
var i = $(this).data("draggable"), o = i.options;
i.snapElements = [];
$(o.snap.constructor != String ? (o.snap.items || ':data(draggable)') : o.snap).each(function () {
var $t = $(this);
var $o = $t.offset();
if (this != i.element[0])
i.snapElements.push({
item: this,
width: $t.outerWidth(), height: $t.outerHeight(),
top: $o.top, left: $o.left
});
});
},
drag: function (event, ui) {
var inst = $(this).data("draggable"), o = inst.options;
var d = o.snapTolerance;
var x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width, y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
for (var i = inst.snapElements.length - 1; i >= 0; i--) {
var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width, t = inst.snapElements[i].top, b = t + inst.snapElements[i].height;
if (!((l - d < x1 && x1 < r + d && t - d < y1 && y1 < b + d) || (l - d < x1 && x1 < r + d && t - d < y2 && y2 < b + d) || (l - d < x2 && x2 < r + d && t - d < y1 && y1 < b + d) || (l - d < x2 && x2 < r + d && t - d < y2 && y2 < b + d))) {
if (inst.snapElements[i].snapping)
(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
inst.snapElements[i].snapping = false;
continue;
}
if (o.snapMode != 'inner') {
var ts = Math.abs(t - y2) <= d;
var bs = Math.abs(b - y1) <= d;
var ls = Math.abs(l - x2) <= d;
var rs = Math.abs(r - x1) <= d;
if (ts)
ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
if (bs)
ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
if (ls)
ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
if (rs)
ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
}
var first = (ts || bs || ls || rs);
if (o.snapMode != 'outer') {
var ts = Math.abs(t - y1) <= d;
var bs = Math.abs(b - y2) <= d;
var ls = Math.abs(l - x1) <= d;
var rs = Math.abs(r - x2) <= d;
if (ts)
ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
if (bs)
ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
if (ls)
ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
if (rs)
ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
}
if (!inst.snapElements[i].snapping && (ts || bs || ls || rs || first))
(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
}
;
}
});
$.ui.plugin.add("draggable", "stack", {
start: function (event, ui) {
var o = $(this).data("draggable").options;
var group = $.makeArray($(o.stack)).sort(function (a, b) {
return (parseInt($(a).css("zIndex"), 10) || 0) - (parseInt($(b).css("zIndex"), 10) || 0);
});
if (!group.length) {
return;
}
var min = parseInt(group[0].style.zIndex) || 0;
$(group).each(function (i) {
this.style.zIndex = min + i;
});
this[0].style.zIndex = min + group.length;
}
});
$.ui.plugin.add("draggable", "zIndex", {
start: function (event, ui) {
var t = $(ui.helper), o = $(this).data("draggable").options;
if (t.css("zIndex"))
o._zIndex = t.css("zIndex");
t.css('zIndex', o.zIndex);
},
stop: function (event, ui) {
var o = $(this).data("draggable").options;
if (o._zIndex)
$(ui.helper).css('zIndex', o._zIndex);
}
});
})(jQuery);
(function ($, undefined) {
$.widget("ui.droppable", {
version: "1.9.2",
widgetEventPrefix: "drop",
options: {
accept: '*',
activeClass: false,
addClasses: true,
greedy: false,
hoverClass: false,
scope: 'default',
tolerance: 'intersect'
},
_create: function () {
var o = this.options, accept = o.accept;
this.isover = 0;
this.isout = 1;
this.accept = typeof accept === 'function' ? accept : function (d) {
return d.is(accept);
};
this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight };
$.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];
$.ui.ddmanager.droppables[o.scope].push(this);
(o.addClasses && this.element.addClass("ui-droppable"));
},
_destroy: function () {
var drop = $.ui.ddmanager.droppables[this.options.scope];
for (var i = 0; i < drop.length; i++)
if (drop[i] == this)
drop.splice(i, 1);
this.element.removeClass("ui-droppable ui-droppable-disabled");
},
_setOption: function (key, value) {
if (key == 'accept') {
this.accept = typeof value === 'function' ? value : function (d) {
return d.is(value);
};
}
$.Widget.prototype._setOption.apply(this, arguments);
},
_activate: function (event) {
var draggable = $.ui.ddmanager.current;
if (this.options.activeClass)
this.element.addClass(this.options.activeClass);
(draggable && this._trigger('activate', event, this.ui(draggable)));
},
_deactivate: function (event) {
var draggable = $.ui.ddmanager.current;
if (this.options.activeClass)
this.element.removeClass(this.options.activeClass);
(draggable && this._trigger('deactivate', event, this.ui(draggable)));
},
_over: function (event) {
var draggable = $.ui.ddmanager.current;
if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0])
return;
if (this.accept.call(this.element[0], (draggable.currentItem || draggable.element))) {
if (this.options.hoverClass)
this.element.addClass(this.options.hoverClass);
this._trigger('over', event, this.ui(draggable));
}
},
_out: function (event) {
var draggable = $.ui.ddmanager.current;
if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0])
return;
if (this.accept.call(this.element[0], (draggable.currentItem || draggable.element))) {
if (this.options.hoverClass)
this.element.removeClass(this.options.hoverClass);
this._trigger('out', event, this.ui(draggable));
}
},
_drop: function (event, custom) {
var draggable = custom || $.ui.ddmanager.current;
if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0])
return false;
var childrenIntersection = false;
this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function () {
var inst = $.data(this, 'droppable');
if (inst.options.greedy
&& !inst.options.disabled
&& inst.options.scope == draggable.options.scope
&& inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element))
&& $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)) {
childrenIntersection = true;
return false;
}
});
if (childrenIntersection)
return false;
if (this.accept.call(this.element[0], (draggable.currentItem || draggable.element))) {
if (this.options.activeClass)
this.element.removeClass(this.options.activeClass);
if (this.options.hoverClass)
this.element.removeClass(this.options.hoverClass);
this._trigger('drop', event, this.ui(draggable));
return this.element;
}
return false;
},
ui: function (c) {
return {
draggable: (c.currentItem || c.element),
helper: c.helper,
position: c.position,
offset: c.positionAbs
};
}
});
$.ui.intersect = function (draggable, droppable, toleranceMode) {
if (!droppable.offset)
return false;
var x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width, y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height;
var l = droppable.offset.left, r = l + droppable.proportions.width, t = droppable.offset.top, b = t + droppable.proportions.height;
switch (toleranceMode) {
case 'fit':
return (l <= x1 && x2 <= r
&& t <= y1 && y2 <= b);
break;
case 'intersect':
return (l < x1 + (draggable.helperProportions.width / 2)
&& x2 - (draggable.helperProportions.width / 2) < r
&& t < y1 + (draggable.helperProportions.height / 2)
&& y2 - (draggable.helperProportions.height / 2) < b);
break;
case 'pointer':
var draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left), draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top), isOver = $.ui.isOver(draggableTop, draggableLeft, t, l, droppable.proportions.height, droppable.proportions.width);
return isOver;
break;
case 'touch':
return ((y1 >= t && y1 <= b) ||
(y2 >= t && y2 <= b) ||
(y1 < t && y2 > b)) && ((x1 >= l && x1 <= r) ||
(x2 >= l && x2 <= r) ||
(x1 < l && x2 > r));
break;
default:
return false;
break;
}
};
$.ui.ddmanager = {
current: null,
droppables: { 'default': [] },
prepareOffsets: function (t, event) {
var m = $.ui.ddmanager.droppables[t.options.scope] || [];
var type = event ? event.type : null;
var list = (t.currentItem || t.element).find(":data(droppable)").addBack();
droppablesLoop: for (var i = 0; i < m.length; i++) {
if (m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0], (t.currentItem || t.element))))
continue;
for (var j = 0; j < list.length; j++) {
if (list[j] == m[i].element[0]) {
m[i].proportions.height = 0;
continue droppablesLoop;
}
}
;
m[i].visible = m[i].element.css("display") != "none";
if (!m[i].visible)
continue;
if (type == "mousedown")
m[i]._activate.call(m[i], event);
m[i].offset = m[i].element.offset();
m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight };
}
},
drop: function (draggable, event) {
var dropped = false;
$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function () {
if (!this.options)
return;
if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance))
dropped = this._drop.call(this, event) || dropped;
if (!this.options.disabled && this.visible && this.accept.call(this.element[0], (draggable.currentItem || draggable.element))) {
this.isout = 1;
this.isover = 0;
this._deactivate.call(this, event);
}
});
return dropped;
},
dragStart: function (draggable, event) {
draggable.element.parentsUntil("body").bind("scroll.droppable", function () {
if (!draggable.options.refreshPositions)
$.ui.ddmanager.prepareOffsets(draggable, event);
});
},
drag: function (draggable, event) {
if (draggable.options.refreshPositions)
$.ui.ddmanager.prepareOffsets(draggable, event);
$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function () {
if (this.options.disabled || this.greedyChild || !this.visible)
return;
var intersects = $.ui.intersect(draggable, this, this.options.tolerance);
var c = !intersects && this.isover == 1 ? 'isout' : (intersects && this.isover == 0 ? 'isover' : null);
if (!c)
return;
var parentInstance;
if (this.options.greedy) {
var scope = this.options.scope;
var parent = this.element.parents(':data(droppable)').filter(function () {
return $.data(this, 'droppable').options.scope === scope;
});
if (parent.length) {
parentInstance = $.data(parent[0], 'droppable');
parentInstance.greedyChild = (c == 'isover' ? 1 : 0);
}
}
if (parentInstance && c == 'isover') {
parentInstance['isover'] = 0;
parentInstance['isout'] = 1;
parentInstance._out.call(parentInstance, event);
}
this[c] = 1;
this[c == 'isout' ? 'isover' : 'isout'] = 0;
this[c == "isover" ? "_over" : "_out"].call(this, event);
if (parentInstance && c == 'isout') {
parentInstance['isout'] = 0;
parentInstance['isover'] = 1;
parentInstance._over.call(parentInstance, event);
}
});
},
dragStop: function (draggable, event) {
draggable.element.parentsUntil("body").unbind("scroll.droppable");
if (!draggable.options.refreshPositions)
$.ui.ddmanager.prepareOffsets(draggable, event);
}
};
})(jQuery);
(function ($, undefined) {
$.widget("ui.resizable", $.ui.mouse, {
version: "1.9.2",
widgetEventPrefix: "resize",
options: {
alsoResize: false,
animate: false,
animateDuration: "slow",
animateEasing: "swing",
aspectRatio: false,
autoHide: false,
containment: false,
ghost: false,
grid: false,
handles: "e,s,se",
helper: false,
maxHeight: null,
maxWidth: null,
minHeight: 10,
minWidth: 10,
zIndex: 1000
},
_create: function () {
var that = this, o = this.options;
this.element.addClass("ui-resizable");
$.extend(this, {
_aspectRatio: !!(o.aspectRatio),
aspectRatio: o.aspectRatio,
originalElement: this.element,
_proportionallyResizeElements: [],
_helper: o.helper || o.ghost || o.animate ? o.helper || 'ui-resizable-helper' : null
});
if (this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
this.element.wrap($('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({
position: this.element.css('position'),
width: this.element.outerWidth(),
height: this.element.outerHeight(),
top: this.element.css('top'),
left: this.element.css('left')
}));
this.element = this.element.parent().data("resizable", this.element.data('resizable'));
this.elementIsWrapper = true;
this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0 });
this.originalResizeStyle = this.originalElement.css('resize');
this.originalElement.css('resize', 'none');
this._proportionallyResizeElements.push(this.originalElement.css({ position: 'static', zoom: 1, display: 'block' }));
this.originalElement.css({ margin: this.originalElement.css('margin') });
this._proportionallyResize();
}
this.handles = o.handles || (!$('.ui-resizable-handle', this.element).length ? "e,s,se" : { n: '.ui-resizable-n', e: '.ui-resizable-e', s: '.ui-resizable-s', w: '.ui-resizable-w', se: '.ui-resizable-se', sw: '.ui-resizable-sw', ne: '.ui-resizable-ne', nw: '.ui-resizable-nw' });
if (this.handles.constructor == String) {
if (this.handles == 'all')
this.handles = 'n,e,s,w,se,sw,ne,nw';
var n = this.handles.split(",");
this.handles = {};
for (var i = 0; i < n.length; i++) {
var handle = n[i].trim(), hname = 'ui-resizable-' + handle;
var axis = $('<div class="ui-resizable-handle ' + hname + '"></div>');
axis.css({ zIndex: o.zIndex });
if ('se' == handle) {
axis.addClass('ui-icon ui-icon-gripsmall-diagonal-se');
}
;
this.handles[handle] = '.ui-resizable-' + handle;
this.element.append(axis);
}
}
this._renderAxis = function (target) {
target = target || this.element;
for (var i in this.handles) {
if (this.handles[i].constructor == String)
this.handles[i] = $(this.handles[i], this.element).show();
if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
var axis = $(this.handles[i], this.element), padWrapper = 0;
padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
var padPos = ['padding',
/ne|nw|n/.test(i) ? 'Top' :
/se|sw|s/.test(i) ? 'Bottom' :
/^e$/.test(i) ? 'Right' : 'Left'].join("");
target.css(padPos, padWrapper);
this._proportionallyResize();
}
if (!$(this.handles[i]).length)
continue;
}
};
this._renderAxis(this.element);
this._handles = $('.ui-resizable-handle', this.element)
.disableSelection();
this._handles.mouseover(function () {
if (!that.resizing) {
if (this.className)
var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
that.axis = axis && axis[1] ? axis[1] : 'se';
}
});
if (o.autoHide) {
this._handles.hide();
$(this.element)
.addClass("ui-resizable-autohide")
.mouseenter(function () {
if (o.disabled)
return;
$(this).removeClass("ui-resizable-autohide");
that._handles.show();
})
.mouseleave(function () {
if (o.disabled)
return;
if (!that.resizing) {
$(this).addClass("ui-resizable-autohide");
that._handles.hide();
}
});
}
this._mouseInit();
},
_destroy: function () {
this._mouseDestroy();
var _destroy = function (exp) {
$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
.removeData("resizable").removeData("ui-resizable").off(".resizable").find('.ui-resizable-handle').remove();
};
if (this.elementIsWrapper) {
_destroy(this.element);
var wrapper = this.element;
this.originalElement.css({
position: wrapper.css('position'),
width: wrapper.outerWidth(),
height: wrapper.outerHeight(),
top: wrapper.css('top'),
left: wrapper.css('left')
}).insertAfter(wrapper);
wrapper.remove();
}
this.originalElement.css('resize', this.originalResizeStyle);
_destroy(this.originalElement);
return this;
},
_mouseCapture: function (event) {
var handle = false;
for (var i in this.handles) {
if ($(this.handles[i])[0] == event.target) {
handle = true;
}
}
return !this.options.disabled && handle;
},
_mouseStart: function (event) {
var o = this.options, iniPos = this.element.position(), el = this.element;
this.resizing = true;
this.documentScroll = { top: $(document).scrollTop(), left: $(document).scrollLeft() };
if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) {
el.css({ position: 'absolute', top: iniPos.top, left: iniPos.left });
}
this._renderProxy();
var curleft = num(this.helper.css('left')), curtop = num(this.helper.css('top'));
if (o.containment) {
curleft += $(o.containment).scrollLeft() || 0;
curtop += $(o.containment).scrollTop() || 0;
}
this.offset = this.helper.offset();
this.position = { left: curleft, top: curtop };
this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
this.originalPosition = { left: curleft, top: curtop };
this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
this.originalMousePosition = { left: event.pageX, top: event.pageY };
this.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
var cursor = $('.ui-resizable-' + this.axis).css('cursor');
$('body').css('cursor', cursor == 'auto' ? this.axis + '-resize' : cursor);
el.addClass("ui-resizable-resizing");
this._propagate("start", event);
return true;
},
_mouseDrag: function (event) {
var el = this.helper, o = this.options, props = {}, that = this, smp = this.originalMousePosition, a = this.axis;
var dx = (event.pageX - smp.left) || 0, dy = (event.pageY - smp.top) || 0;
var trigger = this._change[a];
if (!trigger)
return false;
var data = trigger.apply(this, [event, dx, dy]);
this._updateVirtualBoundaries(event.shiftKey);
if (this._aspectRatio || event.shiftKey)
data = this._updateRatio(data, event);
data = this._respectSize(data, event);
this._propagate("resize", event);
el.css({
top: this.position.top + "px", left: this.position.left + "px",
width: this.size.width + "px", height: this.size.height + "px"
});
if (!this._helper && this._proportionallyResizeElements.length)
this._proportionallyResize();
this._updateCache(data);
this._trigger('resize', event, this.ui());
return false;
},
_mouseStop: function (event) {
this.resizing = false;
var o = this.options, that = this;
if (this._helper) {
var pr = this._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName), soffseth = ista && $.ui.hasScroll(pr[0], 'left') ? 0 : that.sizeDiff.height, soffsetw = ista ? 0 : that.sizeDiff.width;
var s = { width: (that.helper.width() - soffsetw), height: (that.helper.height() - soffseth) }, left = (parseInt(that.element.css('left'), 10) + (that.position.left - that.originalPosition.left)) || null, top = (parseInt(that.element.css('top'), 10) + (that.position.top - that.originalPosition.top)) || null;
if (!o.animate)
this.element.css($.extend(s, { top: top, left: left }));
that.helper.height(that.size.height);
that.helper.width(that.size.width);
if (this._helper && !o.animate)
this._proportionallyResize();
}
$('body').css('cursor', 'auto');
this.element.removeClass("ui-resizable-resizing");
this._propagate("stop", event);
if (this._helper)
this.helper.remove();
return false;
},
_updateVirtualBoundaries: function (forceAspectRatio) {
var o = this.options, pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b;
b = {
minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
};
if (this._aspectRatio || forceAspectRatio) {
pMinWidth = b.minHeight * this.aspectRatio;
pMinHeight = b.minWidth / this.aspectRatio;
pMaxWidth = b.maxHeight * this.aspectRatio;
pMaxHeight = b.maxWidth / this.aspectRatio;
if (pMinWidth > b.minWidth)
b.minWidth = pMinWidth;
if (pMinHeight > b.minHeight)
b.minHeight = pMinHeight;
if (pMaxWidth < b.maxWidth)
b.maxWidth = pMaxWidth;
if (pMaxHeight < b.maxHeight)
b.maxHeight = pMaxHeight;
}
this._vBoundaries = b;
},
_updateCache: function (data) {
var o = this.options;
this.offset = this.helper.offset();
if (isNumber(data.left))
this.position.left = data.left;
if (isNumber(data.top))
this.position.top = data.top;
if (isNumber(data.height))
this.size.height = data.height;
if (isNumber(data.width))
this.size.width = data.width;
},
_updateRatio: function (data, event) {
var o = this.options, cpos = this.position, csize = this.size, a = this.axis;
if (isNumber(data.height))
data.width = (data.height * this.aspectRatio);
else if (isNumber(data.width))
data.height = (data.width / this.aspectRatio);
if (a == 'sw') {
data.left = cpos.left + (csize.width - data.width);
data.top = null;
}
if (a == 'nw') {
data.top = cpos.top + (csize.height - data.height);
data.left = cpos.left + (csize.width - data.width);
}
return data;
},
_respectSize: function (data, event) {
var el = this.helper, o = this._vBoundaries, pRatio = this._aspectRatio || event.shiftKey, a = this.axis, ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height), isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height);
if (isminw)
data.width = o.minWidth;
if (isminh)
data.height = o.minHeight;
if (ismaxw)
data.width = o.maxWidth;
if (ismaxh)
data.height = o.maxHeight;
var dw = this.originalPosition.left + this.originalSize.width, dh = this.position.top + this.size.height;
var cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
if (isminw && cw)
data.left = dw - o.minWidth;
if (ismaxw && cw)
data.left = dw - o.maxWidth;
if (isminh && ch)
data.top = dh - o.minHeight;
if (ismaxh && ch)
data.top = dh - o.maxHeight;
var isNotwh = !data.width && !data.height;
if (isNotwh && !data.left && data.top)
data.top = null;
else if (isNotwh && !data.top && data.left)
data.left = null;
return data;
},
_proportionallyResize: function () {
var o = this.options;
if (!this._proportionallyResizeElements.length)
return;
var element = this.helper || this.element;
for (var i = 0; i < this._proportionallyResizeElements.length; i++) {
var prel = this._proportionallyResizeElements[i];
if (!this.borderDif) {
var b = [prel.css('borderTopWidth'), prel.css('borderRightWidth'), prel.css('borderBottomWidth'), prel.css('borderLeftWidth')], p = [prel.css('paddingTop'), prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')];
this.borderDif = $.map(b, function (v, i) {
var border = parseInt(v, 10) || 0, padding = parseInt(p[i], 10) || 0;
return border + padding;
});
}
prel.css({
height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
});
}
;
},
_renderProxy: function () {
var el = this.element, o = this.options;
this.elementOffset = el.offset();
if (this._helper) {
this.helper = this.helper || $('<div style="overflow:hidden;"></div>');
var ie6offset = ($.ui.ie6 ? 1 : 0), pxyoffset = ($.ui.ie6 ? 2 : -1);
this.helper.addClass(this._helper).css({
width: this.element.outerWidth() + pxyoffset,
height: this.element.outerHeight() + pxyoffset,
position: 'absolute',
left: this.elementOffset.left - ie6offset + 'px',
top: this.elementOffset.top - ie6offset + 'px',
zIndex: ++o.zIndex
});
this.helper
.appendTo("body")
.disableSelection();
}
else {
this.helper = this.element;
}
},
_change: {
e: function (event, dx, dy) {
return { width: this.originalSize.width + dx };
},
w: function (event, dx, dy) {
var o = this.options, cs = this.originalSize, sp = this.originalPosition;
return { left: sp.left + dx, width: cs.width - dx };
},
n: function (event, dx, dy) {
var o = this.options, cs = this.originalSize, sp = this.originalPosition;
return { top: sp.top + dy, height: cs.height - dy };
},
s: function (event, dx, dy) {
return { height: this.originalSize.height + dy };
},
se: function (event, dx, dy) {
return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
},
sw: function (event, dx, dy) {
return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
},
ne: function (event, dx, dy) {
return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
},
nw: function (event, dx, dy) {
return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
}
},
_propagate: function (n, event) {
$.ui.plugin.call(this, n, [event, this.ui()]);
(n != "resize" && this._trigger(n, event, this.ui()));
},
plugins: {},
ui: function () {
return {
originalElement: this.originalElement,
element: this.element,
helper: this.helper,
position: this.position,
size: this.size,
originalSize: this.originalSize,
originalPosition: this.originalPosition
};
}
});
$.ui.plugin.add("resizable", "alsoResize", {
start: function (event, ui) {
var that = $(this).data("resizable"), o = that.options;
var _store = function (exp) {
$(exp).each(function () {
var el = $(this);
el.data("resizable-alsoresize", {
width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
left: parseInt(el.css('left'), 10), top: parseInt(el.css('top'), 10)
});
});
};
if (typeof (o.alsoResize) == 'object' && !o.alsoResize.parentNode) {
if (o.alsoResize.length) {
o.alsoResize = o.alsoResize[0];
_store(o.alsoResize);
}
else {
$.each(o.alsoResize, function (exp) { _store(exp); });
}
}
else {
_store(o.alsoResize);
}
},
resize: function (event, ui) {
var that = $(this).data("resizable"), o = that.options, os = that.originalSize, op = that.originalPosition;
var delta = {
height: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0,
top: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0
}, _alsoResize = function (exp, c) {
$(exp).each(function () {
var el = $(this), start = $(this).data("resizable-alsoresize"), style = {}, css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ['width', 'height'] : ['width', 'height', 'top', 'left'];
$.each(css, function (i, prop) {
var sum = (start[prop] || 0) + (delta[prop] || 0);
if (sum && sum >= 0)
style[prop] = sum || null;
});
el.css(style);
});
};
if (typeof (o.alsoResize) == 'object' && !o.alsoResize.nodeType) {
$.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
}
else {
_alsoResize(o.alsoResize);
}
},
stop: function (event, ui) {
$(this).removeData("resizable-alsoresize");
}
});
$.ui.plugin.add("resizable", "animate", {
stop: function (event, ui) {
var that = $(this).data("resizable"), o = that.options;
var pr = that._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName), soffseth = ista && $.ui.hasScroll(pr[0], 'left') ? 0 : that.sizeDiff.height, soffsetw = ista ? 0 : that.sizeDiff.width;
var style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) }, left = (parseInt(that.element.css('left'), 10) + (that.position.left - that.originalPosition.left)) || null, top = (parseInt(that.element.css('top'), 10) + (that.position.top - that.originalPosition.top)) || null;
that.element.animate($.extend(style, top && left ? { top: top, left: left } : {}), {
duration: o.animateDuration,
easing: o.animateEasing,
step: function () {
var data = {
width: parseInt(that.element.css('width'), 10),
height: parseInt(that.element.css('height'), 10),
top: parseInt(that.element.css('top'), 10),
left: parseInt(that.element.css('left'), 10)
};
if (pr && pr.length)
$(pr[0]).css({ width: data.width, height: data.height });
that._updateCache(data);
that._propagate("resize", event);
}
});
}
});
$.ui.plugin.add("resizable", "containment", {
start: function (event, ui) {
var that = $(this).data("resizable"), o = that.options, el = that.element;
var oc = o.containment, ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
if (!ce)
return;
that.containerElement = $(ce);
if (/document/.test(oc) || oc == document) {
that.containerOffset = { left: 0, top: 0 };
that.containerPosition = { left: 0, top: 0 };
that.parentData = {
element: $(document), left: 0, top: 0,
width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
};
}
else {
var element = $(ce), p = [];
$(["Top", "Right", "Left", "Bottom"]).each(function (i, name) { p[i] = num(element.css("padding" + name)); });
that.containerOffset = element.offset();
that.containerPosition = element.position();
that.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
var co = that.containerOffset, ch = that.containerSize.height, cw = that.containerSize.width, width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw), height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
that.parentData = {
element: ce, left: co.left, top: co.top, width: width, height: height
};
}
},
resize: function (event, ui) {
var that = $(this).data("resizable"), o = that.options, ps = that.containerSize, co = that.containerOffset, cs = that.size, cp = that.position, pRatio = that._aspectRatio || event.shiftKey, cop = { top: 0, left: 0 }, ce = that.containerElement;
if (ce[0] != document && (/static/).test(ce.css('position')))
cop = co;
if (cp.left < (that._helper ? co.left : 0)) {
that.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left));
if (pRatio)
that.size.height = that.size.width / that.aspectRatio;
that.position.left = o.helper ? co.left : 0;
}
if (cp.top < (that._helper ? co.top : 0)) {
that.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top);
if (pRatio)
that.size.width = that.size.height * that.aspectRatio;
that.position.top = that._helper ? co.top : 0;
}
that.offset.left = that.parentData.left + that.position.left;
that.offset.top = that.parentData.top + that.position.top;
var woset = Math.abs((that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width), hoset = Math.abs((that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height);
var isParent = that.containerElement.get(0) == that.element.parent().get(0), isOffsetRelative = /relative|absolute/.test(that.containerElement.css('position'));
if (isParent && isOffsetRelative)
woset -= that.parentData.left;
if (woset + that.size.width >= that.parentData.width) {
that.size.width = that.parentData.width - woset;
if (pRatio)
that.size.height = that.size.width / that.aspectRatio;
}
if (hoset + that.size.height >= that.parentData.height) {
that.size.height = that.parentData.height - hoset;
if (pRatio)
that.size.width = that.size.height * that.aspectRatio;
}
},
stop: function (event, ui) {
var that = $(this).data("resizable"), o = that.options, cp = that.position, co = that.containerOffset, cop = that.containerPosition, ce = that.containerElement;
var helper = $(that.helper), ho = helper.offset(), w = helper.outerWidth() - that.sizeDiff.width, h = helper.outerHeight() - that.sizeDiff.height;
if (that._helper && !o.animate && (/relative/).test(ce.css('position')))
$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
if (that._helper && !o.animate && (/static/).test(ce.css('position')))
$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
}
});
$.ui.plugin.add("resizable", "ghost", {
start: function (event, ui) {
var that = $(this).data("resizable"), o = that.options, cs = that.size;
that.ghost = that.originalElement.clone();
that.ghost
.css({ opacity: .25, display: 'block', position: 'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
.addClass('ui-resizable-ghost')
.addClass(typeof o.ghost == 'string' ? o.ghost : '');
that.ghost.appendTo(that.helper);
},
resize: function (event, ui) {
var that = $(this).data("resizable"), o = that.options;
if (that.ghost)
that.ghost.css({ position: 'relative', height: that.size.height, width: that.size.width });
},
stop: function (event, ui) {
var that = $(this).data("resizable"), o = that.options;
if (that.ghost && that.helper)
that.helper.get(0).removeChild(that.ghost.get(0));
}
});
$.ui.plugin.add("resizable", "grid", {
resize: function (event, ui) {
var that = $(this).data("resizable"), o = that.options, cs = that.size, os = that.originalSize, op = that.originalPosition, a = that.axis, ratio = o._aspectRatio || event.shiftKey;
o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid;
var ox = Math.round((cs.width - os.width) / (o.grid[0] || 1)) * (o.grid[0] || 1), oy = Math.round((cs.height - os.height) / (o.grid[1] || 1)) * (o.grid[1] || 1);
if (/^(se|s|e)$/.test(a)) {
that.size.width = os.width + ox;
that.size.height = os.height + oy;
}
else if (/^(ne)$/.test(a)) {
that.size.width = os.width + ox;
that.size.height = os.height + oy;
that.position.top = op.top - oy;
}
else if (/^(sw)$/.test(a)) {
that.size.width = os.width + ox;
that.size.height = os.height + oy;
that.position.left = op.left - ox;
}
else {
that.size.width = os.width + ox;
that.size.height = os.height + oy;
that.position.top = op.top - oy;
that.position.left = op.left - ox;
}
}
});
var num = function (v) {
return parseInt(v, 10) || 0;
};
var isNumber = function (value) {
return !isNaN(parseInt(value, 10));
};
})(jQuery);
(function ($, undefined) {
$.widget("ui.selectable", $.ui.mouse, {
version: "1.9.2",
options: {
appendTo: 'body',
autoRefresh: true,
distance: 0,
filter: '*',
tolerance: 'touch'
},
_create: function () {
var that = this;
this.element.addClass("ui-selectable");
this.dragged = false;
var selectees;
this.refresh = function () {
selectees = $(that.options.filter, that.element[0]);
selectees.addClass("ui-selectee");
selectees.each(function () {
var $this = $(this);
var pos = $this.offset();
$.data(this, "selectable-item", {
element: this,
$element: $this,
left: pos.left,
top: pos.top,
right: pos.left + $this.outerWidth(),
bottom: pos.top + $this.outerHeight(),
startselected: false,
selected: $this.hasClass('ui-selected'),
selecting: $this.hasClass('ui-selecting'),
unselecting: $this.hasClass('ui-unselecting')
});
});
};
this.refresh();
this.selectees = selectees.addClass("ui-selectee");
this._mouseInit();
this.helper = $("<div class='ui-selectable-helper'></div>");
},
_destroy: function () {
this.selectees
.removeClass("ui-selectee")
.removeData("selectable-item");
this.element
.removeClass("ui-selectable ui-selectable-disabled");
this._mouseDestroy();
},
_mouseStart: function (event) {
var that = this;
this.opos = [event.pageX, event.pageY];
if (this.options.disabled)
return;
var options = this.options;
this.selectees = $(options.filter, this.element[0]);
this._trigger("start", event);
$(options.appendTo).append(this.helper);
this.helper.css({
"left": event.clientX,
"top": event.clientY,
"width": 0,
"height": 0
});
if (options.autoRefresh) {
this.refresh();
}
this.selectees.filter('.ui-selected').each(function () {
var selectee = $.data(this, "selectable-item");
selectee.startselected = true;
if (!event.metaKey && !event.ctrlKey) {
selectee.$element.removeClass('ui-selected');
selectee.selected = false;
selectee.$element.addClass('ui-unselecting');
selectee.unselecting = true;
that._trigger("unselecting", event, {
unselecting: selectee.element
});
}
});
$(event.target).parents().addBack().each(function () {
var selectee = $.data(this, "selectable-item");
if (selectee) {
var doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass('ui-selected');
selectee.$element
.removeClass(doSelect ? "ui-unselecting" : "ui-selected")
.addClass(doSelect ? "ui-selecting" : "ui-unselecting");
selectee.unselecting = !doSelect;
selectee.selecting = doSelect;
selectee.selected = doSelect;
if (doSelect) {
that._trigger("selecting", event, {
selecting: selectee.element
});
}
else {
that._trigger("unselecting", event, {
unselecting: selectee.element
});
}
return false;
}
});
},
_mouseDrag: function (event) {
var that = this;
this.dragged = true;
if (this.options.disabled)
return;
var options = this.options;
var x1 = this.opos[0], y1 = this.opos[1], x2 = event.pageX, y2 = event.pageY;
if (x1 > x2) {
var tmp = x2;
x2 = x1;
x1 = tmp;
}
if (y1 > y2) {
var tmp = y2;
y2 = y1;
y1 = tmp;
}
this.helper.css({ left: x1, top: y1, width: x2 - x1, height: y2 - y1 });
this.selectees.each(function () {
var selectee = $.data(this, "selectable-item");
if (!selectee || selectee.element == that.element[0])
return;
var hit = false;
if (options.tolerance == 'touch') {
hit = (!(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1));
}
else if (options.tolerance == 'fit') {
hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
}
if (hit) {
if (selectee.selected) {
selectee.$element.removeClass('ui-selected');
selectee.selected = false;
}
if (selectee.unselecting) {
selectee.$element.removeClass('ui-unselecting');
selectee.unselecting = false;
}
if (!selectee.selecting) {
selectee.$element.addClass('ui-selecting');
selectee.selecting = true;
that._trigger("selecting", event, {
selecting: selectee.element
});
}
}
else {
if (selectee.selecting) {
if ((event.metaKey || event.ctrlKey) && selectee.startselected) {
selectee.$element.removeClass('ui-selecting');
selectee.selecting = false;
selectee.$element.addClass('ui-selected');
selectee.selected = true;
}
else {
selectee.$element.removeClass('ui-selecting');
selectee.selecting = false;
if (selectee.startselected) {
selectee.$element.addClass('ui-unselecting');
selectee.unselecting = true;
}
that._trigger("unselecting", event, {
unselecting: selectee.element
});
}
}
if (selectee.selected) {
if (!event.metaKey && !event.ctrlKey && !selectee.startselected) {
selectee.$element.removeClass('ui-selected');
selectee.selected = false;
selectee.$element.addClass('ui-unselecting');
selectee.unselecting = true;
that._trigger("unselecting", event, {
unselecting: selectee.element
});
}
}
}
});
return false;
},
_mouseStop: function (event) {
var that = this;
this.dragged = false;
var options = this.options;
$('.ui-unselecting', this.element[0]).each(function () {
var selectee = $.data(this, "selectable-item");
selectee.$element.removeClass('ui-unselecting');
selectee.unselecting = false;
selectee.startselected = false;
that._trigger("unselected", event, {
unselected: selectee.element
});
});
$('.ui-selecting', this.element[0]).each(function () {
var selectee = $.data(this, "selectable-item");
selectee.$element.removeClass('ui-selecting').addClass('ui-selected');
selectee.selecting = false;
selectee.selected = true;
selectee.startselected = true;
that._trigger("selected", event, {
selected: selectee.element
});
});
this._trigger("stop", event);
this.helper.remove();
return false;
}
});
})(jQuery);
(function ($, undefined) {
$.widget("ui.sortable", $.ui.mouse, {
version: "1.9.2",
widgetEventPrefix: "sort",
ready: false,
options: {
appendTo: "parent",
axis: false,
connectWith: false,
containment: false,
cursor: 'auto',
cursorAt: false,
dropOnEmpty: true,
forcePlaceholderSize: false,
forceHelperSize: false,
grid: false,
handle: false,
helper: "original",
items: '> *',
opacity: false,
placeholder: false,
revert: false,
scroll: true,
scrollSensitivity: 20,
scrollSpeed: 20,
scope: "default",
tolerance: "intersect",
zIndex: 1000
},
_create: function () {
var o = this.options;
this.containerCache = {};
this.element.addClass("ui-sortable");
this.refresh();
this.floating = this.items.length ? o.axis === 'x' || (/left|right/).test(this.items[0].item.css('float')) || (/inline|table-cell/).test(this.items[0].item.css('display')) : false;
this.offset = this.element.offset();
this._mouseInit();
this.ready = true;
},
_destroy: function () {
this.element
.removeClass("ui-sortable ui-sortable-disabled");
this._mouseDestroy();
for (var i = this.items.length - 1; i >= 0; i--)
this.items[i].item.removeData(this.widgetName + "-item");
return this;
},
_setOption: function (key, value) {
if (key === "disabled") {
this.options[key] = value;
this.widget().toggleClass("ui-sortable-disabled", !!value);
}
else {
$.Widget.prototype._setOption.apply(this, arguments);
}
},
_mouseCapture: function (event, overrideHandle) {
var that = this;
if (this.reverting) {
return false;
}
if (this.options.disabled || this.options.type == 'static')
return false;
this._refreshItems(event);
var currentItem = null, nodes = $(event.target).parents().each(function () {
if ($.data(this, that.widgetName + '-item') == that) {
currentItem = $(this);
return false;
}
});
if ($.data(event.target, that.widgetName + '-item') == that)
currentItem = $(event.target);
if (!currentItem)
return false;
if (this.options.handle && !overrideHandle) {
var validHandle = false;
$(this.options.handle, currentItem).find("*").addBack().each(function () { if (this == event.target)
validHandle = true; });
if (!validHandle)
return false;
}
this.currentItem = currentItem;
this._removeCurrentsFromItems();
return true;
},
_mouseStart: function (event, overrideHandle, noActivation) {
var o = this.options;
this.currentContainer = this;
this.refreshPositions();
this.helper = this._createHelper(event);
this._cacheHelperProportions();
this._cacheMargins();
this.scrollParent = this.helper.scrollParent();
this.offset = this.currentItem.offset();
this.offset = {
top: this.offset.top - this.margins.top,
left: this.offset.left - this.margins.left
};
$.extend(this.offset, {
click: {
left: event.pageX - this.offset.left,
top: event.pageY - this.offset.top
},
parent: this._getParentOffset(),
relative: this._getRelativeOffset()
});
this.helper.css("position", "absolute");
this.cssPosition = this.helper.css("position");
this.originalPosition = this._generatePosition(event);
this.originalPageX = event.pageX;
this.originalPageY = event.pageY;
(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
if (this.helper[0] != this.currentItem[0]) {
this.currentItem.hide();
}
this._createPlaceholder();
if (o.containment)
this._setContainment();
if (o.cursor) {
if ($('body').css("cursor"))
this._storedCursor = $('body').css("cursor");
$('body').css("cursor", o.cursor);
}
if (o.opacity) {
if (this.helper.css("opacity"))
this._storedOpacity = this.helper.css("opacity");
this.helper.css("opacity", o.opacity);
}
if (o.zIndex) {
if (this.helper.css("zIndex"))
this._storedZIndex = this.helper.css("zIndex");
this.helper.css("zIndex", o.zIndex);
}
if (this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML')
this.overflowOffset = this.scrollParent.offset();
this._trigger("start", event, this._uiHash());
if (!this._preserveHelperProportions)
this._cacheHelperProportions();
if (!noActivation) {
for (var i = this.containers.length - 1; i >= 0; i--) {
this.containers[i]._trigger("activate", event, this._uiHash(this));
}
}
if ($.ui.ddmanager)
$.ui.ddmanager.current = this;
if ($.ui.ddmanager && !o.dropBehaviour)
$.ui.ddmanager.prepareOffsets(this, event);
this.dragging = true;
this.helper.addClass("ui-sortable-helper");
this._mouseDrag(event);
return true;
},
_mouseDrag: function (event) {
this.position = this._generatePosition(event);
this.positionAbs = this._convertPositionTo("absolute");
if (!this.lastPositionAbs) {
this.lastPositionAbs = this.positionAbs;
}
if (this.options.scroll) {
var o = this.options, scrolled = false;
if (this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') {
if ((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
else if (event.pageY - this.overflowOffset.top < o.scrollSensitivity)
this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
if ((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
else if (event.pageX - this.overflowOffset.left < o.scrollSensitivity)
this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
}
else {
if (event.pageY - $(document).scrollTop() < o.scrollSensitivity)
scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
else if ($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
if (event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
else if ($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
}
if (scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
$.ui.ddmanager.prepareOffsets(this, event);
}
this.positionAbs = this._convertPositionTo("absolute");
if (!this.options.axis || this.options.axis != "y")
this.helper[0].style.left = this.position.left + 'px';
if (!this.options.axis || this.options.axis != "x")
this.helper[0].style.top = this.position.top + 'px';
for (var i = this.items.length - 1; i >= 0; i--) {
var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item);
if (!intersection)
continue;
if (item.instance !== this.currentContainer)
continue;
if (itemElement != this.currentItem[0]
&& this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement
&& !$.contains(this.placeholder[0], itemElement)
&& (this.options.type == 'semi-dynamic' ? !$.contains(this.element[0], itemElement) : true)) {
this.direction = intersection == 1 ? "down" : "up";
if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) {
this._rearrange(event, item);
}
else {
break;
}
this._trigger("change", event, this._uiHash());
break;
}
}
this._contactContainers(event);
if ($.ui.ddmanager)
$.ui.ddmanager.drag(this, event);
this._trigger('sort', event, this._uiHash());
this.lastPositionAbs = this.positionAbs;
return false;
},
_mouseStop: function (event, noPropagation) {
if (!event)
return;
if ($.ui.ddmanager && !this.options.dropBehaviour)
$.ui.ddmanager.drop(this, event);
if (this.options.revert) {
var that = this;
var cur = this.placeholder.offset();
this.reverting = true;
$(this.helper).animate({
left: cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft),
top: cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop)
}, parseInt(this.options.revert, 10) || 500, function () {
that._clear(event);
});
}
else {
this._clear(event, noPropagation);
}
return false;
},
cancel: function () {
if (this.dragging) {
this._mouseUp({ target: null });
if (this.options.helper == "original")
this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
else
this.currentItem.show();
for (var i = this.containers.length - 1; i >= 0; i--) {
this.containers[i]._trigger("deactivate", null, this._uiHash(this));
if (this.containers[i].containerCache.over) {
this.containers[i]._trigger("out", null, this._uiHash(this));
this.containers[i].containerCache.over = 0;
}
}
}
if (this.placeholder) {
if (this.placeholder[0].parentNode)
this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
if (this.options.helper != "original" && this.helper && this.helper[0].parentNode)
this.helper.remove();
$.extend(this, {
helper: null,
dragging: false,
reverting: false,
_noFinalSort: null
});
if (this.domPosition.prev) {
$(this.domPosition.prev).after(this.currentItem);
}
else {
$(this.domPosition.parent).prepend(this.currentItem);
}
}
return this;
},
serialize: function (o) {
var items = this._getItemsAsjQuery(o && o.connected);
var str = [];
o = o || {};
$(items).each(function () {
var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
if (res)
str.push((o.key || res[1] + '[]') + '=' + (o.key && o.expression ? res[1] : res[2]));
});
if (!str.length && o.key) {
str.push(o.key + '=');
}
return str.join('&');
},
toArray: function (o) {
var items = this._getItemsAsjQuery(o && o.connected);
var ret = [];
o = o || {};
items.each(function () { ret.push($(o.item || this).attr(o.attribute || 'id') || ''); });
return ret;
},
_intersectsWith: function (item) {
var x1 = this.positionAbs.left, x2 = x1 + this.helperProportions.width, y1 = this.positionAbs.top, y2 = y1 + this.helperProportions.height;
var l = item.left, r = l + item.width, t = item.top, b = t + item.height;
var dyClick = this.offset.click.top, dxClick = this.offset.click.left;
var isOverElement = (y1 + dyClick) > t && (y1 + dyClick) < b && (x1 + dxClick) > l && (x1 + dxClick) < r;
if (this.options.tolerance == "pointer"
|| this.options.forcePointerForContainers
|| (this.options.tolerance != "pointer" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height'])) {
return isOverElement;
}
else {
return (l < x1 + (this.helperProportions.width / 2)
&& x2 - (this.helperProportions.width / 2) < r
&& t < y1 + (this.helperProportions.height / 2)
&& y2 - (this.helperProportions.height / 2) < b);
}
},
_intersectsWithPointer: function (item) {
var isOverElementHeight = (this.options.axis === 'x') || $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height), isOverElementWidth = (this.options.axis === 'y') || $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width), isOverElement = isOverElementHeight && isOverElementWidth, verticalDirection = this._getDragVerticalDirection(), horizontalDirection = this._getDragHorizontalDirection();
if (!isOverElement)
return false;
return this.floating ?
(((horizontalDirection && horizontalDirection == "right") || verticalDirection == "down") ? 2 : 1)
: (verticalDirection && (verticalDirection == "down" ? 2 : 1));
},
_intersectsWithSides: function (item) {
var isOverBottomHalf = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height / 2), item.height), isOverRightHalf = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width / 2), item.width), verticalDirection = this._getDragVerticalDirection(), horizontalDirection = this._getDragHorizontalDirection();
if (this.floating && horizontalDirection) {
return ((horizontalDirection == "right" && isOverRightHalf) || (horizontalDirection == "left" && !isOverRightHalf));
}
else {
return verticalDirection && ((verticalDirection == "down" && isOverBottomHalf) || (verticalDirection == "up" && !isOverBottomHalf));
}
},
_getDragVerticalDirection: function () {
var delta = this.positionAbs.top - this.lastPositionAbs.top;
return delta != 0 && (delta > 0 ? "down" : "up");
},
_getDragHorizontalDirection: function () {
var delta = this.positionAbs.left - this.lastPositionAbs.left;
return delta != 0 && (delta > 0 ? "right" : "left");
},
refresh: function (event) {
this._refreshItems(event);
this.refreshPositions();
return this;
},
_connectWith: function () {
var options = this.options;
return options.connectWith.constructor == String
? [options.connectWith]
: options.connectWith;
},
_getItemsAsjQuery: function (connected) {
var items = [];
var queries = [];
var connectWith = this._connectWith();
if (connectWith && connected) {
for (var i = connectWith.length - 1; i >= 0; i--) {
var cur = $(connectWith[i]);
for (var j = cur.length - 1; j >= 0; j--) {
var inst = $.data(cur[j], this.widgetName);
if (inst && inst != this && !inst.options.disabled) {
queries.push([typeof inst.options.items === 'function' ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), inst]);
}
}
;
}
;
}
queries.push([typeof this.options.items === 'function' ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), this]);
for (var i = queries.length - 1; i >= 0; i--) {
queries[i][0].each(function () {
items.push(this);
});
}
;
return $(items);
},
_removeCurrentsFromItems: function () {
var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
this.items = $.grep(this.items, function (item) {
for (var j = 0; j < list.length; j++) {
if (list[j] == item.item[0])
return false;
}
;
return true;
});
},
_refreshItems: function (event) {
this.items = [];
this.containers = [this];
var items = this.items;
var queries = [[typeof this.options.items === 'function' ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]];
var connectWith = this._connectWith();
if (connectWith && this.ready) {
for (var i = connectWith.length - 1; i >= 0; i--) {
var cur = $(connectWith[i]);
for (var j = cur.length - 1; j >= 0; j--) {
var inst = $.data(cur[j], this.widgetName);
if (inst && inst != this && !inst.options.disabled) {
queries.push([typeof inst.options.items === 'function' ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
this.containers.push(inst);
}
}
;
}
;
}
for (var i = queries.length - 1; i >= 0; i--) {
var targetData = queries[i][1];
var _queries = queries[i][0];
for (var j = 0, queriesLength = _queries.length; j < queriesLength; j++) {
var item = $(_queries[j]);
item.data(this.widgetName + '-item', targetData);
items.push({
item: item,
instance: targetData,
width: 0, height: 0,
left: 0, top: 0
});
}
;
}
;
},
refreshPositions: function (fast) {
if (this.offsetParent && this.helper) {
this.offset.parent = this._getParentOffset();
}
for (var i = this.items.length - 1; i >= 0; i--) {
var item = this.items[i];
if (item.instance != this.currentContainer && this.currentContainer && item.item[0] != this.currentItem[0])
continue;
var t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
if (!fast) {
item.width = t.outerWidth();
item.height = t.outerHeight();
}
var p = t.offset();
item.left = p.left;
item.top = p.top;
}
;
if (this.options.custom && this.options.custom.refreshContainers) {
this.options.custom.refreshContainers.call(this);
}
else {
for (var i = this.containers.length - 1; i >= 0; i--) {
var p = this.containers[i].element.offset();
this.containers[i].containerCache.left = p.left;
this.containers[i].containerCache.top = p.top;
this.containers[i].containerCache.width = this.containers[i].element.outerWidth();
this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
}
;
}
return this;
},
_createPlaceholder: function (that) {
that = that || this;
var o = that.options;
if (!o.placeholder || o.placeholder.constructor == String) {
var className = o.placeholder;
o.placeholder = {
element: function () {
var el = $(document.createElement(that.currentItem[0].nodeName))
.addClass(className || that.currentItem[0].className + " ui-sortable-placeholder")
.removeClass("ui-sortable-helper")[0];
if (!className)
el.style.visibility = "hidden";
return el;
},
update: function (container, p) {
if (className && !o.forcePlaceholderSize)
return;
if (!p.height()) {
p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css('paddingTop') || 0, 10) - parseInt(that.currentItem.css('paddingBottom') || 0, 10));
}
;
if (!p.width()) {
p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css('paddingLeft') || 0, 10) - parseInt(that.currentItem.css('paddingRight') || 0, 10));
}
;
}
};
}
that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
that.currentItem.after(that.placeholder);
o.placeholder.update(that, that.placeholder);
},
_contactContainers: function (event) {
var innermostContainer = null, innermostIndex = null;
for (var i = this.containers.length - 1; i >= 0; i--) {
if ($.contains(this.currentItem[0], this.containers[i].element[0]))
continue;
if (this._intersectsWith(this.containers[i].containerCache)) {
if (innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0]))
continue;
innermostContainer = this.containers[i];
innermostIndex = i;
}
else {
if (this.containers[i].containerCache.over) {
this.containers[i]._trigger("out", event, this._uiHash(this));
this.containers[i].containerCache.over = 0;
}
}
}
if (!innermostContainer)
return;
if (this.containers.length === 1) {
this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
this.containers[innermostIndex].containerCache.over = 1;
}
else {
var dist = 10000;
var itemWithLeastDistance = null;
var posProperty = this.containers[innermostIndex].floating ? 'left' : 'top';
var sizeProperty = this.containers[innermostIndex].floating ? 'width' : 'height';
var base = this.positionAbs[posProperty] + this.offset.click[posProperty];
for (var j = this.items.length - 1; j >= 0; j--) {
if (!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0]))
continue;
if (this.items[j].item[0] == this.currentItem[0])
continue;
var cur = this.items[j].item.offset()[posProperty];
var nearBottom = false;
if (Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)) {
nearBottom = true;
cur += this.items[j][sizeProperty];
}
if (Math.abs(cur - base) < dist) {
dist = Math.abs(cur - base);
itemWithLeastDistance = this.items[j];
this.direction = nearBottom ? "up" : "down";
}
}
if (!itemWithLeastDistance && !this.options.dropOnEmpty)
return;
this.currentContainer = this.containers[innermostIndex];
itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
this._trigger("change", event, this._uiHash());
this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
this.options.placeholder.update(this.currentContainer, this.placeholder);
this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
this.containers[innermostIndex].containerCache.over = 1;
}
},
_createHelper: function (event) {
var o = this.options;
var helper = typeof o.helper === 'function' ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper == 'clone' ? this.currentItem.clone() : this.currentItem);
if (!helper.parents('body').length)
$(o.appendTo != 'parent' ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
if (helper[0] == this.currentItem[0])
this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
if (helper[0].style.width == '' || o.forceHelperSize)
helper.width(this.currentItem.width());
if (helper[0].style.height == '' || o.forceHelperSize)
helper.height(this.currentItem.height());
return helper;
},
_adjustOffsetFromHelper: function (obj) {
if (typeof obj == 'string') {
obj = obj.split(' ');
}
if (Array.isArray(obj)) {
obj = { left: +obj[0], top: +obj[1] || 0 };
}
if ('left' in obj) {
this.offset.click.left = obj.left + this.margins.left;
}
if ('right' in obj) {
this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
}
if ('top' in obj) {
this.offset.click.top = obj.top + this.margins.top;
}
if ('bottom' in obj) {
this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
}
},
_getParentOffset: function () {
this.offsetParent = this.helper.offsetParent();
var po = this.offsetParent.offset();
if (this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
po.left += this.scrollParent.scrollLeft();
po.top += this.scrollParent.scrollTop();
}
if ((this.offsetParent[0] == document.body)
|| (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.ui.ie))
po = { top: 0, left: 0 };
return {
top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
};
},
_getRelativeOffset: function () {
if (this.cssPosition == "relative") {
var p = this.currentItem.position();
return {
top: p.top - (parseInt(this.helper.css("top"), 10) || 0) + this.scrollParent.scrollTop(),
left: p.left - (parseInt(this.helper.css("left"), 10) || 0) + this.scrollParent.scrollLeft()
};
}
else {
return { top: 0, left: 0 };
}
},
_cacheMargins: function () {
this.margins = {
left: (parseInt(this.currentItem.css("marginLeft"), 10) || 0),
top: (parseInt(this.currentItem.css("marginTop"), 10) || 0)
};
},
_cacheHelperProportions: function () {
this.helperProportions = {
width: this.helper.outerWidth(),
height: this.helper.outerHeight()
};
},
_setContainment: function () {
var o = this.options;
if (o.containment == 'parent')
o.containment = this.helper[0].parentNode;
if (o.containment == 'document' || o.containment == 'window')
this.containment = [
0 - this.offset.relative.left - this.offset.parent.left,
0 - this.offset.relative.top - this.offset.parent.top,
$(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
];
if (!(/^(document|window|parent)$/).test(o.containment)) {
var ce = $(o.containment)[0];
var co = $(o.containment).offset();
var over = ($(ce).css("overflow") != 'hidden');
this.containment = [
co.left + (parseInt($(ce).css("borderLeftWidth"), 10) || 0) + (parseInt($(ce).css("paddingLeft"), 10) || 0) - this.margins.left,
co.top + (parseInt($(ce).css("borderTopWidth"), 10) || 0) + (parseInt($(ce).css("paddingTop"), 10) || 0) - this.margins.top,
co.left + (over ? Math.max(ce.scrollWidth, ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"), 10) || 0) - (parseInt($(ce).css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left,
co.top + (over ? Math.max(ce.scrollHeight, ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"), 10) || 0) - (parseInt($(ce).css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top
];
}
},
_convertPositionTo: function (d, pos) {
if (!pos)
pos = this.position;
var mod = d == "absolute" ? 1 : -1;
var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
return {
top: (pos.top
+ this.offset.relative.top * mod
+ this.offset.parent.top * mod
- ((this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : (scrollIsRootNode ? 0 : scroll.scrollTop())) * mod)),
left: (pos.left
+ this.offset.relative.left * mod
+ this.offset.parent.left * mod
- ((this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft()) * mod))
};
},
_generatePosition: function (event) {
var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
if (this.cssPosition == 'relative' && !(this.scrollParent[0] != document && this.scrollParent[0] != this.offsetParent[0])) {
this.offset.relative = this._getRelativeOffset();
}
var pageX = event.pageX;
var pageY = event.pageY;
if (this.originalPosition) {
if (this.containment) {
if (event.pageX - this.offset.click.left < this.containment[0])
pageX = this.containment[0] + this.offset.click.left;
if (event.pageY - this.offset.click.top < this.containment[1])
pageY = this.containment[1] + this.offset.click.top;
if (event.pageX - this.offset.click.left > this.containment[2])
pageX = this.containment[2] + this.offset.click.left;
if (event.pageY - this.offset.click.top > this.containment[3])
pageY = this.containment[3] + this.offset.click.top;
}
if (o.grid) {
var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
}
}
return {
top: (pageY
- this.offset.click.top
- this.offset.relative.top
- this.offset.parent.top
+ ((this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : (scrollIsRootNode ? 0 : scroll.scrollTop())))),
left: (pageX
- this.offset.click.left
- this.offset.relative.left
- this.offset.parent.left
+ ((this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft())))
};
},
_rearrange: function (event, i, a, hardRefresh) {
a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction == 'down' ? i.item[0] : i.item[0].nextSibling));
this.counter = this.counter ? ++this.counter : 1;
var counter = this.counter;
this._delay(function () {
if (counter == this.counter)
this.refreshPositions(!hardRefresh);
});
},
_clear: function (event, noPropagation) {
this.reverting = false;
var delayedTriggers = [];
if (!this._noFinalSort && this.currentItem.parent().length)
this.placeholder.before(this.currentItem);
this._noFinalSort = null;
if (this.helper[0] == this.currentItem[0]) {
for (var i in this._storedCSS) {
if (this._storedCSS[i] == 'auto' || this._storedCSS[i] == 'static')
this._storedCSS[i] = '';
}
this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
}
else {
this.currentItem.show();
}
if (this.fromOutside && !noPropagation)
delayedTriggers.push(function (event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
if ((this.fromOutside || this.domPosition.prev != this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent != this.currentItem.parent()[0]) && !noPropagation)
delayedTriggers.push(function (event) { this._trigger("update", event, this._uiHash()); });
if (this !== this.currentContainer) {
if (!noPropagation) {
delayedTriggers.push(function (event) { this._trigger("remove", event, this._uiHash()); });
delayedTriggers.push((function (c) { return function (event) { c._trigger("receive", event, this._uiHash(this)); }; }).call(this, this.currentContainer));
delayedTriggers.push((function (c) { return function (event) { c._trigger("update", event, this._uiHash(this)); }; }).call(this, this.currentContainer));
}
}
for (var i = this.containers.length - 1; i >= 0; i--) {
if (!noPropagation)
delayedTriggers.push((function (c) { return function (event) { c._trigger("deactivate", event, this._uiHash(this)); }; }).call(this, this.containers[i]));
if (this.containers[i].containerCache.over) {
delayedTriggers.push((function (c) { return function (event) { c._trigger("out", event, this._uiHash(this)); }; }).call(this, this.containers[i]));
this.containers[i].containerCache.over = 0;
}
}
if (this._storedCursor)
$('body').css("cursor", this._storedCursor);
if (this._storedOpacity)
this.helper.css("opacity", this._storedOpacity);
if (this._storedZIndex)
this.helper.css("zIndex", this._storedZIndex == 'auto' ? '' : this._storedZIndex);
this.dragging = false;
if (this.cancelHelperRemoval) {
if (!noPropagation) {
this._trigger("beforeStop", event, this._uiHash());
for (var i = 0; i < delayedTriggers.length; i++) {
delayedTriggers[i].call(this, event);
}
;
this._trigger("stop", event, this._uiHash());
}
this.fromOutside = false;
return false;
}
if (!noPropagation)
this._trigger("beforeStop", event, this._uiHash());
this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
if (this.helper[0] != this.currentItem[0])
this.helper.remove();
this.helper = null;
if (!noPropagation) {
for (var i = 0; i < delayedTriggers.length; i++) {
delayedTriggers[i].call(this, event);
}
;
this._trigger("stop", event, this._uiHash());
}
this.fromOutside = false;
return true;
},
_trigger: function () {
if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
this.cancel();
}
},
_uiHash: function (_inst) {
var inst = _inst || this;
return {
helper: inst.helper,
placeholder: inst.placeholder || $([]),
position: inst.position,
originalPosition: inst.originalPosition,
offset: inst.positionAbs,
item: inst.currentItem,
sender: _inst ? _inst.element : null
};
}
});
})(jQuery);
;
(jQuery.effects || (function ($, undefined) {
var backCompat = $.uiBackCompat !== false, dataSpace = "ui-effects-";
$.effects = {
effect: {}
};
(function (jQuery, undefined) {
var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor".split(" "), rplusequals = /^([\-+])=\s*(\d+\.?\d*)/, stringParsers = [{
re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,
parse: function (execResult) {
return [
execResult[1],
execResult[2],
execResult[3],
execResult[4]
];
}
}, {
re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,
parse: function (execResult) {
return [
execResult[1] * 2.55,
execResult[2] * 2.55,
execResult[3] * 2.55,
execResult[4]
];
}
}, {
re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
parse: function (execResult) {
return [
parseInt(execResult[1], 16),
parseInt(execResult[2], 16),
parseInt(execResult[3], 16)
];
}
}, {
re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
parse: function (execResult) {
return [
parseInt(execResult[1] + execResult[1], 16),
parseInt(execResult[2] + execResult[2], 16),
parseInt(execResult[3] + execResult[3], 16)
];
}
}, {
re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,
space: "hsla",
parse: function (execResult) {
return [
execResult[1],
execResult[2] / 100,
execResult[3] / 100,
execResult[4]
];
}
}], color = jQuery.Color = function (color, green, blue, alpha) {
return new jQuery.Color.fn.parse(color, green, blue, alpha);
}, spaces = {
rgba: {
props: {
red: {
idx: 0,
type: "byte"
},
green: {
idx: 1,
type: "byte"
},
blue: {
idx: 2,
type: "byte"
}
}
},
hsla: {
props: {
hue: {
idx: 0,
type: "degrees"
},
saturation: {
idx: 1,
type: "percent"
},
lightness: {
idx: 2,
type: "percent"
}
}
}
}, propTypes = {
"byte": {
floor: true,
max: 255
},
"percent": {
max: 1
},
"degrees": {
mod: 360,
floor: true
}
}, support = color.support = {}, supportElem = jQuery("<p>")[0], colors, each = jQuery.each;
supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
support.rgba = supportElem.style.backgroundColor.indexOf("rgba") > -1;
each(spaces, function (spaceName, space) {
space.cache = "_" + spaceName;
space.props.alpha = {
idx: 3,
type: "percent",
def: 1
};
});
function clamp(value, prop, allowEmpty) {
var type = propTypes[prop.type] || {};
if (value == null) {
return (allowEmpty || !prop.def) ? null : prop.def;
}
value = type.floor ? ~~value : parseFloat(value);
if (isNaN(value)) {
return prop.def;
}
if (type.mod) {
return (value + type.mod) % type.mod;
}
return 0 > value ? 0 : type.max < value ? type.max : value;
}
function stringParse(string) {
var inst = color(), rgba = inst._rgba = [];
string = string.toLowerCase();
each(stringParsers, function (i, parser) {
var parsed, match = parser.re.exec(string), values = match && parser.parse(match), spaceName = parser.space || "rgba";
if (values) {
parsed = inst[spaceName](values);
inst[spaces[spaceName].cache] = parsed[spaces[spaceName].cache];
rgba = inst._rgba = parsed._rgba;
return false;
}
});
if (rgba.length) {
if (rgba.join() === "0,0,0,0") {
jQuery.extend(rgba, colors.transparent);
}
return inst;
}
return colors[string];
}
color.fn = jQuery.extend(color.prototype, {
parse: function (red, green, blue, alpha) {
if (red === undefined) {
this._rgba = [null, null, null, null];
return this;
}
if (red.jquery || red.nodeType) {
red = jQuery(red).css(green);
green = undefined;
}
var inst = this, type = jQuery.type(red), rgba = this._rgba = [];
if (green !== undefined) {
red = [red, green, blue, alpha];
type = "array";
}
if (type === "string") {
return this.parse(stringParse(red) || colors._default);
}
if (type === "array") {
each(spaces.rgba.props, function (key, prop) {
rgba[prop.idx] = clamp(red[prop.idx], prop);
});
return this;
}
if (type === "object") {
if (red instanceof color) {
each(spaces, function (spaceName, space) {
if (red[space.cache]) {
inst[space.cache] = red[space.cache].slice();
}
});
}
else {
each(spaces, function (spaceName, space) {
var cache = space.cache;
each(space.props, function (key, prop) {
if (!inst[cache] && space.to) {
if (key === "alpha" || red[key] == null) {
return;
}
inst[cache] = space.to(inst._rgba);
}
inst[cache][prop.idx] = clamp(red[key], prop, true);
});
if (inst[cache] && $.inArray(null, inst[cache].slice(0, 3)) < 0) {
inst[cache][3] = 1;
if (space.from) {
inst._rgba = space.from(inst[cache]);
}
}
});
}
return this;
}
},
is: function (compare) {
var is = color(compare), same = true, inst = this;
each(spaces, function (_, space) {
var localCache, isCache = is[space.cache];
if (isCache) {
localCache = inst[space.cache] || space.to && space.to(inst._rgba) || [];
each(space.props, function (_, prop) {
if (isCache[prop.idx] != null) {
same = (isCache[prop.idx] === localCache[prop.idx]);
return same;
}
});
}
return same;
});
return same;
},
_space: function () {
var used = [], inst = this;
each(spaces, function (spaceName, space) {
if (inst[space.cache]) {
used.push(spaceName);
}
});
return used.pop();
},
transition: function (other, distance) {
var end = color(other), spaceName = end._space(), space = spaces[spaceName], startColor = this.alpha() === 0 ? color("transparent") : this, start = startColor[space.cache] || space.to(startColor._rgba), result = start.slice();
end = end[space.cache];
each(space.props, function (key, prop) {
var index = prop.idx, startValue = start[index], endValue = end[index], type = propTypes[prop.type] || {};
if (endValue === null) {
return;
}
if (startValue === null) {
result[index] = endValue;
}
else {
if (type.mod) {
if (endValue - startValue > type.mod / 2) {
startValue += type.mod;
}
else if (startValue - endValue > type.mod / 2) {
startValue -= type.mod;
}
}
result[index] = clamp((endValue - startValue) * distance + startValue, prop);
}
});
return this[spaceName](result);
},
blend: function (opaque) {
if (this._rgba[3] === 1) {
return this;
}
var rgb = this._rgba.slice(), a = rgb.pop(), blend = color(opaque)._rgba;
return color(jQuery.map(rgb, function (v, i) {
return (1 - a) * blend[i] + a * v;
}));
},
toRgbaString: function () {
var prefix = "rgba(", rgba = jQuery.map(this._rgba, function (v, i) {
return v == null ? (i > 2 ? 1 : 0) : v;
});
if (rgba[3] === 1) {
rgba.pop();
prefix = "rgb(";
}
return prefix + rgba.join() + ")";
},
toHslaString: function () {
var prefix = "hsla(", hsla = jQuery.map(this.hsla(), function (v, i) {
if (v == null) {
v = i > 2 ? 1 : 0;
}
if (i && i < 3) {
v = Math.round(v * 100) + "%";
}
return v;
});
if (hsla[3] === 1) {
hsla.pop();
prefix = "hsl(";
}
return prefix + hsla.join() + ")";
},
toHexString: function (includeAlpha) {
var rgba = this._rgba.slice(), alpha = rgba.pop();
if (includeAlpha) {
rgba.push(~~(alpha * 255));
}
return "#" + jQuery.map(rgba, function (v) {
v = (v || 0).toString(16);
return v.length === 1 ? "0" + v : v;
}).join("");
},
toString: function () {
return this._rgba[3] === 0 ? "transparent" : this.toRgbaString();
}
});
color.fn.parse.prototype = color.fn;
function hue2rgb(p, q, h) {
h = (h + 1) % 1;
if (h * 6 < 1) {
return p + (q - p) * h * 6;
}
if (h * 2 < 1) {
return q;
}
if (h * 3 < 2) {
return p + (q - p) * ((2 / 3) - h) * 6;
}
return p;
}
spaces.hsla.to = function (rgba) {
if (rgba[0] == null || rgba[1] == null || rgba[2] == null) {
return [null, null, null, rgba[3]];
}
var r = rgba[0] / 255, g = rgba[1] / 255, b = rgba[2] / 255, a = rgba[3], max = Math.max(r, g, b), min = Math.min(r, g, b), diff = max - min, add = max + min, l = add * 0.5, h, s;
if (min === max) {
h = 0;
}
else if (r === max) {
h = (60 * (g - b) / diff) + 360;
}
else if (g === max) {
h = (60 * (b - r) / diff) + 120;
}
else {
h = (60 * (r - g) / diff) + 240;
}
if (l === 0 || l === 1) {
s = l;
}
else if (l <= 0.5) {
s = diff / add;
}
else {
s = diff / (2 - add);
}
return [Math.round(h) % 360, s, l, a == null ? 1 : a];
};
spaces.hsla.from = function (hsla) {
if (hsla[0] == null || hsla[1] == null || hsla[2] == null) {
return [null, null, null, hsla[3]];
}
var h = hsla[0] / 360, s = hsla[1], l = hsla[2], a = hsla[3], q = l <= 0.5 ? l * (1 + s) : l + s - l * s, p = 2 * l - q;
return [
Math.round(hue2rgb(p, q, h + (1 / 3)) * 255),
Math.round(hue2rgb(p, q, h) * 255),
Math.round(hue2rgb(p, q, h - (1 / 3)) * 255),
a
];
};
each(spaces, function (spaceName, space) {
var props = space.props, cache = space.cache, to = space.to, from = space.from;
color.fn[spaceName] = function (value) {
if (to && !this[cache]) {
this[cache] = to(this._rgba);
}
if (value === undefined) {
return this[cache].slice();
}
var ret, type = jQuery.type(value), arr = (type === "array" || type === "object") ? value : arguments, local = this[cache].slice();
each(props, function (key, prop) {
var val = arr[type === "object" ? key : prop.idx];
if (val == null) {
val = local[prop.idx];
}
local[prop.idx] = clamp(val, prop);
});
if (from) {
ret = color(from(local));
ret[cache] = local;
return ret;
}
else {
return color(local);
}
};
each(props, function (key, prop) {
if (color.fn[key]) {
return;
}
color.fn[key] = function (value) {
var vtype = jQuery.type(value), fn = (key === "alpha" ? (this._hsla ? "hsla" : "rgba") : spaceName), local = this[fn](), cur = local[prop.idx], match;
if (vtype === "undefined") {
return cur;
}
if (vtype === "function") {
value = value.call(this, cur);
vtype = jQuery.type(value);
}
if (value == null && prop.empty) {
return this;
}
if (vtype === "string") {
match = rplusequals.exec(value);
if (match) {
value = cur + parseFloat(match[2]) * (match[1] === "+" ? 1 : -1);
}
}
local[prop.idx] = value;
return this[fn](local);
};
});
});
each(stepHooks, function (i, hook) {
jQuery.cssHooks[hook] = {
set: function (elem, value) {
var parsed, curElem, backgroundColor = "";
if (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 (error) {
}
}
};
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));
};
});
jQuery.cssHooks.borderColor = {
expand: function (value) {
var expanded = {};
each(["Top", "Right", "Bottom", "Left"], function (i, part) {
expanded["border" + part + "Color"] = value;
});
return expanded;
}
};
colors = jQuery.Color.names = {
aqua: "#00ffff",
black: "#000000",
blue: "#0000ff",
fuchsia: "#ff00ff",
gray: "#808080",
green: "#008000",
lime: "#00ff00",
maroon: "#800000",
navy: "#000080",
olive: "#808000",
purple: "#800080",
red: "#ff0000",
silver: "#c0c0c0",
teal: "#008080",
white: "#ffffff",
yellow: "#ffff00",
transparent: [null, null, null, 0],
_default: "#ffffff"
};
})(jQuery);
(function () {
var classAnimationActions = ["add", "remove", "toggle"], shorthandStyles = {
border: 1,
borderBottom: 1,
borderColor: 1,
borderLeft: 1,
borderRight: 1,
borderTop: 1,
borderWidth: 1,
margin: 1,
padding: 1
};
$.each(["borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle"], function (_, prop) {
$.fx.step[prop] = function (fx) {
if (fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr) {
jQuery.style(fx.elem, prop, fx.end);
fx.setAttr = true;
}
};
});
function getElementStyles() {
var style = this.ownerDocument.defaultView ?
this.ownerDocument.defaultView.getComputedStyle(this, null) :
this.currentStyle, newStyle = {}, key, len;
if (style && style.length && style[0] && style[style[0]]) {
len = style.length;
while (len--) {
key = style[len];
if (typeof style[key] === "string") {
newStyle[$.camelCase(key)] = style[key];
}
}
}
else {
for (key in style) {
if (typeof style[key] === "string") {
newStyle[key] = style[key];
}
}
}
return newStyle;
}
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;
}
$.effects.animateClass = function (value, duration, easing, callback) {
var o = $.speed(duration, easing, callback);
return this.queue(function () {
var animated = $(this), baseClass = animated.attr("class") || "", applyClassChange, allAnimations = o.children ? animated.find("*").addBack() : animated;
allAnimations = allAnimations.map(function () {
var el = $(this);
return {
el: el,
start: getElementStyles.call(this)
};
});
applyClassChange = function () {
$.each(classAnimationActions, function (i, action) {
if (value[action]) {
animated[action + "Class"](value[action]);
}
});
};
applyClassChange();
allAnimations = allAnimations.map(function () {
this.end = getElementStyles.call(this.el[0]);
this.diff = styleDifference(this.start, this.end);
return this;
});
animated.attr("class", baseClass);
allAnimations = allAnimations.map(function () {
var styleInfo = this, dfd = $.Deferred(), opts = jQuery.extend({}, o, {
queue: false,
complete: function () {
dfd.resolve(styleInfo);
}
});
this.el.animate(this.diff, opts);
return dfd.promise();
});
$.when.apply($, allAnimations.get()).done(function () {
applyClassChange();
$.each(arguments, function () {
var el = this.el;
$.each(this.diff, function (key) {
el.css(key, '');
});
});
o.complete.call(animated[0]);
});
});
};
$.fn.extend({
_addClass: $.fn.addClass,
addClass: function (classNames, speed, easing, callback) {
return speed ?
$.effects.animateClass.call(this, { add: classNames }, speed, easing, callback) :
this._addClass(classNames);
},
_removeClass: $.fn.removeClass,
removeClass: function (classNames, speed, easing, callback) {
return speed ?
$.effects.animateClass.call(this, { remove: classNames }, speed, easing, callback) :
this._removeClass(classNames);
},
_toggleClass: $.fn.toggleClass,
toggleClass: function (classNames, force, speed, easing, callback) {
if (typeof force === "boolean" || force === undefined) {
if (!speed) {
return this._toggleClass(classNames, force);
}
else {
return $.effects.animateClass.call(this, (force ? { add: classNames } : { remove: classNames }), speed, easing, callback);
}
}
else {
return $.effects.animateClass.call(this, { toggle: classNames }, force, speed, easing);
}
},
switchClass: function (remove, add, speed, easing, callback) {
return $.effects.animateClass.call(this, {
add: add,
remove: remove
}, speed, easing, callback);
}
});
})();
(function () {
$.extend($.effects, {
version: "1.9.2",
save: function (element, set) {
for (var i = 0; i < set.length; i++) {
if (set[i] !== null) {
element.data(dataSpace + set[i], element[0].style[set[i]]);
}
}
},
restore: function (element, set) {
var val, i;
for (i = 0; i < set.length; i++) {
if (set[i] !== null) {
val = element.data(dataSpace + set[i]);
if (val === undefined) {
val = "";
}
element.css(set[i], val);
}
}
},
setMode: function (el, mode) {
if (mode === "toggle") {
mode = el.is(":hidden") ? "show" : "hide";
}
return mode;
},
getBaseline: function (origin, original) {
var y, x;
switch (origin[0]) {
case "top":
y = 0;
break;
case "middle":
y = 0.5;
break;
case "bottom":
y = 1;
break;
default: y = origin[0] / original.height;
}
switch (origin[1]) {
case "left":
x = 0;
break;
case "center":
x = 0.5;
break;
case "right":
x = 1;
break;
default: x = origin[1] / original.width;
}
return {
x: x,
y: y
};
},
createWrapper: function (element) {
if (element.parent().is(".ui-effects-wrapper")) {
return element.parent();
}
var props = {
width: element.outerWidth(true),
height: element.outerHeight(true),
"float": element.css("float")
}, wrapper = $("<div></div>")
.addClass("ui-effects-wrapper")
.css({
fontSize: "100%",
background: "transparent",
border: "none",
margin: 0,
padding: 0
}), size = {
width: element.width(),
height: element.height()
}, active = document.activeElement;
try {
active.id;
}
catch (e) {
active = document.body;
}
element.wrap(wrapper);
if (element[0] === active || $.contains(element[0], active)) {
$(active).focus();
}
wrapper = element.parent();
if (element.css("position") === "static") {
wrapper.css({ position: "relative" });
element.css({ position: "relative" });
}
else {
$.extend(props, {
position: element.css("position"),
zIndex: element.css("z-index")
});
$.each(["top", "left", "bottom", "right"], function (i, pos) {
props[pos] = element.css(pos);
if (isNaN(parseInt(props[pos], 10))) {
props[pos] = "auto";
}
});
element.css({
position: "relative",
top: 0,
left: 0,
right: "auto",
bottom: "auto"
});
}
element.css(size);
return wrapper.css(props).show();
},
removeWrapper: function (element) {
var active = document.activeElement;
if (element.parent().is(".ui-effects-wrapper")) {
element.parent().replaceWith(element);
if (element[0] === active || $.contains(element[0], active)) {
$(active).focus();
}
}
return element;
},
setTransition: function (element, list, factor, value) {
value = value || {};
$.each(list, function (i, x) {
var unit = element.cssUnit(x);
if (unit[0] > 0) {
value[x] = unit[0] * factor + unit[1];
}
});
return value;
}
});
function _normalizeArguments(effect, options, speed, callback) {
if ($.isPlainObject(effect)) {
options = effect;
effect = effect.effect;
}
effect = { effect: effect };
if (options == null) {
options = {};
}
if (typeof options === 'function') {
callback = options;
speed = null;
options = {};
}
if (typeof options === "number" || $.fx.speeds[options]) {
callback = speed;
speed = options;
options = {};
}
if (typeof speed === 'function') {
callback = speed;
speed = null;
}
if (options) {
$.extend(effect, options);
}
speed = speed || options.duration;
effect.duration = $.fx.off ? 0 :
typeof speed === "number" ? speed :
speed in $.fx.speeds ? $.fx.speeds[speed] :
$.fx.speeds._default;
effect.complete = callback || options.complete;
return effect;
}
function standardSpeed(speed) {
if (!speed || typeof speed === "number" || $.fx.speeds[speed]) {
return true;
}
if (typeof speed === "string" && !$.effects.effect[speed]) {
if (backCompat && $.effects[speed]) {
return false;
}
return true;
}
return false;
}
$.fn.extend({
effect: function () {
var args = _normalizeArguments.apply(this, arguments), mode = args.mode, queue = args.queue, effectMethod = $.effects.effect[args.effect], oldEffectMethod = !effectMethod && backCompat && $.effects[args.effect];
if ($.fx.off || !(effectMethod || oldEffectMethod)) {
if (mode) {
return this[mode](args.duration, args.complete);
}
else {
return this.each(function () {
if (args.complete) {
args.complete.call(this);
}
});
}
}
function run(next) {
var elem = $(this), complete = args.complete, mode = args.mode;
function done() {
if (typeof complete === 'function') {
complete.call(elem[0]);
}
if (typeof next === 'function') {
next();
}
}
if (elem.is(":hidden") ? mode === "hide" : mode === "show") {
done();
}
else {
effectMethod.call(elem[0], args, done);
}
}
if (effectMethod) {
return queue === false ? this.each(run) : this.queue(queue || "fx", run);
}
else {
return oldEffectMethod.call(this, {
options: args,
duration: args.duration,
callback: args.complete,
mode: args.mode
});
}
},
_show: $.fn.show,
show: function (speed) {
if (standardSpeed(speed)) {
return this._show.apply(this, arguments);
}
else {
var args = _normalizeArguments.apply(this, arguments);
args.mode = "show";
return this.effect.call(this, args);
}
},
_hide: $.fn.hide,
hide: function (speed) {
if (standardSpeed(speed)) {
return this._hide.apply(this, arguments);
}
else {
var args = _normalizeArguments.apply(this, arguments);
args.mode = "hide";
return this.effect.call(this, args);
}
},
__toggle: $.fn.toggle,
toggle: function (speed) {
if (standardSpeed(speed) || typeof speed === "boolean" || typeof speed === 'function') {
return this.__toggle.apply(this, arguments);
}
else {
var args = _normalizeArguments.apply(this, arguments);
args.mode = "toggle";
return this.effect.call(this, args);
}
},
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;
}
});
})();
(function () {
var baseEasings = {};
$.each(["Quad", "Cubic", "Quart", "Quint", "Expo"], function (i, name) {
baseEasings[name] = function (p) {
return Math.pow(p, i + 2);
};
});
$.extend(baseEasings, {
Sine: function (p) {
return 1 - Math.cos(p * Math.PI / 2);
},
Circ: function (p) {
return 1 - Math.sqrt(1 - p * p);
},
Elastic: function (p) {
return p === 0 || p === 1 ? p :
-Math.pow(2, 8 * (p - 1)) * Math.sin(((p - 1) * 80 - 7.5) * Math.PI / 15);
},
Back: function (p) {
return p * p * (3 * p - 2);
},
Bounce: function (p) {
var pow2, bounce = 4;
while (p < ((pow2 = Math.pow(2, --bounce)) - 1) / 11) { }
return 1 / Math.pow(4, 3 - bounce) - 7.5625 * Math.pow((pow2 * 3 - 2) / 22 - p, 2);
}
});
$.each(baseEasings, function (name, easeIn) {
$.easing["easeIn" + name] = easeIn;
$.easing["easeOut" + name] = function (p) {
return 1 - easeIn(1 - p);
};
$.easing["easeInOut" + name] = function (p) {
return p < 0.5 ?
easeIn(p * 2) / 2 :
1 - easeIn(p * -2 + 2) / 2;
};
});
})();
})(jQuery));
(function ($, undefined) {
var uid = 0, hideProps = {}, showProps = {};
hideProps.height = hideProps.paddingTop = hideProps.paddingBottom =
hideProps.borderTopWidth = hideProps.borderBottomWidth = "hide";
showProps.height = showProps.paddingTop = showProps.paddingBottom =
showProps.borderTopWidth = showProps.borderBottomWidth = "show";
$.widget("ui.accordion", {
version: "1.9.2",
options: {
active: 0,
animate: {},
collapsible: false,
event: "click",
header: "> li > :first-child,> :not(li):even",
heightStyle: "auto",
icons: {
activeHeader: "ui-icon-triangle-1-s",
header: "ui-icon-triangle-1-e"
},
activate: null,
beforeActivate: null
},
_create: function () {
var accordionId = this.accordionId = "ui-accordion-" +
(this.element.attr("id") || ++uid), options = this.options;
this.prevShow = this.prevHide = $();
this.element.addClass("ui-accordion ui-widget ui-helper-reset");
this.headers = this.element.find(options.header)
.addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all");
this._hoverable(this.headers);
this._focusable(this.headers);
this.headers.next()
.addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom")
.hide();
if (!options.collapsible && (options.active === false || options.active == null)) {
options.active = 0;
}
if (options.active < 0) {
options.active += this.headers.length;
}
this.active = this._findActive(options.active)
.addClass("ui-accordion-header-active ui-state-active")
.toggleClass("ui-corner-all ui-corner-top");
this.active.next()
.addClass("ui-accordion-content-active")
.show();
this._createIcons();
this.refresh();
this.element.attr("role", "tablist");
this.headers
.attr("role", "tab")
.each(function (i) {
var header = $(this), headerId = header.attr("id"), panel = header.next(), panelId = panel.attr("id");
if (!headerId) {
headerId = accordionId + "-header-" + i;
header.attr("id", headerId);
}
if (!panelId) {
panelId = accordionId + "-panel-" + i;
panel.attr("id", panelId);
}
header.attr("aria-controls", panelId);
panel.attr("aria-labelledby", headerId);
})
.next()
.attr("role", "tabpanel");
this.headers
.not(this.active)
.attr({
"aria-selected": "false",
tabIndex: -1
})
.next()
.attr({
"aria-expanded": "false",
"aria-hidden": "true"
})
.hide();
if (!this.active.length) {
this.headers.eq(0).attr("tabIndex", 0);
}
else {
this.active.attr({
"aria-selected": "true",
tabIndex: 0
})
.next()
.attr({
"aria-expanded": "true",
"aria-hidden": "false"
});
}
this._on(this.headers, { keydown: "_keydown" });
this._on(this.headers.next(), { keydown: "_panelKeyDown" });
this._setupEvents(options.event);
},
_getCreateEventData: function () {
return {
header: this.active,
content: !this.active.length ? $() : this.active.next()
};
},
_createIcons: function () {
var icons = this.options.icons;
if (icons) {
$("<span>")
.addClass("ui-accordion-header-icon ui-icon " + icons.header)
.prependTo(this.headers);
this.active.children(".ui-accordion-header-icon")
.removeClass(icons.header)
.addClass(icons.activeHeader);
this.headers.addClass("ui-accordion-icons");
}
},
_destroyIcons: function () {
this.headers
.removeClass("ui-accordion-icons")
.children(".ui-accordion-header-icon")
.remove();
},
_destroy: function () {
var contents;
this.element
.removeClass("ui-accordion ui-widget ui-helper-reset")
.removeAttr("role");
this.headers
.removeClass("ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top")
.removeAttr("role")
.removeAttr("aria-selected")
.removeAttr("aria-controls")
.removeAttr("tabIndex")
.each(function () {
if (/^ui-accordion/.test(this.id)) {
this.removeAttribute("id");
}
});
this._destroyIcons();
contents = this.headers.next()
.css("display", "")
.removeAttr("role")
.removeAttr("aria-expanded")
.removeAttr("aria-hidden")
.removeAttr("aria-labelledby")
.removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled")
.each(function () {
if (/^ui-accordion/.test(this.id)) {
this.removeAttribute("id");
}
});
if (this.options.heightStyle !== "content") {
contents.css("height", "");
}
},
_setOption: function (key, value) {
if (key === "active") {
this._activate(value);
return;
}
if (key === "event") {
if (this.options.event) {
this._off(this.headers, this.options.event);
}
this._setupEvents(value);
}
this._super(key, value);
if (key === "collapsible" && !value && this.options.active === false) {
this._activate(0);
}
if (key === "icons") {
this._destroyIcons();
if (value) {
this._createIcons();
}
}
if (key === "disabled") {
this.headers.add(this.headers.next())
.toggleClass("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.focus();
event.preventDefault();
}
},
_panelKeyDown: function (event) {
if (event.keyCode === $.ui.keyCode.UP && event.ctrlKey) {
$(event.currentTarget).prev().focus();
}
},
refresh: function () {
var maxHeight, overflow, heightStyle = this.options.heightStyle, parent = this.element.parent();
if (heightStyle === "fill") {
if (!$.support.minHeight) {
overflow = parent.css("overflow");
parent.css("overflow", "hidden");
}
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);
});
if (overflow) {
parent.css("overflow", overflow);
}
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 () {
maxHeight = Math.max(maxHeight, $(this).css("height", "").height());
})
.height(maxHeight);
}
},
_activate: function (index) {
var active = this._findActive(index)[0];
if (active === this.active[0]) {
return;
}
active = active || this.active[0];
this._eventHandler({
target: active,
currentTarget: active,
preventDefault: $.noop
});
},
_findActive: function (selector) {
return typeof selector === "number" ? this.headers.eq(selector) : $();
},
_setupEvents: function (event) {
var events = {};
if (!event) {
return;
}
$.each(event.split(" "), function (index, eventName) {
events[eventName] = "_eventHandler";
});
this._on(this.headers, events);
},
_eventHandler: function (event) {
var options = this.options, active = this.active, clicked = $(event.currentTarget), clickedIsActive = clicked[0] === active[0], collapsing = clickedIsActive && options.collapsible, toShow = collapsing ? $() : clicked.next(), toHide = active.next(), eventData = {
oldHeader: active,
oldPanel: toHide,
newHeader: collapsing ? $() : clicked,
newPanel: toShow
};
event.preventDefault();
if ((clickedIsActive && !options.collapsible) ||
(this._trigger("beforeActivate", event, eventData) === false)) {
return;
}
options.active = collapsing ? false : this.headers.index(clicked);
this.active = clickedIsActive ? $() : clicked;
this._toggle(eventData);
active.removeClass("ui-accordion-header-active ui-state-active");
if (options.icons) {
active.children(".ui-accordion-header-icon")
.removeClass(options.icons.activeHeader)
.addClass(options.icons.header);
}
if (!clickedIsActive) {
clicked
.removeClass("ui-corner-all")
.addClass("ui-accordion-header-active ui-state-active ui-corner-top");
if (options.icons) {
clicked.children(".ui-accordion-header-icon")
.removeClass(options.icons.header)
.addClass(options.icons.activeHeader);
}
clicked
.next()
.addClass("ui-accordion-content-active");
}
},
_toggle: function (data) {
var toShow = data.newPanel, toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
this.prevShow.add(this.prevHide).stop(true, true);
this.prevShow = toShow;
this.prevHide = toHide;
if (this.options.animate) {
this._animate(toShow, toHide, data);
}
else {
toHide.hide();
toShow.show();
this._toggleComplete(data);
}
toHide.attr({
"aria-expanded": "false",
"aria-hidden": "true"
});
toHide.prev().attr("aria-selected", "false");
if (toShow.length && toHide.length) {
toHide.prev().attr("tabIndex", -1);
}
else if (toShow.length) {
this.headers.filter(function () {
return $(this).attr("tabIndex") === 0;
})
.attr("tabIndex", -1);
}
toShow
.attr({
"aria-expanded": "true",
"aria-hidden": "false"
})
.prev()
.attr({
"aria-selected": "true",
tabIndex: 0
});
},
_animate: function (toShow, toHide, data) {
var total, easing, duration, that = this, adjust = 0, down = toShow.length &&
(!toHide.length || (toShow.index() < toHide.index())), animate = this.options.animate || {}, options = down && animate.down || animate, complete = function () {
that._toggleComplete(data);
};
if (typeof options === "number") {
duration = options;
}
if (typeof options === "string") {
easing = options;
}
easing = easing || options.easing || animate.easing;
duration = duration || options.duration || animate.duration;
if (!toHide.length) {
return toShow.animate(showProps, duration, easing, complete);
}
if (!toShow.length) {
return toHide.animate(hideProps, duration, easing, complete);
}
total = toShow.show().outerHeight();
toHide.animate(hideProps, {
duration: duration,
easing: easing,
step: function (now, fx) {
fx.now = Math.round(now);
}
});
toShow
.hide()
.animate(showProps, {
duration: duration,
easing: easing,
complete: complete,
step: function (now, fx) {
fx.now = Math.round(now);
if (fx.prop !== "height") {
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;
toHide
.removeClass("ui-accordion-content-active")
.prev()
.removeClass("ui-corner-top")
.addClass("ui-corner-all");
if (toHide.length) {
toHide.parent()[0].className = toHide.parent()[0].className;
}
this._trigger("activate", null, data);
}
});
if ($.uiBackCompat !== false) {
(function ($, prototype) {
$.extend(prototype.options, {
navigation: false,
navigationFilter: function () {
return this.href.toLowerCase() === location.href.toLowerCase();
}
});
var _create = prototype._create;
prototype._create = function () {
if (this.options.navigation) {
var that = this, headers = this.element.find(this.options.header), content = headers.next(), current = headers.add(content)
.find("a")
.filter(this.options.navigationFilter)[0];
if (current) {
headers.add(content).each(function (index) {
if ($.contains(this, current)) {
that.options.active = Math.floor(index / 2);
return false;
}
});
}
}
_create.call(this);
};
}(jQuery, jQuery.ui.accordion.prototype));
(function ($, prototype) {
$.extend(prototype.options, {
heightStyle: null,
autoHeight: true,
clearStyle: false,
fillSpace: false
});
var _create = prototype._create, _setOption = prototype._setOption;
$.extend(prototype, {
_create: function () {
this.options.heightStyle = this.options.heightStyle ||
this._mergeHeightStyle();
_create.call(this);
},
_setOption: function (key) {
if (key === "autoHeight" || key === "clearStyle" || key === "fillSpace") {
this.options.heightStyle = this._mergeHeightStyle();
}
_setOption.apply(this, arguments);
},
_mergeHeightStyle: function () {
var options = this.options;
if (options.fillSpace) {
return "fill";
}
if (options.clearStyle) {
return "content";
}
if (options.autoHeight) {
return "auto";
}
}
});
}(jQuery, jQuery.ui.accordion.prototype));
(function ($, prototype) {
$.extend(prototype.options.icons, {
activeHeader: null,
headerSelected: "ui-icon-triangle-1-s"
});
var _createIcons = prototype._createIcons;
prototype._createIcons = function () {
if (this.options.icons) {
this.options.icons.activeHeader = this.options.icons.activeHeader ||
this.options.icons.headerSelected;
}
_createIcons.call(this);
};
}(jQuery, jQuery.ui.accordion.prototype));
(function ($, prototype) {
prototype.activate = prototype._activate;
var _findActive = prototype._findActive;
prototype._findActive = function (index) {
if (index === -1) {
index = false;
}
if (index && typeof index !== "number") {
index = this.headers.index(this.headers.filter(index));
if (index === -1) {
index = false;
}
}
return _findActive.call(this, index);
};
}(jQuery, jQuery.ui.accordion.prototype));
jQuery.ui.accordion.prototype.resize = jQuery.ui.accordion.prototype.refresh;
(function ($, prototype) {
$.extend(prototype.options, {
change: null,
changestart: null
});
var _trigger = prototype._trigger;
prototype._trigger = function (type, event, data) {
var ret = _trigger.apply(this, arguments);
if (!ret) {
return false;
}
if (type === "beforeActivate") {
ret = _trigger.call(this, "changestart", event, {
oldHeader: data.oldHeader,
oldContent: data.oldPanel,
newHeader: data.newHeader,
newContent: data.newPanel
});
}
else if (type === "activate") {
ret = _trigger.call(this, "change", event, {
oldHeader: data.oldHeader,
oldContent: data.oldPanel,
newHeader: data.newHeader,
newContent: data.newPanel
});
}
return ret;
};
}(jQuery, jQuery.ui.accordion.prototype));
(function ($, prototype) {
$.extend(prototype.options, {
animate: null,
animated: "slide"
});
var _create = prototype._create;
prototype._create = function () {
var options = this.options;
if (options.animate === null) {
if (!options.animated) {
options.animate = false;
}
else if (options.animated === "slide") {
options.animate = 300;
}
else if (options.animated === "bounceslide") {
options.animate = {
duration: 200,
down: {
easing: "easeOutBounce",
duration: 1000
}
};
}
else {
options.animate = options.animated;
}
}
_create.call(this);
};
}(jQuery, jQuery.ui.accordion.prototype));
}
})(jQuery);
(function ($, undefined) {
var requestIndex = 0;
$.widget("ui.autocomplete", {
version: "1.9.2",
defaultElement: "<input>",
options: {
appendTo: "body",
autoFocus: false,
delay: 300,
minLength: 1,
position: {
my: "left top",
at: "left bottom",
collision: "none"
},
source: null,
change: null,
close: null,
focus: null,
open: null,
response: null,
search: null,
select: null
},
pending: 0,
_create: function () {
var suppressKeyPress, suppressKeyPressRepeat, suppressInput;
this.isMultiLine = this._isMultiLine();
this.valueMethod = this.element[this.element.is("input,textarea") ? "val" : "text"];
this.isNewMenu = true;
this.element
.addClass("ui-autocomplete-input")
.attr("autocomplete", "off");
this._on(this.element, {
keydown: function (event) {
if (this.element.prop("readOnly")) {
suppressKeyPress = true;
suppressInput = true;
suppressKeyPressRepeat = true;
return;
}
suppressKeyPress = false;
suppressInput = false;
suppressKeyPressRepeat = false;
var keyCode = $.ui.keyCode;
switch (event.keyCode) {
case keyCode.PAGE_UP:
suppressKeyPress = true;
this._move("previousPage", event);
break;
case keyCode.PAGE_DOWN:
suppressKeyPress = true;
this._move("nextPage", event);
break;
case keyCode.UP:
suppressKeyPress = true;
this._keyEvent("previous", event);
break;
case keyCode.DOWN:
suppressKeyPress = true;
this._keyEvent("next", event);
break;
case keyCode.ENTER:
case keyCode.NUMPAD_ENTER:
if (this.menu.active) {
suppressKeyPress = true;
event.preventDefault();
this.menu.select(event);
}
break;
case keyCode.TAB:
if (this.menu.active) {
this.menu.select(event);
}
break;
case keyCode.ESCAPE:
if (this.menu.element.is(":visible")) {
this._value(this.term);
this.close(event);
event.preventDefault();
}
break;
default:
suppressKeyPressRepeat = true;
this._searchTimeout(event);
break;
}
},
keypress: function (event) {
if (suppressKeyPress) {
suppressKeyPress = false;
event.preventDefault();
return;
}
if (suppressKeyPressRepeat) {
return;
}
var keyCode = $.ui.keyCode;
switch (event.keyCode) {
case keyCode.PAGE_UP:
this._move("previousPage", event);
break;
case keyCode.PAGE_DOWN:
this._move("nextPage", event);
break;
case keyCode.UP:
this._keyEvent("previous", event);
break;
case keyCode.DOWN:
this._keyEvent("next", event);
break;
}
},
input: function (event) {
if (suppressInput) {
suppressInput = false;
event.preventDefault();
return;
}
this._searchTimeout(event);
},
focus: function () {
this.selectedItem = null;
this.previous = this._value();
},
blur: function (event) {
if (this.cancelBlur) {
delete this.cancelBlur;
return;
}
clearTimeout(this.searching);
this.close(event);
this._change(event);
}
});
this._initSource();
this.menu = $("<ul>")
.addClass("ui-autocomplete")
.appendTo(this.document.find(this.options.appendTo || "body")[0])
.menu({
input: $(),
role: null
})
.zIndex(this.element.zIndex() + 1)
.hide()
.data("menu");
this._on(this.menu.element, {
mousedown: function (event) {
event.preventDefault();
this.cancelBlur = true;
this._delay(function () {
delete this.cancelBlur;
});
var menuElement = this.menu.element[0];
if (!$(event.target).closest(".ui-menu-item").length) {
this._delay(function () {
var that = this;
this.document.one("mousedown", function (event) {
if (event.target !== that.element[0] &&
event.target !== menuElement &&
!$.contains(menuElement, event.target)) {
that.close();
}
});
});
}
},
menufocus: function (event, ui) {
if (this.isNewMenu) {
this.isNewMenu = false;
if (event.originalEvent && /^mouse/.test(event.originalEvent.type)) {
this.menu.blur();
this.document.one("mousemove", function () {
$(event.target).trigger(event.originalEvent);
});
return;
}
}
var item = ui.item.data("ui-autocomplete-item") || ui.item.data("item.autocomplete");
if (false !== this._trigger("focus", event, { item: item })) {
if (event.originalEvent && /^key/.test(event.originalEvent.type)) {
this._value(item.value);
}
}
else {
this.liveRegion.text(item.value);
}
},
menuselect: function (event, ui) {
var item = ui.item.data("ui-autocomplete-item") || ui.item.data("item.autocomplete"), previous = this.previous;
if (this.element[0] !== this.document[0].activeElement) {
this.element.focus();
this.previous = previous;
this._delay(function () {
this.previous = previous;
this.selectedItem = item;
});
}
if (false !== this._trigger("select", event, { item: item })) {
this._value(item.value);
}
this.term = this._value();
this.close(event);
this.selectedItem = item;
}
});
this.liveRegion = $("<span>", {
role: "status",
"aria-live": "polite"
})
.addClass("ui-helper-hidden-accessible")
.insertAfter(this.element);
if ($.fn.bgiframe) {
this.menu.element.bgiframe();
}
this._on(this.window, {
beforeunload: function () {
this.element.removeAttr("autocomplete");
}
});
},
_destroy: function () {
clearTimeout(this.searching);
this.element
.removeClass("ui-autocomplete-input")
.removeAttr("autocomplete");
this.menu.element.remove();
this.liveRegion.remove();
},
_setOption: function (key, value) {
this._super(key, value);
if (key === "source") {
this._initSource();
}
if (key === "appendTo") {
this.menu.element.appendTo(this.document.find(value || "body")[0]);
}
if (key === "disabled" && value && this.xhr) {
this.xhr.abort();
}
},
_isMultiLine: function () {
if (this.element.is("textarea")) {
return true;
}
if (this.element.is("input")) {
return false;
}
return this.element.prop("isContentEditable");
},
_initSource: function () {
var array, url, that = this;
if (Array.isArray(this.options.source)) {
array = this.options.source;
this.source = function (request, response) {
response($.ui.autocomplete.filter(array, request.term));
};
}
else if (typeof this.options.source === "string") {
url = this.options.source;
this.source = function (request, response) {
if (that.xhr) {
that.xhr.abort();
}
that.xhr = $.ajax({
url: url,
data: request,
dataType: "json",
success: function (data) {
response(data);
},
error: function () {
response([]);
}
});
};
}
else {
this.source = this.options.source;
}
},
_searchTimeout: function (event) {
clearTimeout(this.searching);
this.searching = this._delay(function () {
if (this.term !== this._value()) {
this.selectedItem = null;
this.search(null, event);
}
}, this.options.delay);
},
search: function (value, event) {
value = value != null ? value : this._value();
this.term = this._value();
if (value.length < this.options.minLength) {
return this.close(event);
}
if (this._trigger("search", event) === false) {
return;
}
return this._search(value);
},
_search: function (value) {
this.pending++;
this.element.addClass("ui-autocomplete-loading");
this.cancelSearch = false;
this.source({ term: value }, this._response());
},
_response: function () {
var that = this, index = ++requestIndex;
return function (content) {
if (index === requestIndex) {
that.__response(content);
}
that.pending--;
if (!that.pending) {
that.element.removeClass("ui-autocomplete-loading");
}
};
},
__response: function (content) {
if (content) {
content = this._normalize(content);
}
this._trigger("response", null, { content: content });
if (!this.options.disabled && content && content.length && !this.cancelSearch) {
this._suggest(content);
this._trigger("open");
}
else {
this._close();
}
},
close: function (event) {
this.cancelSearch = true;
this._close(event);
},
_close: function (event) {
if (this.menu.element.is(":visible")) {
this.menu.element.hide();
this.menu.blur();
this.isNewMenu = true;
this._trigger("close", event);
}
},
_change: function (event) {
if (this.previous !== this._value()) {
this._trigger("change", event, { item: this.selectedItem });
}
},
_normalize: function (items) {
if (items.length && items[0].label && items[0].value) {
return items;
}
return $.map(items, function (item) {
if (typeof item === "string") {
return {
label: item,
value: item
};
}
return $.extend({
label: item.label || item.value,
value: item.value || item.label
}, item);
});
},
_suggest: function (items) {
var ul = this.menu.element
.empty()
.zIndex(this.element.zIndex() + 1);
this._renderMenu(ul, items);
this.menu.refresh();
ul.show();
this._resizeMenu();
ul.position($.extend({
of: this.element
}, this.options.position));
if (this.options.autoFocus) {
this.menu.next();
}
},
_resizeMenu: function () {
var ul = this.menu.element;
ul.outerWidth(Math.max(ul.width("").outerWidth() + 1, this.element.outerWidth()));
},
_renderMenu: function (ul, items) {
var that = this;
$.each(items, function (index, item) {
that._renderItemData(ul, item);
});
},
_renderItemData: function (ul, item) {
return this._renderItem(ul, item).data("ui-autocomplete-item", item);
},
_renderItem: function (ul, item) {
return $("<li>")
.append($("<a>").text(item.label))
.appendTo(ul);
},
_move: function (direction, event) {
if (!this.menu.element.is(":visible")) {
this.search(null, event);
return;
}
if (this.menu.isFirstItem() && /^previous/.test(direction) ||
this.menu.isLastItem() && /^next/.test(direction)) {
this._value(this.term);
this.menu.blur();
return;
}
this.menu[direction](event);
},
widget: function () {
return this.menu.element;
},
_value: function () {
return this.valueMethod.apply(this.element, arguments);
},
_keyEvent: function (keyEvent, event) {
if (!this.isMultiLine || this.menu.element.is(":visible")) {
this._move(keyEvent, event);
event.preventDefault();
}
}
});
$.extend($.ui.autocomplete, {
escapeRegex: function (value) {
return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
},
filter: function (array, term) {
var matcher = new RegExp($.ui.autocomplete.escapeRegex(term), "i");
return $.grep(array, function (value) {
return matcher.test(value.label || value.value || value);
});
}
});
$.widget("ui.autocomplete", $.ui.autocomplete, {
options: {
messages: {
noResults: "No search results.",
results: function (amount) {
return amount + (amount > 1 ? " results are" : " result is") +
" available, use up and down arrow keys to navigate.";
}
}
},
__response: function (content) {
var message;
this._superApply(arguments);
if (this.options.disabled || this.cancelSearch) {
return;
}
if (content && content.length) {
message = this.options.messages.results(content.length);
}
else {
message = this.options.messages.noResults;
}
this.liveRegion.text(message);
}
});
}(jQuery));
(function ($, undefined) {
var lastActive, startXPos, startYPos, clickDragged, baseClasses = "ui-button ui-widget ui-state-default ui-corner-all", stateClasses = "ui-state-hover ui-state-active ", typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only", formResetHandler = function () {
var buttons = $(this).find(":ui-button");
setTimeout(function () {
buttons.button("refresh");
}, 1);
}, radioGroup = function (radio) {
var name = radio.name, form = radio.form, radios = $([]);
if (name) {
if (form) {
radios = $(form).find("[name='" + name + "']");
}
else {
radios = $("[name='" + name + "']", radio.ownerDocument)
.filter(function () {
return !this.form;
});
}
}
return radios;
};
$.widget("ui.button", {
version: "1.9.2",
defaultElement: "<button>",
options: {
disabled: null,
text: true,
label: null,
icons: {
primary: null,
secondary: null
}
},
_create: function () {
this.element.closest("form")
.off("reset" + this.eventNamespace)
.on("reset" + this.eventNamespace, formResetHandler);
if (typeof this.options.disabled !== "boolean") {
this.options.disabled = !!this.element.prop("disabled");
}
else {
this.element.prop("disabled", this.options.disabled);
}
this._determineButtonType();
this.hasTitle = !!this.buttonElement.attr("title");
var that = this, options = this.options, toggleButton = this.type === "checkbox" || this.type === "radio", activeClass = !toggleButton ? "ui-state-active" : "", focusClass = "ui-state-focus";
if (options.label === null) {
options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
}
this._hoverable(this.buttonElement);
this.buttonElement
.addClass(baseClasses)
.attr("role", "button")
.on("mouseenter" + this.eventNamespace, function () {
if (options.disabled) {
return;
}
if (this === lastActive) {
$(this).addClass("ui-state-active");
}
})
.on("mouseleave" + this.eventNamespace, function () {
if (options.disabled) {
return;
}
$(this).removeClass(activeClass);
})
.on("click" + this.eventNamespace, function (event) {
if (options.disabled) {
event.preventDefault();
event.stopImmediatePropagation();
}
});
this.element
.on("focus" + this.eventNamespace, function () {
that.buttonElement.addClass(focusClass);
})
.on("blur" + this.eventNamespace, function () {
that.buttonElement.removeClass(focusClass);
});
if (toggleButton) {
this.element.on("change" + this.eventNamespace, function () {
if (clickDragged) {
return;
}
that.refresh();
});
this.buttonElement
.on("mousedown" + this.eventNamespace, function (event) {
if (options.disabled) {
return;
}
clickDragged = false;
startXPos = event.pageX;
startYPos = event.pageY;
})
.on("mouseup" + this.eventNamespace, function (event) {
if (options.disabled) {
return;
}
if (startXPos !== event.pageX || startYPos !== event.pageY) {
clickDragged = true;
}
});
}
if (this.type === "checkbox") {
this.buttonElement.on("click" + this.eventNamespace, function () {
if (options.disabled || clickDragged) {
return false;
}
$(this).toggleClass("ui-state-active");
that.buttonElement.attr("aria-pressed", that.element[0].checked);
});
}
else if (this.type === "radio") {
this.buttonElement.on("click" + this.eventNamespace, function () {
if (options.disabled || clickDragged) {
return false;
}
$(this).addClass("ui-state-active");
that.buttonElement.attr("aria-pressed", "true");
var radio = that.element[0];
radioGroup(radio)
.not(radio)
.map(function () {
return $(this).button("widget")[0];
})
.removeClass("ui-state-active")
.attr("aria-pressed", "false");
});
}
else {
this.buttonElement
.on("mousedown" + this.eventNamespace, function () {
if (options.disabled) {
return false;
}
$(this).addClass("ui-state-active");
lastActive = this;
that.document.one("mouseup", function () {
lastActive = null;
});
})
.on("mouseup" + this.eventNamespace, function () {
if (options.disabled) {
return false;
}
$(this).removeClass("ui-state-active");
})
.on("keydown" + this.eventNamespace, function (event) {
if (options.disabled) {
return false;
}
if (event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER) {
$(this).addClass("ui-state-active");
}
})
.on("keyup" + this.eventNamespace, function () {
$(this).removeClass("ui-state-active");
});
if (this.buttonElement.is("a")) {
this.buttonElement.keyup(function (event) {
if (event.keyCode === $.ui.keyCode.SPACE) {
$(this).click();
}
});
}
}
this._setOption("disabled", options.disabled);
this._resetButton();
},
_determineButtonType: function () {
var ancestor, labelSelector, checked;
if (this.element.is("[type=checkbox]")) {
this.type = "checkbox";
}
else if (this.element.is("[type=radio]")) {
this.type = "radio";
}
else if (this.element.is("input")) {
this.type = "input";
}
else {
this.type = "button";
}
if (this.type === "checkbox" || this.type === "radio") {
ancestor = this.element.parents().last();
labelSelector = "label[for='" + this.element.attr("id") + "']";
this.buttonElement = ancestor.find(labelSelector);
if (!this.buttonElement.length) {
ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
this.buttonElement = ancestor.filter(labelSelector);
if (!this.buttonElement.length) {
this.buttonElement = ancestor.find(labelSelector);
}
}
this.element.addClass("ui-helper-hidden-accessible");
checked = this.element.is(":checked");
if (checked) {
this.buttonElement.addClass("ui-state-active");
}
this.buttonElement.prop("aria-pressed", checked);
}
else {
this.buttonElement = this.element;
}
},
widget: function () {
return this.buttonElement;
},
_destroy: function () {
this.element
.removeClass("ui-helper-hidden-accessible");
this.buttonElement
.removeClass(baseClasses + " " + stateClasses + " " + typeClasses)
.removeAttr("role")
.removeAttr("aria-pressed")
.html(this.buttonElement.find(".ui-button-text").html());
if (!this.hasTitle) {
this.buttonElement.removeAttr("title");
}
},
_setOption: function (key, value) {
this._super(key, value);
if (key === "disabled") {
if (value) {
this.element.prop("disabled", true);
}
else {
this.element.prop("disabled", false);
}
return;
}
this._resetButton();
},
refresh: function () {
var isDisabled = this.element.is("input, button") ? this.element.is(":disabled") : this.element.hasClass("ui-button-disabled");
if (isDisabled !== this.options.disabled) {
this._setOption("disabled", isDisabled);
}
if (this.type === "radio") {
radioGroup(this.element[0]).each(function () {
if ($(this).is(":checked")) {
$(this).button("widget")
.addClass("ui-state-active")
.attr("aria-pressed", "true");
}
else {
$(this).button("widget")
.removeClass("ui-state-active")
.attr("aria-pressed", "false");
}
});
}
else if (this.type === "checkbox") {
if (this.element.is(":checked")) {
this.buttonElement
.addClass("ui-state-active")
.attr("aria-pressed", "true");
}
else {
this.buttonElement
.removeClass("ui-state-active")
.attr("aria-pressed", "false");
}
}
},
_resetButton: function () {
if (this.type === "input") {
if (this.options.label) {
this.element.val(this.options.label);
}
return;
}
var buttonElement = this.buttonElement.removeClass(typeClasses), buttonText = $("<span></span>", this.document[0])
.addClass("ui-button-text")
.html(this.options.label)
.appendTo(buttonElement.empty())
.text(), icons = this.options.icons, multipleIcons = icons.primary && icons.secondary, buttonClasses = [];
if (icons.primary || icons.secondary) {
if (this.options.text) {
buttonClasses.push("ui-button-text-icon" + (multipleIcons ? "s" : (icons.primary ? "-primary" : "-secondary")));
}
if (icons.primary) {
buttonElement.prepend("<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>");
}
if (icons.secondary) {
buttonElement.append("<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>");
}
if (!this.options.text) {
buttonClasses.push(multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only");
if (!this.hasTitle) {
buttonElement.attr("title", buttonText.trim());
}
}
}
else {
buttonClasses.push("ui-button-text-only");
}
buttonElement.addClass(buttonClasses.join(" "));
}
});
$.widget("ui.buttonset", {
version: "1.9.2",
options: {
items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(button)"
},
_create: function () {
this.element.addClass("ui-buttonset");
},
_init: function () {
this.refresh();
},
_setOption: function (key, value) {
if (key === "disabled") {
this.buttons.button("option", key, value);
}
this._super(key, value);
},
refresh: function () {
var rtl = this.element.css("direction") === "rtl";
this.buttons = this.element.find(this.options.items)
.filter(":ui-button")
.button("refresh")
.end()
.not(":ui-button")
.button()
.end()
.map(function () {
return $(this).button("widget")[0];
})
.removeClass("ui-corner-all ui-corner-left ui-corner-right")
.filter(":first")
.addClass(rtl ? "ui-corner-right" : "ui-corner-left")
.end()
.filter(":last")
.addClass(rtl ? "ui-corner-left" : "ui-corner-right")
.end()
.end();
},
_destroy: function () {
this.element.removeClass("ui-buttonset");
this.buttons
.map(function () {
return $(this).button("widget")[0];
})
.removeClass("ui-corner-left ui-corner-right")
.end()
.button("destroy");
}
});
}(jQuery));
(function ($, undefined) {
$.extend($.ui, { datepicker: { version: "1.9.2" } });
var PROP_NAME = 'datepicker';
var dpuuid = new Date().getTime();
var instActive;
function Datepicker() {
this.debug = false;
this._curInst = null;
this._keyEvent = false;
this._disabledInputs = [];
this._datepickerShowing = false;
this._inDialog = false;
this._mainDivId = 'ui-datepicker-div';
this._inlineClass = 'ui-datepicker-inline';
this._appendClass = 'ui-datepicker-append';
this._triggerClass = 'ui-datepicker-trigger';
this._dialogClass = 'ui-datepicker-dialog';
this._disableClass = 'ui-datepicker-disabled';
this._unselectableClass = 'ui-datepicker-unselectable';
this._currentClass = 'ui-datepicker-current-day';
this._dayOverClass = 'ui-datepicker-days-cell-over';
this.regional = [];
this.regional[''] = {
closeText: 'Done',
prevText: 'Prev',
nextText: 'Next',
currentText: 'Today',
monthNames: ['January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December'],
monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
weekHeader: 'Wk',
dateFormat: 'mm/dd/yy',
firstDay: 0,
isRTL: false,
showMonthAfterYear: false,
yearSuffix: ''
};
this._defaults = {
showOn: 'focus',
showAnim: 'fadeIn',
showOptions: {},
defaultDate: null,
appendText: '',
buttonText: '...',
buttonImage: '',
buttonImageOnly: false,
hideIfNoPrevNext: false,
navigationAsDateFormat: false,
gotoCurrent: false,
changeMonth: false,
changeYear: false,
yearRange: 'c-10:c+10',
showOtherMonths: false,
selectOtherMonths: false,
showWeek: false,
calculateWeek: this.iso8601Week,
shortYearCutoff: '+10',
minDate: null,
maxDate: null,
duration: 'fast',
beforeShowDay: null,
beforeShow: null,
onSelect: null,
onChangeMonthYear: null,
onClose: null,
numberOfMonths: 1,
showCurrentAtPos: 0,
stepMonths: 1,
stepBigMonths: 12,
altField: '',
altFormat: '',
constrainInput: true,
showButtonPanel: false,
autoSize: false,
disabled: false
};
$.extend(this._defaults, this.regional['']);
this.dpDiv = bindHover($('<div id="' + this._mainDivId + '" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'));
}
$.extend(Datepicker.prototype, {
markerClassName: 'hasDatepicker',
maxRows: 4,
log: function () {
if (this.debug)
console.log.apply('', arguments);
},
_widgetDatepicker: function () {
return this.dpDiv;
},
setDefaults: function (settings) {
extendRemove(this._defaults, settings || {});
return this;
},
_attachDatepicker: function (target, settings) {
var inlineSettings = null;
for (var attrName in this._defaults) {
var attrValue = target.getAttribute('date:' + attrName);
if (attrValue) {
inlineSettings = inlineSettings || {};
try {
inlineSettings[attrName] = eval(attrValue);
}
catch (err) {
inlineSettings[attrName] = attrValue;
}
}
}
var nodeName = target.nodeName.toLowerCase();
var inline = (nodeName == 'div' || nodeName == 'span');
if (!target.id) {
this.uuid += 1;
target.id = 'dp' + this.uuid;
}
var inst = this._newInst($(target), inline);
inst.settings = $.extend({}, settings || {}, inlineSettings || {});
if (nodeName == 'input') {
this._connectDatepicker(target, inst);
}
else if (inline) {
this._inlineDatepicker(target, inst);
}
},
_newInst: function (target, inline) {
var id = target[0].id.replace(/([^A-Za-z0-9_-])/g, '\\\\$1');
return { id: id, input: target,
selectedDay: 0, selectedMonth: 0, selectedYear: 0,
drawMonth: 0, drawYear: 0,
inline: inline,
dpDiv: (!inline ? this.dpDiv :
bindHover($('<div class="' + this._inlineClass + ' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))) };
},
_connectDatepicker: function (target, inst) {
var input = $(target);
inst.append = $([]);
inst.trigger = $([]);
if (input.hasClass(this.markerClassName))
return;
this._attachments(input, inst);
input.addClass(this.markerClassName).keydown(this._doKeyDown).
keypress(this._doKeyPress).keyup(this._doKeyUp).
on("setData.datepicker", function (event, key, value) {
inst.settings[key] = value;
}).on("getData.datepicker", function (event, key) {
return this._get(inst, key);
});
this._autoSize(inst);
$.data(target, PROP_NAME, inst);
if (inst.settings.disabled) {
this._disableDatepicker(target);
}
},
_attachments: function (input, inst) {
var appendText = this._get(inst, 'appendText');
var isRTL = this._get(inst, 'isRTL');
if (inst.append)
inst.append.remove();
if (appendText) {
inst.append = $('<span class="' + this._appendClass + '">' + appendText + '</span>');
input[isRTL ? 'before' : 'after'](inst.append);
}
input.off('focus', this._showDatepicker);
if (inst.trigger)
inst.trigger.remove();
var showOn = this._get(inst, 'showOn');
if (showOn == 'focus' || showOn == 'both')
input.focus(this._showDatepicker);
if (showOn == 'button' || showOn == 'both') {
var buttonText = this._get(inst, 'buttonText');
var buttonImage = this._get(inst, 'buttonImage');
inst.trigger = $(this._get(inst, 'buttonImageOnly') ?
$('<img/>').addClass(this._triggerClass).
attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
$('<button type="button"></button>').addClass(this._triggerClass).
html(buttonImage == '' ? buttonText : $('<img/>').attr({ src: buttonImage, alt: buttonText, title: buttonText })));
input[isRTL ? 'before' : 'after'](inst.trigger);
inst.trigger.click(function () {
if ($.datepicker._datepickerShowing && $.datepicker._lastInput == input[0])
$.datepicker._hideDatepicker();
else if ($.datepicker._datepickerShowing && $.datepicker._lastInput != input[0]) {
$.datepicker._hideDatepicker();
$.datepicker._showDatepicker(input[0]);
}
else
$.datepicker._showDatepicker(input[0]);
return false;
});
}
},
_autoSize: function (inst) {
if (this._get(inst, 'autoSize') && !inst.inline) {
var date = new Date(2009, 12 - 1, 20);
var dateFormat = this._get(inst, 'dateFormat');
if (dateFormat.match(/[DM]/)) {
var findMax = function (names) {
var max = 0;
var maxI = 0;
for (var i = 0; i < names.length; i++) {
if (names[i].length > max) {
max = names[i].length;
maxI = i;
}
}
return maxI;
};
date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
'monthNames' : 'monthNamesShort'))));
date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
'dayNames' : 'dayNamesShort'))) + 20 - date.getDay());
}
inst.input.attr('size', this._formatDate(inst, date).length);
}
},
_inlineDatepicker: function (target, inst) {
var divSpan = $(target);
if (divSpan.hasClass(this.markerClassName))
return;
divSpan.addClass(this.markerClassName).append(inst.dpDiv).
on("setData.datepicker", function (event, key, value) {
inst.settings[key] = value;
}).on("getData.datepicker", function (event, key) {
return this._get(inst, key);
});
$.data(target, PROP_NAME, inst);
this._setDate(inst, this._getDefaultDate(inst), true);
this._updateDatepicker(inst);
this._updateAlternate(inst);
if (inst.settings.disabled) {
this._disableDatepicker(target);
}
inst.dpDiv.css("display", "block");
},
_dialogDatepicker: function (input, date, onSelect, settings, pos) {
var inst = this._dialogInst;
if (!inst) {
this.uuid += 1;
var id = 'dp' + this.uuid;
this._dialogInput = $('<input type="text" id="' + id +
'" style="position: absolute; top: -100px; width: 0px;"/>');
this._dialogInput.keydown(this._doKeyDown);
$('body').append(this._dialogInput);
inst = this._dialogInst = this._newInst(this._dialogInput, false);
inst.settings = {};
$.data(this._dialogInput[0], PROP_NAME, inst);
}
extendRemove(inst.settings, settings || {});
date = (date && date.constructor == Date ? this._formatDate(inst, date) : date);
this._dialogInput.val(date);
this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
if (!this._pos) {
var browserWidth = document.documentElement.clientWidth;
var browserHeight = document.documentElement.clientHeight;
var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
this._pos =
[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
}
this._dialogInput.css('left', (this._pos[0] + 20) + 'px').css('top', this._pos[1] + 'px');
inst.settings.onSelect = onSelect;
this._inDialog = true;
this.dpDiv.addClass(this._dialogClass);
this._showDatepicker(this._dialogInput[0]);
if ($.blockUI)
$.blockUI(this.dpDiv);
$.data(this._dialogInput[0], PROP_NAME, inst);
return this;
},
_destroyDatepicker: function (target) {
var $target = $(target);
var inst = $.data(target, PROP_NAME);
if (!$target.hasClass(this.markerClassName)) {
return;
}
var nodeName = target.nodeName.toLowerCase();
$.removeData(target, PROP_NAME);
if (nodeName == 'input') {
inst.append.remove();
inst.trigger.remove();
$target.removeClass(this.markerClassName).
off('focus', this._showDatepicker).
off('keydown', this._doKeyDown).
off('keypress', this._doKeyPress).
off('keyup', this._doKeyUp);
}
else if (nodeName == 'div' || nodeName == 'span')
$target.removeClass(this.markerClassName).empty();
},
_enableDatepicker: function (target) {
var $target = $(target);
var inst = $.data(target, PROP_NAME);
if (!$target.hasClass(this.markerClassName)) {
return;
}
var nodeName = target.nodeName.toLowerCase();
if (nodeName == 'input') {
target.disabled = false;
inst.trigger.filter('button').
each(function () { this.disabled = false; }).end().
filter('img').css({ opacity: '1.0', cursor: '' });
}
else if (nodeName == 'div' || nodeName == 'span') {
var inline = $target.children('.' + this._inlineClass);
inline.children().removeClass('ui-state-disabled');
inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
prop("disabled", false);
}
this._disabledInputs = $.map(this._disabledInputs, function (value) { return (value == target ? null : value); });
},
_disableDatepicker: function (target) {
var $target = $(target);
var inst = $.data(target, PROP_NAME);
if (!$target.hasClass(this.markerClassName)) {
return;
}
var nodeName = target.nodeName.toLowerCase();
if (nodeName == 'input') {
target.disabled = true;
inst.trigger.filter('button').
each(function () { this.disabled = true; }).end().
filter('img').css({ opacity: '0.5', cursor: 'default' });
}
else if (nodeName == 'div' || nodeName == 'span') {
var inline = $target.children('.' + this._inlineClass);
inline.children().addClass('ui-state-disabled');
inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
prop("disabled", true);
}
this._disabledInputs = $.map(this._disabledInputs, function (value) { return (value == target ? null : value); });
this._disabledInputs[this._disabledInputs.length] = target;
},
_isDisabledDatepicker: function (target) {
if (!target) {
return false;
}
for (var i = 0; i < this._disabledInputs.length; i++) {
if (this._disabledInputs[i] == target)
return true;
}
return false;
},
_getInst: function (target) {
try {
return $.data(target, PROP_NAME);
}
catch (err) {
throw 'Missing instance data for this datepicker';
}
},
_optionDatepicker: function (target, name, value) {
var inst = this._getInst(target);
if (arguments.length == 2 && typeof name == 'string') {
return (name == 'defaults' ? $.extend({}, $.datepicker._defaults) :
(inst ? (name == 'all' ? $.extend({}, inst.settings) :
this._get(inst, name)) : null));
}
var settings = name || {};
if (typeof name == 'string') {
settings = {};
settings[name] = value;
}
if (inst) {
if (this._curInst == inst) {
this._hideDatepicker();
}
var date = this._getDateDatepicker(target, true);
var minDate = this._getMinMaxDate(inst, 'min');
var maxDate = this._getMinMaxDate(inst, 'max');
extendRemove(inst.settings, settings);
if (minDate !== null && settings['dateFormat'] !== undefined && settings['minDate'] === undefined)
inst.settings.minDate = this._formatDate(inst, minDate);
if (maxDate !== null && settings['dateFormat'] !== undefined && settings['maxDate'] === undefined)
inst.settings.maxDate = this._formatDate(inst, maxDate);
this._attachments($(target), inst);
this._autoSize(inst);
this._setDate(inst, date);
this._updateAlternate(inst);
this._updateDatepicker(inst);
}
},
_changeDatepicker: function (target, name, value) {
this._optionDatepicker(target, name, value);
},
_refreshDatepicker: function (target) {
var inst = this._getInst(target);
if (inst) {
this._updateDatepicker(inst);
}
},
_setDateDatepicker: function (target, date) {
var inst = this._getInst(target);
if (inst) {
this._setDate(inst, date);
this._updateDatepicker(inst);
this._updateAlternate(inst);
}
},
_getDateDatepicker: function (target, noDefault) {
var inst = this._getInst(target);
if (inst && !inst.inline)
this._setDateFromField(inst, noDefault);
return (inst ? this._getDate(inst) : null);
},
_doKeyDown: function (event) {
var inst = $.datepicker._getInst(event.target);
var handled = true;
var isRTL = inst.dpDiv.is('.ui-datepicker-rtl');
inst._keyEvent = true;
if ($.datepicker._datepickerShowing)
switch (event.keyCode) {
case 9:
$.datepicker._hideDatepicker();
handled = false;
break;
case 13:
var sel = $('td.' + $.datepicker._dayOverClass + ':not(.' +
$.datepicker._currentClass + ')', inst.dpDiv);
if (sel[0])
$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
var onSelect = $.datepicker._get(inst, 'onSelect');
if (onSelect) {
var dateStr = $.datepicker._formatDate(inst);
onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
}
else
$.datepicker._hideDatepicker();
return false;
break;
case 27:
$.datepicker._hideDatepicker();
break;
case 33:
$.datepicker._adjustDate(event.target, (event.ctrlKey ?
-$.datepicker._get(inst, 'stepBigMonths') :
-$.datepicker._get(inst, 'stepMonths')), 'M');
break;
case 34:
$.datepicker._adjustDate(event.target, (event.ctrlKey ?
+$.datepicker._get(inst, 'stepBigMonths') :
+$.datepicker._get(inst, 'stepMonths')), 'M');
break;
case 35:
if (event.ctrlKey || event.metaKey)
$.datepicker._clearDate(event.target);
handled = event.ctrlKey || event.metaKey;
break;
case 36:
if (event.ctrlKey || event.metaKey)
$.datepicker._gotoToday(event.target);
handled = event.ctrlKey || event.metaKey;
break;
case 37:
if (event.ctrlKey || event.metaKey)
$.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D');
handled = event.ctrlKey || event.metaKey;
if (event.originalEvent.altKey)
$.datepicker._adjustDate(event.target, (event.ctrlKey ?
-$.datepicker._get(inst, 'stepBigMonths') :
-$.datepicker._get(inst, 'stepMonths')), 'M');
break;
case 38:
if (event.ctrlKey || event.metaKey)
$.datepicker._adjustDate(event.target, -7, 'D');
handled = event.ctrlKey || event.metaKey;
break;
case 39:
if (event.ctrlKey || event.metaKey)
$.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D');
handled = event.ctrlKey || event.metaKey;
if (event.originalEvent.altKey)
$.datepicker._adjustDate(event.target, (event.ctrlKey ?
+$.datepicker._get(inst, 'stepBigMonths') :
+$.datepicker._get(inst, 'stepMonths')), 'M');
break;
case 40:
if (event.ctrlKey || event.metaKey)
$.datepicker._adjustDate(event.target, +7, 'D');
handled = event.ctrlKey || event.metaKey;
break;
default: handled = false;
}
else if (event.keyCode == 36 && event.ctrlKey)
$.datepicker._showDatepicker(this);
else {
handled = false;
}
if (handled) {
event.preventDefault();
event.stopPropagation();
}
},
_doKeyPress: function (event) {
var inst = $.datepicker._getInst(event.target);
if ($.datepicker._get(inst, 'constrainInput')) {
var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat'));
var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode);
return event.ctrlKey || event.metaKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1);
}
},
_doKeyUp: function (event) {
var inst = $.datepicker._getInst(event.target);
if (inst.input.val() != inst.lastVal) {
try {
var date = $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'), (inst.input ? inst.input.val() : null), $.datepicker._getFormatConfig(inst));
if (date) {
$.datepicker._setDateFromField(inst);
$.datepicker._updateAlternate(inst);
$.datepicker._updateDatepicker(inst);
}
}
catch (err) {
$.datepicker.log(err);
}
}
return true;
},
_showDatepicker: function (input) {
input = input.target || input;
if (input.nodeName.toLowerCase() != 'input')
input = $('input', input.parentNode)[0];
if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input)
return;
var inst = $.datepicker._getInst(input);
if ($.datepicker._curInst && $.datepicker._curInst != inst) {
$.datepicker._curInst.dpDiv.stop(true, true);
if (inst && $.datepicker._datepickerShowing) {
$.datepicker._hideDatepicker($.datepicker._curInst.input[0]);
}
}
var beforeShow = $.datepicker._get(inst, 'beforeShow');
var beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
if (beforeShowSettings === false) {
return;
}
extendRemove(inst.settings, beforeShowSettings);
inst.lastVal = null;
$.datepicker._lastInput = input;
$.datepicker._setDateFromField(inst);
if ($.datepicker._inDialog)
input.value = '';
if (!$.datepicker._pos) {
$.datepicker._pos = $.datepicker._findPos(input);
$.datepicker._pos[1] += input.offsetHeight;
}
var isFixed = false;
$(input).parents().each(function () {
isFixed |= $(this).css('position') == 'fixed';
return !isFixed;
});
var offset = { left: $.datepicker._pos[0], top: $.datepicker._pos[1] };
$.datepicker._pos = null;
inst.dpDiv.empty();
inst.dpDiv.css({ position: 'absolute', display: 'block', top: '-1000px' });
$.datepicker._updateDatepicker(inst);
offset = $.datepicker._checkOffset(inst, offset, isFixed);
inst.dpDiv.css({ position: ($.datepicker._inDialog && $.blockUI ?
'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none',
left: offset.left + 'px', top: offset.top + 'px' });
if (!inst.inline) {
var showAnim = $.datepicker._get(inst, 'showAnim');
var duration = $.datepicker._get(inst, 'duration');
var postProcess = function () {
var cover = inst.dpDiv.find('iframe.ui-datepicker-cover');
if (!!cover.length) {
var borders = $.datepicker._getBorders(inst.dpDiv);
cover.css({ left: -borders[0], top: -borders[1],
width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight() });
}
};
inst.dpDiv.zIndex($(input).zIndex() + 1);
$.datepicker._datepickerShowing = true;
if ($.effects && ($.effects.effect[showAnim] || $.effects[showAnim]))
inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);
else
inst.dpDiv[showAnim || 'show']((showAnim ? duration : null), postProcess);
if (!showAnim || !duration)
postProcess();
if (inst.input.is(':visible') && !inst.input.is(':disabled'))
inst.input.focus();
$.datepicker._curInst = inst;
}
},
_updateDatepicker: function (inst) {
this.maxRows = 4;
var borders = $.datepicker._getBorders(inst.dpDiv);
instActive = inst;
inst.dpDiv.empty().append(this._generateHTML(inst));
this._attachHandlers(inst);
var cover = inst.dpDiv.find('iframe.ui-datepicker-cover');
if (!!cover.length) {
cover.css({ left: -borders[0], top: -borders[1], width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight() });
}
inst.dpDiv.find('.' + this._dayOverClass + ' a').mouseover();
var numMonths = this._getNumberOfMonths(inst);
var cols = numMonths[1];
var width = 17;
inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width('');
if (cols > 1)
inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em');
inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') +
'Class']('ui-datepicker-multi');
inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') +
'Class']('ui-datepicker-rtl');
if (inst == $.datepicker._curInst && $.datepicker._datepickerShowing && inst.input &&
inst.input.is(':visible') && !inst.input.is(':disabled') && inst.input[0] != document.activeElement)
inst.input.focus();
if (inst.yearshtml) {
var origyearshtml = inst.yearshtml;
setTimeout(function () {
if (origyearshtml === inst.yearshtml && inst.yearshtml) {
inst.dpDiv.find('select.ui-datepicker-year:first').replaceWith(inst.yearshtml);
}
origyearshtml = inst.yearshtml = null;
}, 0);
}
},
_getBorders: function (elem) {
var convert = function (value) {
return { thin: 1, medium: 2, thick: 3 }[value] || value;
};
return [parseFloat(convert(elem.css('border-left-width'))),
parseFloat(convert(elem.css('border-top-width')))];
},
_checkOffset: function (inst, offset, isFixed) {
var dpWidth = inst.dpDiv.outerWidth();
var dpHeight = inst.dpDiv.outerHeight();
var inputWidth = inst.input ? inst.input.outerWidth() : 0;
var inputHeight = inst.input ? inst.input.outerHeight() : 0;
var viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft());
var viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0);
offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0;
offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
Math.abs(offset.left + dpWidth - viewWidth) : 0);
offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
Math.abs(dpHeight + inputHeight) : 0);
return offset;
},
_findPos: function (obj) {
var inst = this._getInst(obj);
var isRTL = this._get(inst, 'isRTL');
while (obj && (obj.type == 'hidden' || obj.nodeType != 1 || $.expr.pseudos.hidden(obj))) {
obj = obj[isRTL ? 'previousSibling' : 'nextSibling'];
}
var position = $(obj).offset();
return [position.left, position.top];
},
_hideDatepicker: function (input) {
var inst = this._curInst;
if (!inst || (input && inst != $.data(input, PROP_NAME)))
return;
if (this._datepickerShowing) {
var showAnim = this._get(inst, 'showAnim');
var duration = this._get(inst, 'duration');
var postProcess = function () {
$.datepicker._tidyDialog(inst);
};
if ($.effects && ($.effects.effect[showAnim] || $.effects[showAnim]))
inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);
else
inst.dpDiv[(showAnim == 'slideDown' ? 'slideUp' :
(showAnim == 'fadeIn' ? 'fadeOut' : 'hide'))]((showAnim ? duration : null), postProcess);
if (!showAnim)
postProcess();
this._datepickerShowing = false;
var onClose = this._get(inst, 'onClose');
if (onClose)
onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ''), inst]);
this._lastInput = null;
if (this._inDialog) {
this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' });
if ($.blockUI) {
$.unblockUI();
$('body').append(this.dpDiv);
}
}
this._inDialog = false;
}
},
_tidyDialog: function (inst) {
inst.dpDiv.removeClass(this._dialogClass).off('.ui-datepicker-calendar');
},
_checkExternalClick: function (event) {
if (!$.datepicker._curInst)
return;
var $target = $(event.target), inst = $.datepicker._getInst($target[0]);
if ((($target[0].id != $.datepicker._mainDivId &&
$target.parents('#' + $.datepicker._mainDivId).length == 0 &&
!$target.hasClass($.datepicker.markerClassName) &&
!$target.closest("." + $.datepicker._triggerClass).length &&
$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI))) ||
($target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst != inst))
$.datepicker._hideDatepicker();
},
_adjustDate: function (id, offset, period) {
var target = $(id);
var inst = this._getInst(target[0]);
if (this._isDisabledDatepicker(target[0])) {
return;
}
this._adjustInstDate(inst, offset +
(period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), period);
this._updateDatepicker(inst);
},
_gotoToday: function (id) {
var target = $(id);
var inst = this._getInst(target[0]);
if (this._get(inst, 'gotoCurrent') && inst.currentDay) {
inst.selectedDay = inst.currentDay;
inst.drawMonth = inst.selectedMonth = inst.currentMonth;
inst.drawYear = inst.selectedYear = inst.currentYear;
}
else {
var date = new Date();
inst.selectedDay = date.getDate();
inst.drawMonth = inst.selectedMonth = date.getMonth();
inst.drawYear = inst.selectedYear = date.getFullYear();
}
this._notifyChange(inst);
this._adjustDate(target);
},
_selectMonthYear: function (id, select, period) {
var target = $(id);
var inst = this._getInst(target[0]);
inst['selected' + (period == 'M' ? 'Month' : 'Year')] =
inst['draw' + (period == 'M' ? 'Month' : 'Year')] =
parseInt(select.options[select.selectedIndex].value, 10);
this._notifyChange(inst);
this._adjustDate(target);
},
_selectDay: function (id, month, year, td) {
var target = $(id);
if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
return;
}
var inst = this._getInst(target[0]);
inst.selectedDay = inst.currentDay = $('a', td).html();
inst.selectedMonth = inst.currentMonth = month;
inst.selectedYear = inst.currentYear = year;
this._selectDate(id, this._formatDate(inst, inst.currentDay, inst.currentMonth, inst.currentYear));
},
_clearDate: function (id) {
var target = $(id);
var inst = this._getInst(target[0]);
this._selectDate(target, '');
},
_selectDate: function (id, dateStr) {
var target = $(id);
var inst = this._getInst(target[0]);
dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
if (inst.input)
inst.input.val(dateStr);
this._updateAlternate(inst);
var onSelect = this._get(inst, 'onSelect');
if (onSelect)
onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
else if (inst.input)
inst.input.trigger('change');
if (inst.inline)
this._updateDatepicker(inst);
else {
this._hideDatepicker();
this._lastInput = inst.input[0];
if (typeof (inst.input[0]) != 'object')
inst.input.focus();
this._lastInput = null;
}
},
_updateAlternate: function (inst) {
var altField = this._get(inst, 'altField');
if (altField) {
var altFormat = this._get(inst, 'altFormat') || this._get(inst, 'dateFormat');
var date = this._getDate(inst);
var dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
$(altField).each(function () { $(this).val(dateStr); });
}
},
noWeekends: function (date) {
var day = date.getDay();
return [(day > 0 && day < 6), ''];
},
iso8601Week: function (date) {
var checkDate = new Date(date.getTime());
checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
var time = checkDate.getTime();
checkDate.setMonth(0);
checkDate.setDate(1);
return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
},
parseDate: function (format, value, settings) {
if (format == null || value == null)
throw 'Invalid arguments';
value = (typeof value == 'object' ? value.toString() : value + '');
if (value == '')
return null;
var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff;
shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff :
new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;
var year = -1;
var month = -1;
var day = -1;
var doy = -1;
var literal = false;
var lookAhead = function (match) {
var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
if (matches)
iFormat++;
return matches;
};
var getNumber = function (match) {
var isDoubled = lookAhead(match);
var size = (match == '@' ? 14 : (match == '!' ? 20 :
(match == 'y' && isDoubled ? 4 : (match == 'o' ? 3 : 2))));
var digits = new RegExp('^\\d{1,' + size + '}');
var num = value.substring(iValue).match(digits);
if (!num)
throw 'Missing number at position ' + iValue;
iValue += num[0].length;
return parseInt(num[0], 10);
};
var getName = function (match, shortNames, longNames) {
var names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
return [[k, v]];
}).sort(function (a, b) {
return -(a[1].length - b[1].length);
});
var index = -1;
$.each(names, function (i, pair) {
var name = pair[1];
if (value.substr(iValue, name.length).toLowerCase() == name.toLowerCase()) {
index = pair[0];
iValue += name.length;
return false;
}
});
if (index != -1)
return index + 1;
else
throw 'Unknown name at position ' + iValue;
};
var checkLiteral = function () {
if (value.charAt(iValue) != format.charAt(iFormat))
throw 'Unexpected literal at position ' + iValue;
iValue++;
};
var iValue = 0;
for (var iFormat = 0; iFormat < format.length; iFormat++) {
if (literal)
if (format.charAt(iFormat) == "'" && !lookAhead("'"))
literal = false;
else
checkLiteral();
else
switch (format.charAt(iFormat)) {
case 'd':
day = getNumber('d');
break;
case 'D':
getName('D', dayNamesShort, dayNames);
break;
case 'o':
doy = getNumber('o');
break;
case 'm':
month = getNumber('m');
break;
case 'M':
month = getName('M', monthNamesShort, monthNames);
break;
case 'y':
year = getNumber('y');
break;
case '@':
var date = new Date(getNumber('@'));
year = date.getFullYear();
month = date.getMonth() + 1;
day = date.getDate();
break;
case '!':
var date = new Date((getNumber('!') - this._ticksTo1970) / 10000);
year = date.getFullYear();
month = date.getMonth() + 1;
day = date.getDate();
break;
case "'":
if (lookAhead("'"))
checkLiteral();
else
literal = true;
break;
default:
checkLiteral();
}
}
if (iValue < value.length) {
var extra = value.substr(iValue);
if (!/^\s+/.test(extra)) {
throw "Extra/unparsed characters found in date: " + extra;
}
}
if (year == -1)
year = new Date().getFullYear();
else if (year < 100)
year += new Date().getFullYear() - new Date().getFullYear() % 100 +
(year <= shortYearCutoff ? 0 : -100);
if (doy > -1) {
month = 1;
day = doy;
do {
var dim = this._getDaysInMonth(year, month - 1);
if (day <= dim)
break;
month++;
day -= dim;
} while (true);
}
var date = this._daylightSavingAdjust(new Date(year, month - 1, day));
if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day)
throw 'Invalid date';
return date;
},
ATOM: 'yy-mm-dd',
COOKIE: 'D, dd M yy',
ISO_8601: 'yy-mm-dd',
RFC_822: 'D, d M y',
RFC_850: 'DD, dd-M-y',
RFC_1036: 'D, d M y',
RFC_1123: 'D, d M yy',
RFC_2822: 'D, d M yy',
RSS: 'D, d M y',
TICKS: '!',
TIMESTAMP: '@',
W3C: 'yy-mm-dd',
_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
formatDate: function (format, date, settings) {
if (!date)
return '';
var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;
var lookAhead = function (match) {
var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
if (matches)
iFormat++;
return matches;
};
var formatNumber = function (match, value, len) {
var num = '' + value;
if (lookAhead(match))
while (num.length < len)
num = '0' + num;
return num;
};
var formatName = function (match, value, shortNames, longNames) {
return (lookAhead(match) ? longNames[value] : shortNames[value]);
};
var output = '';
var literal = false;
if (date)
for (var iFormat = 0; iFormat < format.length; iFormat++) {
if (literal)
if (format.charAt(iFormat) == "'" && !lookAhead("'"))
literal = false;
else
output += format.charAt(iFormat);
else
switch (format.charAt(iFormat)) {
case 'd':
output += formatNumber('d', date.getDate(), 2);
break;
case 'D':
output += formatName('D', date.getDay(), dayNamesShort, dayNames);
break;
case 'o':
output += formatNumber('o', Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
break;
case 'm':
output += formatNumber('m', date.getMonth() + 1, 2);
break;
case 'M':
output += formatName('M', date.getMonth(), monthNamesShort, monthNames);
break;
case 'y':
output += (lookAhead('y') ? date.getFullYear() :
(date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100);
break;
case '@':
output += date.getTime();
break;
case '!':
output += date.getTime() * 10000 + this._ticksTo1970;
break;
case "'":
if (lookAhead("'"))
output += "'";
else
literal = true;
break;
default:
output += format.charAt(iFormat);
}
}
return output;
},
_possibleChars: function (format) {
var chars = '';
var literal = false;
var lookAhead = function (match) {
var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
if (matches)
iFormat++;
return matches;
};
for (var iFormat = 0; iFormat < format.length; iFormat++)
if (literal)
if (format.charAt(iFormat) == "'" && !lookAhead("'"))
literal = false;
else
chars += format.charAt(iFormat);
else
switch (format.charAt(iFormat)) {
case 'd':
case 'm':
case 'y':
case '@':
chars += '0123456789';
break;
case 'D':
case 'M':
return null;
case "'":
if (lookAhead("'"))
chars += "'";
else
literal = true;
break;
default:
chars += format.charAt(iFormat);
}
return chars;
},
_get: function (inst, name) {
return inst.settings[name] !== undefined ?
inst.settings[name] : this._defaults[name];
},
_setDateFromField: function (inst, noDefault) {
if (inst.input.val() == inst.lastVal) {
return;
}
var dateFormat = this._get(inst, 'dateFormat');
var dates = inst.lastVal = inst.input ? inst.input.val() : null;
var date, defaultDate;
date = defaultDate = this._getDefaultDate(inst);
var settings = this._getFormatConfig(inst);
try {
date = this.parseDate(dateFormat, dates, settings) || defaultDate;
}
catch (event) {
this.log(event);
dates = (noDefault ? '' : dates);
}
inst.selectedDay = date.getDate();
inst.drawMonth = inst.selectedMonth = date.getMonth();
inst.drawYear = inst.selectedYear = date.getFullYear();
inst.currentDay = (dates ? date.getDate() : 0);
inst.currentMonth = (dates ? date.getMonth() : 0);
inst.currentYear = (dates ? date.getFullYear() : 0);
this._adjustInstDate(inst);
},
_getDefaultDate: function (inst) {
return this._restrictMinMax(inst, this._determineDate(inst, this._get(inst, 'defaultDate'), new Date()));
},
_determineDate: function (inst, date, defaultDate) {
var offsetNumeric = function (offset) {
var date = new Date();
date.setDate(date.getDate() + offset);
return date;
};
var offsetString = function (offset) {
try {
return $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'), offset, $.datepicker._getFormatConfig(inst));
}
catch (e) {
}
var date = (offset.toLowerCase().match(/^c/) ?
$.datepicker._getDate(inst) : null) || new Date();
var year = date.getFullYear();
var month = date.getMonth();
var day = date.getDate();
var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;
var matches = pattern.exec(offset);
while (matches) {
switch (matches[2] || 'd') {
case 'd':
case 'D':
day += parseInt(matches[1], 10);
break;
case 'w':
case 'W':
day += parseInt(matches[1], 10) * 7;
break;
case 'm':
case 'M':
month += parseInt(matches[1], 10);
day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
break;
case 'y':
case 'Y':
year += parseInt(matches[1], 10);
day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
break;
}
matches = pattern.exec(offset);
}
return new Date(year, month, day);
};
var newDate = (date == null || date === '' ? defaultDate : (typeof date == 'string' ? offsetString(date) :
(typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
newDate = (newDate && newDate.toString() == 'Invalid Date' ? defaultDate : newDate);
if (newDate) {
newDate.setHours(0);
newDate.setMinutes(0);
newDate.setSeconds(0);
newDate.setMilliseconds(0);
}
return this._daylightSavingAdjust(newDate);
},
_daylightSavingAdjust: function (date) {
if (!date)
return null;
date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
return date;
},
_setDate: function (inst, date, noChange) {
var clear = !date;
var origMonth = inst.selectedMonth;
var origYear = inst.selectedYear;
var newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
inst.selectedDay = inst.currentDay = newDate.getDate();
inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
if ((origMonth != inst.selectedMonth || origYear != inst.selectedYear) && !noChange)
this._notifyChange(inst);
this._adjustInstDate(inst);
if (inst.input) {
inst.input.val(clear ? '' : this._formatDate(inst));
}
},
_getDate: function (inst) {
var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null :
this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
return startDate;
},
_attachHandlers: function (inst) {
var stepMonths = this._get(inst, 'stepMonths');
var id = '#' + inst.id.replace(/\\\\/g, "\\");
inst.dpDiv.find('[data-handler]').map(function () {
var handler = {
prev: function () {
window['DP_jQuery_' + dpuuid].datepicker._adjustDate(id, -stepMonths, 'M');
},
next: function () {
window['DP_jQuery_' + dpuuid].datepicker._adjustDate(id, +stepMonths, 'M');
},
hide: function () {
window['DP_jQuery_' + dpuuid].datepicker._hideDatepicker();
},
today: function () {
window['DP_jQuery_' + dpuuid].datepicker._gotoToday(id);
},
selectDay: function () {
window['DP_jQuery_' + dpuuid].datepicker._selectDay(id, +this.getAttribute('data-month'), +this.getAttribute('data-year'), this);
return false;
},
selectMonth: function () {
window['DP_jQuery_' + dpuuid].datepicker._selectMonthYear(id, this, 'M');
return false;
},
selectYear: function () {
window['DP_jQuery_' + dpuuid].datepicker._selectMonthYear(id, this, 'Y');
return false;
}
};
$(this).on(this.getAttribute('data-event'), handler[this.getAttribute('data-handler')]);
});
},
_generateHTML: function (inst) {
var today = new Date();
today = this._daylightSavingAdjust(new Date(today.getFullYear(), today.getMonth(), today.getDate()));
var isRTL = this._get(inst, 'isRTL');
var showButtonPanel = this._get(inst, 'showButtonPanel');
var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext');
var navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat');
var numMonths = this._getNumberOfMonths(inst);
var showCurrentAtPos = this._get(inst, 'showCurrentAtPos');
var stepMonths = this._get(inst, 'stepMonths');
var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1);
var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
var minDate = this._getMinMaxDate(inst, 'min');
var maxDate = this._getMinMaxDate(inst, 'max');
var drawMonth = inst.drawMonth - showCurrentAtPos;
var drawYear = inst.drawYear;
if (drawMonth < 0) {
drawMonth += 12;
drawYear--;
}
if (maxDate) {
var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(), maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
drawMonth--;
if (drawMonth < 0) {
drawMonth = 11;
drawYear--;
}
}
}
inst.drawMonth = drawMonth;
inst.drawYear = drawYear;
var prevText = this._get(inst, 'prevText');
prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText, this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), this._getFormatConfig(inst)));
var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
'<a class="ui-datepicker-prev ui-corner-all" data-handler="prev" data-event="click"' +
' title="' + prevText + '"><span class="ui-icon ui-icon-circle-triangle-' + (isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>' :
(hideIfNoPrevNext ? '' : '<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="' + prevText + '"><span class="ui-icon ui-icon-circle-triangle-' + (isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>'));
var nextText = this._get(inst, 'nextText');
nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText, this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), this._getFormatConfig(inst)));
var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
'<a class="ui-datepicker-next ui-corner-all" data-handler="next" data-event="click"' +
' title="' + nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + (isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>' :
(hideIfNoPrevNext ? '' : '<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="' + nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + (isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>'));
var currentText = this._get(inst, 'currentText');
var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today);
currentText = (!navigationAsDateFormat ? currentText :
this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
var controls = (!inst.inline ? '<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" data-handler="hide" data-event="click">' +
this._get(inst, 'closeText') + '</button>' : '');
var buttonPanel = (showButtonPanel) ? '<div class="ui-datepicker-buttonpane ui-widget-content">' + (isRTL ? controls : '') +
(this._isInRange(inst, gotoDate) ? '<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" data-handler="today" data-event="click"' +
'>' + currentText + '</button>' : '') + (isRTL ? '' : controls) + '</div>' : '';
var firstDay = parseInt(this._get(inst, 'firstDay'), 10);
firstDay = (isNaN(firstDay) ? 0 : firstDay);
var showWeek = this._get(inst, 'showWeek');
var dayNames = this._get(inst, 'dayNames');
var dayNamesShort = this._get(inst, 'dayNamesShort');
var dayNamesMin = this._get(inst, 'dayNamesMin');
var monthNames = this._get(inst, 'monthNames');
var monthNamesShort = this._get(inst, 'monthNamesShort');
var beforeShowDay = this._get(inst, 'beforeShowDay');
var showOtherMonths = this._get(inst, 'showOtherMonths');
var selectOtherMonths = this._get(inst, 'selectOtherMonths');
var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week;
var defaultDate = this._getDefaultDate(inst);
var html = '';
for (var row = 0; row < numMonths[0]; row++) {
var group = '';
this.maxRows = 4;
for (var col = 0; col < numMonths[1]; col++) {
var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
var cornerClass = ' ui-corner-all';
var calender = '';
if (isMultiMonth) {
calender += '<div class="ui-datepicker-group';
if (numMonths[1] > 1)
switch (col) {
case 0:
calender += ' ui-datepicker-group-first';
cornerClass = ' ui-corner-' + (isRTL ? 'right' : 'left');
break;
case numMonths[1] - 1:
calender += ' ui-datepicker-group-last';
cornerClass = ' ui-corner-' + (isRTL ? 'left' : 'right');
break;
default:
calender += ' ui-datepicker-group-middle';
cornerClass = '';
break;
}
calender += '">';
}
calender += '<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix' + cornerClass + '">' +
(/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') +
(/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') +
this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate, row > 0 || col > 0, monthNames, monthNamesShort) +
'</div><table class="ui-datepicker-calendar"><thead>' +
'<tr>';
var thead = (showWeek ? '<th class="ui-datepicker-week-col">' + this._get(inst, 'weekHeader') + '</th>' : '');
for (var dow = 0; dow < 7; dow++) {
var day = (dow + firstDay) % 7;
thead += '<th' + ((dow + firstDay + 6) % 7 >= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' +
'<span title="' + dayNames[day] + '">' + dayNamesMin[day] + '</span></th>';
}
calender += thead + '</tr></thead><tbody>';
var daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth)
inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
var curRows = Math.ceil((leadDays + daysInMonth) / 7);
var numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows);
this.maxRows = numRows;
var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
for (var dRow = 0; dRow < numRows; dRow++) {
calender += '<tr>';
var tbody = (!showWeek ? '' : '<td class="ui-datepicker-week-col">' +
this._get(inst, 'calculateWeek')(printDate) + '</td>');
for (var dow = 0; dow < 7; dow++) {
var daySettings = (beforeShowDay ?
beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']);
var otherMonth = (printDate.getMonth() != drawMonth);
var unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
(minDate && printDate < minDate) || (maxDate && printDate > maxDate);
tbody += '<td class="' +
((dow + firstDay + 6) % 7 >= 5 ? ' ui-datepicker-week-end' : '') +
(otherMonth ? ' ui-datepicker-other-month' : '') +
((printDate.getTime() == selectedDate.getTime() && drawMonth == inst.selectedMonth && inst._keyEvent) ||
(defaultDate.getTime() == printDate.getTime() && defaultDate.getTime() == selectedDate.getTime()) ?
' ' + this._dayOverClass : '') +
(unselectable ? ' ' + this._unselectableClass + ' ui-state-disabled' : '') +
(otherMonth && !showOtherMonths ? '' : ' ' + daySettings[1] +
(printDate.getTime() == currentDate.getTime() ? ' ' + this._currentClass : '') +
(printDate.getTime() == today.getTime() ? ' ui-datepicker-today' : '')) + '"' +
((!otherMonth || showOtherMonths) && daySettings[2] ? ' title="' + daySettings[2] + '"' : '') +
(unselectable ? '' : ' data-handler="selectDay" data-event="click" data-month="' + printDate.getMonth() + '" data-year="' + printDate.getFullYear() + '"') + '>' +
(otherMonth && !showOtherMonths ? ' ' :
(unselectable ? '<span class="ui-state-default">' + printDate.getDate() + '</span>' : '<a class="ui-state-default' +
(printDate.getTime() == today.getTime() ? ' ui-state-highlight' : '') +
(printDate.getTime() == currentDate.getTime() ? ' ui-state-active' : '') +
(otherMonth ? ' ui-priority-secondary' : '') +
'" href="#">' + printDate.getDate() + '</a>')) + '</td>';
printDate.setDate(printDate.getDate() + 1);
printDate = this._daylightSavingAdjust(printDate);
}
calender += tbody + '</tr>';
}
drawMonth++;
if (drawMonth > 11) {
drawMonth = 0;
drawYear++;
}
calender += '</tbody></table>' + (isMultiMonth ? '</div>' +
((numMonths[0] > 0 && col == numMonths[1] - 1) ? '<div class="ui-datepicker-row-break"></div>' : '') : '');
group += calender;
}
html += group;
}
html += buttonPanel + ($.ui.ie6 && !inst.inline ?
'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>' : '');
inst._keyEvent = false;
return html;
},
_generateMonthYearHeader: function (inst, drawMonth, drawYear, minDate, maxDate, secondary, monthNames, monthNamesShort) {
var changeMonth = this._get(inst, 'changeMonth');
var changeYear = this._get(inst, 'changeYear');
var showMonthAfterYear = this._get(inst, 'showMonthAfterYear');
var html = '<div class="ui-datepicker-title">';
var monthHtml = '';
if (secondary || !changeMonth)
monthHtml += '<span class="ui-datepicker-month">' + monthNames[drawMonth] + '</span>';
else {
var inMinYear = (minDate && minDate.getFullYear() == drawYear);
var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear);
monthHtml += '<select class="ui-datepicker-month" data-handler="selectMonth" data-event="change">';
for (var month = 0; month < 12; month++) {
if ((!inMinYear || month >= minDate.getMonth()) &&
(!inMaxYear || month <= maxDate.getMonth()))
monthHtml += '<option value="' + month + '"' +
(month == drawMonth ? ' selected="selected"' : '') +
'>' + monthNamesShort[month] + '</option>';
}
monthHtml += '</select>';
}
if (!showMonthAfterYear)
html += monthHtml + (secondary || !(changeMonth && changeYear) ? ' ' : '');
if (!inst.yearshtml) {
inst.yearshtml = '';
if (secondary || !changeYear)
html += '<span class="ui-datepicker-year">' + drawYear + '</span>';
else {
var years = this._get(inst, 'yearRange').split(':');
var thisYear = new Date().getFullYear();
var determineYear = function (value) {
var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) :
(value.match(/[+-].*/) ? thisYear + parseInt(value, 10) :
parseInt(value, 10)));
return (isNaN(year) ? thisYear : year);
};
var year = determineYear(years[0]);
var endYear = Math.max(year, determineYear(years[1] || ''));
year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
inst.yearshtml += '<select class="ui-datepicker-year" data-handler="selectYear" data-event="change">';
for (; year <= endYear; year++) {
inst.yearshtml += '<option value="' + year + '"' +
(year == drawYear ? ' selected="selected"' : '') +
'>' + year + '</option>';
}
inst.yearshtml += '</select>';
html += inst.yearshtml;
inst.yearshtml = null;
}
}
html += this._get(inst, 'yearSuffix');
if (showMonthAfterYear)
html += (secondary || !(changeMonth && changeYear) ? ' ' : '') + monthHtml;
html += '</div>';
return html;
},
_adjustInstDate: function (inst, offset, period) {
var year = inst.drawYear + (period == 'Y' ? offset : 0);
var month = inst.drawMonth + (period == 'M' ? offset : 0);
var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) +
(period == 'D' ? offset : 0);
var date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));
inst.selectedDay = date.getDate();
inst.drawMonth = inst.selectedMonth = date.getMonth();
inst.drawYear = inst.selectedYear = date.getFullYear();
if (period == 'M' || period == 'Y')
this._notifyChange(inst);
},
_restrictMinMax: function (inst, date) {
var minDate = this._getMinMaxDate(inst, 'min');
var maxDate = this._getMinMaxDate(inst, 'max');
var newDate = (minDate && date < minDate ? minDate : date);
newDate = (maxDate && newDate > maxDate ? maxDate : newDate);
return newDate;
},
_notifyChange: function (inst) {
var onChange = this._get(inst, 'onChangeMonthYear');
if (onChange)
onChange.apply((inst.input ? inst.input[0] : null), [inst.selectedYear, inst.selectedMonth + 1, inst]);
},
_getNumberOfMonths: function (inst) {
var numMonths = this._get(inst, 'numberOfMonths');
return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths));
},
_getMinMaxDate: function (inst, minMax) {
return this._determineDate(inst, this._get(inst, minMax + 'Date'), null);
},
_getDaysInMonth: function (year, month) {
return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
},
_getFirstDayOfMonth: function (year, month) {
return new Date(year, month, 1).getDay();
},
_canAdjustMonth: function (inst, offset, curYear, curMonth) {
var numMonths = this._getNumberOfMonths(inst);
var date = this._daylightSavingAdjust(new Date(curYear, curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
if (offset < 0)
date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
return this._isInRange(inst, date);
},
_isInRange: function (inst, date) {
var minDate = this._getMinMaxDate(inst, 'min');
var maxDate = this._getMinMaxDate(inst, 'max');
return ((!minDate || date.getTime() >= minDate.getTime()) &&
(!maxDate || date.getTime() <= maxDate.getTime()));
},
_getFormatConfig: function (inst) {
var shortYearCutoff = this._get(inst, 'shortYearCutoff');
shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff :
new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
return { shortYearCutoff: shortYearCutoff,
dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'),
monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames') };
},
_formatDate: function (inst, day, month, year) {
if (!day) {
inst.currentDay = inst.selectedDay;
inst.currentMonth = inst.selectedMonth;
inst.currentYear = inst.selectedYear;
}
var date = (day ? (typeof day == 'object' ? day :
this._daylightSavingAdjust(new Date(year, month, day))) :
this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst));
}
});
function bindHover(dpDiv) {
var selector = 'button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a';
return dpDiv.on('mouseout', selector, function () {
$(this).removeClass('ui-state-hover');
if (this.className.indexOf('ui-datepicker-prev') != -1)
$(this).removeClass('ui-datepicker-prev-hover');
if (this.className.indexOf('ui-datepicker-next') != -1)
$(this).removeClass('ui-datepicker-next-hover');
})
.on('mouseover', selector, function () {
if (!$.datepicker._isDisabledDatepicker(instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) {
$(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover');
$(this).addClass('ui-state-hover');
if (this.className.indexOf('ui-datepicker-prev') != -1)
$(this).addClass('ui-datepicker-prev-hover');
if (this.className.indexOf('ui-datepicker-next') != -1)
$(this).addClass('ui-datepicker-next-hover');
}
});
}
function extendRemove(target, props) {
$.extend(target, props);
for (var name in props)
if (props[name] == null || props[name] == undefined)
target[name] = props[name];
return target;
}
;
$.fn.datepicker = function (options) {
if (!this.length) {
return this;
}
if (!$.datepicker.initialized) {
$(document).mousedown($.datepicker._checkExternalClick).
find(document.body).append($.datepicker.dpDiv);
$.datepicker.initialized = true;
}
var otherArgs = Array.prototype.slice.call(arguments, 1);
if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget'))
return $.datepicker['_' + options + 'Datepicker'].
apply($.datepicker, [this[0]].concat(otherArgs));
if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string')
return $.datepicker['_' + options + 'Datepicker'].
apply($.datepicker, [this[0]].concat(otherArgs));
return this.each(function () {
typeof options == 'string' ?
$.datepicker['_' + options + 'Datepicker'].
apply($.datepicker, [this].concat(otherArgs)) :
$.datepicker._attachDatepicker(this, options);
});
};
$.datepicker = new Datepicker();
$.datepicker.initialized = false;
$.datepicker.uuid = new Date().getTime();
$.datepicker.version = "1.9.2";
window['DP_jQuery_' + dpuuid] = $;
})(jQuery);
(function ($, undefined) {
var uiDialogClasses = "ui-dialog ui-widget ui-widget-content ui-corner-all ", sizeRelatedOptions = {
buttons: true,
height: true,
maxHeight: true,
maxWidth: true,
minHeight: true,
minWidth: true,
width: true
}, resizableRelatedOptions = {
maxHeight: true,
maxWidth: true,
minHeight: true,
minWidth: true
};
$.widget("ui.dialog", {
version: "1.9.2",
options: {
autoOpen: true,
buttons: {},
closeOnEscape: true,
closeText: "close",
dialogClass: "",
draggable: true,
hide: null,
height: "auto",
maxHeight: false,
maxWidth: false,
minHeight: 150,
minWidth: 150,
modal: false,
position: {
my: "center",
at: "center",
of: window,
collision: "fit",
using: function (pos) {
var topOffset = $(this).css(pos).offset().top;
if (topOffset < 0) {
$(this).css("top", pos.top - topOffset);
}
}
},
resizable: true,
show: null,
stack: true,
title: "",
width: 300,
zIndex: 1000
},
_create: function () {
this.originalTitle = this.element.attr("title");
if (typeof this.originalTitle !== "string") {
this.originalTitle = "";
}
this.oldPosition = {
parent: this.element.parent(),
index: this.element.parent().children().index(this.element)
};
this.options.title = this.options.title || this.originalTitle;
var that = this, options = this.options, title = options.title || " ", uiDialog, uiDialogTitlebar, uiDialogTitlebarClose, uiDialogTitle, uiDialogButtonPane;
uiDialog = (this.uiDialog = $("<div>"))
.addClass(uiDialogClasses + options.dialogClass)
.css({
display: "none",
outline: "none",
zIndex: options.zIndex
})
.attr("tabIndex", -1)
.keydown(function (event) {
if (options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
event.keyCode === $.ui.keyCode.ESCAPE) {
that.close(event);
event.preventDefault();
}
})
.mousedown(function (event) {
that.moveToTop(false, event);
})
.appendTo("body");
this.element
.show()
.removeAttr("title")
.addClass("ui-dialog-content ui-widget-content")
.appendTo(uiDialog);
uiDialogTitlebar = (this.uiDialogTitlebar = $("<div>"))
.addClass("ui-dialog-titlebar ui-widget-header " +
"ui-corner-all ui-helper-clearfix")
.on("mousedown", function () {
uiDialog.focus();
})
.prependTo(uiDialog);
uiDialogTitlebarClose = $("<a href='#'></a>")
.addClass("ui-dialog-titlebar-close ui-corner-all")
.attr("role", "button")
.click(function (event) {
event.preventDefault();
that.close(event);
})
.appendTo(uiDialogTitlebar);
(this.uiDialogTitlebarCloseText = $("<span>"))
.addClass("ui-icon ui-icon-closethick")
.text(options.closeText)
.appendTo(uiDialogTitlebarClose);
uiDialogTitle = $("<span>")
.uniqueId()
.addClass("ui-dialog-title")
.html(title)
.prependTo(uiDialogTitlebar);
uiDialogButtonPane = (this.uiDialogButtonPane = $("<div>"))
.addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");
(this.uiButtonSet = $("<div>"))
.addClass("ui-dialog-buttonset")
.appendTo(uiDialogButtonPane);
uiDialog.attr({
role: "dialog",
"aria-labelledby": uiDialogTitle.attr("id")
});
uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection();
this._hoverable(uiDialogTitlebarClose);
this._focusable(uiDialogTitlebarClose);
if (options.draggable && $.fn.draggable) {
this._makeDraggable();
}
if (options.resizable && $.fn.resizable) {
this._makeResizable();
}
this._createButtons(options.buttons);
this._isOpen = false;
if ($.fn.bgiframe) {
uiDialog.bgiframe();
}
this._on(uiDialog, { keydown: function (event) {
if (!options.modal || event.keyCode !== $.ui.keyCode.TAB) {
return;
}
var tabbables = $(":tabbable", uiDialog), first = tabbables.filter(":first"), last = tabbables.filter(":last");
if (event.target === last[0] && !event.shiftKey) {
first.focus(1);
return false;
}
else if (event.target === first[0] && event.shiftKey) {
last.focus(1);
return false;
}
} });
},
_init: function () {
if (this.options.autoOpen) {
this.open();
}
},
_destroy: function () {
var next, oldPosition = this.oldPosition;
if (this.overlay) {
this.overlay.destroy();
}
this.uiDialog.hide();
this.element
.removeClass("ui-dialog-content ui-widget-content")
.hide()
.appendTo("body");
this.uiDialog.remove();
if (this.originalTitle) {
this.element.attr("title", this.originalTitle);
}
next = oldPosition.parent.children().eq(oldPosition.index);
if (next.length && next[0] !== this.element[0]) {
next.before(this.element);
}
else {
oldPosition.parent.append(this.element);
}
},
widget: function () {
return this.uiDialog;
},
close: function (event) {
var that = this, maxZ, thisZ;
if (!this._isOpen) {
return;
}
if (false === this._trigger("beforeClose", event)) {
return;
}
this._isOpen = false;
if (this.overlay) {
this.overlay.destroy();
}
if (this.options.hide) {
this._hide(this.uiDialog, this.options.hide, function () {
that._trigger("close", event);
});
}
else {
this.uiDialog.hide();
this._trigger("close", event);
}
$.ui.dialog.overlay.resize();
if (this.options.modal) {
maxZ = 0;
$(".ui-dialog").each(function () {
if (this !== that.uiDialog[0]) {
thisZ = $(this).css("z-index");
if (!isNaN(thisZ)) {
maxZ = Math.max(maxZ, thisZ);
}
}
});
$.ui.dialog.maxZ = maxZ;
}
return this;
},
isOpen: function () {
return this._isOpen;
},
moveToTop: function (force, event) {
var options = this.options, saveScroll;
if ((options.modal && !force) ||
(!options.stack && !options.modal)) {
return this._trigger("focus", event);
}
if (options.zIndex > $.ui.dialog.maxZ) {
$.ui.dialog.maxZ = options.zIndex;
}
if (this.overlay) {
$.ui.dialog.maxZ += 1;
$.ui.dialog.overlay.maxZ = $.ui.dialog.maxZ;
this.overlay.$el.css("z-index", $.ui.dialog.overlay.maxZ);
}
saveScroll = {
scrollTop: this.element.scrollTop(),
scrollLeft: this.element.scrollLeft()
};
$.ui.dialog.maxZ += 1;
this.uiDialog.css("z-index", $.ui.dialog.maxZ);
this.element.attr(saveScroll);
this._trigger("focus", event);
return this;
},
open: function () {
if (this._isOpen) {
return;
}
var hasFocus, options = this.options, uiDialog = this.uiDialog;
this._size();
this._position(options.position);
uiDialog.show(options.show);
this.overlay = options.modal ? new $.ui.dialog.overlay(this) : null;
this.moveToTop(true);
hasFocus = this.element.find(":tabbable");
if (!hasFocus.length) {
hasFocus = this.uiDialogButtonPane.find(":tabbable");
if (!hasFocus.length) {
hasFocus = uiDialog;
}
}
hasFocus.eq(0).focus();
this._isOpen = true;
this._trigger("open");
return this;
},
_createButtons: function (buttons) {
var that = this, hasButtons = false;
this.uiDialogButtonPane.remove();
this.uiButtonSet.empty();
if (typeof buttons === "object" && buttons !== null) {
$.each(buttons, function () {
return !(hasButtons = true);
});
}
if (hasButtons) {
$.each(buttons, function (name, props) {
var button, click;
props = typeof props === 'function' ?
{ click: props, text: name } :
props;
props = $.extend({ type: "button" }, props);
click = props.click;
props.click = function () {
click.apply(that.element[0], arguments);
};
button = $("<button></button>", props)
.appendTo(that.uiButtonSet);
if ($.fn.button) {
button.button();
}
});
this.uiDialog.addClass("ui-dialog-buttons");
this.uiDialogButtonPane.appendTo(this.uiDialog);
}
else {
this.uiDialog.removeClass("ui-dialog-buttons");
}
},
_makeDraggable: function () {
var that = this, options = this.options;
function filteredUi(ui) {
return {
position: ui.position,
offset: ui.offset
};
}
this.uiDialog.draggable({
cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
handle: ".ui-dialog-titlebar",
containment: "document",
start: function (event, ui) {
$(this)
.addClass("ui-dialog-dragging");
that._trigger("dragStart", event, filteredUi(ui));
},
drag: function (event, ui) {
that._trigger("drag", event, filteredUi(ui));
},
stop: function (event, ui) {
options.position = [
ui.position.left - that.document.scrollLeft(),
ui.position.top - that.document.scrollTop()
];
$(this)
.removeClass("ui-dialog-dragging");
that._trigger("dragStop", event, filteredUi(ui));
$.ui.dialog.overlay.resize();
}
});
},
_makeResizable: function (handles) {
handles = (handles === undefined ? this.options.resizable : handles);
var that = this, options = this.options, position = this.uiDialog.css("position"), resizeHandles = typeof handles === 'string' ?
handles :
"n,e,s,w,se,sw,ne,nw";
function filteredUi(ui) {
return {
originalPosition: ui.originalPosition,
originalSize: ui.originalSize,
position: ui.position,
size: ui.size
};
}
this.uiDialog.resizable({
cancel: ".ui-dialog-content",
containment: "document",
alsoResize: this.element,
maxWidth: options.maxWidth,
maxHeight: options.maxHeight,
minWidth: options.minWidth,
minHeight: this._minHeight(),
handles: resizeHandles,
start: function (event, ui) {
$(this).addClass("ui-dialog-resizing");
that._trigger("resizeStart", event, filteredUi(ui));
},
resize: function (event, ui) {
that._trigger("resize", event, filteredUi(ui));
},
stop: function (event, ui) {
$(this).removeClass("ui-dialog-resizing");
options.height = $(this).height();
options.width = $(this).width();
that._trigger("resizeStop", event, filteredUi(ui));
$.ui.dialog.overlay.resize();
}
})
.css("position", position)
.find(".ui-resizable-se")
.addClass("ui-icon ui-icon-grip-diagonal-se");
},
_minHeight: function () {
var options = this.options;
if (options.height === "auto") {
return options.minHeight;
}
else {
return Math.min(options.minHeight, options.height);
}
},
_position: function (position) {
var myAt = [], offset = [0, 0], isVisible;
if (position) {
if (typeof position === "string" || (typeof position === "object" && "0" in position)) {
myAt = position.split ? position.split(" ") : [position[0], position[1]];
if (myAt.length === 1) {
myAt[1] = myAt[0];
}
$.each(["left", "top"], function (i, offsetPosition) {
if (+myAt[i] === myAt[i]) {
offset[i] = myAt[i];
myAt[i] = offsetPosition;
}
});
position = {
my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " +
myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]),
at: myAt.join(" ")
};
}
position = $.extend({}, $.ui.dialog.prototype.options.position, position);
}
else {
position = $.ui.dialog.prototype.options.position;
}
isVisible = this.uiDialog.is(":visible");
if (!isVisible) {
this.uiDialog.show();
}
this.uiDialog.position(position);
if (!isVisible) {
this.uiDialog.hide();
}
},
_setOptions: function (options) {
var that = this, resizableOptions = {}, resize = false;
$.each(options, function (key, value) {
that._setOption(key, value);
if (key in sizeRelatedOptions) {
resize = true;
}
if (key in resizableRelatedOptions) {
resizableOptions[key] = value;
}
});
if (resize) {
this._size();
}
if (this.uiDialog.is(":data(resizable)")) {
this.uiDialog.resizable("option", resizableOptions);
}
},
_setOption: function (key, value) {
var isDraggable, isResizable, uiDialog = this.uiDialog;
switch (key) {
case "buttons":
this._createButtons(value);
break;
case "closeText":
this.uiDialogTitlebarCloseText.text("" + value);
break;
case "dialogClass":
uiDialog
.removeClass(this.options.dialogClass)
.addClass(uiDialogClasses + value);
break;
case "disabled":
if (value) {
uiDialog.addClass("ui-dialog-disabled");
}
else {
uiDialog.removeClass("ui-dialog-disabled");
}
break;
case "draggable":
isDraggable = uiDialog.is(":data(draggable)");
if (isDraggable && !value) {
uiDialog.draggable("destroy");
}
if (!isDraggable && value) {
this._makeDraggable();
}
break;
case "position":
this._position(value);
break;
case "resizable":
isResizable = uiDialog.is(":data(resizable)");
if (isResizable && !value) {
uiDialog.resizable("destroy");
}
if (isResizable && typeof value === "string") {
uiDialog.resizable("option", "handles", value);
}
if (!isResizable && value !== false) {
this._makeResizable(value);
}
break;
case "title":
$(".ui-dialog-title", this.uiDialogTitlebar)
.html("" + (value || " "));
break;
}
this._super(key, value);
},
_size: function () {
var nonContentHeight, minContentHeight, autoHeight, options = this.options, isVisible = this.uiDialog.is(":visible");
this.element.show().css({
width: "auto",
minHeight: 0,
height: 0
});
if (options.minWidth > options.width) {
options.width = options.minWidth;
}
nonContentHeight = this.uiDialog.css({
height: "auto",
width: options.width
})
.outerHeight();
minContentHeight = Math.max(0, options.minHeight - nonContentHeight);
if (options.height === "auto") {
if ($.support.minHeight) {
this.element.css({
minHeight: minContentHeight,
height: "auto"
});
}
else {
this.uiDialog.show();
autoHeight = this.element.css("height", "auto").height();
if (!isVisible) {
this.uiDialog.hide();
}
this.element.height(Math.max(autoHeight, minContentHeight));
}
}
else {
this.element.height(Math.max(options.height - nonContentHeight, 0));
}
if (this.uiDialog.is(":data(resizable)")) {
this.uiDialog.resizable("option", "minHeight", this._minHeight());
}
}
});
$.extend($.ui.dialog, {
uuid: 0,
maxZ: 0,
getTitleId: function ($el) {
var id = $el.attr("id");
if (!id) {
this.uuid += 1;
id = this.uuid;
}
return "ui-dialog-title-" + id;
},
overlay: function (dialog) {
this.$el = $.ui.dialog.overlay.create(dialog);
}
});
$.extend($.ui.dialog.overlay, {
instances: [],
oldInstances: [],
maxZ: 0,
events: $.map("focus,mousedown,mouseup,keydown,keypress,click".split(","), function (event) {
return event + ".dialog-overlay";
}).join(" "),
create: function (dialog) {
if (this.instances.length === 0) {
setTimeout(function () {
if ($.ui.dialog.overlay.instances.length) {
$(document).on($.ui.dialog.overlay.events, function (event) {
if ($(event.target).zIndex() < $.ui.dialog.overlay.maxZ) {
return false;
}
});
}
}, 1);
$(window).on("resize.dialog-overlay", $.ui.dialog.overlay.resize);
}
var $el = (this.oldInstances.pop() || $("<div>").addClass("ui-widget-overlay"));
$(document).on("keydown.dialog-overlay", function (event) {
var instances = $.ui.dialog.overlay.instances;
if (instances.length !== 0 && instances[instances.length - 1] === $el &&
dialog.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
event.keyCode === $.ui.keyCode.ESCAPE) {
dialog.close(event);
event.preventDefault();
}
});
$el.appendTo(document.body).css({
width: this.width(),
height: this.height()
});
if ($.fn.bgiframe) {
$el.bgiframe();
}
this.instances.push($el);
return $el;
},
destroy: function ($el) {
var indexOf = $.inArray($el, this.instances), maxZ = 0;
if (indexOf !== -1) {
this.oldInstances.push(this.instances.splice(indexOf, 1)[0]);
}
if (this.instances.length === 0) {
$([document, window]).off(".dialog-overlay");
}
$el.height(0).width(0).remove();
$.each(this.instances, function () {
maxZ = Math.max(maxZ, this.css("z-index"));
});
this.maxZ = maxZ;
},
height: function () {
var scrollHeight, offsetHeight;
if ($.ui.ie) {
scrollHeight = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);
offsetHeight = Math.max(document.documentElement.offsetHeight, document.body.offsetHeight);
if (scrollHeight < offsetHeight) {
return $(window).height() + "px";
}
else {
return scrollHeight + "px";
}
}
else {
return $(document).height() + "px";
}
},
width: function () {
var scrollWidth, offsetWidth;
if ($.ui.ie) {
scrollWidth = Math.max(document.documentElement.scrollWidth, document.body.scrollWidth);
offsetWidth = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth);
if (scrollWidth < offsetWidth) {
return $(window).width() + "px";
}
else {
return scrollWidth + "px";
}
}
else {
return $(document).width() + "px";
}
},
resize: function () {
var $overlays = $([]);
$.each($.ui.dialog.overlay.instances, function () {
$overlays = $overlays.add(this);
});
$overlays.css({
width: 0,
height: 0
}).css({
width: $.ui.dialog.overlay.width(),
height: $.ui.dialog.overlay.height()
});
}
});
$.extend($.ui.dialog.overlay.prototype, {
destroy: function () {
$.ui.dialog.overlay.destroy(this.$el);
}
});
}(jQuery));
(function ($, undefined) {
var rvertical = /up|down|vertical/, rpositivemotion = /up|left|vertical|horizontal/;
$.effects.effect.blind = function (o, done) {
var el = $(this), props = ["position", "top", "bottom", "left", "right", "height", "width"], mode = $.effects.setMode(el, o.mode || "hide"), direction = o.direction || "up", vertical = rvertical.test(direction), ref = vertical ? "height" : "width", ref2 = vertical ? "top" : "left", motion = rpositivemotion.test(direction), animation = {}, show = mode === "show", wrapper, distance, margin;
if (el.parent().is(".ui-effects-wrapper")) {
$.effects.save(el.parent(), props);
}
else {
$.effects.save(el, props);
}
el.show();
wrapper = $.effects.createWrapper(el).css({
overflow: "hidden"
});
distance = wrapper[ref]();
margin = parseFloat(wrapper.css(ref2)) || 0;
animation[ref] = show ? distance : 0;
if (!motion) {
el
.css(vertical ? "bottom" : "right", 0)
.css(vertical ? "top" : "left", "auto")
.css({ position: "absolute" });
animation[ref2] = show ? margin : distance + margin;
}
if (show) {
wrapper.css(ref, 0);
if (!motion) {
wrapper.css(ref2, margin + distance);
}
}
wrapper.animate(animation, {
duration: o.duration,
easing: o.easing,
queue: false,
complete: function () {
if (mode === "hide") {
el.hide();
}
$.effects.restore(el, props);
$.effects.removeWrapper(el);
done();
}
});
};
})(jQuery);
(function ($, undefined) {
$.effects.effect.clip = function (o, done) {
var el = $(this), props = ["position", "top", "bottom", "left", "right", "height", "width"], mode = $.effects.setMode(el, o.mode || "hide"), show = mode === "show", direction = o.direction || "vertical", vert = direction === "vertical", size = vert ? "height" : "width", position = vert ? "top" : "left", animation = {}, wrapper, animate, distance;
$.effects.save(el, props);
el.show();
wrapper = $.effects.createWrapper(el).css({
overflow: "hidden"
});
animate = (el[0].tagName === "IMG") ? wrapper : el;
distance = animate[size]();
if (show) {
animate.css(size, 0);
animate.css(position, distance / 2);
}
animation[size] = show ? distance : 0;
animation[position] = show ? 0 : distance / 2;
animate.animate(animation, {
queue: false,
duration: o.duration,
easing: o.easing,
complete: function () {
if (!show) {
el.hide();
}
$.effects.restore(el, props);
$.effects.removeWrapper(el);
done();
}
});
};
})(jQuery);
(function ($, undefined) {
$.effects.effect.drop = function (o, done) {
var el = $(this), props = ["position", "top", "bottom", "left", "right", "opacity", "height", "width"], mode = $.effects.setMode(el, o.mode || "hide"), show = mode === "show", direction = o.direction || "left", ref = (direction === "up" || direction === "down") ? "top" : "left", motion = (direction === "up" || direction === "left") ? "pos" : "neg", animation = {
opacity: show ? 1 : 0
}, distance;
$.effects.save(el, props);
el.show();
$.effects.createWrapper(el);
distance = o.distance || el[ref === "top" ? "outerHeight" : "outerWidth"](true) / 2;
if (show) {
el
.css("opacity", 0)
.css(ref, motion === "pos" ? -distance : distance);
}
animation[ref] = (show ?
(motion === "pos" ? "+=" : "-=") :
(motion === "pos" ? "-=" : "+=")) +
distance;
el.animate(animation, {
queue: false,
duration: o.duration,
easing: o.easing,
complete: function () {
if (mode === "hide") {
el.hide();
}
$.effects.restore(el, props);
$.effects.removeWrapper(el);
done();
}
});
};
})(jQuery);
(function ($, undefined) {
$.effects.effect.highlight = function (o, done) {
var elem = $(this), props = ["backgroundImage", "backgroundColor", "opacity"], mode = $.effects.setMode(elem, o.mode || "show"), animation = {
backgroundColor: elem.css("backgroundColor")
};
if (mode === "hide") {
animation.opacity = 0;
}
$.effects.save(elem, props);
elem
.show()
.css({
backgroundImage: "none",
backgroundColor: o.color || "#ffff99"
})
.animate(animation, {
queue: false,
duration: o.duration,
easing: o.easing,
complete: function () {
if (mode === "hide") {
elem.hide();
}
$.effects.restore(elem, props);
done();
}
});
};
})(jQuery);
(function ($, undefined) {
$.effects.effect.puff = function (o, done) {
var elem = $(this), mode = $.effects.setMode(elem, o.mode || "hide"), hide = mode === "hide", percent = parseInt(o.percent, 10) || 150, factor = percent / 100, original = {
height: elem.height(),
width: elem.width(),
outerHeight: elem.outerHeight(),
outerWidth: elem.outerWidth()
};
$.extend(o, {
effect: "scale",
queue: false,
fade: true,
mode: mode,
complete: done,
percent: hide ? percent : 100,
from: hide ?
original :
{
height: original.height * factor,
width: original.width * factor,
outerHeight: original.outerHeight * factor,
outerWidth: original.outerWidth * factor
}
});
elem.effect(o);
};
$.effects.effect.scale = function (o, done) {
var el = $(this), options = $.extend(true, {}, o), mode = $.effects.setMode(el, o.mode || "effect"), percent = parseInt(o.percent, 10) ||
(parseInt(o.percent, 10) === 0 ? 0 : (mode === "hide" ? 0 : 100)), direction = o.direction || "both", origin = o.origin, original = {
height: el.height(),
width: el.width(),
outerHeight: el.outerHeight(),
outerWidth: el.outerWidth()
}, factor = {
y: direction !== "horizontal" ? (percent / 100) : 1,
x: direction !== "vertical" ? (percent / 100) : 1
};
options.effect = "size";
options.queue = false;
options.complete = done;
if (mode !== "effect") {
options.origin = origin || ["middle", "center"];
options.restore = true;
}
options.from = o.from || (mode === "show" ? {
height: 0,
width: 0,
outerHeight: 0,
outerWidth: 0
} : original);
options.to = {
height: original.height * factor.y,
width: original.width * factor.x,
outerHeight: original.outerHeight * factor.y,
outerWidth: original.outerWidth * factor.x
};
if (options.fade) {
if (mode === "show") {
options.from.opacity = 0;
options.to.opacity = 1;
}
if (mode === "hide") {
options.from.opacity = 1;
options.to.opacity = 0;
}
}
el.effect(options);
};
$.effects.effect.size = function (o, done) {
var original, baseline, factor, el = $(this), props0 = ["position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity"], props1 = ["position", "top", "bottom", "left", "right", "overflow", "opacity"], props2 = ["width", "height", "overflow"], cProps = ["fontSize"], vProps = ["borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom"], hProps = ["borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight"], mode = $.effects.setMode(el, o.mode || "effect"), restore = o.restore || mode !== "effect", scale = o.scale || "both", origin = o.origin || ["middle", "center"], position = el.css("position"), props = restore ? props0 : props1, zero = {
height: 0,
width: 0,
outerHeight: 0,
outerWidth: 0
};
if (mode === "show") {
el.show();
}
original = {
height: el.height(),
width: el.width(),
outerHeight: el.outerHeight(),
outerWidth: el.outerWidth()
};
if (o.mode === "toggle" && mode === "show") {
el.from = o.to || zero;
el.to = o.from || original;
}
else {
el.from = o.from || (mode === "show" ? zero : original);
el.to = o.to || (mode === "hide" ? zero : original);
}
factor = {
from: {
y: el.from.height / original.height,
x: el.from.width / original.width
},
to: {
y: el.to.height / original.height,
x: el.to.width / original.width
}
};
if (scale === "box" || scale === "both") {
if (factor.from.y !== factor.to.y) {
props = props.concat(vProps);
el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from);
el.to = $.effects.setTransition(el, vProps, factor.to.y, el.to);
}
if (factor.from.x !== factor.to.x) {
props = props.concat(hProps);
el.from = $.effects.setTransition(el, hProps, factor.from.x, el.from);
el.to = $.effects.setTransition(el, hProps, factor.to.x, el.to);
}
}
if (scale === "content" || scale === "both") {
if (factor.from.y !== factor.to.y) {
props = props.concat(cProps).concat(props2);
el.from = $.effects.setTransition(el, cProps, factor.from.y, el.from);
el.to = $.effects.setTransition(el, cProps, factor.to.y, el.to);
}
}
$.effects.save(el, props);
el.show();
$.effects.createWrapper(el);
el.css("overflow", "hidden").css(el.from);
if (origin) {
baseline = $.effects.getBaseline(origin, original);
el.from.top = (original.outerHeight - el.outerHeight()) * baseline.y;
el.from.left = (original.outerWidth - el.outerWidth()) * baseline.x;
el.to.top = (original.outerHeight - el.to.outerHeight) * baseline.y;
el.to.left = (original.outerWidth - el.to.outerWidth) * baseline.x;
}
el.css(el.from);
if (scale === "content" || scale === "both") {
vProps = vProps.concat(["marginTop", "marginBottom"]).concat(cProps);
hProps = hProps.concat(["marginLeft", "marginRight"]);
props2 = props0.concat(vProps).concat(hProps);
el.find("*[width]").each(function () {
var child = $(this), c_original = {
height: child.height(),
width: child.width(),
outerHeight: child.outerHeight(),
outerWidth: child.outerWidth()
};
if (restore) {
$.effects.save(child, props2);
}
child.from = {
height: c_original.height * factor.from.y,
width: c_original.width * factor.from.x,
outerHeight: c_original.outerHeight * factor.from.y,
outerWidth: c_original.outerWidth * factor.from.x
};
child.to = {
height: c_original.height * factor.to.y,
width: c_original.width * factor.to.x,
outerHeight: c_original.height * factor.to.y,
outerWidth: c_original.width * factor.to.x
};
if (factor.from.y !== factor.to.y) {
child.from = $.effects.setTransition(child, vProps, factor.from.y, child.from);
child.to = $.effects.setTransition(child, vProps, factor.to.y, child.to);
}
if (factor.from.x !== factor.to.x) {
child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from);
child.to = $.effects.setTransition(child, hProps, factor.to.x, child.to);
}
child.css(child.from);
child.animate(child.to, o.duration, o.easing, function () {
if (restore) {
$.effects.restore(child, props2);
}
});
});
}
el.animate(el.to, {
queue: false,
duration: o.duration,
easing: o.easing,
complete: function () {
if (el.to.opacity === 0) {
el.css("opacity", el.from.opacity);
}
if (mode === "hide") {
el.hide();
}
$.effects.restore(el, props);
if (!restore) {
if (position === "static") {
el.css({
position: "relative",
top: el.to.top,
left: el.to.left
});
}
else {
$.each(["top", "left"], function (idx, pos) {
el.css(pos, function (_, str) {
var val = parseInt(str, 10), toRef = idx ? el.to.left : el.to.top;
if (str === "auto") {
return toRef + "px";
}
return val + toRef + "px";
});
});
}
}
$.effects.removeWrapper(el);
done();
}
});
};
})(jQuery);
(function ($, undefined) {
$.effects.effect.shake = function (o, done) {
var el = $(this), props = ["position", "top", "bottom", "left", "right", "height", "width"], mode = $.effects.setMode(el, o.mode || "effect"), direction = o.direction || "left", distance = o.distance || 20, times = o.times || 3, anims = times * 2 + 1, speed = Math.round(o.duration / anims), ref = (direction === "up" || direction === "down") ? "top" : "left", positiveMotion = (direction === "up" || direction === "left"), animation = {}, animation1 = {}, animation2 = {}, i, queue = el.queue(), queuelen = queue.length;
$.effects.save(el, props);
el.show();
$.effects.createWrapper(el);
animation[ref] = (positiveMotion ? "-=" : "+=") + distance;
animation1[ref] = (positiveMotion ? "+=" : "-=") + distance * 2;
animation2[ref] = (positiveMotion ? "-=" : "+=") + distance * 2;
el.animate(animation, speed, o.easing);
for (i = 1; i < times; i++) {
el.animate(animation1, speed, o.easing).animate(animation2, speed, o.easing);
}
el
.animate(animation1, speed, o.easing)
.animate(animation, speed / 2, o.easing)
.queue(function () {
if (mode === "hide") {
el.hide();
}
$.effects.restore(el, props);
$.effects.removeWrapper(el);
done();
});
if (queuelen > 1) {
queue.splice.apply(queue, [1, 0].concat(queue.splice(queuelen, anims + 1)));
}
el.dequeue();
};
})(jQuery);
(function ($, undefined) {
var mouseHandled = false;
$.widget("ui.menu", {
version: "1.9.2",
defaultElement: "<ul>",
delay: 300,
options: {
icons: {
submenu: "ui-icon-carat-1-e"
},
menus: "ul",
position: {
my: "left top",
at: "right top"
},
role: "menu",
blur: null,
focus: null,
select: null
},
_create: function () {
this.activeMenu = this.element;
this.element
.uniqueId()
.addClass("ui-menu ui-widget ui-widget-content ui-corner-all")
.toggleClass("ui-menu-icons", !!this.element.find(".ui-icon").length)
.attr({
role: this.options.role,
tabIndex: 0
})
.on("click" + this.eventNamespace, $.proxy(function (event) {
if (this.options.disabled) {
event.preventDefault();
}
}, this));
if (this.options.disabled) {
this.element
.addClass("ui-state-disabled")
.attr("aria-disabled", "true");
}
this._on({
"mousedown .ui-menu-item > a": function (event) {
event.preventDefault();
},
"click .ui-state-disabled > a": function (event) {
event.preventDefault();
},
"click .ui-menu-item:has(a)": function (event) {
var target = $(event.target).closest(".ui-menu-item");
if (!mouseHandled && target.not(".ui-state-disabled").length) {
mouseHandled = true;
this.select(event);
if (target.has(".ui-menu").length) {
this.expand(event);
}
else if (!this.element.is(":focus")) {
this.element.trigger("focus", [true]);
if (this.active && this.active.parents(".ui-menu").length === 1) {
clearTimeout(this.timer);
}
}
}
},
"mouseenter .ui-menu-item": function (event) {
var target = $(event.currentTarget);
target.siblings().children(".ui-state-active").removeClass("ui-state-active");
this.focus(event, target);
},
mouseleave: "collapseAll",
"mouseleave .ui-menu": "collapseAll",
focus: function (event, keepActiveItem) {
var item = this.active || this.element.children(".ui-menu-item").eq(0);
if (!keepActiveItem) {
this.focus(event, item);
}
},
blur: function (event) {
this._delay(function () {
if (!$.contains(this.element[0], this.document[0].activeElement)) {
this.collapseAll(event);
}
});
},
keydown: "_keydown"
});
this.refresh();
this._on(this.document, {
click: function (event) {
if (!$(event.target).closest(".ui-menu").length) {
this.collapseAll(event);
}
mouseHandled = false;
}
});
},
_destroy: function () {
this.element
.removeAttr("aria-activedescendant")
.find(".ui-menu").addBack()
.removeClass("ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons")
.removeAttr("role")
.removeAttr("tabIndex")
.removeAttr("aria-labelledby")
.removeAttr("aria-expanded")
.removeAttr("aria-hidden")
.removeAttr("aria-disabled")
.removeUniqueId()
.show();
this.element.find(".ui-menu-item")
.removeClass("ui-menu-item")
.removeAttr("role")
.removeAttr("aria-disabled")
.children("a")
.removeUniqueId()
.removeClass("ui-corner-all ui-state-hover")
.removeAttr("tabIndex")
.removeAttr("role")
.removeAttr("aria-haspopup")
.children().each(function () {
var elem = $(this);
if (elem.data("ui-menu-submenu-carat")) {
elem.remove();
}
});
this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content");
},
_keydown: function (event) {
var match, prev, character, skip, regex, preventDefault = true;
function escape(value) {
return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
}
switch (event.keyCode) {
case $.ui.keyCode.PAGE_UP:
this.previousPage(event);
break;
case $.ui.keyCode.PAGE_DOWN:
this.nextPage(event);
break;
case $.ui.keyCode.HOME:
this._move("first", "first", event);
break;
case $.ui.keyCode.END:
this._move("last", "last", event);
break;
case $.ui.keyCode.UP:
this.previous(event);
break;
case $.ui.keyCode.DOWN:
this.next(event);
break;
case $.ui.keyCode.LEFT:
this.collapse(event);
break;
case $.ui.keyCode.RIGHT:
if (this.active && !this.active.is(".ui-state-disabled")) {
this.expand(event);
}
break;
case $.ui.keyCode.ENTER:
case $.ui.keyCode.SPACE:
this._activate(event);
break;
case $.ui.keyCode.ESCAPE:
this.collapse(event);
break;
default:
preventDefault = false;
prev = this.previousFilter || "";
character = String.fromCharCode(event.keyCode);
skip = false;
clearTimeout(this.filterTimer);
if (character === prev) {
skip = true;
}
else {
character = prev + character;
}
regex = new RegExp("^" + escape(character), "i");
match = this.activeMenu.children(".ui-menu-item").filter(function () {
return regex.test($(this).children("a").text());
});
match = skip && match.index(this.active.next()) !== -1 ?
this.active.nextAll(".ui-menu-item") :
match;
if (!match.length) {
character = String.fromCharCode(event.keyCode);
regex = new RegExp("^" + escape(character), "i");
match = this.activeMenu.children(".ui-menu-item").filter(function () {
return regex.test($(this).children("a").text());
});
}
if (match.length) {
this.focus(event, match);
if (match.length > 1) {
this.previousFilter = character;
this.filterTimer = this._delay(function () {
delete this.previousFilter;
}, 1000);
}
else {
delete this.previousFilter;
}
}
else {
delete this.previousFilter;
}
}
if (preventDefault) {
event.preventDefault();
}
},
_activate: function (event) {
if (!this.active.is(".ui-state-disabled")) {
if (this.active.children("a[aria-haspopup='true']").length) {
this.expand(event);
}
else {
this.select(event);
}
}
},
refresh: function () {
var menus, icon = this.options.icons.submenu, submenus = this.element.find(this.options.menus);
submenus.filter(":not(.ui-menu)")
.addClass("ui-menu ui-widget ui-widget-content ui-corner-all")
.hide()
.attr({
role: this.options.role,
"aria-hidden": "true",
"aria-expanded": "false"
})
.each(function () {
var menu = $(this), item = menu.prev("a"), submenuCarat = $("<span>")
.addClass("ui-menu-icon ui-icon " + icon)
.data("ui-menu-submenu-carat", true);
item
.attr("aria-haspopup", "true")
.prepend(submenuCarat);
menu.attr("aria-labelledby", item.attr("id"));
});
menus = submenus.add(this.element);
menus.children(":not(.ui-menu-item):has(a)")
.addClass("ui-menu-item")
.attr("role", "presentation")
.children("a")
.uniqueId()
.addClass("ui-corner-all")
.attr({
tabIndex: -1,
role: this._itemRole()
});
menus.children(":not(.ui-menu-item)").each(function () {
var item = $(this);
if (!/[^\-—–\s]/.test(item.text())) {
item.addClass("ui-widget-content ui-menu-divider");
}
});
menus.children(".ui-state-disabled").attr("aria-disabled", "true");
if (this.active && !$.contains(this.element[0], this.active[0])) {
this.blur();
}
},
_itemRole: function () {
return {
menu: "menuitem",
listbox: "option"
}[this.options.role];
},
focus: function (event, item) {
var nested, focused;
this.blur(event, event && event.type === "focus");
this._scrollIntoView(item);
this.active = item.first();
focused = this.active.children("a").addClass("ui-state-focus");
if (this.options.role) {
this.element.attr("aria-activedescendant", focused.attr("id"));
}
this.active
.parent()
.closest(".ui-menu-item")
.children("a:first")
.addClass("ui-state-active");
if (event && event.type === "keydown") {
this._close();
}
else {
this.timer = this._delay(function () {
this._close();
}, this.delay);
}
nested = item.children(".ui-menu");
if (nested.length && (/^mouse/.test(event.type))) {
this._startOpening(nested);
}
this.activeMenu = item.parent();
this._trigger("focus", event, { item: item });
},
_scrollIntoView: function (item) {
var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
if (this._hasScroll()) {
borderTop = parseFloat($.css(this.activeMenu[0], "borderTopWidth")) || 0;
paddingTop = parseFloat($.css(this.activeMenu[0], "paddingTop")) || 0;
offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
scroll = this.activeMenu.scrollTop();
elementHeight = this.activeMenu.height();
itemHeight = item.height();
if (offset < 0) {
this.activeMenu.scrollTop(scroll + offset);
}
else if (offset + itemHeight > elementHeight) {
this.activeMenu.scrollTop(scroll + offset - elementHeight + itemHeight);
}
}
},
blur: function (event, fromFocus) {
if (!fromFocus) {
clearTimeout(this.timer);
}
if (!this.active) {
return;
}
this.active.children("a").removeClass("ui-state-focus");
this.active = null;
this._trigger("blur", event, { item: this.active });
},
_startOpening: function (submenu) {
clearTimeout(this.timer);
if (submenu.attr("aria-hidden") !== "true") {
return;
}
this.timer = this._delay(function () {
this._close();
this._open(submenu);
}, this.delay);
},
_open: function (submenu) {
var position = $.extend({
of: this.active
}, this.options.position);
clearTimeout(this.timer);
this.element.find(".ui-menu").not(submenu.parents(".ui-menu"))
.hide()
.attr("aria-hidden", "true");
submenu
.show()
.removeAttr("aria-hidden")
.attr("aria-expanded", "true")
.position(position);
},
collapseAll: function (event, all) {
clearTimeout(this.timer);
this.timer = this._delay(function () {
var currentMenu = all ? this.element :
$(event && event.target).closest(this.element.find(".ui-menu"));
if (!currentMenu.length) {
currentMenu = this.element;
}
this._close(currentMenu);
this.blur(event);
this.activeMenu = currentMenu;
}, this.delay);
},
_close: function (startMenu) {
if (!startMenu) {
startMenu = this.active ? this.active.parent() : this.element;
}
startMenu
.find(".ui-menu")
.hide()
.attr("aria-hidden", "true")
.attr("aria-expanded", "false")
.end()
.find("a.ui-state-active")
.removeClass("ui-state-active");
},
collapse: function (event) {
var newItem = this.active &&
this.active.parent().closest(".ui-menu-item", this.element);
if (newItem && newItem.length) {
this._close();
this.focus(event, newItem);
}
},
expand: function (event) {
var newItem = this.active &&
this.active
.children(".ui-menu ")
.children(".ui-menu-item")
.first();
if (newItem && newItem.length) {
this._open(newItem.parent());
this._delay(function () {
this.focus(event, newItem);
});
}
},
next: function (event) {
this._move("next", "first", event);
},
previous: function (event) {
this._move("prev", "last", event);
},
isFirstItem: function () {
return this.active && !this.active.prevAll(".ui-menu-item").length;
},
isLastItem: function () {
return this.active && !this.active.nextAll(".ui-menu-item").length;
},
_move: function (direction, filter, event) {
var next;
if (this.active) {
if (direction === "first" || direction === "last") {
next = this.active[direction === "first" ? "prevAll" : "nextAll"](".ui-menu-item")
.eq(-1);
}
else {
next = this.active[direction + "All"](".ui-menu-item")
.eq(0);
}
}
if (!next || !next.length || !this.active) {
next = this.activeMenu.children(".ui-menu-item")[filter]();
}
this.focus(event, next);
},
nextPage: function (event) {
var item, base, height;
if (!this.active) {
this.next(event);
return;
}
if (this.isLastItem()) {
return;
}
if (this._hasScroll()) {
base = this.active.offset().top;
height = this.element.height();
this.active.nextAll(".ui-menu-item").each(function () {
item = $(this);
return item.offset().top - base - height < 0;
});
this.focus(event, item);
}
else {
this.focus(event, this.activeMenu.children(".ui-menu-item")[!this.active ? "first" : "last"]());
}
},
previousPage: function (event) {
var item, base, height;
if (!this.active) {
this.next(event);
return;
}
if (this.isFirstItem()) {
return;
}
if (this._hasScroll()) {
base = this.active.offset().top;
height = this.element.height();
this.active.prevAll(".ui-menu-item").each(function () {
item = $(this);
return item.offset().top - base + height > 0;
});
this.focus(event, item);
}
else {
this.focus(event, this.activeMenu.children(".ui-menu-item").first());
}
},
_hasScroll: function () {
return this.element.outerHeight() < this.element.prop("scrollHeight");
},
select: function (event) {
this.active = this.active || $(event.target).closest(".ui-menu-item");
var ui = { item: this.active };
if (!this.active.has(".ui-menu").length) {
this.collapseAll(event, true);
}
this._trigger("select", event, ui);
}
});
}(jQuery));
(function ($, undefined) {
$.ui = $.ui || {};
var cachedScrollbarWidth, max = Math.max, abs = Math.abs, round = Math.round, rhorizontal = /left|center|right/, rvertical = /top|center|bottom/, roffset = /[\+\-]\d+%?/, rposition = /^\w+/, rpercent = /%$/, _position = $.fn.position;
function getOffsets(offsets, width, height) {
return [
parseInt(offsets[0], 10) * (rpercent.test(offsets[0]) ? width / 100 : 1),
parseInt(offsets[1], 10) * (rpercent.test(offsets[1]) ? height / 100 : 1)
];
}
function parseCss(element, property) {
return parseInt($.css(element, property), 10) || 0;
}
$.position = {
scrollbarWidth: function () {
if (cachedScrollbarWidth !== undefined) {
return cachedScrollbarWidth;
}
var w1, w2, div = $("<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"), innerDiv = div.children()[0];
$("body").append(div);
w1 = innerDiv.offsetWidth;
div.css("overflow", "scroll");
w2 = innerDiv.offsetWidth;
if (w1 === w2) {
w2 = div[0].clientWidth;
}
div.remove();
return (cachedScrollbarWidth = w1 - w2);
},
getScrollInfo: function (within) {
var overflowX = within.isWindow ? "" : within.element.css("overflow-x"), overflowY = within.isWindow ? "" : 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: hasOverflowX ? $.position.scrollbarWidth() : 0,
height: hasOverflowY ? $.position.scrollbarWidth() : 0
};
},
isWindow: function (obj) {
return obj != null && obj === obj.window;
},
getWithinInfo: function (element) {
var withinElement = $(element || window), isWindow = this.isWindow(withinElement[0]), isDocument = !!withinElement[0] && withinElement[0].nodeType === 9, hasOffset = !isWindow && !isDocument;
return {
element: withinElement,
isWindow: isWindow,
offset: hasOffset ? $(element).offset() : { left: 0, top: 0 },
scrollLeft: withinElement.scrollLeft(),
scrollTop: withinElement.scrollTop(),
width: isWindow ? withinElement.width() : withinElement.outerWidth(),
height: isWindow ? withinElement.height() : withinElement.outerHeight()
};
}
};
$.fn.position = function (options) {
if (!options || !options.of) {
return _position.apply(this, arguments);
}
options = $.extend({}, options);
var atOffset, targetWidth, targetHeight, targetOffset, basePosition, target = $(options.of), within = $.position.getWithinInfo(options.within), scrollInfo = $.position.getScrollInfo(within), targetElem = target[0], collision = (options.collision || "flip").split(" "), offsets = {};
if (targetElem.nodeType === 9) {
targetWidth = target.width();
targetHeight = target.height();
targetOffset = { top: 0, left: 0 };
}
else if ($.position.isWindow(targetElem)) {
targetWidth = target.width();
targetHeight = target.height();
targetOffset = { top: target.scrollTop(), left: target.scrollLeft() };
}
else if (targetElem.preventDefault) {
options.at = "left top";
targetWidth = targetHeight = 0;
targetOffset = { top: targetElem.pageY, left: targetElem.pageX };
}
else {
targetWidth = target.outerWidth();
targetHeight = target.outerHeight();
targetOffset = target.offset();
}
basePosition = $.extend({}, targetOffset);
$.each(["my", "at"], function () {
var pos = (options[this] || "").split(" "), horizontalOffset, verticalOffset;
if (pos.length === 1) {
pos = rhorizontal.test(pos[0]) ?
pos.concat(["center"]) :
rvertical.test(pos[0]) ?
["center"].concat(pos) :
["center", "center"];
}
pos[0] = rhorizontal.test(pos[0]) ? pos[0] : "center";
pos[1] = rvertical.test(pos[1]) ? pos[1] : "center";
horizontalOffset = roffset.exec(pos[0]);
verticalOffset = roffset.exec(pos[1]);
offsets[this] = [
horizontalOffset ? horizontalOffset[0] : 0,
verticalOffset ? verticalOffset[0] : 0
];
options[this] = [
rposition.exec(pos[0])[0],
rposition.exec(pos[1])[0]
];
});
if (collision.length === 1) {
collision[1] = collision[0];
}
if (options.at[0] === "right") {
basePosition.left += targetWidth;
}
else if (options.at[0] === "center") {
basePosition.left += targetWidth / 2;
}
if (options.at[1] === "bottom") {
basePosition.top += targetHeight;
}
else if (options.at[1] === "center") {
basePosition.top += targetHeight / 2;
}
atOffset = getOffsets(offsets.at, targetWidth, targetHeight);
basePosition.left += atOffset[0];
basePosition.top += atOffset[1];
return this.each(function () {
var collisionPosition, using, elem = $(this), elemWidth = elem.outerWidth(), elemHeight = elem.outerHeight(), marginLeft = parseCss(this, "marginLeft"), marginTop = parseCss(this, "marginTop"), collisionWidth = elemWidth + marginLeft + parseCss(this, "marginRight") + scrollInfo.width, collisionHeight = elemHeight + marginTop + parseCss(this, "marginBottom") + scrollInfo.height, position = $.extend({}, basePosition), myOffset = getOffsets(offsets.my, elem.outerWidth(), elem.outerHeight());
if (options.my[0] === "right") {
position.left -= elemWidth;
}
else if (options.my[0] === "center") {
position.left -= elemWidth / 2;
}
if (options.my[1] === "bottom") {
position.top -= elemHeight;
}
else if (options.my[1] === "center") {
position.top -= elemHeight / 2;
}
position.left += myOffset[0];
position.top += myOffset[1];
if (!$.support.offsetFractions) {
position.left = round(position.left);
position.top = round(position.top);
}
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 ($.fn.bgiframe) {
elem.bgiframe();
}
if (options.using) {
using = function (props) {
var left = targetOffset.left - position.left, right = left + targetWidth - elemWidth, top = targetOffset.top - position.top, bottom = top + targetHeight - elemHeight, feedback = {
target: {
element: target,
left: targetOffset.left,
top: targetOffset.top,
width: targetWidth,
height: targetHeight
},
element: {
element: elem,
left: position.left,
top: position.top,
width: elemWidth,
height: elemHeight
},
horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
};
if (targetWidth < elemWidth && abs(left + right) < targetWidth) {
feedback.horizontal = "center";
}
if (targetHeight < elemHeight && abs(top + bottom) < targetHeight) {
feedback.vertical = "middle";
}
if (max(abs(left), abs(right)) > max(abs(top), abs(bottom))) {
feedback.important = "horizontal";
}
else {
feedback.important = "vertical";
}
options.using.call(this, props, feedback);
};
}
elem.offset($.extend(position, { using: using }));
});
};
$.ui.position = {
fit: {
left: function (position, data) {
var within = data.within, withinOffset = within.isWindow ? within.scrollLeft : within.offset.left, outerWidth = within.width, collisionPosLeft = position.left - data.collisionPosition.marginLeft, overLeft = withinOffset - collisionPosLeft, overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset, newOverRight;
if (data.collisionWidth > outerWidth) {
if (overLeft > 0 && overRight <= 0) {
newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
position.left += overLeft - newOverRight;
}
else if (overRight > 0 && overLeft <= 0) {
position.left = withinOffset;
}
else {
if (overLeft > overRight) {
position.left = withinOffset + outerWidth - data.collisionWidth;
}
else {
position.left = withinOffset;
}
}
}
else if (overLeft > 0) {
position.left += overLeft;
}
else if (overRight > 0) {
position.left -= overRight;
}
else {
position.left = max(position.left - collisionPosLeft, position.left);
}
},
top: function (position, data) {
var within = data.within, withinOffset = within.isWindow ? within.scrollTop : within.offset.top, outerHeight = data.within.height, collisionPosTop = position.top - data.collisionPosition.marginTop, overTop = withinOffset - collisionPosTop, overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset, newOverBottom;
if (data.collisionHeight > outerHeight) {
if (overTop > 0 && overBottom <= 0) {
newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
position.top += overTop - newOverBottom;
}
else if (overBottom > 0 && overTop <= 0) {
position.top = withinOffset;
}
else {
if (overTop > overBottom) {
position.top = withinOffset + outerHeight - data.collisionHeight;
}
else {
position.top = withinOffset;
}
}
}
else if (overTop > 0) {
position.top += overTop;
}
else if (overBottom > 0) {
position.top -= overBottom;
}
else {
position.top = max(position.top - collisionPosTop, position.top);
}
}
},
flip: {
left: function (position, data) {
var within = data.within, withinOffset = within.offset.left + within.scrollLeft, outerWidth = within.width, offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left, collisionPosLeft = position.left - data.collisionPosition.marginLeft, overLeft = collisionPosLeft - offsetLeft, overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft, myOffset = data.my[0] === "left" ?
-data.elemWidth :
data.my[0] === "right" ?
data.elemWidth :
0, atOffset = data.at[0] === "left" ?
data.targetWidth :
data.at[0] === "right" ?
-data.targetWidth :
0, offset = -2 * data.offset[0], newOverRight, newOverLeft;
if (overLeft < 0) {
newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
if (newOverRight < 0 || newOverRight < abs(overLeft)) {
position.left += myOffset + atOffset + offset;
}
}
else if (overRight > 0) {
newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
if (newOverLeft > 0 || abs(newOverLeft) < overRight) {
position.left += myOffset + atOffset + offset;
}
}
},
top: function (position, data) {
var within = data.within, withinOffset = within.offset.top + within.scrollTop, outerHeight = within.height, offsetTop = within.isWindow ? within.scrollTop : within.offset.top, collisionPosTop = position.top - data.collisionPosition.marginTop, overTop = collisionPosTop - offsetTop, overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop, top = data.my[1] === "top", myOffset = top ?
-data.elemHeight :
data.my[1] === "bottom" ?
data.elemHeight :
0, atOffset = data.at[1] === "top" ?
data.targetHeight :
data.at[1] === "bottom" ?
-data.targetHeight :
0, offset = -2 * data.offset[1], newOverTop, newOverBottom;
if (overTop < 0) {
newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
if ((position.top + myOffset + atOffset + offset) > overTop && (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 ((position.top + myOffset + atOffset + offset) > overBottom && (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);
}
}
};
(function () {
var testElement, testElementParent, testElementStyle, offsetLeft, i, body = document.getElementsByTagName("body")[0], div = document.createElement("div");
testElement = document.createElement(body ? "div" : "body");
testElementStyle = {
visibility: "hidden",
width: 0,
height: 0,
border: 0,
margin: 0,
background: "none"
};
if (body) {
$.extend(testElementStyle, {
position: "absolute",
left: "-1000px",
top: "-1000px"
});
}
for (i in testElementStyle) {
testElement.style[i] = testElementStyle[i];
}
testElement.appendChild(div);
testElementParent = body || document.documentElement;
testElementParent.insertBefore(testElement, testElementParent.firstChild);
div.style.cssText = "position: absolute; left: 10.7432222px;";
offsetLeft = $(div).offset().left;
$.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
testElement.innerHTML = "";
testElementParent.removeChild(testElement);
})();
if ($.uiBackCompat !== false) {
(function ($) {
var _position = $.fn.position;
$.fn.position = function (options) {
if (!options || !options.offset) {
return _position.call(this, options);
}
var offset = options.offset.split(" "), at = options.at.split(" ");
if (offset.length === 1) {
offset[1] = offset[0];
}
if (/^\d/.test(offset[0])) {
offset[0] = "+" + offset[0];
}
if (/^\d/.test(offset[1])) {
offset[1] = "+" + offset[1];
}
if (at.length === 1) {
if (/left|center|right/.test(at[0])) {
at[1] = "center";
}
else {
at[1] = at[0];
at[0] = "center";
}
}
return _position.call(this, $.extend(options, {
at: at[0] + offset[0] + " " + at[1] + offset[1],
offset: undefined
}));
};
}(jQuery));
}
}(jQuery));
(function ($, undefined) {
$.widget("ui.progressbar", {
version: "1.9.2",
options: {
value: 0,
max: 100
},
min: 0,
_create: function () {
this.element
.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all")
.attr({
role: "progressbar",
"aria-valuemin": this.min,
"aria-valuemax": this.options.max,
"aria-valuenow": this._value()
});
this.valueDiv = $("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>")
.appendTo(this.element);
this.oldValue = this._value();
this._refreshValue();
},
_destroy: function () {
this.element
.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all")
.removeAttr("role")
.removeAttr("aria-valuemin")
.removeAttr("aria-valuemax")
.removeAttr("aria-valuenow");
this.valueDiv.remove();
},
value: function (newValue) {
if (newValue === undefined) {
return this._value();
}
this._setOption("value", newValue);
return this;
},
_setOption: function (key, value) {
if (key === "value") {
this.options.value = value;
this._refreshValue();
if (this._value() === this.options.max) {
this._trigger("complete");
}
}
this._super(key, value);
},
_value: function () {
var val = this.options.value;
if (typeof val !== "number") {
val = 0;
}
return Math.min(this.options.max, Math.max(this.min, val));
},
_percentage: function () {
return 100 * this._value() / this.options.max;
},
_refreshValue: function () {
var value = this.value(), percentage = this._percentage();
if (this.oldValue !== value) {
this.oldValue = value;
this._trigger("change");
}
this.valueDiv
.toggle(value > this.min)
.toggleClass("ui-corner-right", value === this.options.max)
.width(percentage.toFixed(0) + "%");
this.element.attr("aria-valuenow", value);
}
});
})(jQuery);
(function ($, undefined) {
var numPages = 5;
$.widget("ui.slider", $.ui.mouse, {
version: "1.9.2",
widgetEventPrefix: "slide",
options: {
animate: false,
distance: 0,
max: 100,
min: 0,
orientation: "horizontal",
range: false,
step: 1,
value: 0,
values: null
},
_create: function () {
var i, handleCount, o = this.options, existingHandles = this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"), handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>", handles = [];
this._keySliding = false;
this._mouseSliding = false;
this._animateOff = true;
this._handleIndex = null;
this._detectOrientation();
this._mouseInit();
this.element
.addClass("ui-slider" +
" ui-slider-" + this.orientation +
" ui-widget" +
" ui-widget-content" +
" ui-corner-all" +
(o.disabled ? " ui-slider-disabled ui-disabled" : ""));
this.range = $([]);
if (o.range) {
if (o.range === true) {
if (!o.values) {
o.values = [this._valueMin(), this._valueMin()];
}
if (o.values.length && o.values.length !== 2) {
o.values = [o.values[0], o.values[0]];
}
}
this.range = $("<div></div>")
.appendTo(this.element)
.addClass("ui-slider-range" +
" ui-widget-header" +
((o.range === "min" || o.range === "max") ? " ui-slider-range-" + o.range : ""));
}
handleCount = (o.values && o.values.length) || 1;
for (i = existingHandles.length; i < handleCount; i++) {
handles.push(handle);
}
this.handles = existingHandles.add($(handles.join("")).appendTo(this.element));
this.handle = this.handles.eq(0);
this.handles.add(this.range).filter("a")
.click(function (event) {
event.preventDefault();
})
.mouseenter(function () {
if (!o.disabled) {
$(this).addClass("ui-state-hover");
}
})
.mouseleave(function () {
$(this).removeClass("ui-state-hover");
})
.focus(function () {
if (!o.disabled) {
$(".ui-slider .ui-state-focus").removeClass("ui-state-focus");
$(this).addClass("ui-state-focus");
}
else {
$(this).blur();
}
})
.blur(function () {
$(this).removeClass("ui-state-focus");
});
this.handles.each(function (i) {
$(this).data("ui-slider-handle-index", i);
});
this._on(this.handles, {
keydown: function (event) {
var allowed, curVal, newVal, step, index = $(event.target).data("ui-slider-handle-index");
switch (event.keyCode) {
case $.ui.keyCode.HOME:
case $.ui.keyCode.END:
case $.ui.keyCode.PAGE_UP:
case $.ui.keyCode.PAGE_DOWN:
case $.ui.keyCode.UP:
case $.ui.keyCode.RIGHT:
case $.ui.keyCode.DOWN:
case $.ui.keyCode.LEFT:
event.preventDefault();
if (!this._keySliding) {
this._keySliding = true;
$(event.target).addClass("ui-state-active");
allowed = this._start(event, index);
if (allowed === false) {
return;
}
}
break;
}
step = this.options.step;
if (this.options.values && this.options.values.length) {
curVal = newVal = this.values(index);
}
else {
curVal = newVal = this.value();
}
switch (event.keyCode) {
case $.ui.keyCode.HOME:
newVal = this._valueMin();
break;
case $.ui.keyCode.END:
newVal = this._valueMax();
break;
case $.ui.keyCode.PAGE_UP:
newVal = this._trimAlignValue(curVal + ((this._valueMax() - this._valueMin()) / numPages));
break;
case $.ui.keyCode.PAGE_DOWN:
newVal = this._trimAlignValue(curVal - ((this._valueMax() - this._valueMin()) / numPages));
break;
case $.ui.keyCode.UP:
case $.ui.keyCode.RIGHT:
if (curVal === this._valueMax()) {
return;
}
newVal = this._trimAlignValue(curVal + step);
break;
case $.ui.keyCode.DOWN:
case $.ui.keyCode.LEFT:
if (curVal === this._valueMin()) {
return;
}
newVal = this._trimAlignValue(curVal - step);
break;
}
this._slide(event, index, newVal);
},
keyup: function (event) {
var index = $(event.target).data("ui-slider-handle-index");
if (this._keySliding) {
this._keySliding = false;
this._stop(event, index);
this._change(event, index);
$(event.target).removeClass("ui-state-active");
}
}
});
this._refreshValue();
this._animateOff = false;
},
_destroy: function () {
this.handles.remove();
this.range.remove();
this.element
.removeClass("ui-slider" +
" ui-slider-horizontal" +
" ui-slider-vertical" +
" ui-slider-disabled" +
" ui-widget" +
" ui-widget-content" +
" ui-corner-all");
this._mouseDestroy();
},
_mouseCapture: function (event) {
var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle, that = this, o = this.options;
if (o.disabled) {
return false;
}
this.elementSize = {
width: this.element.outerWidth(),
height: this.element.outerHeight()
};
this.elementOffset = this.element.offset();
position = { x: event.pageX, y: event.pageY };
normValue = this._normValueFromMouse(position);
distance = this._valueMax() - this._valueMin() + 1;
this.handles.each(function (i) {
var thisDistance = Math.abs(normValue - that.values(i));
if (distance > thisDistance) {
distance = thisDistance;
closestHandle = $(this);
index = i;
}
});
if (o.range === true && this.values(1) === o.min) {
index += 1;
closestHandle = $(this.handles[index]);
}
allowed = this._start(event, index);
if (allowed === false) {
return false;
}
this._mouseSliding = true;
this._handleIndex = index;
closestHandle
.addClass("ui-state-active")
.focus();
offset = closestHandle.offset();
mouseOverHandle = !$(event.target).parents().addBack().is(".ui-slider-handle");
this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
left: event.pageX - offset.left - (closestHandle.width() / 2),
top: event.pageY - offset.top -
(closestHandle.height() / 2) -
(parseInt(closestHandle.css("borderTopWidth"), 10) || 0) -
(parseInt(closestHandle.css("borderBottomWidth"), 10) || 0) +
(parseInt(closestHandle.css("marginTop"), 10) || 0)
};
if (!this.handles.hasClass("ui-state-hover")) {
this._slide(event, index, normValue);
}
this._animateOff = true;
return true;
},
_mouseStart: function () {
return true;
},
_mouseDrag: function (event) {
var position = { x: event.pageX, y: event.pageY }, normValue = this._normValueFromMouse(position);
this._slide(event, this._handleIndex, normValue);
return false;
},
_mouseStop: function (event) {
this.handles.removeClass("ui-state-active");
this._mouseSliding = false;
this._stop(event, this._handleIndex);
this._change(event, this._handleIndex);
this._handleIndex = null;
this._clickOffset = null;
this._animateOff = false;
return false;
},
_detectOrientation: function () {
this.orientation = (this.options.orientation === "vertical") ? "vertical" : "horizontal";
},
_normValueFromMouse: function (position) {
var pixelTotal, pixelMouse, percentMouse, valueTotal, valueMouse;
if (this.orientation === "horizontal") {
pixelTotal = this.elementSize.width;
pixelMouse = position.x - this.elementOffset.left - (this._clickOffset ? this._clickOffset.left : 0);
}
else {
pixelTotal = this.elementSize.height;
pixelMouse = position.y - this.elementOffset.top - (this._clickOffset ? this._clickOffset.top : 0);
}
percentMouse = (pixelMouse / pixelTotal);
if (percentMouse > 1) {
percentMouse = 1;
}
if (percentMouse < 0) {
percentMouse = 0;
}
if (this.orientation === "vertical") {
percentMouse = 1 - percentMouse;
}
valueTotal = this._valueMax() - this._valueMin();
valueMouse = this._valueMin() + percentMouse * valueTotal;
return this._trimAlignValue(valueMouse);
},
_start: function (event, index) {
var uiHash = {
handle: this.handles[index],
value: this.value()
};
if (this.options.values && this.options.values.length) {
uiHash.value = this.values(index);
uiHash.values = this.values();
}
return this._trigger("start", event, uiHash);
},
_slide: function (event, index, newVal) {
var otherVal, newValues, allowed;
if (this.options.values && this.options.values.length) {
otherVal = this.values(index ? 0 : 1);
if ((this.options.values.length === 2 && this.options.range === true) &&
((index === 0 && newVal > otherVal) || (index === 1 && newVal < otherVal))) {
newVal = otherVal;
}
if (newVal !== this.values(index)) {
newValues = this.values();
newValues[index] = newVal;
allowed = this._trigger("slide", event, {
handle: this.handles[index],
value: newVal,
values: newValues
});
otherVal = this.values(index ? 0 : 1);
if (allowed !== false) {
this.values(index, newVal, true);
}
}
}
else {
if (newVal !== this.value()) {
allowed = this._trigger("slide", event, {
handle: this.handles[index],
value: newVal
});
if (allowed !== false) {
this.value(newVal);
}
}
}
},
_stop: function (event, index) {
var uiHash = {
handle: this.handles[index],
value: this.value()
};
if (this.options.values && this.options.values.length) {
uiHash.value = this.values(index);
uiHash.values = this.values();
}
this._trigger("stop", event, uiHash);
},
_change: function (event, index) {
if (!this._keySliding && !this._mouseSliding) {
var uiHash = {
handle: this.handles[index],
value: this.value()
};
if (this.options.values && this.options.values.length) {
uiHash.value = this.values(index);
uiHash.values = this.values();
}
this._trigger("change", event, uiHash);
}
},
value: function (newValue) {
if (arguments.length) {
this.options.value = this._trimAlignValue(newValue);
this._refreshValue();
this._change(null, 0);
return;
}
return this._value();
},
values: function (index, newValue) {
var vals, newValues, i;
if (arguments.length > 1) {
this.options.values[index] = this._trimAlignValue(newValue);
this._refreshValue();
this._change(null, index);
return;
}
if (arguments.length) {
if (Array.isArray(arguments[0])) {
vals = this.options.values;
newValues = arguments[0];
for (i = 0; i < vals.length; i += 1) {
vals[i] = this._trimAlignValue(newValues[i]);
this._change(null, i);
}
this._refreshValue();
}
else {
if (this.options.values && this.options.values.length) {
return this._values(index);
}
else {
return this.value();
}
}
}
else {
return this._values();
}
},
_setOption: function (key, value) {
var i, valsLength = 0;
if (Array.isArray(this.options.values)) {
valsLength = this.options.values.length;
}
$.Widget.prototype._setOption.apply(this, arguments);
switch (key) {
case "disabled":
if (value) {
this.handles.filter(".ui-state-focus").blur();
this.handles.removeClass("ui-state-hover");
this.handles.prop("disabled", true);
this.element.addClass("ui-disabled");
}
else {
this.handles.prop("disabled", false);
this.element.removeClass("ui-disabled");
}
break;
case "orientation":
this._detectOrientation();
this.element
.removeClass("ui-slider-horizontal ui-slider-vertical")
.addClass("ui-slider-" + this.orientation);
this._refreshValue();
break;
case "value":
this._animateOff = true;
this._refreshValue();
this._change(null, 0);
this._animateOff = false;
break;
case "values":
this._animateOff = true;
this._refreshValue();
for (i = 0; i < valsLength; i += 1) {
this._change(null, i);
}
this._animateOff = false;
break;
case "min":
case "max":
this._animateOff = true;
this._refreshValue();
this._animateOff = false;
break;
}
},
_value: function () {
var val = this.options.value;
val = this._trimAlignValue(val);
return val;
},
_values: function (index) {
var val, vals, i;
if (arguments.length) {
val = this.options.values[index];
val = this._trimAlignValue(val);
return val;
}
else {
vals = this.options.values.slice();
for (i = 0; i < vals.length; i += 1) {
vals[i] = this._trimAlignValue(vals[i]);
}
return vals;
}
},
_trimAlignValue: function (val) {
if (val <= this._valueMin()) {
return this._valueMin();
}
if (val >= this._valueMax()) {
return this._valueMax();
}
var step = (this.options.step > 0) ? this.options.step : 1, valModStep = (val - this._valueMin()) % step, alignValue = val - valModStep;
if (Math.abs(valModStep) * 2 >= step) {
alignValue += (valModStep > 0) ? step : (-step);
}
return parseFloat(alignValue.toFixed(5));
},
_valueMin: function () {
return this.options.min;
},
_valueMax: function () {
return this.options.max;
},
_refreshValue: function () {
var lastValPercent, valPercent, value, valueMin, valueMax, oRange = this.options.range, o = this.options, that = this, animate = (!this._animateOff) ? o.animate : false, _set = {};
if (this.options.values && this.options.values.length) {
this.handles.each(function (i) {
valPercent = (that.values(i) - that._valueMin()) / (that._valueMax() - that._valueMin()) * 100;
_set[that.orientation === "horizontal" ? "left" : "bottom"] = valPercent + "%";
$(this).stop(1, 1)[animate ? "animate" : "css"](_set, o.animate);
if (that.options.range === true) {
if (that.orientation === "horizontal") {
if (i === 0) {
that.range.stop(1, 1)[animate ? "animate" : "css"]({ left: valPercent + "%" }, o.animate);
}
if (i === 1) {
that.range[animate ? "animate" : "css"]({ width: (valPercent - lastValPercent) + "%" }, { queue: false, duration: o.animate });
}
}
else {
if (i === 0) {
that.range.stop(1, 1)[animate ? "animate" : "css"]({ bottom: (valPercent) + "%" }, o.animate);
}
if (i === 1) {
that.range[animate ? "animate" : "css"]({ height: (valPercent - lastValPercent) + "%" }, { queue: false, duration: o.animate });
}
}
}
lastValPercent = valPercent;
});
}
else {
value = this.value();
valueMin = this._valueMin();
valueMax = this._valueMax();
valPercent = (valueMax !== valueMin) ?
(value - valueMin) / (valueMax - valueMin) * 100 :
0;
_set[this.orientation === "horizontal" ? "left" : "bottom"] = valPercent + "%";
this.handle.stop(1, 1)[animate ? "animate" : "css"](_set, o.animate);
if (oRange === "min" && this.orientation === "horizontal") {
this.range.stop(1, 1)[animate ? "animate" : "css"]({ width: valPercent + "%" }, o.animate);
}
if (oRange === "max" && this.orientation === "horizontal") {
this.range[animate ? "animate" : "css"]({ width: (100 - valPercent) + "%" }, { queue: false, duration: o.animate });
}
if (oRange === "min" && this.orientation === "vertical") {
this.range.stop(1, 1)[animate ? "animate" : "css"]({ height: valPercent + "%" }, o.animate);
}
if (oRange === "max" && this.orientation === "vertical") {
this.range[animate ? "animate" : "css"]({ height: (100 - valPercent) + "%" }, { queue: false, duration: o.animate });
}
}
}
});
}(jQuery));
(function ($, undefined) {
var tabId = 0, rhash = /#.*$/;
function getNextTabId() {
return ++tabId;
}
function isLocal(anchor) {
return anchor.hash.length > 1 &&
anchor.href.replace(rhash, "") ===
location.href.replace(rhash, "")
.replace(/\s/g, "%20");
}
$.widget("ui.tabs", {
version: "1.9.2",
delay: 300,
options: {
active: null,
collapsible: false,
event: "click",
heightStyle: "content",
hide: null,
show: null,
activate: null,
beforeActivate: null,
beforeLoad: null,
load: null
},
_create: function () {
var that = this, options = this.options, active = options.active, locationHash = location.hash.substring(1);
this.running = false;
this.element
.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all")
.toggleClass("ui-tabs-collapsible", options.collapsible)
.on("mousedown" + this.eventNamespace, ".ui-tabs-nav > li", function (event) {
if ($(this).is(".ui-state-disabled")) {
event.preventDefault();
}
})
.on("focus" + this.eventNamespace, ".ui-tabs-anchor", function () {
if ($(this).closest("li").is(".ui-state-disabled")) {
this.blur();
}
});
this._processTabs();
if (active === null) {
if (locationHash) {
this.tabs.each(function (i, tab) {
if ($(tab).attr("aria-controls") === locationHash) {
active = i;
return false;
}
});
}
if (active === null) {
active = this.tabs.index(this.tabs.filter(".ui-tabs-active"));
}
if (active === null || active === -1) {
active = this.tabs.length ? 0 : false;
}
}
if (active !== false) {
active = this.tabs.index(this.tabs.eq(active));
if (active === -1) {
active = options.collapsible ? false : 0;
}
}
options.active = active;
if (!options.collapsible && options.active === false && this.anchors.length) {
options.active = 0;
}
if (Array.isArray(options.disabled)) {
options.disabled = $.unique(options.disabled.concat($.map(this.tabs.filter(".ui-state-disabled"), function (li) {
return that.tabs.index(li);
}))).sort();
}
if (this.options.active !== false && this.anchors.length) {
this.active = this._findActive(this.options.active);
}
else {
this.active = $();
}
this._refresh();
if (this.active.length) {
this.load(options.active);
}
},
_getCreateEventData: function () {
return {
tab: this.active,
panel: !this.active.length ? $() : this._getPanelForTab(this.active)
};
},
_tabKeydown: function (event) {
var focusedTab = $(this.document[0].activeElement).closest("li"), selectedIndex = this.tabs.index(focusedTab), goingForward = true;
if (this._handlePageNav(event)) {
return;
}
switch (event.keyCode) {
case $.ui.keyCode.RIGHT:
case $.ui.keyCode.DOWN:
selectedIndex++;
break;
case $.ui.keyCode.UP:
case $.ui.keyCode.LEFT:
goingForward = false;
selectedIndex--;
break;
case $.ui.keyCode.END:
selectedIndex = this.anchors.length - 1;
break;
case $.ui.keyCode.HOME:
selectedIndex = 0;
break;
case $.ui.keyCode.SPACE:
event.preventDefault();
clearTimeout(this.activating);
this._activate(selectedIndex);
return;
case $.ui.keyCode.ENTER:
event.preventDefault();
clearTimeout(this.activating);
this._activate(selectedIndex === this.options.active ? false : selectedIndex);
return;
default:
return;
}
event.preventDefault();
clearTimeout(this.activating);
selectedIndex = this._focusNextTab(selectedIndex, goingForward);
if (!event.ctrlKey) {
focusedTab.attr("aria-selected", "false");
this.tabs.eq(selectedIndex).attr("aria-selected", "true");
this.activating = this._delay(function () {
this.option("active", selectedIndex);
}, this.delay);
}
},
_panelKeydown: function (event) {
if (this._handlePageNav(event)) {
return;
}
if (event.ctrlKey && event.keyCode === $.ui.keyCode.UP) {
event.preventDefault();
this.active.focus();
}
},
_handlePageNav: function (event) {
if (event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP) {
this._activate(this._focusNextTab(this.options.active - 1, false));
return true;
}
if (event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN) {
this._activate(this._focusNextTab(this.options.active + 1, true));
return true;
}
},
_findNextTab: function (index, goingForward) {
var lastTabIndex = this.tabs.length - 1;
function constrain() {
if (index > lastTabIndex) {
index = 0;
}
if (index < 0) {
index = lastTabIndex;
}
return index;
}
while ($.inArray(constrain(), this.options.disabled) !== -1) {
index = goingForward ? index + 1 : index - 1;
}
return index;
},
_focusNextTab: function (index, goingForward) {
index = this._findNextTab(index, goingForward);
this.tabs.eq(index).focus();
return index;
},
_setOption: function (key, value) {
if (key === "active") {
this._activate(value);
return;
}
if (key === "disabled") {
this._setupDisabled(value);
return;
}
this._super(key, value);
if (key === "collapsible") {
this.element.toggleClass("ui-tabs-collapsible", value);
if (!value && this.options.active === false) {
this._activate(0);
}
}
if (key === "event") {
this._setupEvents(value);
}
if (key === "heightStyle") {
this._setupHeightStyle(value);
}
},
_tabId: function (tab) {
return tab.attr("aria-controls") || "ui-tabs-" + getNextTabId();
},
_sanitizeSelector: function (hash) {
return hash ? hash.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&") : "";
},
refresh: function () {
var options = this.options, lis = this.tablist.children(":has(a[href])");
options.disabled = $.map(lis.filter(".ui-state-disabled"), function (tab) {
return lis.index(tab);
});
this._processTabs();
if (options.active === false || !this.anchors.length) {
options.active = false;
this.active = $();
}
else if (this.active.length && !$.contains(this.tablist[0], this.active[0])) {
if (this.tabs.length === options.disabled.length) {
options.active = false;
this.active = $();
}
else {
this._activate(this._findNextTab(Math.max(0, options.active - 1), false));
}
}
else {
options.active = this.tabs.index(this.active);
}
this._refresh();
},
_refresh: function () {
this._setupDisabled(this.options.disabled);
this._setupEvents(this.options.event);
this._setupHeightStyle(this.options.heightStyle);
this.tabs.not(this.active).attr({
"aria-selected": "false",
tabIndex: -1
});
this.panels.not(this._getPanelForTab(this.active))
.hide()
.attr({
"aria-expanded": "false",
"aria-hidden": "true"
});
if (!this.active.length) {
this.tabs.eq(0).attr("tabIndex", 0);
}
else {
this.active
.addClass("ui-tabs-active ui-state-active")
.attr({
"aria-selected": "true",
tabIndex: 0
});
this._getPanelForTab(this.active)
.show()
.attr({
"aria-expanded": "true",
"aria-hidden": "false"
});
}
},
_processTabs: function () {
var that = this;
this.tablist = this._getList()
.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all")
.attr("role", "tablist");
this.tabs = this.tablist.find("> li:has(a[href])")
.addClass("ui-state-default ui-corner-top")
.attr({
role: "tab",
tabIndex: -1
});
this.anchors = this.tabs.map(function () {
return $("a", this)[0];
})
.addClass("ui-tabs-anchor")
.attr({
role: "presentation",
tabIndex: -1
});
this.panels = $();
this.anchors.each(function (i, anchor) {
var selector, panel, panelId, anchorId = $(anchor).uniqueId().attr("id"), tab = $(anchor).closest("li"), originalAriaControls = tab.attr("aria-controls");
if (isLocal(anchor)) {
selector = anchor.hash;
panel = that.element.find(that._sanitizeSelector(selector));
}
else {
panelId = that._tabId(tab);
selector = "#" + panelId;
panel = that.element.find(selector);
if (!panel.length) {
panel = that._createPanel(panelId);
panel.insertAfter(that.panels[i - 1] || that.tablist);
}
panel.attr("aria-live", "polite");
}
if (panel.length) {
that.panels = that.panels.add(panel);
}
if (originalAriaControls) {
tab.data("ui-tabs-aria-controls", originalAriaControls);
}
tab.attr({
"aria-controls": selector.substring(1),
"aria-labelledby": anchorId
});
panel.attr("aria-labelledby", anchorId);
});
this.panels
.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom")
.attr("role", "tabpanel");
},
_getList: function () {
return this.element.find("ol,ul").eq(0);
},
_createPanel: function (id) {
return $("<div>")
.attr("id", id)
.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom")
.data("ui-tabs-destroy", true);
},
_setupDisabled: function (disabled) {
if (Array.isArray(disabled)) {
if (!disabled.length) {
disabled = false;
}
else if (disabled.length === this.anchors.length) {
disabled = true;
}
}
for (var i = 0, li; (li = this.tabs[i]); i++) {
if (disabled === true || $.inArray(i, disabled) !== -1) {
$(li)
.addClass("ui-state-disabled")
.attr("aria-disabled", "true");
}
else {
$(li)
.removeClass("ui-state-disabled")
.removeAttr("aria-disabled");
}
}
this.options.disabled = disabled;
},
_setupEvents: function (event) {
var events = {
click: function (event) {
event.preventDefault();
}
};
if (event) {
$.each(event.split(" "), function (index, eventName) {
events[eventName] = "_eventHandler";
});
}
this._off(this.anchors.add(this.tabs).add(this.panels));
this._on(this.anchors, events);
this._on(this.tabs, { keydown: "_tabKeydown" });
this._on(this.panels, { keydown: "_panelKeydown" });
this._focusable(this.tabs);
this._hoverable(this.tabs);
},
_setupHeightStyle: function (heightStyle) {
var maxHeight, overflow, parent = this.element.parent();
if (heightStyle === "fill") {
if (!$.support.minHeight) {
overflow = parent.css("overflow");
parent.css("overflow", "hidden");
}
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);
});
if (overflow) {
parent.css("overflow", overflow);
}
this.element.children().not(this.panels).each(function () {
maxHeight -= $(this).outerHeight(true);
});
this.panels.each(function () {
$(this).height(Math.max(0, maxHeight -
$(this).innerHeight() + $(this).height()));
})
.css("overflow", "auto");
}
else if (heightStyle === "auto") {
maxHeight = 0;
this.panels.each(function () {
maxHeight = Math.max(maxHeight, $(this).height("").height());
}).height(maxHeight);
}
},
_eventHandler: function (event) {
var options = this.options, active = this.active, anchor = $(event.currentTarget), tab = anchor.closest("li"), clickedIsActive = tab[0] === active[0], collapsing = clickedIsActive && options.collapsible, toShow = collapsing ? $() : this._getPanelForTab(tab), toHide = !active.length ? $() : this._getPanelForTab(active), eventData = {
oldTab: active,
oldPanel: toHide,
newTab: collapsing ? $() : tab,
newPanel: toShow
};
event.preventDefault();
if (tab.hasClass("ui-state-disabled") ||
tab.hasClass("ui-tabs-loading") ||
this.running ||
(clickedIsActive && !options.collapsible) ||
(this._trigger("beforeActivate", event, eventData) === false)) {
return;
}
options.active = collapsing ? false : this.tabs.index(tab);
this.active = clickedIsActive ? $() : tab;
if (this.xhr) {
this.xhr.abort();
}
if (!toHide.length && !toShow.length) {
$.error("jQuery UI Tabs: Mismatching fragment identifier.");
}
if (toShow.length) {
this.load(this.tabs.index(tab), event);
}
this._toggle(event, eventData);
},
_toggle: function (event, eventData) {
var that = this, toShow = eventData.newPanel, toHide = eventData.oldPanel;
this.running = true;
function complete() {
that.running = false;
that._trigger("activate", event, eventData);
}
function show() {
eventData.newTab.closest("li").addClass("ui-tabs-active ui-state-active");
if (toShow.length && that.options.show) {
that._show(toShow, that.options.show, complete);
}
else {
toShow.show();
complete();
}
}
if (toHide.length && this.options.hide) {
this._hide(toHide, this.options.hide, function () {
eventData.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active");
show();
});
}
else {
eventData.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active");
toHide.hide();
show();
}
toHide.attr({
"aria-expanded": "false",
"aria-hidden": "true"
});
eventData.oldTab.attr("aria-selected", "false");
if (toShow.length && toHide.length) {
eventData.oldTab.attr("tabIndex", -1);
}
else if (toShow.length) {
this.tabs.filter(function () {
return $(this).attr("tabIndex") === 0;
})
.attr("tabIndex", -1);
}
toShow.attr({
"aria-expanded": "true",
"aria-hidden": "false"
});
eventData.newTab.attr({
"aria-selected": "true",
tabIndex: 0
});
},
_activate: function (index) {
var anchor, active = this._findActive(index);
if (active[0] === this.active[0]) {
return;
}
if (!active.length) {
active = this.active;
}
anchor = active.find(".ui-tabs-anchor")[0];
this._eventHandler({
target: anchor,
currentTarget: anchor,
preventDefault: $.noop
});
},
_findActive: function (index) {
return index === false ? $() : this.tabs.eq(index);
},
_getIndex: function (index) {
if (typeof index === "string") {
index = this.anchors.index(this.anchors.filter("[href$='" + index + "']"));
}
return index;
},
_destroy: function () {
if (this.xhr) {
this.xhr.abort();
}
this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible");
this.tablist
.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all")
.removeAttr("role");
this.anchors
.removeClass("ui-tabs-anchor")
.removeAttr("role")
.removeAttr("tabIndex")
.removeData("href.tabs")
.removeData("load.tabs")
.removeUniqueId();
this.tabs.add(this.panels).each(function () {
if ($.data(this, "ui-tabs-destroy")) {
$(this).remove();
}
else {
$(this)
.removeClass("ui-state-default ui-state-active ui-state-disabled " +
"ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel")
.removeAttr("tabIndex")
.removeAttr("aria-live")
.removeAttr("aria-busy")
.removeAttr("aria-selected")
.removeAttr("aria-labelledby")
.removeAttr("aria-hidden")
.removeAttr("aria-expanded")
.removeAttr("role");
}
});
this.tabs.each(function () {
var li = $(this), prev = li.data("ui-tabs-aria-controls");
if (prev) {
li.attr("aria-controls", prev);
}
else {
li.removeAttr("aria-controls");
}
});
this.panels.show();
if (this.options.heightStyle !== "content") {
this.panels.css("height", "");
}
},
enable: function (index) {
var disabled = this.options.disabled;
if (disabled === false) {
return;
}
if (index === undefined) {
disabled = false;
}
else {
index = this._getIndex(index);
if (Array.isArray(disabled)) {
disabled = $.map(disabled, function (num) {
return num !== index ? num : null;
});
}
else {
disabled = $.map(this.tabs, function (li, num) {
return num !== index ? num : null;
});
}
}
this._setupDisabled(disabled);
},
disable: function (index) {
var disabled = this.options.disabled;
if (disabled === true) {
return;
}
if (index === undefined) {
disabled = true;
}
else {
index = this._getIndex(index);
if ($.inArray(index, disabled) !== -1) {
return;
}
if (Array.isArray(disabled)) {
disabled = $.merge([index], disabled).sort();
}
else {
disabled = [index];
}
}
this._setupDisabled(disabled);
},
load: function (index, event) {
index = this._getIndex(index);
var that = this, tab = this.tabs.eq(index), anchor = tab.find(".ui-tabs-anchor"), panel = this._getPanelForTab(tab), eventData = {
tab: tab,
panel: panel
};
if (isLocal(anchor[0])) {
return;
}
this.xhr = $.ajax(this._ajaxSettings(anchor, event, eventData));
if (this.xhr && this.xhr.statusText !== "canceled") {
tab.addClass("ui-tabs-loading");
panel.attr("aria-busy", "true");
this.xhr
.success(function (response) {
setTimeout(function () {
panel.html(response);
that._trigger("load", event, eventData);
}, 1);
})
.complete(function (jqXHR, status) {
setTimeout(function () {
if (status === "abort") {
that.panels.stop(false, true);
}
tab.removeClass("ui-tabs-loading");
panel.removeAttr("aria-busy");
if (jqXHR === that.xhr) {
delete that.xhr;
}
}, 1);
});
}
},
_ajaxSettings: function (anchor, event, eventData) {
var that = this;
return {
url: anchor.attr("href"),
beforeSend: function (jqXHR, settings) {
return that._trigger("beforeLoad", event, $.extend({ jqXHR: jqXHR, ajaxSettings: settings }, eventData));
}
};
},
_getPanelForTab: function (tab) {
var id = $(tab).attr("aria-controls");
return this.element.find(this._sanitizeSelector("#" + id));
}
});
if ($.uiBackCompat !== false) {
$.ui.tabs.prototype._ui = function (tab, panel) {
return {
tab: tab,
panel: panel,
index: this.anchors.index(tab)
};
};
$.widget("ui.tabs", $.ui.tabs, {
url: function (index, url) {
this.anchors.eq(index).attr("href", url);
}
});
$.widget("ui.tabs", $.ui.tabs, {
options: {
ajaxOptions: null,
cache: false
},
_create: function () {
this._super();
var that = this;
this._on({ tabsbeforeload: function (event, ui) {
if ($.data(ui.tab[0], "cache.tabs")) {
event.preventDefault();
return;
}
ui.jqXHR.success(function () {
if (that.options.cache) {
$.data(ui.tab[0], "cache.tabs", true);
}
});
} });
},
_ajaxSettings: function (anchor, event, ui) {
var ajaxOptions = this.options.ajaxOptions;
return $.extend({}, ajaxOptions, {
error: function (xhr, status) {
try {
ajaxOptions.error(xhr, status, ui.tab.closest("li").index(), ui.tab[0]);
}
catch (error) { }
}
}, this._superApply(arguments));
},
_setOption: function (key, value) {
if (key === "cache" && value === false) {
this.anchors.removeData("cache.tabs");
}
this._super(key, value);
},
_destroy: function () {
this.anchors.removeData("cache.tabs");
this._super();
},
url: function (index) {
this.anchors.eq(index).removeData("cache.tabs");
this._superApply(arguments);
}
});
$.widget("ui.tabs", $.ui.tabs, {
abort: function () {
if (this.xhr) {
this.xhr.abort();
}
}
});
$.widget("ui.tabs", $.ui.tabs, {
options: {
spinner: "<em>Loading…</em>"
},
_create: function () {
this._super();
this._on({
tabsbeforeload: function (event, ui) {
if (event.target !== this.element[0] ||
!this.options.spinner) {
return;
}
var span = ui.tab.find("span"), html = span.html();
span.html(this.options.spinner);
ui.jqXHR.complete(function () {
span.html(html);
});
}
});
}
});
$.widget("ui.tabs", $.ui.tabs, {
options: {
enable: null,
disable: null
},
enable: function (index) {
var options = this.options, trigger;
if (index && options.disabled === true ||
(Array.isArray(options.disabled) && $.inArray(index, options.disabled) !== -1)) {
trigger = true;
}
this._superApply(arguments);
if (trigger) {
this._trigger("enable", null, this._ui(this.anchors[index], this.panels[index]));
}
},
disable: function (index) {
var options = this.options, trigger;
if (index && options.disabled === false ||
(Array.isArray(options.disabled) && $.inArray(index, options.disabled) === -1)) {
trigger = true;
}
this._superApply(arguments);
if (trigger) {
this._trigger("disable", null, this._ui(this.anchors[index], this.panels[index]));
}
}
});
$.widget("ui.tabs", $.ui.tabs, {
options: {
add: null,
remove: null,
tabTemplate: "<li><a href='#{href}'><span>#{label}</span></a></li>"
},
add: function (url, label, index) {
if (index === undefined) {
index = this.anchors.length;
}
var doInsertAfter, panel, options = this.options, li = $(options.tabTemplate
.replace(/#\{href\}/g, url)
.replace(/#\{label\}/g, label)), id = !url.indexOf("#") ?
url.replace("#", "") :
this._tabId(li);
li.addClass("ui-state-default ui-corner-top").data("ui-tabs-destroy", true);
li.attr("aria-controls", id);
doInsertAfter = index >= this.tabs.length;
panel = this.element.find("#" + id);
if (!panel.length) {
panel = this._createPanel(id);
if (doInsertAfter) {
if (index > 0) {
panel.insertAfter(this.panels.eq(-1));
}
else {
panel.appendTo(this.element);
}
}
else {
panel.insertBefore(this.panels[index]);
}
}
panel.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").hide();
if (doInsertAfter) {
li.appendTo(this.tablist);
}
else {
li.insertBefore(this.tabs[index]);
}
options.disabled = $.map(options.disabled, function (n) {
return n >= index ? ++n : n;
});
this.refresh();
if (this.tabs.length === 1 && options.active === false) {
this.option("active", 0);
}
this._trigger("add", null, this._ui(this.anchors[index], this.panels[index]));
return this;
},
remove: function (index) {
index = this._getIndex(index);
var options = this.options, tab = this.tabs.eq(index).remove(), panel = this._getPanelForTab(tab).remove();
if (tab.hasClass("ui-tabs-active") && this.anchors.length > 2) {
this._activate(index + (index + 1 < this.anchors.length ? 1 : -1));
}
options.disabled = $.map($.grep(options.disabled, function (n) {
return n !== index;
}), function (n) {
return n >= index ? --n : n;
});
this.refresh();
this._trigger("remove", null, this._ui(tab.find("a")[0], panel[0]));
return this;
}
});
$.widget("ui.tabs", $.ui.tabs, {
length: function () {
return this.anchors.length;
}
});
$.widget("ui.tabs", $.ui.tabs, {
options: {
idPrefix: "ui-tabs-"
},
_tabId: function (tab) {
var a = tab.is("li") ? tab.find("a[href]") : tab;
a = a[0];
return $(a).closest("li").attr("aria-controls") ||
a.title && a.title.replace(/\s/g, "_").replace(/[^\w\u00c0-\uFFFF\-]/g, "") ||
this.options.idPrefix + getNextTabId();
}
});
$.widget("ui.tabs", $.ui.tabs, {
options: {
panelTemplate: "<div></div>"
},
_createPanel: function (id) {
return $(this.options.panelTemplate)
.attr("id", id)
.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom")
.data("ui-tabs-destroy", true);
}
});
$.widget("ui.tabs", $.ui.tabs, {
_create: function () {
var options = this.options;
if (options.active === null && options.selected !== undefined) {
options.active = options.selected === -1 ? false : options.selected;
}
this._super();
options.selected = options.active;
if (options.selected === false) {
options.selected = -1;
}
},
_setOption: function (key, value) {
if (key !== "selected") {
return this._super(key, value);
}
var options = this.options;
this._super("active", value === -1 ? false : value);
options.selected = options.active;
if (options.selected === false) {
options.selected = -1;
}
},
_eventHandler: function () {
this._superApply(arguments);
this.options.selected = this.options.active;
if (this.options.selected === false) {
this.options.selected = -1;
}
}
});
$.widget("ui.tabs", $.ui.tabs, {
options: {
show: null,
select: null
},
_create: function () {
this._super();
if (this.options.active !== false) {
this._trigger("show", null, this._ui(this.active.find(".ui-tabs-anchor")[0], this._getPanelForTab(this.active)[0]));
}
},
_trigger: function (type, event, data) {
var tab, panel, ret = this._superApply(arguments);
if (!ret) {
return false;
}
if (type === "beforeActivate") {
tab = data.newTab.length ? data.newTab : data.oldTab;
panel = data.newPanel.length ? data.newPanel : data.oldPanel;
ret = this._super("select", event, {
tab: tab.find(".ui-tabs-anchor")[0],
panel: panel[0],
index: tab.closest("li").index()
});
}
else if (type === "activate" && data.newTab.length) {
ret = this._super("show", event, {
tab: data.newTab.find(".ui-tabs-anchor")[0],
panel: data.newPanel[0],
index: data.newTab.closest("li").index()
});
}
return ret;
}
});
$.widget("ui.tabs", $.ui.tabs, {
select: function (index) {
index = this._getIndex(index);
if (index === -1) {
if (this.options.collapsible && this.options.selected !== -1) {
index = this.options.selected;
}
else {
return;
}
}
this.anchors.eq(index).trigger(this.options.event + this.eventNamespace);
}
});
(function () {
var listId = 0;
$.widget("ui.tabs", $.ui.tabs, {
options: {
cookie: null
},
_create: function () {
var options = this.options, active;
if (options.active == null && options.cookie) {
active = parseInt(this._cookie(), 10);
if (active === -1) {
active = false;
}
options.active = active;
}
this._super();
},
_cookie: function (active) {
var cookie = [this.cookie ||
(this.cookie = this.options.cookie.name || "ui-tabs-" + (++listId))];
if (arguments.length) {
cookie.push(active === false ? -1 : active);
cookie.push(this.options.cookie);
}
return $.cookie.apply(null, cookie);
},
_refresh: function () {
this._super();
if (this.options.cookie) {
this._cookie(this.options.active, this.options.cookie);
}
},
_eventHandler: function () {
this._superApply(arguments);
if (this.options.cookie) {
this._cookie(this.options.active, this.options.cookie);
}
},
_destroy: function () {
this._super();
if (this.options.cookie) {
this._cookie(null, this.options.cookie);
}
}
});
})();
$.widget("ui.tabs", $.ui.tabs, {
_trigger: function (type, event, data) {
var _data = $.extend({}, data);
if (type === "load") {
_data.panel = _data.panel[0];
_data.tab = _data.tab.find(".ui-tabs-anchor")[0];
}
return this._super(type, event, _data);
}
});
$.widget("ui.tabs", $.ui.tabs, {
options: {
fx: null
},
_getFx: function () {
var hide, show, fx = this.options.fx;
if (fx) {
if (Array.isArray(fx)) {
hide = fx[0];
show = fx[1];
}
else {
hide = show = fx;
}
}
return fx ? { show: show, hide: hide } : null;
},
_toggle: function (event, eventData) {
var that = this, toShow = eventData.newPanel, toHide = eventData.oldPanel, fx = this._getFx();
if (!fx) {
return this._super(event, eventData);
}
that.running = true;
function complete() {
that.running = false;
that._trigger("activate", event, eventData);
}
function show() {
eventData.newTab.closest("li").addClass("ui-tabs-active ui-state-active");
if (toShow.length && fx.show) {
toShow
.animate(fx.show, fx.show.duration, function () {
complete();
});
}
else {
toShow.show();
complete();
}
}
if (toHide.length && fx.hide) {
toHide.animate(fx.hide, fx.hide.duration, function () {
eventData.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active");
show();
});
}
else {
eventData.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active");
toHide.hide();
show();
}
}
});
}
})(jQuery);
(function ($) {
var increments = 0;
function addDescribedBy(elem, id) {
var describedby = (elem.attr("aria-describedby") || "").split(/\s+/);
describedby.push(id);
elem
.data("ui-tooltip-id", id)
.attr("aria-describedby", describedby.join(" ").trim());
}
function removeDescribedBy(elem) {
var id = elem.data("ui-tooltip-id"), describedby = (elem.attr("aria-describedby") || "").split(/\s+/), index = $.inArray(id, describedby);
if (index !== -1) {
describedby.splice(index, 1);
}
elem.removeData("ui-tooltip-id");
describedby = describedby.join(" ").trim();
if (describedby) {
elem.attr("aria-describedby", describedby);
}
else {
elem.removeAttr("aria-describedby");
}
}
$.widget("ui.tooltip", {
version: "1.9.2",
options: {
content: function () {
return $(this).attr("title");
},
hide: true,
items: "[title]:not([disabled])",
position: {
my: "left top+15",
at: "left bottom",
collision: "flipfit flip"
},
show: true,
tooltipClass: null,
track: false,
close: null,
open: null
},
_create: function () {
this._on({
mouseover: "open",
focusin: "open"
});
this.tooltips = {};
this.parents = {};
if (this.options.disabled) {
this._disable();
}
},
_setOption: function (key, value) {
var that = this;
if (key === "disabled") {
this[value ? "_disable" : "_enable"]();
this.options[key] = value;
return;
}
this._super(key, value);
if (key === "content") {
$.each(this.tooltips, function (id, element) {
that._updateContent(element);
});
}
},
_disable: function () {
var that = this;
$.each(this.tooltips, function (id, element) {
var event = $.Event("blur");
event.target = event.currentTarget = element[0];
that.close(event, true);
});
this.element.find(this.options.items).addBack().each(function () {
var element = $(this);
if (element.is("[title]")) {
element
.data("ui-tooltip-title", element.attr("title"))
.attr("title", "");
}
});
},
_enable: function () {
this.element.find(this.options.items).addBack().each(function () {
var element = $(this);
if (element.data("ui-tooltip-title")) {
element.attr("title", element.data("ui-tooltip-title"));
}
});
},
open: function (event) {
var that = this, target = $(event ? event.target : this.element)
.closest(this.options.items);
if (!target.length || target.data("ui-tooltip-id")) {
return;
}
if (target.attr("title")) {
target.data("ui-tooltip-title", target.attr("title"));
}
target.data("ui-tooltip-open", true);
if (event && event.type === "mouseover") {
target.parents().each(function () {
var parent = $(this), blurEvent;
if (parent.data("ui-tooltip-open")) {
blurEvent = $.Event("blur");
blurEvent.target = blurEvent.currentTarget = this;
that.close(blurEvent, true);
}
if (parent.attr("title")) {
parent.uniqueId();
that.parents[this.id] = {
element: this,
title: parent.attr("title")
};
parent.attr("title", "");
}
});
}
this._updateContent(target, event);
},
_updateContent: function (target, event) {
var content, contentOption = this.options.content, that = this, eventType = event ? event.type : null;
if (typeof contentOption === "string") {
return this._open(event, target, contentOption);
}
content = contentOption.call(target[0], function (response) {
if (!target.data("ui-tooltip-open")) {
return;
}
that._delay(function () {
if (event) {
event.type = eventType;
}
this._open(event, target, response);
});
});
if (content) {
this._open(event, target, content);
}
},
_open: function (event, target, content) {
var tooltip, events, delayedShow, positionOption = $.extend({}, this.options.position);
if (!content) {
return;
}
tooltip = this._find(target);
if (tooltip.length) {
tooltip.find(".ui-tooltip-content").html(content);
return;
}
if (target.is("[title]")) {
if (event && event.type === "mouseover") {
target.attr("title", "");
}
else {
target.removeAttr("title");
}
}
tooltip = this._tooltip(target);
addDescribedBy(target, tooltip.attr("id"));
tooltip.find(".ui-tooltip-content").html(content);
function position(event) {
positionOption.of = event;
if (tooltip.is(":hidden")) {
return;
}
tooltip.position(positionOption);
}
if (this.options.track && event && /^mouse/.test(event.type)) {
this._on(this.document, {
mousemove: position
});
position(event);
}
else {
tooltip.position($.extend({
of: target
}, this.options.position));
}
tooltip.hide();
this._show(tooltip, this.options.show);
if (this.options.show && this.options.show.delay) {
delayedShow = setInterval(function () {
if (tooltip.is(":visible")) {
position(positionOption.of);
clearInterval(delayedShow);
}
}, $.fx.interval);
}
this._trigger("open", event, { tooltip: tooltip });
events = {
keyup: function (event) {
if (event.keyCode === $.ui.keyCode.ESCAPE) {
var fakeEvent = $.Event(event);
fakeEvent.currentTarget = target[0];
this.close(fakeEvent, true);
}
},
remove: function () {
this._removeTooltip(tooltip);
}
};
if (!event || event.type === "mouseover") {
events.mouseleave = "close";
}
if (!event || event.type === "focusin") {
events.focusout = "close";
}
this._on(true, target, events);
},
close: function (event) {
var that = this, target = $(event ? event.currentTarget : this.element), tooltip = this._find(target);
if (this.closing) {
return;
}
if (target.data("ui-tooltip-title")) {
target.attr("title", target.data("ui-tooltip-title"));
}
removeDescribedBy(target);
tooltip.stop(true);
this._hide(tooltip, this.options.hide, function () {
that._removeTooltip($(this));
});
target.removeData("ui-tooltip-open");
this._off(target, "mouseleave focusout keyup");
if (target[0] !== this.element[0]) {
this._off(target, "remove");
}
this._off(this.document, "mousemove");
if (event && event.type === "mouseleave") {
$.each(this.parents, function (id, parent) {
$(parent.element).attr("title", parent.title);
delete that.parents[id];
});
}
this.closing = true;
this._trigger("close", event, { tooltip: tooltip });
this.closing = false;
},
_tooltip: function (element) {
var id = "ui-tooltip-" + increments++, tooltip = $("<div>")
.attr({
id: id,
role: "tooltip"
})
.addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content " +
(this.options.tooltipClass || ""));
$("<div>")
.addClass("ui-tooltip-content")
.appendTo(tooltip);
tooltip.appendTo(this.document[0].body);
if ($.fn.bgiframe) {
tooltip.bgiframe();
}
this.tooltips[id] = element;
return tooltip;
},
_find: function (target) {
var id = target.data("ui-tooltip-id");
return id ? $("#" + id) : $();
},
_removeTooltip: function (tooltip) {
tooltip.remove();
delete this.tooltips[tooltip.attr("id")];
},
_destroy: function () {
var that = this;
$.each(this.tooltips, function (id, element) {
var event = $.Event("blur");
event.target = event.currentTarget = element[0];
that.close(event, true);
$("#" + id).remove();
if (element.data("ui-tooltip-title")) {
element.attr("title", element.data("ui-tooltip-title"));
element.removeData("ui-tooltip-title");
}
});
}
});
}(jQuery));
jQuery(function ($) {
$.datepicker.regional['zh-CN'] = {
closeText: '关闭',
prevText: '<上月',
nextText: '下月>',
currentText: '今天',
monthNames: ['一月', '二月', '三月', '四月', '五月', '六月',
'七月', '八月', '九月', '十月', '十一月', '十二月'],
monthNamesShort: ['一月', '二月', '三月', '四月', '五月', '六月',
'七月', '八月', '九月', '十月', '十一月', '十二月'],
dayNames: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],
dayNamesShort: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],
dayNamesMin: ['日', '一', '二', '三', '四', '五', '六'],
weekHeader: '周',
dateFormat: 'yy-mm-dd',
firstDay: 1,
isRTL: false,
showMonthAfterYear: true,
yearSuffix: '年'
};
$.datepicker.setDefaults($.datepicker.regional['zh-CN']);
});
mw.loader.state({
"jquery.ui": "ready"
});
/* </pre> */