jquery.tipsy: Unbreak the 'live' option for now
authorBartosz Dziewoński <matma.rex@gmail.com>
Sat, 20 Dec 2014 00:17:17 +0000 (01:17 +0100)
committerMatthew Flaschen <mflaschen@wikimedia.org>
Sat, 20 Dec 2014 01:49:52 +0000 (20:49 -0500)
It used jQuery.fn.live, which stopped existing when we removed jQuery
Migrate (c393f874). This patch basically reimplements it.

Both .context and .selector properties used here are deprecated and
will be removed in the future, so we should come up with a better
solution at some point (or intentionally disallow using this option,
rather than breaking it by accident). For now, re-added the tracking
and logging, like what jQuery Migrate provided.

https://api.jquery.com/context/
https://api.jquery.com/selector/

Bug: T69989
Change-Id: Ib1a908dc60ca23c354fb05484d9b00cf54a05ebe

resources/src/jquery.tipsy/jquery.tipsy.js

index 58a99a5..2a37fa8 100644 (file)
@@ -6,7 +6,7 @@
 // * This installation of tipsy includes several local modifications to both Javascript and CSS.
 //   Please be careful when upgrading.
 
-(function($) {
+( function ( mw, $ ) {
 
     function maybeCall(thing, ctx) {
         return (typeof thing == 'function') ? (thing.call(ctx)) : thing;
 
         if (!options.live) this.each(function() { get(this); });
 
-        if (options.trigger != 'manual') {
-            var binder   = options.live ? 'live' : 'bind',
-                eventIn  = options.trigger == 'hover' ? 'mouseenter' : 'focus',
+        if ( options.trigger != 'manual' ) {
+            var eventIn  = options.trigger == 'hover' ? 'mouseenter' : 'focus',
                 eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';
-            this[binder](eventIn, enter)[binder](eventOut, leave);
+            if ( options.live ) {
+                mw.track( 'mw.deprecate', 'tipsy-live' );
+                mw.log.warn( 'Use of the "live" option of jquery.tipsy is deprecated.' );
+                // XXX: The official status of 'context' is deprecated, and the official status of
+                // 'selector' is removed, so this really needs to go.
+                $( this.context )
+                    .on( eventIn, this.selector, enter )
+                    .on( eventOut, this.selector, leave );
+            } else {
+                this
+                    .on( eventIn, enter )
+                    .on( eventOut, leave );
+            }
         }
 
         return this;
         }
     };
 
-})(jQuery);
+}( mediaWiki, jQuery ) );