Update jquery.ime from upstream

Provides overridable help link along with other code cleanups

Change-Id: I78b8cdcd3ca53c9008674fc775e98aa9cf1e5764
This commit is contained in:
Santhosh Thottingal
2012-10-29 16:17:09 +05:30
parent 8a0845ee55
commit 45acc5d7b3

View File

@@ -161,6 +161,10 @@
this.active = !this.active; this.active = !this.active;
}, },
getIM: function () {
return this.inputmethod;
},
setIM: function ( inputmethodId ) { setIM: function ( inputmethodId ) {
this.inputmethod = $.ime.inputmethods[inputmethodId]; this.inputmethod = $.ime.inputmethods[inputmethodId];
$.ime.preferences.setIM( inputmethodId ); $.ime.preferences.setIM( inputmethodId );
@@ -171,7 +175,8 @@
}, },
load: function ( name, callback ) { load: function ( name, callback ) {
var ime = this, dependency; var ime = this,
dependency;
if ( $.ime.inputmethods[name] ) { if ( $.ime.inputmethods[name] ) {
if ( callback ) { if ( callback ) {
@@ -181,7 +186,7 @@
return true; return true;
} }
dependency = $.ime.sources[name].depends; dependency = $.ime.sources[name].depends;
if ( dependency ) { if ( dependency ) {
this.load( dependency ) ; this.load( dependency ) ;
} }
@@ -208,7 +213,8 @@
options = typeof option === 'object' && option; options = typeof option === 'object' && option;
if ( !data ) { if ( !data ) {
$this.data( 'ime', ( data = new IME( this, options ) ) ); data = new IME( this, options );
$this.data( 'ime', data );
} }
if ( typeof option === 'string' ) { if ( typeof option === 'string' ) {
@@ -793,7 +799,6 @@
this.$imeSetting = $( selectorTemplate ); this.$imeSetting = $( selectorTemplate );
this.$menu = $( '<ul class="imeselector-menu" role="menu">' ); this.$menu = $( '<ul class="imeselector-menu" role="menu">' );
this.inputmethod = null; this.inputmethod = null;
this.shown = false;
this.init(); this.init();
this.listen(); this.listen();
} }
@@ -814,7 +819,7 @@
this.$menu.append( toggleMenuItem() ); this.$menu.append( toggleMenuItem() );
this.$menu.append( languageListTitle() ); this.$menu.append( languageListTitle() );
this.prepareLanguageList(); this.prepareLanguageList();
this.$menu.append( helpLink() ); this.$menu.append( this.helpLink() );
}, },
focus: function ( ) { focus: function ( ) {
@@ -824,11 +829,9 @@
}, },
toggle: function () { toggle: function () {
var isActive = this.$menu.hasClass( 'open' );
this.$menu.removeClass( 'open' ); this.$menu.removeClass( 'open' );
if ( !isActive ) { if ( !this.$menu.hasClass( 'open' ) ) {
this.$menu.toggleClass( 'open' ); this.$menu.toggleClass( 'open' );
} }
@@ -846,14 +849,12 @@
} ); } );
imeselector.$menu.on( 'click', 'li.ime-im', function ( e ) { imeselector.$menu.on( 'click', 'li.ime-im', function ( e ) {
var inputmethodId = $( this ).data( 'ime-inputmethod' ); imeselector.selectIM( $( this ).data( 'ime-inputmethod' ) );
imeselector.selectIM( inputmethodId );
e.stopPropagation(); e.stopPropagation();
} ); } );
imeselector.$menu.on( 'click', 'li.ime-lang', function ( e ) { imeselector.$menu.on( 'click', 'li.ime-lang', function ( e ) {
var language = $( this ).attr( 'lang' ); imeselector.selectLanguage( $( this ).attr( 'lang' ) );
imeselector.selectLanguage( language );
e.stopPropagation(); e.stopPropagation();
} ); } );
@@ -884,14 +885,14 @@
var ime = $( e.target ).data( 'ime' ); var ime = $( e.target ).data( 'ime' );
if ( isShortcutKey( e ) ) { if ( isShortcutKey( e ) ) {
ime.toggle();
if ( ime.isActive() ) { if ( ime.isActive() ) {
this.disableIM();
} else {
if ( this.inputmethod !== null ) { if ( this.inputmethod !== null ) {
this.selectIM( this.inputmethod.id ); this.selectIM( this.inputmethod.id );
} else {
this.selectLanguage ( $.ime.preferences.getLanguage() );
} }
} else {
this.disableIM();
} }
e.preventDefault(); e.preventDefault();
@@ -920,21 +921,16 @@
* @param languageCode * @param languageCode
*/ */
selectLanguage: function ( languageCode ) { selectLanguage: function ( languageCode ) {
var imeselector = this,
ime = this.$element.data( 'ime' ),
languageName = $.ime.languages[languageCode].autonym;
this.$menu.find( 'li.ime-lang' ).show(); this.$menu.find( 'li.ime-lang' ).show();
this.$menu.find( 'li[lang=' + languageCode + ']' ).hide(); this.$menu.find( 'li[lang=' + languageCode + ']' ).hide();
//imeselector.$menu.find( 'li.ime-im' ).remove(); this.$menu.find( 'li.ime-list-title' ).text( $.ime.languages[languageCode].autonym );
this.$menu.find( 'li.ime-list-title' ).text( languageName );
this.prepareInputMethods( languageCode ); this.prepareInputMethods( languageCode );
imeselector.$menu.removeClass( 'open' ); this.$menu.removeClass( 'open' );
// And select the default inputmethod // And select the default inputmethod
imeselector.selectIM( $.ime.preferences.getIM( languageCode ) ); this.$element.data( 'ime' ).setLanguage( languageCode );
ime.setLanguage( languageCode ); this.inputmethod = null;
this.selectIM( $.ime.preferences.getIM( languageCode ) );
}, },
/** /**
@@ -965,7 +961,6 @@
var name; var name;
imeselector.inputmethod = $.ime.inputmethods[inputmethodId]; imeselector.inputmethod = $.ime.inputmethods[inputmethodId];
//imeselector.$element.focus();
imeselector.$menu.removeClass( 'open' ); imeselector.$menu.removeClass( 'open' );
ime.enable(); ime.enable();
name = imeselector.inputmethod.name; name = imeselector.inputmethod.name;
@@ -984,15 +979,12 @@
* Disable the inputmethods (Use the system input method) * Disable the inputmethods (Use the system input method)
*/ */
disableIM: function () { disableIM: function () {
var imeselector = this,
ime = imeselector.$element.data( 'ime' );
this.$menu.find( 'li.ime-im.checked' ).removeClass( 'checked' ); this.$menu.find( 'li.ime-im.checked' ).removeClass( 'checked' );
this.$menu.find( 'li.ime-disable-link' ).addClass( 'checked' ); this.$menu.find( 'li.ime-disable-link' ).addClass( 'checked' );
ime.disable(); this.$element.data( 'ime' ).disable();
imeselector.$imeSetting.find( 'a.ime-name' ).text( '' ); this.$imeSetting.find( 'a.ime-name' ).text( '' );
this.$menu.removeClass( 'open' ); this.$menu.removeClass( 'open' );
imeselector.position(); this.position();
// save this preference // save this preference
$.ime.preferences.save(); $.ime.preferences.save();
}, },
@@ -1001,7 +993,7 @@
* Prepare language list * Prepare language list
*/ */
prepareLanguageList: function () { prepareLanguageList: function () {
var imeselector = this, languageCodeIndex = 0, $languageListDiv, $languageList, languageList; var languageCodeIndex = 0, $languageListDiv, $languageList, languageList;
// Language list can be very long. So we use a container with // Language list can be very long. So we use a container with
// overflow auto. // overflow auto.
@@ -1031,10 +1023,10 @@
} }
$languageListDiv.append( $languageList ); $languageListDiv.append( $languageList );
imeselector.$menu.append( $languageListDiv ); this.$menu.append( $languageListDiv );
if ( this.options.languageSelector ) { if ( this.options.languageSelector ) {
imeselector.$menu.append( this.options.languageSelector() ); this.$menu.append( this.options.languageSelector() );
} }
}, },
@@ -1044,11 +1036,9 @@
* @param languageCode * @param languageCode
*/ */
prepareInputMethods: function ( languageCode ) { prepareInputMethods: function ( languageCode ) {
var imeselector = this, var language = $.ime.languages[languageCode],
language = $.ime.languages[languageCode], $imeList = this.$menu.find( 'div.ime-list' );
$imeList;
$imeList = imeselector.$menu.find( 'div.ime-list' );
$imeList.empty(); $imeList.empty();
$.each( language.inputmethods, function ( index, inputmethod ) { $.each( language.inputmethods, function ( index, inputmethod ) {
@@ -1060,6 +1050,16 @@
$inputMethod.addClass( 'ime-im' ); $inputMethod.addClass( 'ime-im' );
$imeList.append( $inputMethod ); $imeList.append( $inputMethod );
} ); } );
},
helpLink: function () {
return $( '<li class="ime-help-link">' )
.append( $( '<a>' ).text( 'Help' )
.attr( {
'href': 'http://github.com/wikimedia/jquery.ime',
'target': '_blank'
} )
);
} }
}; };
@@ -1087,14 +1087,6 @@
$.fn.imeselector.Constructor = IMESelector; $.fn.imeselector.Constructor = IMESelector;
// Private functions
function helpLink () {
return $( '<li class="ime-help-link">' )
.append( $( '<a>' )
.attr( 'href', '#' )
.text( 'Help' ) ); // TODO i18n
}
function languageListTitle () { function languageListTitle () {
return $( '<li class="ime-lang-title">' ) return $( '<li class="ime-lang-title">' )
.text( 'Other languages' ); // TODO i18n .text( 'Other languages' ); // TODO i18n