summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/Translate/resources/js/jquery.textchange.js
blob: dcf7ef027d0acd87813b703205a7972b304065c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/*!
 * Trigger a textchange event on text change in input fields.
 * And make it cross browser compatible.
 *
 * @author Santhosh Thottingal, 2013
 * @see https://gist.github.com/mkelly12/424774
 */
( function ( $ ) {
	'use strict';

	$.event.special.textchange = {

		setup: function () {
			$( this )
				.data( 'lastValue', $( this ).val() )
				.on( 'keyup.textchange', $.event.special.textchange.handler )
				.on( 'cut.textchange paste.textchange input.textchange', $.event.special.textchange.delayedHandler );
		},

		teardown: function () {
			$( this ).unbind( '.textchange' );
		},

		handler: function () {
			$.event.special.textchange.triggerIfChanged( $( this ) );
		},

		delayedHandler: function () {
			var element = $( this );
			setTimeout( function () {
				$.event.special.textchange.triggerIfChanged( element );
			}, 25 );
		},

		triggerIfChanged: function ( element ) {
			var current = element.val();
			if ( current !== element.data( 'lastValue' ) ) {
				element.trigger( 'textchange', [ element.data( 'lastValue' ) ] );
				element.data( 'lastValue', current );
			}
		}
	};

} )( jQuery );