[ Index ]

PHP Cross Reference of Drupal 6 (gatewave)

title

Body

[close]

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

   1  /*

   2   * jQuery UI Selectable 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/Selectables

   9   *

  10   * Depends:

  11   *    ui.core.js

  12   */
  13  (function($) {
  14  
  15  $.widget("ui.selectable", $.extend({}, $.ui.mouse, {
  16  
  17      _init: function() {
  18          var self = this;
  19  
  20          this.element.addClass("ui-selectable");
  21  
  22          this.dragged = false;
  23  
  24          // cache selectee children based on filter

  25          var selectees;
  26          this.refresh = function() {
  27              selectees = $(self.options.filter, self.element[0]);
  28              selectees.each(function() {
  29                  var $this = $(this);
  30                  var pos = $this.offset();
  31                  $.data(this, "selectable-item", {
  32                      element: this,
  33                      $element: $this,
  34                      left: pos.left,
  35                      top: pos.top,
  36                      right: pos.left + $this.outerWidth(),
  37                      bottom: pos.top + $this.outerHeight(),
  38                      startselected: false,
  39                      selected: $this.hasClass('ui-selected'),
  40                      selecting: $this.hasClass('ui-selecting'),
  41                      unselecting: $this.hasClass('ui-unselecting')
  42                  });
  43              });
  44          };
  45          this.refresh();
  46  
  47          this.selectees = selectees.addClass("ui-selectee");
  48  
  49          this._mouseInit();
  50  
  51          this.helper = $(document.createElement('div'))
  52              .css({border:'1px dotted black'})
  53              .addClass("ui-selectable-helper");
  54      },
  55  
  56      destroy: function() {
  57          this.element
  58              .removeClass("ui-selectable ui-selectable-disabled")
  59              .removeData("selectable")
  60              .unbind(".selectable");
  61          this._mouseDestroy();
  62      },
  63  
  64      _mouseStart: function(event) {
  65          var self = this;
  66  
  67          this.opos = [event.pageX, event.pageY];
  68  
  69          if (this.options.disabled)
  70              return;
  71  
  72          var options = this.options;
  73  
  74          this.selectees = $(options.filter, this.element[0]);
  75  
  76          this._trigger("start", event);
  77  
  78          $(options.appendTo).append(this.helper);
  79          // position helper (lasso)

  80          this.helper.css({
  81              "z-index": 100,
  82              "position": "absolute",
  83              "left": event.clientX,
  84              "top": event.clientY,
  85              "width": 0,
  86              "height": 0
  87          });
  88  
  89          if (options.autoRefresh) {
  90              this.refresh();
  91          }
  92  
  93          this.selectees.filter('.ui-selected').each(function() {
  94              var selectee = $.data(this, "selectable-item");
  95              selectee.startselected = true;
  96              if (!event.metaKey) {
  97                  selectee.$element.removeClass('ui-selected');
  98                  selectee.selected = false;
  99                  selectee.$element.addClass('ui-unselecting');
 100                  selectee.unselecting = true;
 101                  // selectable UNSELECTING callback

 102                  self._trigger("unselecting", event, {
 103                      unselecting: selectee.element
 104                  });
 105              }
 106          });
 107  
 108          $(event.target).parents().andSelf().each(function() {
 109              var selectee = $.data(this, "selectable-item");
 110              if (selectee) {
 111                  selectee.$element.removeClass("ui-unselecting").addClass('ui-selecting');
 112                  selectee.unselecting = false;
 113                  selectee.selecting = true;
 114                  selectee.selected = true;
 115                  // selectable SELECTING callback

 116                  self._trigger("selecting", event, {
 117                      selecting: selectee.element
 118                  });
 119                  return false;
 120              }
 121          });
 122  
 123      },
 124  
 125      _mouseDrag: function(event) {
 126          var self = this;
 127          this.dragged = true;
 128  
 129          if (this.options.disabled)
 130              return;
 131  
 132          var options = this.options;
 133  
 134          var x1 = this.opos[0], y1 = this.opos[1], x2 = event.pageX, y2 = event.pageY;
 135          if (x1 > x2) { var tmp = x2; x2 = x1; x1 = tmp; }
 136          if (y1 > y2) { var tmp = y2; y2 = y1; y1 = tmp; }
 137          this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
 138  
 139          this.selectees.each(function() {
 140              var selectee = $.data(this, "selectable-item");
 141              //prevent helper from being selected if appendTo: selectable

 142              if (!selectee || selectee.element == self.element[0])
 143                  return;
 144              var hit = false;
 145              if (options.tolerance == 'touch') {
 146                  hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
 147              } else if (options.tolerance == 'fit') {
 148                  hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
 149              }
 150  
 151              if (hit) {
 152                  // SELECT

 153                  if (selectee.selected) {
 154                      selectee.$element.removeClass('ui-selected');
 155                      selectee.selected = false;
 156                  }
 157                  if (selectee.unselecting) {
 158                      selectee.$element.removeClass('ui-unselecting');
 159                      selectee.unselecting = false;
 160                  }
 161                  if (!selectee.selecting) {
 162                      selectee.$element.addClass('ui-selecting');
 163                      selectee.selecting = true;
 164                      // selectable SELECTING callback

 165                      self._trigger("selecting", event, {
 166                          selecting: selectee.element
 167                      });
 168                  }
 169              } else {
 170                  // UNSELECT

 171                  if (selectee.selecting) {
 172                      if (event.metaKey && selectee.startselected) {
 173                          selectee.$element.removeClass('ui-selecting');
 174                          selectee.selecting = false;
 175                          selectee.$element.addClass('ui-selected');
 176                          selectee.selected = true;
 177                      } else {
 178                          selectee.$element.removeClass('ui-selecting');
 179                          selectee.selecting = false;
 180                          if (selectee.startselected) {
 181                              selectee.$element.addClass('ui-unselecting');
 182                              selectee.unselecting = true;
 183                          }
 184                          // selectable UNSELECTING callback

 185                          self._trigger("unselecting", event, {
 186                              unselecting: selectee.element
 187                          });
 188                      }
 189                  }
 190                  if (selectee.selected) {
 191                      if (!event.metaKey && !selectee.startselected) {
 192                          selectee.$element.removeClass('ui-selected');
 193                          selectee.selected = false;
 194  
 195                          selectee.$element.addClass('ui-unselecting');
 196                          selectee.unselecting = true;
 197                          // selectable UNSELECTING callback

 198                          self._trigger("unselecting", event, {
 199                              unselecting: selectee.element
 200                          });
 201                      }
 202                  }
 203              }
 204          });
 205  
 206          return false;
 207      },
 208  
 209      _mouseStop: function(event) {
 210          var self = this;
 211  
 212          this.dragged = false;
 213  
 214          var options = this.options;
 215  
 216          $('.ui-unselecting', this.element[0]).each(function() {
 217              var selectee = $.data(this, "selectable-item");
 218              selectee.$element.removeClass('ui-unselecting');
 219              selectee.unselecting = false;
 220              selectee.startselected = false;
 221              self._trigger("unselected", event, {
 222                  unselected: selectee.element
 223              });
 224          });
 225          $('.ui-selecting', this.element[0]).each(function() {
 226              var selectee = $.data(this, "selectable-item");
 227              selectee.$element.removeClass('ui-selecting').addClass('ui-selected');
 228              selectee.selecting = false;
 229              selectee.selected = true;
 230              selectee.startselected = true;
 231              self._trigger("selected", event, {
 232                  selected: selectee.element
 233              });
 234          });
 235          this._trigger("stop", event);
 236  
 237          this.helper.remove();
 238  
 239          return false;
 240      }
 241  
 242  }));
 243  
 244  $.extend($.ui.selectable, {
 245      version: "1.7.2",
 246      defaults: {
 247          appendTo: 'body',
 248          autoRefresh: true,
 249          cancel: ":input,option",
 250          delay: 0,
 251          distance: 0,
 252          filter: '*',
 253          tolerance: 'touch'
 254      }
 255  });
 256  
 257  })(jQuery);


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