[ Index ]

PHP Cross Reference of WordPress

title

Body

[close]

/wp-includes/js/jquery/ui/ -> selectable.js (source)

   1  /*!
   2   * jQuery UI Selectable 1.12.1
   3   * http://jqueryui.com
   4   *
   5   * Copyright jQuery Foundation and other contributors
   6   * Released under the MIT license.
   7   * http://jquery.org/license
   8   */
   9  
  10  //>>label: Selectable
  11  //>>group: Interactions
  12  //>>description: Allows groups of elements to be selected with the mouse.
  13  //>>docs: http://api.jqueryui.com/selectable/
  14  //>>demos: http://jqueryui.com/selectable/
  15  //>>css.structure: ../../themes/base/selectable.css
  16  
  17  ( function( factory ) {
  18      if ( typeof define === "function" && define.amd ) {
  19  
  20          // AMD. Register as an anonymous module.
  21          define( [
  22              "jquery",
  23              "./mouse",
  24              "./core"
  25          ], factory );
  26      } else {
  27  
  28          // Browser globals
  29          factory( jQuery );
  30      }
  31  }( function( $ ) {
  32  
  33  return $.widget( "ui.selectable", $.ui.mouse, {
  34      version: "1.12.1",
  35      options: {
  36          appendTo: "body",
  37          autoRefresh: true,
  38          distance: 0,
  39          filter: "*",
  40          tolerance: "touch",
  41  
  42          // Callbacks
  43          selected: null,
  44          selecting: null,
  45          start: null,
  46          stop: null,
  47          unselected: null,
  48          unselecting: null
  49      },
  50      _create: function() {
  51          var that = this;
  52  
  53          this._addClass( "ui-selectable" );
  54  
  55          this.dragged = false;
  56  
  57          // Cache selectee children based on filter
  58          this.refresh = function() {
  59              that.elementPos = $( that.element[ 0 ] ).offset();
  60              that.selectees = $( that.options.filter, that.element[ 0 ] );
  61              that._addClass( that.selectees, "ui-selectee" );
  62              that.selectees.each( function() {
  63                  var $this = $( this ),
  64                      selecteeOffset = $this.offset(),
  65                      pos = {
  66                          left: selecteeOffset.left - that.elementPos.left,
  67                          top: selecteeOffset.top - that.elementPos.top
  68                      };
  69                  $.data( this, "selectable-item", {
  70                      element: this,
  71                      $element: $this,
  72                      left: pos.left,
  73                      top: pos.top,
  74                      right: pos.left + $this.outerWidth(),
  75                      bottom: pos.top + $this.outerHeight(),
  76                      startselected: false,
  77                      selected: $this.hasClass( "ui-selected" ),
  78                      selecting: $this.hasClass( "ui-selecting" ),
  79                      unselecting: $this.hasClass( "ui-unselecting" )
  80                  } );
  81              } );
  82          };
  83          this.refresh();
  84  
  85          this._mouseInit();
  86  
  87          this.helper = $( "<div>" );
  88          this._addClass( this.helper, "ui-selectable-helper" );
  89      },
  90  
  91      _destroy: function() {
  92          this.selectees.removeData( "selectable-item" );
  93          this._mouseDestroy();
  94      },
  95  
  96      _mouseStart: function( event ) {
  97          var that = this,
  98              options = this.options;
  99  
 100          this.opos = [ event.pageX, event.pageY ];
 101          this.elementPos = $( this.element[ 0 ] ).offset();
 102  
 103          if ( this.options.disabled ) {
 104              return;
 105          }
 106  
 107          this.selectees = $( options.filter, this.element[ 0 ] );
 108  
 109          this._trigger( "start", event );
 110  
 111          $( options.appendTo ).append( this.helper );
 112  
 113          // position helper (lasso)
 114          this.helper.css( {
 115              "left": event.pageX,
 116              "top": event.pageY,
 117              "width": 0,
 118              "height": 0
 119          } );
 120  
 121          if ( options.autoRefresh ) {
 122              this.refresh();
 123          }
 124  
 125          this.selectees.filter( ".ui-selected" ).each( function() {
 126              var selectee = $.data( this, "selectable-item" );
 127              selectee.startselected = true;
 128              if ( !event.metaKey && !event.ctrlKey ) {
 129                  that._removeClass( selectee.$element, "ui-selected" );
 130                  selectee.selected = false;
 131                  that._addClass( selectee.$element, "ui-unselecting" );
 132                  selectee.unselecting = true;
 133  
 134                  // selectable UNSELECTING callback
 135                  that._trigger( "unselecting", event, {
 136                      unselecting: selectee.element
 137                  } );
 138              }
 139          } );
 140  
 141          $( event.target ).parents().addBack().each( function() {
 142              var doSelect,
 143                  selectee = $.data( this, "selectable-item" );
 144              if ( selectee ) {
 145                  doSelect = ( !event.metaKey && !event.ctrlKey ) ||
 146                      !selectee.$element.hasClass( "ui-selected" );
 147                  that._removeClass( selectee.$element, doSelect ? "ui-unselecting" : "ui-selected" )
 148                      ._addClass( selectee.$element, doSelect ? "ui-selecting" : "ui-unselecting" );
 149                  selectee.unselecting = !doSelect;
 150                  selectee.selecting = doSelect;
 151                  selectee.selected = doSelect;
 152  
 153                  // selectable (UN)SELECTING callback
 154                  if ( doSelect ) {
 155                      that._trigger( "selecting", event, {
 156                          selecting: selectee.element
 157                      } );
 158                  } else {
 159                      that._trigger( "unselecting", event, {
 160                          unselecting: selectee.element
 161                      } );
 162                  }
 163                  return false;
 164              }
 165          } );
 166  
 167      },
 168  
 169      _mouseDrag: function( event ) {
 170  
 171          this.dragged = true;
 172  
 173          if ( this.options.disabled ) {
 174              return;
 175          }
 176  
 177          var tmp,
 178              that = this,
 179              options = this.options,
 180              x1 = this.opos[ 0 ],
 181              y1 = this.opos[ 1 ],
 182              x2 = event.pageX,
 183              y2 = event.pageY;
 184  
 185          if ( x1 > x2 ) { tmp = x2; x2 = x1; x1 = tmp; }
 186          if ( y1 > y2 ) { tmp = y2; y2 = y1; y1 = tmp; }
 187          this.helper.css( { left: x1, top: y1, width: x2 - x1, height: y2 - y1 } );
 188  
 189          this.selectees.each( function() {
 190              var selectee = $.data( this, "selectable-item" ),
 191                  hit = false,
 192                  offset = {};
 193  
 194              //prevent helper from being selected if appendTo: selectable
 195              if ( !selectee || selectee.element === that.element[ 0 ] ) {
 196                  return;
 197              }
 198  
 199              offset.left   = selectee.left   + that.elementPos.left;
 200              offset.right  = selectee.right  + that.elementPos.left;
 201              offset.top    = selectee.top    + that.elementPos.top;
 202              offset.bottom = selectee.bottom + that.elementPos.top;
 203  
 204              if ( options.tolerance === "touch" ) {
 205                  hit = ( !( offset.left > x2 || offset.right < x1 || offset.top > y2 ||
 206                      offset.bottom < y1 ) );
 207              } else if ( options.tolerance === "fit" ) {
 208                  hit = ( offset.left > x1 && offset.right < x2 && offset.top > y1 &&
 209                      offset.bottom < y2 );
 210              }
 211  
 212              if ( hit ) {
 213  
 214                  // SELECT
 215                  if ( selectee.selected ) {
 216                      that._removeClass( selectee.$element, "ui-selected" );
 217                      selectee.selected = false;
 218                  }
 219                  if ( selectee.unselecting ) {
 220                      that._removeClass( selectee.$element, "ui-unselecting" );
 221                      selectee.unselecting = false;
 222                  }
 223                  if ( !selectee.selecting ) {
 224                      that._addClass( selectee.$element, "ui-selecting" );
 225                      selectee.selecting = true;
 226  
 227                      // selectable SELECTING callback
 228                      that._trigger( "selecting", event, {
 229                          selecting: selectee.element
 230                      } );
 231                  }
 232              } else {
 233  
 234                  // UNSELECT
 235                  if ( selectee.selecting ) {
 236                      if ( ( event.metaKey || event.ctrlKey ) && selectee.startselected ) {
 237                          that._removeClass( selectee.$element, "ui-selecting" );
 238                          selectee.selecting = false;
 239                          that._addClass( selectee.$element, "ui-selected" );
 240                          selectee.selected = true;
 241                      } else {
 242                          that._removeClass( selectee.$element, "ui-selecting" );
 243                          selectee.selecting = false;
 244                          if ( selectee.startselected ) {
 245                              that._addClass( selectee.$element, "ui-unselecting" );
 246                              selectee.unselecting = true;
 247                          }
 248  
 249                          // selectable UNSELECTING callback
 250                          that._trigger( "unselecting", event, {
 251                              unselecting: selectee.element
 252                          } );
 253                      }
 254                  }
 255                  if ( selectee.selected ) {
 256                      if ( !event.metaKey && !event.ctrlKey && !selectee.startselected ) {
 257                          that._removeClass( selectee.$element, "ui-selected" );
 258                          selectee.selected = false;
 259  
 260                          that._addClass( selectee.$element, "ui-unselecting" );
 261                          selectee.unselecting = true;
 262  
 263                          // selectable UNSELECTING callback
 264                          that._trigger( "unselecting", event, {
 265                              unselecting: selectee.element
 266                          } );
 267                      }
 268                  }
 269              }
 270          } );
 271  
 272          return false;
 273      },
 274  
 275      _mouseStop: function( event ) {
 276          var that = this;
 277  
 278          this.dragged = false;
 279  
 280          $( ".ui-unselecting", this.element[ 0 ] ).each( function() {
 281              var selectee = $.data( this, "selectable-item" );
 282              that._removeClass( selectee.$element, "ui-unselecting" );
 283              selectee.unselecting = false;
 284              selectee.startselected = false;
 285              that._trigger( "unselected", event, {
 286                  unselected: selectee.element
 287              } );
 288          } );
 289          $( ".ui-selecting", this.element[ 0 ] ).each( function() {
 290              var selectee = $.data( this, "selectable-item" );
 291              that._removeClass( selectee.$element, "ui-selecting" )
 292                  ._addClass( selectee.$element, "ui-selected" );
 293              selectee.selecting = false;
 294              selectee.selected = true;
 295              selectee.startselected = true;
 296              that._trigger( "selected", event, {
 297                  selected: selectee.element
 298              } );
 299          } );
 300          this._trigger( "stop", event );
 301  
 302          this.helper.remove();
 303  
 304          return false;
 305      }
 306  
 307  } );
 308  
 309  } ) );


Generated: Mon Nov 30 01:00:03 2020 Cross-referenced by PHPXref 0.7.1