aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Nagel <info@felixnagel.com>2013-05-24 19:47:42 +0200
committerFelix Nagel <info@felixnagel.com>2013-05-24 19:47:42 +0200
commitcccb8c6e826b8140dd99f225a28cc6f725e86ced (patch)
treebb5ca77b1e1230a059f59d3e86ef933d5bbe03a6
parent7e0737edc03d36b07c45981e0a6b58f8aab3824e (diff)
parentc19e7b3496d14b40e71ba892213889fc8cc81d4f (diff)
downloadjquery-ui-cccb8c6e826b8140dd99f225a28cc6f725e86ced.tar.gz
jquery-ui-cccb8c6e826b8140dd99f225a28cc6f725e86ced.zip
Merge branch 'master' into selectmenu
-rw-r--r--demos/sortable/portlets.html60
-rw-r--r--tests/jquery.simulate.js2
-rw-r--r--tests/unit/draggable/draggable_core.js16
-rw-r--r--tests/unit/droppable/droppable_methods.js31
-rw-r--r--tests/unit/widget/widget_core.js10
-rw-r--r--ui/i18n/jquery.ui.datepicker-es.js14
-rw-r--r--ui/i18n/jquery.ui.datepicker-fr-CH.js14
-rw-r--r--ui/i18n/jquery.ui.datepicker-fr.js12
-rw-r--r--ui/jquery.ui.core.js2
-rw-r--r--ui/jquery.ui.dialog.js5
-rw-r--r--ui/jquery.ui.draggable.js16
-rw-r--r--ui/jquery.ui.droppable.js2
-rw-r--r--ui/jquery.ui.mouse.js20
-rw-r--r--ui/jquery.ui.position.js2
-rw-r--r--ui/jquery.ui.sortable.js2
-rw-r--r--ui/jquery.ui.tabs.js4
-rw-r--r--ui/jquery.ui.widget.js2
17 files changed, 155 insertions, 59 deletions
diff --git a/demos/sortable/portlets.html b/demos/sortable/portlets.html
index 5a3f2b662..a9f7c1eea 100644
--- a/demos/sortable/portlets.html
+++ b/demos/sortable/portlets.html
@@ -11,34 +11,58 @@
<script src="../../ui/jquery.ui.sortable.js"></script>
<link rel="stylesheet" href="../demos.css">
<style>
- body { min-width: 520px; }
- .column { width: 170px; float: left; padding-bottom: 100px; }
- .portlet { margin: 0 1em 1em 0; }
- .portlet-header { margin: 0.3em; padding-bottom: 4px; padding-left: 0.2em; }
- .portlet-header .ui-icon { float: right; }
- .portlet-content { padding: 0.4em; }
- .ui-sortable-placeholder { border: 1px dotted black; visibility: visible !important; height: 50px !important; }
- .ui-sortable-placeholder * { visibility: hidden; }
+ body {
+ min-width: 520px;
+ }
+ .column {
+ width: 170px;
+ float: left;
+ padding-bottom: 100px;
+ }
+ .portlet {
+ margin: 0 1em 1em 0;
+ padding: 0.3em;
+ }
+ .portlet-header {
+ padding: 0.2em 0.3em;
+ margin-bottom: 0.5em;
+ position: relative;
+ }
+ .portlet-toggle {
+ position: absolute;
+ top: 50%;
+ right: 0;
+ margin-top: -8px;
+ }
+ .portlet-content {
+ padding: 0.4em;
+ }
+ .portlet-placeholder {
+ border: 1px dotted black;
+ margin: 0 1em 1em 0;
+ height: 50px;
+ }
</style>
<script>
$(function() {
$( ".column" ).sortable({
- connectWith: ".column"
+ connectWith: ".column",
+ handle: ".portlet-header",
+ cancel: ".portlet-toggle",
+ placeholder: "portlet-placeholder ui-corner-all"
});
- $( ".portlet" ).addClass( "ui-widget ui-widget-content ui-helper-clearfix ui-corner-all" )
+ $( ".portlet" )
+ .addClass( "ui-widget ui-widget-content ui-helper-clearfix ui-corner-all" )
.find( ".portlet-header" )
.addClass( "ui-widget-header ui-corner-all" )
- .prepend( "<span class='ui-icon ui-icon-minusthick'></span>")
- .end()
- .find( ".portlet-content" );
+ .prepend( "<span class='ui-icon ui-icon-minusthick portlet-toggle'></span>");
- $( ".portlet-header .ui-icon" ).click(function() {
- $( this ).toggleClass( "ui-icon-minusthick" ).toggleClass( "ui-icon-plusthick" );
- $( this ).parents( ".portlet:first" ).find( ".portlet-content" ).toggle();
+ $( ".portlet-toggle" ).click(function() {
+ var icon = $( this );
+ icon.toggleClass( "ui-icon-minusthick ui-icon-plusthick" );
+ icon.closest( ".portlet" ).find( ".portlet-content" ).toggle();
});
-
- $( ".column" ).disableSelection();
});
</script>
</head>
diff --git a/tests/jquery.simulate.js b/tests/jquery.simulate.js
index 0a0c42487..1dd96ac3a 100644
--- a/tests/jquery.simulate.js
+++ b/tests/jquery.simulate.js
@@ -313,7 +313,7 @@ $.extend( $.simulate.prototype, {
clientY: Math.round( y )
};
- this.simulateEvent( document, "mousemove", coord );
+ this.simulateEvent( target.ownerDocument, "mousemove", coord );
}
if ( $.contains( document, target ) ) {
diff --git a/tests/unit/draggable/draggable_core.js b/tests/unit/draggable/draggable_core.js
index e7fcdfa87..e2dc2a481 100644
--- a/tests/unit/draggable/draggable_core.js
+++ b/tests/unit/draggable/draggable_core.js
@@ -169,4 +169,20 @@ test( "#5009: scroll not working with parent's position fixed", function() {
});
});
+test( "#5727: draggable from iframe" , function() {
+ expect( 2 );
+
+ var iframe = $( "<iframe id='iframe-draggable-container' src='about:blank'></iframe>" ).appendTo( "#qunit-fixture" ),
+ iframeBody = iframe.contents().find( "body" ).append(
+ "<div id='iframe-draggable-1' style='background: green; width: 200px; height: 100px;'>Relative</div>"
+ ),
+ draggable1 = iframeBody.find( "#iframe-draggable-1" );
+
+ draggable1.draggable();
+
+ equal( draggable1.closest( iframeBody ).length, 1 );
+
+ TestHelpers.draggable.shouldMove( draggable1 );
+});
+
})( jQuery );
diff --git a/tests/unit/droppable/droppable_methods.js b/tests/unit/droppable/droppable_methods.js
index f7682d262..ce3d8f72f 100644
--- a/tests/unit/droppable/droppable_methods.js
+++ b/tests/unit/droppable/droppable_methods.js
@@ -88,4 +88,33 @@ test( "disable", function() {
equal( actual, expected, "disable is chainable" );
});
-})(jQuery);
+test( "intersect", function() {
+ expect( 8 );
+
+ var actual, data,
+ draggable = $( "<div />" ).appendTo( "#qunit-fixture" ).css({ width: 10, height: 10, position: "absolute" }).draggable(),
+ droppable = $( "<div />" ).appendTo( "#qunit-fixture" ).css({ width: 10, height: 10, position: "absolute", top: 5, left: 5 }).droppable(),
+ dataset = [
+ [ -1, -1, false, "too far up and left" ],
+ [ -1, 0, false, "too far left" ],
+ [ 0, -1, false, "too far up" ],
+ [ 0, 0, true, "top left corner" ],
+ [ 9, 9, true, "bottom right corner" ],
+ [ 10, 9, false, "too far right" ],
+ [ 9, 10, false, "too far down" ],
+ [ 10, 10, false, "too far down and right" ]
+ ],
+ x = 0;
+
+ for ( ; x < dataset.length; x++ ) {
+ data = dataset[ x ];
+ $( draggable ).simulate( "drag", {
+ dx: ( data[ 0 ] - $( draggable ).position().left ),
+ dy: ( data[ 1 ] - $( draggable ).position().top )
+ });
+ actual = $.ui.intersect( $( draggable ).draggable( "instance" ), $( droppable ).droppable( "instance" ), "pointer" );
+ equal( actual, data[ 2 ], data[ 3 ] );
+ }
+});
+
+})( jQuery );
diff --git a/tests/unit/widget/widget_core.js b/tests/unit/widget/widget_core.js
index 0d97742ff..3268b756d 100644
--- a/tests/unit/widget/widget_core.js
+++ b/tests/unit/widget/widget_core.js
@@ -331,6 +331,16 @@ test( "re-init", function() {
deepEqual( actions, [ "optionfoo", "init" ], "correct methods called on re-init with options" );
});
+test( "redeclare", function() {
+ expect( 2 );
+
+ $.widget( "ui.testWidget", {} );
+ equal( $.ui.testWidget.prototype.widgetEventPrefix, "testWidget" );
+
+ $.widget( "ui.testWidget", {} );
+ equal( $.ui.testWidget.prototype.widgetEventPrefix, "testWidget" );
+});
+
test( "inheritance", function() {
expect( 6 );
// #5830 - Widget: Using inheritance overwrites the base classes options
diff --git a/ui/i18n/jquery.ui.datepicker-es.js b/ui/i18n/jquery.ui.datepicker-es.js
index 97a2d6ead..763d4cedd 100644
--- a/ui/i18n/jquery.ui.datepicker-es.js
+++ b/ui/i18n/jquery.ui.datepicker-es.js
@@ -6,13 +6,13 @@ jQuery(function($){
prevText: '&#x3C;Ant',
nextText: 'Sig&#x3E;',
currentText: 'Hoy',
- monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio',
- 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
- monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun',
- 'Jul','Ago','Sep','Oct','Nov','Dic'],
- dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'],
- dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'],
- dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'],
+ monthNames: ['enero','febrero','marzo','abril','mayo','junio',
+ 'julio','agosto','septiembre','octubre','noviembre','diciembre'],
+ monthNamesShort: ['ene','feb','mar','abr','may','jun',
+ 'jul','ogo','sep','oct','nov','dic'],
+ dayNames: ['domingo','lunes','martes','miércoles','jueves','viernes','sábado'],
+ dayNamesShort: ['dom','lun','mar','mié','juv','vie','sáb'],
+ dayNamesMin: ['D','L','M','X','J','V','S'],
weekHeader: 'Sm',
dateFormat: 'dd/mm/yy',
firstDay: 1,
diff --git a/ui/i18n/jquery.ui.datepicker-fr-CH.js b/ui/i18n/jquery.ui.datepicker-fr-CH.js
index e574537b0..744fe1c3d 100644
--- a/ui/i18n/jquery.ui.datepicker-fr-CH.js
+++ b/ui/i18n/jquery.ui.datepicker-fr-CH.js
@@ -6,13 +6,13 @@ jQuery(function($){
prevText: '&#x3C;Préc',
nextText: 'Suiv&#x3E;',
currentText: 'Courant',
- monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
- 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
- monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',
- 'Jul','Aoû','Sep','Oct','Nov','Déc'],
- dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
- dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
- dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
+ monthNames: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin',
+ 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'],
+ monthNamesShort: ['janv.', 'févr.', 'mars', 'avril', 'mai', 'juin',
+ 'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.'],
+ dayNames: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'],
+ dayNamesShort: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],
+ dayNamesMin: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],
weekHeader: 'Sm',
dateFormat: 'dd.mm.yy',
firstDay: 1,
diff --git a/ui/i18n/jquery.ui.datepicker-fr.js b/ui/i18n/jquery.ui.datepicker-fr.js
index 934afd1d0..2d06743a6 100644
--- a/ui/i18n/jquery.ui.datepicker-fr.js
+++ b/ui/i18n/jquery.ui.datepicker-fr.js
@@ -8,12 +8,12 @@ jQuery(function($){
prevText: 'Précédent',
nextText: 'Suivant',
currentText: 'Aujourd\'hui',
- monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
- 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
- monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin',
- 'Juil.','Août','Sept.','Oct.','Nov.','Déc.'],
- dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
- dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'],
+ monthNames: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin',
+ 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'],
+ monthNamesShort: ['janv.', 'févr.', 'mars', 'avril', 'mai', 'juin',
+ 'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.'],
+ dayNames: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'],
+ dayNamesShort: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],
dayNamesMin: ['D','L','M','M','J','V','S'],
weekHeader: 'Sem.',
dateFormat: 'dd/mm/yy',
diff --git a/ui/jquery.ui.core.js b/ui/jquery.ui.core.js
index 898ce10d8..9145d5d45 100644
--- a/ui/jquery.ui.core.js
+++ b/ui/jquery.ui.core.js
@@ -69,7 +69,7 @@ $.fn.extend({
}).eq(0);
}
- return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent;
+ return ( /fixed/ ).test( this.css( "position") ) || !scrollParent.length ? $( this[ 0 ].ownerDocument || document ) : scrollParent;
},
uniqueId: function() {
diff --git a/ui/jquery.ui.dialog.js b/ui/jquery.ui.dialog.js
index b01907acf..16095292c 100644
--- a/ui/jquery.ui.dialog.js
+++ b/ui/jquery.ui.dialog.js
@@ -342,7 +342,10 @@ $.widget( "ui.dialog", {
}
});
- this.uiDialogTitlebarClose = $("<button></button>")
+ // support: IE
+ // Use type="button" to prevent enter keypresses in textboxes from closing the
+ // dialog in IE (#9312)
+ this.uiDialogTitlebarClose = $( "<button type='button'></button>" )
.button({
label: this.options.closeText,
icons: {
diff --git a/ui/jquery.ui.draggable.js b/ui/jquery.ui.draggable.js
index 45b724fde..bf90d349b 100644
--- a/ui/jquery.ui.draggable.js
+++ b/ui/jquery.ui.draggable.js
@@ -325,7 +325,8 @@ $.widget("ui.draggable", $.ui.mouse, {
_getParentOffset: function() {
//Get the offsetParent and cache its position
- var po = this.offsetParent.offset();
+ var po = this.offsetParent.offset(),
+ document = this.document[ 0 ];
// This is a special case where we need to modify a offset calculated on start, since the following happened:
// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
@@ -383,7 +384,8 @@ $.widget("ui.draggable", $.ui.mouse, {
_setContainment: function() {
var over, c, ce,
- o = this.options;
+ o = this.options,
+ document = this.document[ 0 ];
if ( !o.containment ) {
this.containment = null;
@@ -444,6 +446,7 @@ $.widget("ui.draggable", $.ui.mouse, {
}
var mod = d === "absolute" ? 1 : -1,
+ document = this.document[ 0 ],
scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent;
//Cache the scroll
@@ -472,6 +475,7 @@ $.widget("ui.draggable", $.ui.mouse, {
var containment, co, top, left,
o = this.options,
+ document = this.document[ 0 ],
scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent,
pageX = event.pageX,
pageY = event.pageY;
@@ -778,17 +782,17 @@ $.ui.plugin.add("draggable", "opacity", {
$.ui.plugin.add("draggable", "scroll", {
start: function( event, ui, i ) {
- if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
+ if( i.scrollParent[ 0 ] !== i.document[ 0 ] && i.scrollParent[ 0 ].tagName !== "HTML" ) {
i.overflowOffset = i.scrollParent.offset();
}
},
drag: function( event, ui, i ) {
var o = i.options,
- scrolled = false;
-
- if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
+ scrolled = false,
+ document = i.document[ 0 ];
+ if( i.scrollParent[ 0 ] !== document && i.scrollParent[ 0 ].tagName !== "HTML" ) {
if(!o.axis || o.axis !== "x") {
if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
diff --git a/ui/jquery.ui.droppable.js b/ui/jquery.ui.droppable.js
index 6bc4b594d..808009dc1 100644
--- a/ui/jquery.ui.droppable.js
+++ b/ui/jquery.ui.droppable.js
@@ -17,7 +17,7 @@
(function( $, undefined ) {
function isOverAxis( x, reference, size ) {
- return ( x > reference ) && ( x < ( reference + size ) );
+ return ( x >= reference ) && ( x < ( reference + size ) );
}
$.widget("ui.droppable", {
diff --git a/ui/jquery.ui.mouse.js b/ui/jquery.ui.mouse.js
index df887d334..ca774e3da 100644
--- a/ui/jquery.ui.mouse.js
+++ b/ui/jquery.ui.mouse.js
@@ -48,7 +48,7 @@ $.widget("ui.mouse", {
_mouseDestroy: function() {
this.element.unbind("."+this.widgetName);
if ( this._mouseMoveDelegate ) {
- $(document)
+ this.document
.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
}
@@ -99,9 +99,10 @@ $.widget("ui.mouse", {
this._mouseUpDelegate = function(event) {
return that._mouseUp(event);
};
- $(document)
- .bind("mousemove."+this.widgetName, this._mouseMoveDelegate)
- .bind("mouseup."+this.widgetName, this._mouseUpDelegate);
+
+ this.document
+ .bind( "mousemove." + this.widgetName, this._mouseMoveDelegate )
+ .bind( "mouseup." + this.widgetName, this._mouseUpDelegate );
event.preventDefault();
@@ -114,6 +115,10 @@ $.widget("ui.mouse", {
if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
return this._mouseUp(event);
}
+ // Iframe mouseup check - mouseup occurred in another document
+ else if ( !event.which ) {
+ return this._mouseUp( event );
+ }
if (this._mouseStarted) {
this._mouseDrag(event);
@@ -130,9 +135,9 @@ $.widget("ui.mouse", {
},
_mouseUp: function(event) {
- $(document)
- .unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
- .unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
+ this.document
+ .unbind( "mousemove." + this.widgetName, this._mouseMoveDelegate )
+ .unbind( "mouseup." + this.widgetName, this._mouseUpDelegate );
if (this._mouseStarted) {
this._mouseStarted = false;
@@ -144,6 +149,7 @@ $.widget("ui.mouse", {
this._mouseStop(event);
}
+ mouseHandled = false;
return false;
},
diff --git a/ui/jquery.ui.position.js b/ui/jquery.ui.position.js
index 2d3451c06..d45b24bb1 100644
--- a/ui/jquery.ui.position.js
+++ b/ui/jquery.ui.position.js
@@ -70,7 +70,7 @@ $.position = {
return cachedScrollbarWidth;
}
var w1, w2,
- div = $( "<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
+ div = $( "<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
innerDiv = div.children()[0];
$( "body" ).append( div );
diff --git a/ui/jquery.ui.sortable.js b/ui/jquery.ui.sortable.js
index c7794f06a..9c7bf446c 100644
--- a/ui/jquery.ui.sortable.js
+++ b/ui/jquery.ui.sortable.js
@@ -16,7 +16,7 @@
(function( $, undefined ) {
function isOverAxis( x, reference, size ) {
- return ( x > reference ) && ( x < ( reference + size ) );
+ return ( x >= reference ) && ( x < ( reference + size ) );
}
function isFloating(item) {
diff --git a/ui/jquery.ui.tabs.js b/ui/jquery.ui.tabs.js
index 992bd41b2..4362421db 100644
--- a/ui/jquery.ui.tabs.js
+++ b/ui/jquery.ui.tabs.js
@@ -22,6 +22,10 @@ function getNextTabId() {
}
function isLocal( anchor ) {
+ // support: IE7
+ // IE7 doesn't normalize the href property when set via script (#9317)
+ anchor = anchor.cloneNode( false );
+
return anchor.hash.length > 1 &&
decodeURIComponent( anchor.href.replace( rhash, "" ) ) ===
decodeURIComponent( location.href.replace( rhash, "" ) );
diff --git a/ui/jquery.ui.widget.js b/ui/jquery.ui.widget.js
index 741ac74d7..9fc0136c4 100644
--- a/ui/jquery.ui.widget.js
+++ b/ui/jquery.ui.widget.js
@@ -106,7 +106,7 @@ $.widget = function( name, base, prototype ) {
// TODO: remove support for widgetEventPrefix
// always use the name + a colon as the prefix, e.g., draggable:start
// don't prefix for widgets that aren't DOM-based
- widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name
+ widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name
}, proxiedPrototype, {
constructor: constructor,
namespace: namespace,