mirror of
https://github.com/WordPress/WordPress.git
synced 2025-02-28 18:39:12 +00:00
The final release is expected at the beginning of October. Updating to rc2 now gives everybody plenty of time to test and report any issues either with UI 1.13.0 or with the WordPress implementation. Props Clorith, mgol, azaozz. See #52163. Built from https://develop.svn.wordpress.org/trunk@51794 git-svn-id: http://core.svn.wordpress.org/trunk@51401 1a063a9b-81f0-0310-95a4-ce76da25c4cd
317 lines
7.9 KiB
JavaScript
317 lines
7.9 KiB
JavaScript
/*!
|
|
* jQuery UI Selectable 1.13.0-rc.2
|
|
* http://jqueryui.com
|
|
*
|
|
* Copyright jQuery Foundation and other contributors
|
|
* Released under the MIT license.
|
|
* http://jquery.org/license
|
|
*/
|
|
|
|
//>>label: Selectable
|
|
//>>group: Interactions
|
|
//>>description: Allows groups of elements to be selected with the mouse.
|
|
//>>docs: http://api.jqueryui.com/selectable/
|
|
//>>demos: http://jqueryui.com/selectable/
|
|
//>>css.structure: ../../themes/base/selectable.css
|
|
|
|
( function( factory ) {
|
|
"use strict";
|
|
|
|
if ( typeof define === "function" && define.amd ) {
|
|
|
|
// AMD. Register as an anonymous module.
|
|
define( [
|
|
"jquery",
|
|
"./mouse",
|
|
"./core"
|
|
], factory );
|
|
} else {
|
|
|
|
// Browser globals
|
|
factory( jQuery );
|
|
}
|
|
} )( function( $ ) {
|
|
"use strict";
|
|
|
|
return $.widget( "ui.selectable", $.ui.mouse, {
|
|
version: "1.13.0-rc.2",
|
|
options: {
|
|
appendTo: "body",
|
|
autoRefresh: true,
|
|
distance: 0,
|
|
filter: "*",
|
|
tolerance: "touch",
|
|
|
|
// Callbacks
|
|
selected: null,
|
|
selecting: null,
|
|
start: null,
|
|
stop: null,
|
|
unselected: null,
|
|
unselecting: null
|
|
},
|
|
_create: function() {
|
|
var that = this;
|
|
|
|
this._addClass( "ui-selectable" );
|
|
|
|
this.dragged = false;
|
|
|
|
// Cache selectee children based on filter
|
|
this.refresh = function() {
|
|
that.elementPos = $( that.element[ 0 ] ).offset();
|
|
that.selectees = $( that.options.filter, that.element[ 0 ] );
|
|
that._addClass( that.selectees, "ui-selectee" );
|
|
that.selectees.each( function() {
|
|
var $this = $( this ),
|
|
selecteeOffset = $this.offset(),
|
|
pos = {
|
|
left: selecteeOffset.left - that.elementPos.left,
|
|
top: selecteeOffset.top - that.elementPos.top
|
|
};
|
|
$.data( this, "selectable-item", {
|
|
element: this,
|
|
$element: $this,
|
|
left: pos.left,
|
|
top: pos.top,
|
|
right: pos.left + $this.outerWidth(),
|
|
bottom: pos.top + $this.outerHeight(),
|
|
startselected: false,
|
|
selected: $this.hasClass( "ui-selected" ),
|
|
selecting: $this.hasClass( "ui-selecting" ),
|
|
unselecting: $this.hasClass( "ui-unselecting" )
|
|
} );
|
|
} );
|
|
};
|
|
this.refresh();
|
|
|
|
this._mouseInit();
|
|
|
|
this.helper = $( "<div>" );
|
|
this._addClass( this.helper, "ui-selectable-helper" );
|
|
},
|
|
|
|
_destroy: function() {
|
|
this.selectees.removeData( "selectable-item" );
|
|
this._mouseDestroy();
|
|
},
|
|
|
|
_mouseStart: function( event ) {
|
|
var that = this,
|
|
options = this.options;
|
|
|
|
this.opos = [ event.pageX, event.pageY ];
|
|
this.elementPos = $( this.element[ 0 ] ).offset();
|
|
|
|
if ( this.options.disabled ) {
|
|
return;
|
|
}
|
|
|
|
this.selectees = $( options.filter, this.element[ 0 ] );
|
|
|
|
this._trigger( "start", event );
|
|
|
|
$( options.appendTo ).append( this.helper );
|
|
|
|
// position helper (lasso)
|
|
this.helper.css( {
|
|
"left": event.pageX,
|
|
"top": event.pageY,
|
|
"width": 0,
|
|
"height": 0
|
|
} );
|
|
|
|
if ( options.autoRefresh ) {
|
|
this.refresh();
|
|
}
|
|
|
|
this.selectees.filter( ".ui-selected" ).each( function() {
|
|
var selectee = $.data( this, "selectable-item" );
|
|
selectee.startselected = true;
|
|
if ( !event.metaKey && !event.ctrlKey ) {
|
|
that._removeClass( selectee.$element, "ui-selected" );
|
|
selectee.selected = false;
|
|
that._addClass( selectee.$element, "ui-unselecting" );
|
|
selectee.unselecting = true;
|
|
|
|
// selectable UNSELECTING callback
|
|
that._trigger( "unselecting", event, {
|
|
unselecting: selectee.element
|
|
} );
|
|
}
|
|
} );
|
|
|
|
$( event.target ).parents().addBack().each( function() {
|
|
var doSelect,
|
|
selectee = $.data( this, "selectable-item" );
|
|
if ( selectee ) {
|
|
doSelect = ( !event.metaKey && !event.ctrlKey ) ||
|
|
!selectee.$element.hasClass( "ui-selected" );
|
|
that._removeClass( selectee.$element, doSelect ? "ui-unselecting" : "ui-selected" )
|
|
._addClass( selectee.$element, doSelect ? "ui-selecting" : "ui-unselecting" );
|
|
selectee.unselecting = !doSelect;
|
|
selectee.selecting = doSelect;
|
|
selectee.selected = doSelect;
|
|
|
|
// selectable (UN)SELECTING callback
|
|
if ( doSelect ) {
|
|
that._trigger( "selecting", event, {
|
|
selecting: selectee.element
|
|
} );
|
|
} else {
|
|
that._trigger( "unselecting", event, {
|
|
unselecting: selectee.element
|
|
} );
|
|
}
|
|
return false;
|
|
}
|
|
} );
|
|
|
|
},
|
|
|
|
_mouseDrag: function( event ) {
|
|
|
|
this.dragged = true;
|
|
|
|
if ( this.options.disabled ) {
|
|
return;
|
|
}
|
|
|
|
var tmp,
|
|
that = this,
|
|
options = this.options,
|
|
x1 = this.opos[ 0 ],
|
|
y1 = this.opos[ 1 ],
|
|
x2 = event.pageX,
|
|
y2 = event.pageY;
|
|
|
|
if ( x1 > x2 ) {
|
|
tmp = x2; x2 = x1; x1 = tmp;
|
|
}
|
|
if ( y1 > y2 ) {
|
|
tmp = y2; y2 = y1; y1 = tmp;
|
|
}
|
|
this.helper.css( { left: x1, top: y1, width: x2 - x1, height: y2 - y1 } );
|
|
|
|
this.selectees.each( function() {
|
|
var selectee = $.data( this, "selectable-item" ),
|
|
hit = false,
|
|
offset = {};
|
|
|
|
//prevent helper from being selected if appendTo: selectable
|
|
if ( !selectee || selectee.element === that.element[ 0 ] ) {
|
|
return;
|
|
}
|
|
|
|
offset.left = selectee.left + that.elementPos.left;
|
|
offset.right = selectee.right + that.elementPos.left;
|
|
offset.top = selectee.top + that.elementPos.top;
|
|
offset.bottom = selectee.bottom + that.elementPos.top;
|
|
|
|
if ( options.tolerance === "touch" ) {
|
|
hit = ( !( offset.left > x2 || offset.right < x1 || offset.top > y2 ||
|
|
offset.bottom < y1 ) );
|
|
} else if ( options.tolerance === "fit" ) {
|
|
hit = ( offset.left > x1 && offset.right < x2 && offset.top > y1 &&
|
|
offset.bottom < y2 );
|
|
}
|
|
|
|
if ( hit ) {
|
|
|
|
// SELECT
|
|
if ( selectee.selected ) {
|
|
that._removeClass( selectee.$element, "ui-selected" );
|
|
selectee.selected = false;
|
|
}
|
|
if ( selectee.unselecting ) {
|
|
that._removeClass( selectee.$element, "ui-unselecting" );
|
|
selectee.unselecting = false;
|
|
}
|
|
if ( !selectee.selecting ) {
|
|
that._addClass( selectee.$element, "ui-selecting" );
|
|
selectee.selecting = true;
|
|
|
|
// selectable SELECTING callback
|
|
that._trigger( "selecting", event, {
|
|
selecting: selectee.element
|
|
} );
|
|
}
|
|
} else {
|
|
|
|
// UNSELECT
|
|
if ( selectee.selecting ) {
|
|
if ( ( event.metaKey || event.ctrlKey ) && selectee.startselected ) {
|
|
that._removeClass( selectee.$element, "ui-selecting" );
|
|
selectee.selecting = false;
|
|
that._addClass( selectee.$element, "ui-selected" );
|
|
selectee.selected = true;
|
|
} else {
|
|
that._removeClass( selectee.$element, "ui-selecting" );
|
|
selectee.selecting = false;
|
|
if ( selectee.startselected ) {
|
|
that._addClass( selectee.$element, "ui-unselecting" );
|
|
selectee.unselecting = true;
|
|
}
|
|
|
|
// selectable UNSELECTING callback
|
|
that._trigger( "unselecting", event, {
|
|
unselecting: selectee.element
|
|
} );
|
|
}
|
|
}
|
|
if ( selectee.selected ) {
|
|
if ( !event.metaKey && !event.ctrlKey && !selectee.startselected ) {
|
|
that._removeClass( selectee.$element, "ui-selected" );
|
|
selectee.selected = false;
|
|
|
|
that._addClass( selectee.$element, "ui-unselecting" );
|
|
selectee.unselecting = true;
|
|
|
|
// selectable UNSELECTING callback
|
|
that._trigger( "unselecting", event, {
|
|
unselecting: selectee.element
|
|
} );
|
|
}
|
|
}
|
|
}
|
|
} );
|
|
|
|
return false;
|
|
},
|
|
|
|
_mouseStop: function( event ) {
|
|
var that = this;
|
|
|
|
this.dragged = false;
|
|
|
|
$( ".ui-unselecting", this.element[ 0 ] ).each( function() {
|
|
var selectee = $.data( this, "selectable-item" );
|
|
that._removeClass( selectee.$element, "ui-unselecting" );
|
|
selectee.unselecting = false;
|
|
selectee.startselected = false;
|
|
that._trigger( "unselected", event, {
|
|
unselected: selectee.element
|
|
} );
|
|
} );
|
|
$( ".ui-selecting", this.element[ 0 ] ).each( function() {
|
|
var selectee = $.data( this, "selectable-item" );
|
|
that._removeClass( selectee.$element, "ui-selecting" )
|
|
._addClass( selectee.$element, "ui-selected" );
|
|
selectee.selecting = false;
|
|
selectee.selected = true;
|
|
selectee.startselected = true;
|
|
that._trigger( "selected", event, {
|
|
selected: selectee.element
|
|
} );
|
|
} );
|
|
this._trigger( "stop", event );
|
|
|
|
this.helper.remove();
|
|
|
|
return false;
|
|
}
|
|
|
|
} );
|
|
|
|
} );
|