“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个标签:Bot) |
||
第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:53的最新版本
/* <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> */