Created
June 24, 2013 16:47
-
-
Save theaccordance/5851543 to your computer and use it in GitHub Desktop.
Plugin for jQuery Mobile to create a tooltip for slider controls
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| (function( $, undefined ) { | |
| $.widget( "mobile.slider", $.mobile.slider, { | |
| options: { | |
| popupEnabled: false, | |
| showValue: false | |
| }, | |
| _create: function() { | |
| var o = this.options, | |
| popup = $( "<div></div>", { | |
| class: "ui-slider-popup ui-shadow ui-corner-all ui-body-" + ( o.theme ? o.theme : $.mobile.getInheritedTheme( this.element, "c" ) ) | |
| }); | |
| this._super(); | |
| $.extend( this, { | |
| _currentValue: null, | |
| _popup: popup, | |
| _popupVisible: false, | |
| _handleText: this.handle.find( ".ui-btn-text" ) | |
| }); | |
| this.slider.before( popup ); | |
| popup.hide(); | |
| this._on( this.handle, { "vmousedown" : "_showPopup" } ); | |
| this._on( this.slider.add( $.mobile.document ), { "vmouseup" : "_hidePopup" } ); | |
| this._refresh(); | |
| }, | |
| // position the popup centered 5px above the handle | |
| _positionPopup: function() { | |
| var dstOffset = this.handle.offset(); | |
| this._popup.offset( { | |
| left: dstOffset.left + ( this.handle.width() - this._popup.width() ) / 2, | |
| top: dstOffset.top - this._popup.outerHeight() - 5 | |
| }); | |
| }, | |
| _setOption: function( key, value ) { | |
| this._super( key, value ); | |
| if ( key === "showValue" ) { | |
| if ( value ) { | |
| this._handleText.html( this._value() ).show(); | |
| } else { | |
| this._handleText.hide(); | |
| } | |
| } | |
| }, | |
| // show value on the handle and in popup | |
| refresh: function() { | |
| this._super.apply( this, arguments ); | |
| // necessary because slider's _create() calls refresh(), and that lands | |
| // here before our own _create() has even run | |
| if ( !this._popup ) { | |
| return; | |
| } | |
| this._refresh(); | |
| }, | |
| _refresh: function() { | |
| var o = this.options, newValue; | |
| if ( o.popupEnabled ) { | |
| // remove the title attribute from the handle (which is | |
| // responsible for the annoying tooltip); NB we have | |
| // to do it here as the jqm slider sets it every time | |
| // the slider's value changes :( | |
| this.handle.removeAttr( 'title' ); | |
| } | |
| newValue = this._value(); | |
| if ( newValue === this._currentValue ) { | |
| return; | |
| } | |
| this._currentValue = newValue; | |
| if ( o.popupEnabled ) { | |
| this._positionPopup(); | |
| this._popup.html( newValue ); | |
| } | |
| if ( o.showValue ) { | |
| this._handleText.html( newValue ); | |
| } | |
| }, | |
| _showPopup: function() { | |
| if ( this.options.popupEnabled && !this._popupVisible ) { | |
| this._handleText.hide(); | |
| this._popup.show(); | |
| this._positionPopup(); | |
| this._popupVisible = true; | |
| } | |
| }, | |
| _hidePopup: function() { | |
| if ( this.options.popupEnabled && this._popupVisible ) { | |
| this._handleText.show(); | |
| this._popup.hide(); | |
| this._popupVisible = false; | |
| } | |
| } | |
| }); | |
| })( jQuery ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi Lalitha,
I have the same issue.
Have you managed to solve this?
Thanks,
Jeff