/* * jquery ui 1.7.2 * * copyright (c) 2009 authors.txt (http://jqueryui.com/about) * dual licensed under the mit (mit-license.txt) * and gpl (gpl-license.txt) licenses. * * http://docs.jquery.com/ui */ ;jquery.ui || (function($) { var _remove = $.fn.remove, isff2 = $.browser.mozilla && (parsefloat($.browser.version) < 1.9); //helper functions and ui object $.ui = { version: "1.7.2", // $.ui.plugin is deprecated. use the proxy pattern instead. plugin: { add: function(module, option, set) { var proto = $.ui[module].prototype; for(var i in set) { proto.plugins[i] = proto.plugins[i] || []; proto.plugins[i].push([option, set[i]]); } }, call: function(instance, name, args) { var set = instance.plugins[name]; if(!set || !instance.element[0].parentnode) { return; } for (var i = 0; i < set.length; i++) { if (instance.options[set[i][0]]) { set[i][1].apply(instance.element, args); } } } }, contains: function(a, b) { return document.comparedocumentposition ? a.comparedocumentposition(b) & 16 : a !== b && a.contains(b); }, hasscroll: function(el, a) { //if overflow is hidden, the element might have extra content, but the user wants to hide it if ($(el).css('overflow') == 'hidden') { return false; } var scroll = (a && a == 'left') ? 'scrollleft' : 'scrolltop', has = false; if (el[scroll] > 0) { return true; } // todo: determine which cases actually cause this to happen // if the element doesn't have the scroll set, see if it's possible to // set the scroll el[scroll] = 1; has = (el[scroll] > 0); el[scroll] = 0; return has; }, isoveraxis: function(x, reference, size) { //determines when x coordinate is over "b" element axis return (x > reference) && (x < (reference + size)); }, isover: function(y, x, top, left, height, width) { //determines when x, y coordinates is over "b" element return $.ui.isoveraxis(y, top, height) && $.ui.isoveraxis(x, left, width); }, keycode: { backspace: 8, caps_lock: 20, comma: 188, control: 17, delete: 46, down: 40, end: 35, enter: 13, escape: 27, home: 36, insert: 45, 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, shift: 16, space: 32, tab: 9, up: 38 } }; // wai-aria normalization if (isff2) { var attr = $.attr, removeattr = $.fn.removeattr, arians = "http://www.w3.org/2005/07/aaa", ariastate = /^aria-/, ariarole = /^wairole:/; $.attr = function(elem, name, value) { var set = value !== undefined; return (name == 'role' ? (set ? attr.call(this, elem, name, "wairole:" + value) : (attr.apply(this, arguments) || "").replace(ariarole, "")) : (ariastate.test(name) ? (set ? elem.setattributens(arians, name.replace(ariastate, "aaa:"), value) : attr.call(this, elem, name.replace(ariastate, "aaa:"))) : attr.apply(this, arguments))); }; $.fn.removeattr = function(name) { return (ariastate.test(name) ? this.each(function() { this.removeattributens(arians, name.replace(ariastate, "")); }) : removeattr.call(this, name)); }; } //jquery plugins $.fn.extend({ remove: function() { // safari has a native remove event which actually removes dom elements, // so we have to use triggerhandler instead of trigger (#3037). $("*", this).add(this).each(function() { $(this).triggerhandler("remove"); }); return _remove.apply(this, arguments ); }, enableselection: function() { return this .attr('unselectable', 'off') .css('mozuserselect', '') .unbind('selectstart.ui'); }, disableselection: function() { return this .attr('unselectable', 'on') .css('mozuserselect', 'none') .bind('selectstart.ui', function() { return false; }); }, scrollparent: function() { var scrollparent; if(($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) { scrollparent = this.parents().filter(function() { 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)); }).eq(0); } else { scrollparent = this.parents().filter(function() { return (/(auto|scroll)/).test($.curcss(this,'overflow',1)+$.curcss(this,'overflow-y',1)+$.curcss(this,'overflow-x',1)); }).eq(0); } return (/fixed/).test(this.css('position')) || !scrollparent.length ? $(document) : scrollparent; } }); //additional selectors $.extend($.expr[':'], { data: function(elem, i, match) { return !!$.data(elem, match[3]); }, focusable: function(element) { var nodename = element.nodename.tolowercase(), tabindex = $.attr(element, 'tabindex'); return (/input|select|textarea|button|object/.test(nodename) ? !element.disabled : 'a' == nodename || 'area' == nodename ? element.href || !isnan(tabindex) : !isnan(tabindex)) // the element and all of its ancestors must be visible // the browser may report that the area is hidden && !$(element)['area' == nodename ? 'parents' : 'closest'](':hidden').length; }, tabbable: function(element) { var tabindex = $.attr(element, 'tabindex'); return (isnan(tabindex) || tabindex >= 0) && $(element).is(':focusable'); } }); // $.widget is a factory to create jquery plugins // taking some boilerplate code out of the plugin code function getter(namespace, plugin, method, args) { function getmethods(type) { var methods = $[namespace][plugin][type] || []; return (typeof methods == 'string' ? methods.split(/,?\s+/) : methods); } var methods = getmethods('getter'); if (args.length == 1 && typeof args[0] == 'string') { methods = methods.concat(getmethods('gettersetter')); } return ($.inarray(method, methods) != -1); } $.widget = function(name, prototype) { var namespace = name.split(".")[0]; name = name.split(".")[1]; // create plugin method $.fn[name] = function(options) { var ismethodcall = (typeof options == 'string'), args = array.prototype.slice.call(arguments, 1); // prevent calls to internal methods if (ismethodcall && options.substring(0, 1) == '_') { return this; } // handle getter methods if (ismethodcall && getter(namespace, name, options, args)) { var instance = $.data(this[0], name); return (instance ? instance[options].apply(instance, args) : undefined); } // handle initialization and non-getter methods return this.each(function() { var instance = $.data(this, name); // constructor (!instance && !ismethodcall && $.data(this, name, new $[namespace][name](this, options))._init()); // method call (instance && ismethodcall && $.isfunction(instance[options]) && instance[options].apply(instance, args)); }); }; // create widget constructor $[namespace] = $[namespace] || {}; $[namespace][name] = function(element, options) { var self = this; this.namespace = namespace; this.widgetname = name; this.widgeteventprefix = $[namespace][name].eventprefix || name; this.widgetbaseclass = namespace + '-' + name; this.options = $.extend({}, $.widget.defaults, $[namespace][name].defaults, $.metadata && $.metadata.get(element)[name], options); this.element = $(element) .bind('setdata.' + name, function(event, key, value) { if (event.target == element) { return self._setdata(key, value); } }) .bind('getdata.' + name, function(event, key) { if (event.target == element) { return self._getdata(key); } }) .bind('remove', function() { return self.destroy(); }); }; // add widget prototype $[namespace][name].prototype = $.extend({}, $.widget.prototype, prototype); // todo: merge getter and gettersetter properties from widget prototype // and plugin prototype $[namespace][name].gettersetter = 'option'; }; $.widget.prototype = { _init: function() {}, destroy: function() { this.element.removedata(this.widgetname) .removeclass(this.widgetbaseclass + '-disabled' + ' ' + this.namespace + '-state-disabled') .removeattr('aria-disabled'); }, option: function(key, value) { var options = key, self = this; if (typeof key == "string") { if (value === undefined) { return this._getdata(key); } options = {}; options[key] = value; } $.each(options, function(key, value) { self._setdata(key, value); }); }, _getdata: function(key) { return this.options[key]; }, _setdata: function(key, value) { this.options[key] = value; if (key == 'disabled') { this.element [value ? 'addclass' : 'removeclass']( this.widgetbaseclass + '-disabled' + ' ' + this.namespace + '-state-disabled') .attr("aria-disabled", value); } }, enable: function() { this._setdata('disabled', false); }, disable: function() { this._setdata('disabled', true); }, _trigger: function(type, event, data) { var callback = this.options[type], eventname = (type == this.widgeteventprefix ? type : this.widgeteventprefix + type); event = $.event(event); event.type = eventname; // copy original event properties over to the new event // this would happen if we could call $.event.fix instead of $.event // but we don't have a way to force an event to be fixed multiple times if (event.originalevent) { for (var i = $.event.props.length, prop; i;) { prop = $.event.props[--i]; event[prop] = event.originalevent[prop]; } } this.element.trigger(event, data); return !($.isfunction(callback) && callback.call(this.element[0], event, data) === false || event.isdefaultprevented()); } }; $.widget.defaults = { disabled: false }; /** mouse interaction plugin **/ $.ui.mouse = { _mouseinit: function() { var self = this; this.element .bind('mousedown.'+this.widgetname, function(event) { return self._mousedown(event); }) .bind('click.'+this.widgetname, function(event) { if(self._preventclickevent) { self._preventclickevent = false; event.stopimmediatepropagation(); return false; } }); // prevent text selection in ie if ($.browser.msie) { this._mouseunselectable = this.element.attr('unselectable'); this.element.attr('unselectable', 'on'); } this.started = false; }, // todo: make sure destroying one instance of mouse doesn't mess with // other instances of mouse _mousedestroy: function() { this.element.unbind('.'+this.widgetname); // restore text selection in ie ($.browser.msie && this.element.attr('unselectable', this._mouseunselectable)); }, _mousedown: function(event) { // don't let more than one widget handle mousestart // todo: figure out why we have to use originalevent event.originalevent = event.originalevent || {}; if (event.originalevent.mousehandled) { return; } // we may have missed mouseup (out of window) (this._mousestarted && this._mouseup(event)); this._mousedownevent = event; var self = this, btnisleft = (event.which == 1), eliscancel = (typeof this.options.cancel == "string" ? $(event.target).parents().add(event.target).filter(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() { self.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; } } // these delegates are required to keep context this._mousemovedelegate = function(event) { return self._mousemove(event); }; this._mouseupdelegate = function(event) { return self._mouseup(event); }; $(document) .bind('mousemove.'+this.widgetname, this._mousemovedelegate) .bind('mouseup.'+this.widgetname, this._mouseupdelegate); // preventdefault() is used to prevent the selection of text here - // however, in safari, this causes select boxes not to be selectable // anymore, so this fix is needed ($.browser.safari || event.preventdefault()); event.originalevent.mousehandled = true; return true; }, _mousemove: function(event) { // ie mouseup check - mouseup happened when mouse was out of window if ($.browser.msie && !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) .unbind('mousemove.'+this.widgetname, this._mousemovedelegate) .unbind('mouseup.'+this.widgetname, this._mouseupdelegate); if (this._mousestarted) { this._mousestarted = false; this._preventclickevent = (event.target == this._mousedownevent.target); 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; }, // these are placeholder methods, to be overriden by extending plugin _mousestart: function(event) {}, _mousedrag: function(event) {}, _mousestop: function(event) {}, _mousecapture: function(event) { return true; } }; $.ui.mouse.defaults = { cancel: null, distance: 1, delay: 0 }; })(jquery);