+++ /dev/null
-/*\r
- * jQuery UI 1.7.2\r
- *\r
- * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)\r
- * Dual licensed under the MIT (MIT-LICENSE.txt)\r
- * and GPL (GPL-LICENSE.txt) licenses.\r
- *\r
- * http://docs.jquery.com/UI\r
- */\r
-;jQuery.ui || (function($) {\r
-\r
-var _remove = $.fn.remove,\r
- isFF2 = $.browser.mozilla && (parseFloat($.browser.version) < 1.9);\r
-\r
-//Helper functions and ui object\r
-$.ui = {\r
- version: "1.7.2",\r
-\r
- // $.ui.plugin is deprecated. Use the proxy pattern instead.\r
- plugin: {\r
- add: function(module, option, set) {\r
- var proto = $.ui[module].prototype;\r
- for(var i in set) {\r
- proto.plugins[i] = proto.plugins[i] || [];\r
- proto.plugins[i].push([option, set[i]]);\r
- }\r
- },\r
- call: function(instance, name, args) {\r
- var set = instance.plugins[name];\r
- if(!set || !instance.element[0].parentNode) { return; }\r
-\r
- for (var i = 0; i < set.length; i++) {\r
- if (instance.options[set[i][0]]) {\r
- set[i][1].apply(instance.element, args);\r
- }\r
- }\r
- }\r
- },\r
-\r
- contains: function(a, b) {\r
- return document.compareDocumentPosition\r
- ? a.compareDocumentPosition(b) & 16\r
- : a !== b && a.contains(b);\r
- },\r
-\r
- hasScroll: function(el, a) {\r
-\r
- //If overflow is hidden, the element might have extra content, but the user wants to hide it\r
- if ($(el).css('overflow') == 'hidden') { return false; }\r
-\r
- var scroll = (a && a == 'left') ? 'scrollLeft' : 'scrollTop',\r
- has = false;\r
-\r
- if (el[scroll] > 0) { return true; }\r
-\r
- // TODO: determine which cases actually cause this to happen\r
- // if the element doesn't have the scroll set, see if it's possible to\r
- // set the scroll\r
- el[scroll] = 1;\r
- has = (el[scroll] > 0);\r
- el[scroll] = 0;\r
- return has;\r
- },\r
-\r
- isOverAxis: function(x, reference, size) {\r
- //Determines when x coordinate is over "b" element axis\r
- return (x > reference) && (x < (reference + size));\r
- },\r
-\r
- isOver: function(y, x, top, left, height, width) {\r
- //Determines when x, y coordinates is over "b" element\r
- return $.ui.isOverAxis(y, top, height) && $.ui.isOverAxis(x, left, width);\r
- },\r
-\r
- keyCode: {\r
- BACKSPACE: 8,\r
- CAPS_LOCK: 20,\r
- COMMA: 188,\r
- CONTROL: 17,\r
- DELETE: 46,\r
- DOWN: 40,\r
- END: 35,\r
- ENTER: 13,\r
- ESCAPE: 27,\r
- HOME: 36,\r
- INSERT: 45,\r
- LEFT: 37,\r
- NUMPAD_ADD: 107,\r
- NUMPAD_DECIMAL: 110,\r
- NUMPAD_DIVIDE: 111,\r
- NUMPAD_ENTER: 108,\r
- NUMPAD_MULTIPLY: 106,\r
- NUMPAD_SUBTRACT: 109,\r
- PAGE_DOWN: 34,\r
- PAGE_UP: 33,\r
- PERIOD: 190,\r
- RIGHT: 39,\r
- SHIFT: 16,\r
- SPACE: 32,\r
- TAB: 9,\r
- UP: 38\r
- }\r
-};\r
-\r
-// WAI-ARIA normalization\r
-if (isFF2) {\r
- var attr = $.attr,\r
- removeAttr = $.fn.removeAttr,\r
- ariaNS = "http://www.w3.org/2005/07/aaa",\r
- ariaState = /^aria-/,\r
- ariaRole = /^wairole:/;\r
-\r
- $.attr = function(elem, name, value) {\r
- var set = value !== undefined;\r
-\r
- return (name == 'role'\r
- ? (set\r
- ? attr.call(this, elem, name, "wairole:" + value)\r
- : (attr.apply(this, arguments) || "").replace(ariaRole, ""))\r
- : (ariaState.test(name)\r
- ? (set\r
- ? elem.setAttributeNS(ariaNS,\r
- name.replace(ariaState, "aaa:"), value)\r
- : attr.call(this, elem, name.replace(ariaState, "aaa:")))\r
- : attr.apply(this, arguments)));\r
- };\r
-\r
- $.fn.removeAttr = function(name) {\r
- return (ariaState.test(name)\r
- ? this.each(function() {\r
- this.removeAttributeNS(ariaNS, name.replace(ariaState, ""));\r
- }) : removeAttr.call(this, name));\r
- };\r
-}\r
-\r
-//jQuery plugins\r
-$.fn.extend({\r
- remove: function() {\r
- // Safari has a native remove event which actually removes DOM elements,\r
- // so we have to use triggerHandler instead of trigger (#3037).\r
- $("*", this).add(this).each(function() {\r
- $(this).triggerHandler("remove");\r
- });\r
- return _remove.apply(this, arguments );\r
- },\r
-\r
- enableSelection: function() {\r
- return this\r
- .attr('unselectable', 'off')\r
- .css('MozUserSelect', '')\r
- .unbind('selectstart.ui');\r
- },\r
-\r
- disableSelection: function() {\r
- return this\r
- .attr('unselectable', 'on')\r
- .css('MozUserSelect', 'none')\r
- .bind('selectstart.ui', function() { return false; });\r
- },\r
-\r
- scrollParent: function() {\r
- var scrollParent;\r
- if(($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) {\r
- scrollParent = this.parents().filter(function() {\r
- return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));\r
- }).eq(0);\r
- } else {\r
- scrollParent = this.parents().filter(function() {\r
- return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));\r
- }).eq(0);\r
- }\r
-\r
- return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent;\r
- }\r
-});\r
-\r
-\r
-//Additional selectors\r
-$.extend($.expr[':'], {\r
- data: function(elem, i, match) {\r
- return !!$.data(elem, match[3]);\r
- },\r
-\r
- focusable: function(element) {\r
- var nodeName = element.nodeName.toLowerCase(),\r
- tabIndex = $.attr(element, 'tabindex');\r
- return (/input|select|textarea|button|object/.test(nodeName)\r
- ? !element.disabled\r
- : 'a' == nodeName || 'area' == nodeName\r
- ? element.href || !isNaN(tabIndex)\r
- : !isNaN(tabIndex))\r
- // the element and all of its ancestors must be visible\r
- // the browser may report that the area is hidden\r
- && !$(element)['area' == nodeName ? 'parents' : 'closest'](':hidden').length;\r
- },\r
-\r
- tabbable: function(element) {\r
- var tabIndex = $.attr(element, 'tabindex');\r
- return (isNaN(tabIndex) || tabIndex >= 0) && $(element).is(':focusable');\r
- }\r
-});\r
-\r
-\r
-// $.widget is a factory to create jQuery plugins\r
-// taking some boilerplate code out of the plugin code\r
-function getter(namespace, plugin, method, args) {\r
- function getMethods(type) {\r
- var methods = $[namespace][plugin][type] || [];\r
- return (typeof methods == 'string' ? methods.split(/,?\s+/) : methods);\r
- }\r
-\r
- var methods = getMethods('getter');\r
- if (args.length == 1 && typeof args[0] == 'string') {\r
- methods = methods.concat(getMethods('getterSetter'));\r
- }\r
- return ($.inArray(method, methods) != -1);\r
-}\r
-\r
-$.widget = function(name, prototype) {\r
- var namespace = name.split(".")[0];\r
- name = name.split(".")[1];\r
-\r
- // create plugin method\r
- $.fn[name] = function(options) {\r
- var isMethodCall = (typeof options == 'string'),\r
- args = Array.prototype.slice.call(arguments, 1);\r
-\r
- // prevent calls to internal methods\r
- if (isMethodCall && options.substring(0, 1) == '_') {\r
- return this;\r
- }\r
-\r
- // handle getter methods\r
- if (isMethodCall && getter(namespace, name, options, args)) {\r
- var instance = $.data(this[0], name);\r
- return (instance ? instance[options].apply(instance, args)\r
- : undefined);\r
- }\r
-\r
- // handle initialization and non-getter methods\r
- return this.each(function() {\r
- var instance = $.data(this, name);\r
-\r
- // constructor\r
- (!instance && !isMethodCall &&\r
- $.data(this, name, new $[namespace][name](this, options))._init());\r
-\r
- // method call\r
- (instance && isMethodCall && $.isFunction(instance[options]) &&\r
- instance[options].apply(instance, args));\r
- });\r
- };\r
-\r
- // create widget constructor\r
- $[namespace] = $[namespace] || {};\r
- $[namespace][name] = function(element, options) {\r
- var self = this;\r
-\r
- this.namespace = namespace;\r
- this.widgetName = name;\r
- this.widgetEventPrefix = $[namespace][name].eventPrefix || name;\r
- this.widgetBaseClass = namespace + '-' + name;\r
-\r
- this.options = $.extend({},\r
- $.widget.defaults,\r
- $[namespace][name].defaults,\r
- $.metadata && $.metadata.get(element)[name],\r
- options);\r
-\r
- this.element = $(element)\r
- .bind('setData.' + name, function(event, key, value) {\r
- if (event.target == element) {\r
- return self._setData(key, value);\r
- }\r
- })\r
- .bind('getData.' + name, function(event, key) {\r
- if (event.target == element) {\r
- return self._getData(key);\r
- }\r
- })\r
- .bind('remove', function() {\r
- return self.destroy();\r
- });\r
- };\r
-\r
- // add widget prototype\r
- $[namespace][name].prototype = $.extend({}, $.widget.prototype, prototype);\r
-\r
- // TODO: merge getter and getterSetter properties from widget prototype\r
- // and plugin prototype\r
- $[namespace][name].getterSetter = 'option';\r
-};\r
-\r
-$.widget.prototype = {\r
- _init: function() {},\r
- destroy: function() {\r
- this.element.removeData(this.widgetName)\r
- .removeClass(this.widgetBaseClass + '-disabled' + ' ' + this.namespace + '-state-disabled')\r
- .removeAttr('aria-disabled');\r
- },\r
-\r
- option: function(key, value) {\r
- var options = key,\r
- self = this;\r
-\r
- if (typeof key == "string") {\r
- if (value === undefined) {\r
- return this._getData(key);\r
- }\r
- options = {};\r
- options[key] = value;\r
- }\r
-\r
- $.each(options, function(key, value) {\r
- self._setData(key, value);\r
- });\r
- },\r
- _getData: function(key) {\r
- return this.options[key];\r
- },\r
- _setData: function(key, value) {\r
- this.options[key] = value;\r
-\r
- if (key == 'disabled') {\r
- this.element\r
- [value ? 'addClass' : 'removeClass'](\r
- this.widgetBaseClass + '-disabled' + ' ' +\r
- this.namespace + '-state-disabled')\r
- .attr("aria-disabled", value);\r
- }\r
- },\r
-\r
- enable: function() {\r
- this._setData('disabled', false);\r
- },\r
- disable: function() {\r
- this._setData('disabled', true);\r
- },\r
-\r
- _trigger: function(type, event, data) {\r
- var callback = this.options[type],\r
- eventName = (type == this.widgetEventPrefix\r
- ? type : this.widgetEventPrefix + type);\r
-\r
- event = $.Event(event);\r
- event.type = eventName;\r
-\r
- // copy original event properties over to the new event\r
- // this would happen if we could call $.event.fix instead of $.Event\r
- // but we don't have a way to force an event to be fixed multiple times\r
- if (event.originalEvent) {\r
- for (var i = $.event.props.length, prop; i;) {\r
- prop = $.event.props[--i];\r
- event[prop] = event.originalEvent[prop];\r
- }\r
- }\r
-\r
- this.element.trigger(event, data);\r
-\r
- return !($.isFunction(callback) && callback.call(this.element[0], event, data) === false\r
- || event.isDefaultPrevented());\r
- }\r
-};\r
-\r
-$.widget.defaults = {\r
- disabled: false\r
-};\r
-\r
-\r
-/** Mouse Interaction Plugin **/\r
-\r
-$.ui.mouse = {\r
- _mouseInit: function() {\r
- var self = this;\r
-\r
- this.element\r
- .bind('mousedown.'+this.widgetName, function(event) {\r
- return self._mouseDown(event);\r
- })\r
- .bind('click.'+this.widgetName, function(event) {\r
- if(self._preventClickEvent) {\r
- self._preventClickEvent = false;\r
- event.stopImmediatePropagation();\r
- return false;\r
- }\r
- });\r
-\r
- // Prevent text selection in IE\r
- if ($.browser.msie) {\r
- this._mouseUnselectable = this.element.attr('unselectable');\r
- this.element.attr('unselectable', 'on');\r
- }\r
-\r
- this.started = false;\r
- },\r
-\r
- // TODO: make sure destroying one instance of mouse doesn't mess with\r
- // other instances of mouse\r
- _mouseDestroy: function() {\r
- this.element.unbind('.'+this.widgetName);\r
-\r
- // Restore text selection in IE\r
- ($.browser.msie\r
- && this.element.attr('unselectable', this._mouseUnselectable));\r
- },\r
-\r
- _mouseDown: function(event) {\r
- // don't let more than one widget handle mouseStart\r
- // TODO: figure out why we have to use originalEvent\r
- event.originalEvent = event.originalEvent || {};\r
- if (event.originalEvent.mouseHandled) { return; }\r
-\r
- // we may have missed mouseup (out of window)\r
- (this._mouseStarted && this._mouseUp(event));\r
-\r
- this._mouseDownEvent = event;\r
-\r
- var self = this,\r
- btnIsLeft = (event.which == 1),\r
- elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).parents().add(event.target).filter(this.options.cancel).length : false);\r
- if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {\r
- return true;\r
- }\r
-\r
- this.mouseDelayMet = !this.options.delay;\r
- if (!this.mouseDelayMet) {\r
- this._mouseDelayTimer = setTimeout(function() {\r
- self.mouseDelayMet = true;\r
- }, this.options.delay);\r
- }\r
-\r
- if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {\r
- this._mouseStarted = (this._mouseStart(event) !== false);\r
- if (!this._mouseStarted) {\r
- event.preventDefault();\r
- return true;\r
- }\r
- }\r
-\r
- // these delegates are required to keep context\r
- this._mouseMoveDelegate = function(event) {\r
- return self._mouseMove(event);\r
- };\r
- this._mouseUpDelegate = function(event) {\r
- return self._mouseUp(event);\r
- };\r
- $(document)\r
- .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)\r
- .bind('mouseup.'+this.widgetName, this._mouseUpDelegate);\r
-\r
- // preventDefault() is used to prevent the selection of text here -\r
- // however, in Safari, this causes select boxes not to be selectable\r
- // anymore, so this fix is needed\r
- ($.browser.safari || event.preventDefault());\r
-\r
- event.originalEvent.mouseHandled = true;\r
- return true;\r
- },\r
-\r
- _mouseMove: function(event) {\r
- // IE mouseup check - mouseup happened when mouse was out of window\r
- if ($.browser.msie && !event.button) {\r
- return this._mouseUp(event);\r
- }\r
-\r
- if (this._mouseStarted) {\r
- this._mouseDrag(event);\r
- return event.preventDefault();\r
- }\r
-\r
- if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {\r
- this._mouseStarted =\r
- (this._mouseStart(this._mouseDownEvent, event) !== false);\r
- (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));\r
- }\r
-\r
- return !this._mouseStarted;\r
- },\r
-\r
- _mouseUp: function(event) {\r
- $(document)\r
- .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)\r
- .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);\r
-\r
- if (this._mouseStarted) {\r
- this._mouseStarted = false;\r
- this._preventClickEvent = (event.target == this._mouseDownEvent.target);\r
- this._mouseStop(event);\r
- }\r
-\r
- return false;\r
- },\r
-\r
- _mouseDistanceMet: function(event) {\r
- return (Math.max(\r
- Math.abs(this._mouseDownEvent.pageX - event.pageX),\r
- Math.abs(this._mouseDownEvent.pageY - event.pageY)\r
- ) >= this.options.distance\r
- );\r
- },\r
-\r
- _mouseDelayMet: function(event) {\r
- return this.mouseDelayMet;\r
- },\r
-\r
- // These are placeholder methods, to be overriden by extending plugin\r
- _mouseStart: function(event) {},\r
- _mouseDrag: function(event) {},\r
- _mouseStop: function(event) {},\r
- _mouseCapture: function(event) { return true; }\r
-};\r
-\r
-$.ui.mouse.defaults = {\r
- cancel: null,\r
- distance: 1,\r
- delay: 0\r
-};\r
-\r
-})(jQuery);\r