[ Index ]

PHP Cross Reference of Drupal 6 (gatewave)

title

Body

[close]

/sites/all/modules/jquery_ui/jquery.ui/ui/ -> ui.core.js (source)

   1  /*

   2   * jQuery UI 1.7.2

   3   *

   4   * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)

   5   * Dual licensed under the MIT (MIT-LICENSE.txt)

   6   * and GPL (GPL-LICENSE.txt) licenses.

   7   *

   8   * http://docs.jquery.com/UI

   9   */
  10  ;jQuery.ui || (function($) {
  11  
  12  var _remove = $.fn.remove,
  13      isFF2 = $.browser.mozilla && (parseFloat($.browser.version) < 1.9);
  14  
  15  //Helper functions and ui object

  16  $.ui = {
  17      version: "1.7.2",
  18  
  19      // $.ui.plugin is deprecated.  Use the proxy pattern instead.

  20      plugin: {
  21          add: function(module, option, set) {
  22              var proto = $.ui[module].prototype;
  23              for(var i in set) {
  24                  proto.plugins[i] = proto.plugins[i] || [];
  25                  proto.plugins[i].push([option, set[i]]);
  26              }
  27          },
  28          call: function(instance, name, args) {
  29              var set = instance.plugins[name];
  30              if(!set || !instance.element[0].parentNode) { return; }
  31  
  32              for (var i = 0; i < set.length; i++) {
  33                  if (instance.options[set[i][0]]) {
  34                      set[i][1].apply(instance.element, args);
  35                  }
  36              }
  37          }
  38      },
  39  
  40      contains: function(a, b) {
  41          return document.compareDocumentPosition
  42              ? a.compareDocumentPosition(b) & 16
  43              : a !== b && a.contains(b);
  44      },
  45  
  46      hasScroll: function(el, a) {
  47  
  48          //If overflow is hidden, the element might have extra content, but the user wants to hide it

  49          if ($(el).css('overflow') == 'hidden') { return false; }
  50  
  51          var scroll = (a && a == 'left') ? 'scrollLeft' : 'scrollTop',
  52              has = false;
  53  
  54          if (el[scroll] > 0) { return true; }
  55  
  56          // TODO: determine which cases actually cause this to happen

  57          // if the element doesn't have the scroll set, see if it's possible to

  58          // set the scroll

  59          el[scroll] = 1;
  60          has = (el[scroll] > 0);
  61          el[scroll] = 0;
  62          return has;
  63      },
  64  
  65      isOverAxis: function(x, reference, size) {
  66          //Determines when x coordinate is over "b" element axis

  67          return (x > reference) && (x < (reference + size));
  68      },
  69  
  70      isOver: function(y, x, top, left, height, width) {
  71          //Determines when x, y coordinates is over "b" element

  72          return $.ui.isOverAxis(y, top, height) && $.ui.isOverAxis(x, left, width);
  73      },
  74  
  75      keyCode: {
  76          BACKSPACE: 8,
  77          CAPS_LOCK: 20,
  78          COMMA: 188,
  79          CONTROL: 17,
  80          DELETE: 46,
  81          DOWN: 40,
  82          END: 35,
  83          ENTER: 13,
  84          ESCAPE: 27,
  85          HOME: 36,
  86          INSERT: 45,
  87          LEFT: 37,
  88          NUMPAD_ADD: 107,
  89          NUMPAD_DECIMAL: 110,
  90          NUMPAD_DIVIDE: 111,
  91          NUMPAD_ENTER: 108,
  92          NUMPAD_MULTIPLY: 106,
  93          NUMPAD_SUBTRACT: 109,
  94          PAGE_DOWN: 34,
  95          PAGE_UP: 33,
  96          PERIOD: 190,
  97          RIGHT: 39,
  98          SHIFT: 16,
  99          SPACE: 32,
 100          TAB: 9,
 101          UP: 38
 102      }
 103  };
 104  
 105  // WAI-ARIA normalization

 106  if (isFF2) {
 107      var attr = $.attr,
 108          removeAttr = $.fn.removeAttr,
 109          ariaNS = "http://www.w3.org/2005/07/aaa",
 110          ariaState = /^aria-/,
 111          ariaRole = /^wairole:/;
 112  
 113      $.attr = function(elem, name, value) {
 114          var set = value !== undefined;
 115  
 116          return (name == 'role'
 117              ? (set
 118                  ? attr.call(this, elem, name, "wairole:" + value)
 119                  : (attr.apply(this, arguments) || "").replace(ariaRole, ""))
 120              : (ariaState.test(name)
 121                  ? (set
 122                      ? elem.setAttributeNS(ariaNS,
 123                          name.replace(ariaState, "aaa:"), value)
 124                      : attr.call(this, elem, name.replace(ariaState, "aaa:")))
 125                  : attr.apply(this, arguments)));
 126      };
 127  
 128      $.fn.removeAttr = function(name) {
 129          return (ariaState.test(name)
 130              ? this.each(function() {
 131                  this.removeAttributeNS(ariaNS, name.replace(ariaState, ""));
 132              }) : removeAttr.call(this, name));
 133      };
 134  }
 135  
 136  //jQuery plugins

 137  $.fn.extend({
 138      remove: function() {
 139          // Safari has a native remove event which actually removes DOM elements,

 140          // so we have to use triggerHandler instead of trigger (#3037).

 141          $("*", this).add(this).each(function() {
 142              $(this).triggerHandler("remove");
 143          });
 144          return _remove.apply(this, arguments );
 145      },
 146  
 147      enableSelection: function() {
 148          return this
 149              .attr('unselectable', 'off')
 150              .css('MozUserSelect', '')
 151              .unbind('selectstart.ui');
 152      },
 153  
 154      disableSelection: function() {
 155          return this
 156              .attr('unselectable', 'on')
 157              .css('MozUserSelect', 'none')
 158              .bind('selectstart.ui', function() { return false; });
 159      },
 160  
 161      scrollParent: function() {
 162          var scrollParent;
 163          if(($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) {
 164              scrollParent = this.parents().filter(function() {
 165                  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));
 166              }).eq(0);
 167          } else {
 168              scrollParent = this.parents().filter(function() {
 169                  return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
 170              }).eq(0);
 171          }
 172  
 173          return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent;
 174      }
 175  });
 176  
 177  
 178  //Additional selectors

 179  $.extend($.expr[':'], {
 180      data: function(elem, i, match) {
 181          return !!$.data(elem, match[3]);
 182      },
 183  
 184      focusable: function(element) {
 185          var nodeName = element.nodeName.toLowerCase(),
 186              tabIndex = $.attr(element, 'tabindex');
 187          return (/input|select|textarea|button|object/.test(nodeName)
 188              ? !element.disabled
 189              : 'a' == nodeName || 'area' == nodeName
 190                  ? element.href || !isNaN(tabIndex)
 191                  : !isNaN(tabIndex))
 192              // the element and all of its ancestors must be visible

 193              // the browser may report that the area is hidden

 194              && !$(element)['area' == nodeName ? 'parents' : 'closest'](':hidden').length;
 195      },
 196  
 197      tabbable: function(element) {
 198          var tabIndex = $.attr(element, 'tabindex');
 199          return (isNaN(tabIndex) || tabIndex >= 0) && $(element).is(':focusable');
 200      }
 201  });
 202  
 203  
 204  // $.widget is a factory to create jQuery plugins

 205  // taking some boilerplate code out of the plugin code

 206  function getter(namespace, plugin, method, args) {
 207  	function getMethods(type) {
 208          var methods = $[namespace][plugin][type] || [];
 209          return (typeof methods == 'string' ? methods.split(/,?\s+/) : methods);
 210      }
 211  
 212      var methods = getMethods('getter');
 213      if (args.length == 1 && typeof args[0] == 'string') {
 214          methods = methods.concat(getMethods('getterSetter'));
 215      }
 216      return ($.inArray(method, methods) != -1);
 217  }
 218  
 219  $.widget = function(name, prototype) {
 220      var namespace = name.split(".")[0];
 221      name = name.split(".")[1];
 222  
 223      // create plugin method

 224      $.fn[name] = function(options) {
 225          var isMethodCall = (typeof options == 'string'),
 226              args = Array.prototype.slice.call(arguments, 1);
 227  
 228          // prevent calls to internal methods

 229          if (isMethodCall && options.substring(0, 1) == '_') {
 230              return this;
 231          }
 232  
 233          // handle getter methods

 234          if (isMethodCall && getter(namespace, name, options, args)) {
 235              var instance = $.data(this[0], name);
 236              return (instance ? instance[options].apply(instance, args)
 237                  : undefined);
 238          }
 239  
 240          // handle initialization and non-getter methods

 241          return this.each(function() {
 242              var instance = $.data(this, name);
 243  
 244              // constructor

 245              (!instance && !isMethodCall &&
 246                  $.data(this, name, new $[namespace][name](this, options))._init());
 247  
 248              // method call

 249              (instance && isMethodCall && $.isFunction(instance[options]) &&
 250                  instance[options].apply(instance, args));
 251          });
 252      };
 253  
 254      // create widget constructor

 255      $[namespace] = $[namespace] || {};
 256      $[namespace][name] = function(element, options) {
 257          var self = this;
 258  
 259          this.namespace = namespace;
 260          this.widgetName = name;
 261          this.widgetEventPrefix = $[namespace][name].eventPrefix || name;
 262          this.widgetBaseClass = namespace + '-' + name;
 263  
 264          this.options = $.extend({},
 265              $.widget.defaults,
 266              $[namespace][name].defaults,
 267              $.metadata && $.metadata.get(element)[name],
 268              options);
 269  
 270          this.element = $(element)
 271              .bind('setData.' + name, function(event, key, value) {
 272                  if (event.target == element) {
 273                      return self._setData(key, value);
 274                  }
 275              })
 276              .bind('getData.' + name, function(event, key) {
 277                  if (event.target == element) {
 278                      return self._getData(key);
 279                  }
 280              })
 281              .bind('remove', function() {
 282                  return self.destroy();
 283              });
 284      };
 285  
 286      // add widget prototype

 287      $[namespace][name].prototype = $.extend({}, $.widget.prototype, prototype);
 288  
 289      // TODO: merge getter and getterSetter properties from widget prototype

 290      // and plugin prototype

 291      $[namespace][name].getterSetter = 'option';
 292  };
 293  
 294  $.widget.prototype = {
 295      _init: function() {},
 296      destroy: function() {
 297          this.element.removeData(this.widgetName)
 298              .removeClass(this.widgetBaseClass + '-disabled' + ' ' + this.namespace + '-state-disabled')
 299              .removeAttr('aria-disabled');
 300      },
 301  
 302      option: function(key, value) {
 303          var options = key,
 304              self = this;
 305  
 306          if (typeof key == "string") {
 307              if (value === undefined) {
 308                  return this._getData(key);
 309              }
 310              options = {};
 311              options[key] = value;
 312          }
 313  
 314          $.each(options, function(key, value) {
 315              self._setData(key, value);
 316          });
 317      },
 318      _getData: function(key) {
 319          return this.options[key];
 320      },
 321      _setData: function(key, value) {
 322          this.options[key] = value;
 323  
 324          if (key == 'disabled') {
 325              this.element
 326                  [value ? 'addClass' : 'removeClass'](
 327                      this.widgetBaseClass + '-disabled' + ' ' +
 328                      this.namespace + '-state-disabled')
 329                  .attr("aria-disabled", value);
 330          }
 331      },
 332  
 333      enable: function() {
 334          this._setData('disabled', false);
 335      },
 336      disable: function() {
 337          this._setData('disabled', true);
 338      },
 339  
 340      _trigger: function(type, event, data) {
 341          var callback = this.options[type],
 342              eventName = (type == this.widgetEventPrefix
 343                  ? type : this.widgetEventPrefix + type);
 344  
 345          event = $.Event(event);
 346          event.type = eventName;
 347  
 348          // copy original event properties over to the new event

 349          // this would happen if we could call $.event.fix instead of $.Event

 350          // but we don't have a way to force an event to be fixed multiple times

 351          if (event.originalEvent) {
 352              for (var i = $.event.props.length, prop; i;) {
 353                  prop = $.event.props[--i];
 354                  event[prop] = event.originalEvent[prop];
 355              }
 356          }
 357  
 358          this.element.trigger(event, data);
 359  
 360          return !($.isFunction(callback) && callback.call(this.element[0], event, data) === false
 361              || event.isDefaultPrevented());
 362      }
 363  };
 364  
 365  $.widget.defaults = {
 366      disabled: false
 367  };
 368  
 369  
 370  /** Mouse Interaction Plugin **/

 371  
 372  $.ui.mouse = {
 373      _mouseInit: function() {
 374          var self = this;
 375  
 376          this.element
 377              .bind('mousedown.'+this.widgetName, function(event) {
 378                  return self._mouseDown(event);
 379              })
 380              .bind('click.'+this.widgetName, function(event) {
 381                  if(self._preventClickEvent) {
 382                      self._preventClickEvent = false;
 383                      event.stopImmediatePropagation();
 384                      return false;
 385                  }
 386              });
 387  
 388          // Prevent text selection in IE

 389          if ($.browser.msie) {
 390              this._mouseUnselectable = this.element.attr('unselectable');
 391              this.element.attr('unselectable', 'on');
 392          }
 393  
 394          this.started = false;
 395      },
 396  
 397      // TODO: make sure destroying one instance of mouse doesn't mess with

 398      // other instances of mouse

 399      _mouseDestroy: function() {
 400          this.element.unbind('.'+this.widgetName);
 401  
 402          // Restore text selection in IE

 403          ($.browser.msie
 404              && this.element.attr('unselectable', this._mouseUnselectable));
 405      },
 406  
 407      _mouseDown: function(event) {
 408          // don't let more than one widget handle mouseStart

 409          // TODO: figure out why we have to use originalEvent

 410          event.originalEvent = event.originalEvent || {};
 411          if (event.originalEvent.mouseHandled) { return; }
 412  
 413          // we may have missed mouseup (out of window)

 414          (this._mouseStarted && this._mouseUp(event));
 415  
 416          this._mouseDownEvent = event;
 417  
 418          var self = this,
 419              btnIsLeft = (event.which == 1),
 420              elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).parents().add(event.target).filter(this.options.cancel).length : false);
 421          if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
 422              return true;
 423          }
 424  
 425          this.mouseDelayMet = !this.options.delay;
 426          if (!this.mouseDelayMet) {
 427              this._mouseDelayTimer = setTimeout(function() {
 428                  self.mouseDelayMet = true;
 429              }, this.options.delay);
 430          }
 431  
 432          if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
 433              this._mouseStarted = (this._mouseStart(event) !== false);
 434              if (!this._mouseStarted) {
 435                  event.preventDefault();
 436                  return true;
 437              }
 438          }
 439  
 440          // these delegates are required to keep context

 441          this._mouseMoveDelegate = function(event) {
 442              return self._mouseMove(event);
 443          };
 444          this._mouseUpDelegate = function(event) {
 445              return self._mouseUp(event);
 446          };
 447          $(document)
 448              .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
 449              .bind('mouseup.'+this.widgetName, this._mouseUpDelegate);
 450  
 451          // preventDefault() is used to prevent the selection of text here -

 452          // however, in Safari, this causes select boxes not to be selectable

 453          // anymore, so this fix is needed

 454          ($.browser.safari || event.preventDefault());
 455  
 456          event.originalEvent.mouseHandled = true;
 457          return true;
 458      },
 459  
 460      _mouseMove: function(event) {
 461          // IE mouseup check - mouseup happened when mouse was out of window

 462          if ($.browser.msie && !event.button) {
 463              return this._mouseUp(event);
 464          }
 465  
 466          if (this._mouseStarted) {
 467              this._mouseDrag(event);
 468              return event.preventDefault();
 469          }
 470  
 471          if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
 472              this._mouseStarted =
 473                  (this._mouseStart(this._mouseDownEvent, event) !== false);
 474              (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
 475          }
 476  
 477          return !this._mouseStarted;
 478      },
 479  
 480      _mouseUp: function(event) {
 481          $(document)
 482              .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
 483              .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
 484  
 485          if (this._mouseStarted) {
 486              this._mouseStarted = false;
 487              this._preventClickEvent = (event.target == this._mouseDownEvent.target);
 488              this._mouseStop(event);
 489          }
 490  
 491          return false;
 492      },
 493  
 494      _mouseDistanceMet: function(event) {
 495          return (Math.max(
 496                  Math.abs(this._mouseDownEvent.pageX - event.pageX),
 497                  Math.abs(this._mouseDownEvent.pageY - event.pageY)
 498              ) >= this.options.distance
 499          );
 500      },
 501  
 502      _mouseDelayMet: function(event) {
 503          return this.mouseDelayMet;
 504      },
 505  
 506      // These are placeholder methods, to be overriden by extending plugin

 507      _mouseStart: function(event) {},
 508      _mouseDrag: function(event) {},
 509      _mouseStop: function(event) {},
 510      _mouseCapture: function(event) { return true; }
 511  };
 512  
 513  $.ui.mouse.defaults = {
 514      cancel: null,
 515      distance: 1,
 516      delay: 0
 517  };
 518  
 519  })(jQuery);


Generated: Thu Mar 24 11:18:33 2011 Cross-referenced by PHPXref 0.7