Update jquery.ime from upstream

Change-Id: Ieb29f2cb90862a9ffb61309dc5cbc351e79074f1
Version: v0.1.0+20130722
Upstream: http://github.com/wikimedia/jquery.ime
Bug: 50939
This commit is contained in:
Santhosh Thottingal
2013-07-22 14:11:43 +05:30
parent bf1d62ba42
commit 18b8bbd89c
2 changed files with 84 additions and 33 deletions

View File

@@ -168,7 +168,7 @@ span.ime-disable-shortcut {
.imeselector-menu .ime-checked {
/* @embed */
background: url(../images/tick.png) left 4px center no-repeat;
background: url(../images/tick.png) no-repeat left 4px center;
background-image: -webkit-linear-gradient(transparent, transparent), url('../images/tick.svg');
background-image: -moz-linear-gradient(transparent, transparent), url('../images/tick.svg');
background-image: linear-gradient(transparent, transparent), url('../images/tick.svg');

View File

@@ -1,11 +1,11 @@
/*! jquery.ime - v0.1.0+20130715
/*! jquery.ime - v0.1.0+20130722
* https://github.com/wikimedia/jquery.ime
* Copyright (c) 2013 Santhosh Thottingal; Licensed GPL, MIT */
( function ( $ ) {
'use strict';
/**
* @TODO: document
* IME Class
* @param {Function} [options.helpHandler] Called for each input method row in the selector
* @param {Object} options.helpHandler.imeSelector
* @param {String} options.helpHandler.ime Id of the input method
@@ -26,6 +26,9 @@
IME.prototype = {
constructor: IME,
/**
* Listen for events and bind to handlers
*/
listen: function () {
this.$element.on( 'keypress.ime', $.proxy( this.keypress, this ) );
this.$element.on( 'destroy.ime', $.proxy( this.destroy, this ) );
@@ -37,10 +40,10 @@
* Transliterate a given string input based on context and input method definition.
* If there are no matching rules defined, returns the original string.
*
* @param input
* @param context
* @param altGr bool whether altGr key is pressed or not
* @returns String transliterated string
* @param {string} input
* @param {string} context
* @param {boolean} altGr whether altGr key is pressed or not
* @returns {string} transliterated string
*/
transliterate: function ( input, context, altGr ) {
var patterns, regex, rule, replacement, i;
@@ -82,6 +85,11 @@
return input;
},
/**
* Keypress handler
* @param {jQuery.Event} e Event
* @returns {Boolean}
*/
keypress: function ( e ) {
var altGr = false,
c, startPos, pos, endPos, divergingPos, input, replacement;
@@ -164,37 +172,66 @@
return false;
},
/**
* Check whether the input method is active or not
* @returns {Boolean}
*/
isActive: function () {
return this.active;
},
/**
* Disable the input method
*/
disable: function () {
this.active = false;
$.ime.preferences.setIM( 'system' );
},
/**
* Enable the input method
*/
enable: function () {
this.active = true;
},
/**
* Toggle the active state of input method
*/
toggle: function () {
this.active = !this.active;
},
/**
* Destroy the binding of ime to the editable element
*/
destroy: function () {
$( 'body' ).off( '.ime' );
this.$element.off( '.ime' ).removeData( 'ime' ).removeData( 'imeselector' );
},
/**
* Get the current input method
* @returns {string} Current input method id
*/
getIM: function () {
return this.inputmethod;
},
/**
* Set the current input method
* @param {string} inputmethodId
*/
setIM: function ( inputmethodId ) {
this.inputmethod = $.ime.inputmethods[inputmethodId];
$.ime.preferences.setIM( inputmethodId );
},
/**
* Set the current Language
* @param {string} languageCode
* @returns {Boolean}
*/
setLanguage: function ( languageCode ) {
if ( !$.ime.languages[languageCode] ) {
debug( 'Language ' + languageCode + ' is not known to jquery.ime.' );
@@ -207,43 +244,49 @@
return true;
},
/**
* Get current language
* @returns {string}
*/
getLanguage: function () {
return this.language;
},
load: function ( name, callback ) {
/**
* load an input method by given id
* @param {string} inputmethodId
* @return {jQuery.Promise}
*/
load: function ( inputmethodId ) {
var ime = this,
deferred = $.Deferred(),
dependency;
if ( $.ime.inputmethods[name] ) {
if ( callback ) {
callback.call( ime );
if ( $.ime.inputmethods[inputmethodId] ) {
return deferred.resolve();
}
return true;
}
dependency = $.ime.sources[name].depends;
dependency = $.ime.sources[inputmethodId].depends;
if ( dependency ) {
this.load( dependency ) ;
return $.when( this.load( dependency ), this.load( inputmethodId ) );
}
$.ajax( {
url: ime.options.imePath + $.ime.sources[name].source,
dataType: 'script'
} ).done( function () {
debug( name + ' loaded' );
if ( callback ) {
callback.call( ime );
}
deferred = $.getScript(
ime.options.imePath + $.ime.sources[inputmethodId].source
).done( function () {
debug( inputmethodId + ' loaded' );
} ).fail( function ( jqxhr, settings, exception ) {
debug( 'Error in loading inputmethod ' + name + ' Exception: ' + exception );
debug( 'Error in loading inputmethod ' + inputmethodId + ' Exception: ' + exception );
} );
return deferred.promise();
},
// Returns an array [start, end] of the beginning
// and the end of the current selection in $element
/**
* Returns an array [start, end] of the beginning
* and the end of the current selection in $element
* @returns {Array}
*/
getCaretPosition: function ( $element ) {
return getCaretPosition( $element );
},
@@ -274,6 +317,10 @@
}
};
/**
* jQuery plugin ime
* @param {Object} option
*/
$.fn.ime = function ( option ) {
return this.each( function () {
var data,
@@ -323,15 +370,19 @@
helpHandler: null // Called for each ime option in the menu
};
// private function for debugging
/**
* private function for debugging
*/
function debug( $obj ) {
if ( window.console && window.console.log ) {
window.console.log( $obj );
}
}
// Returns an array [start, end] of the beginning
// and the end of the current selection in $element
/**
* Returns an array [start, end] of the beginning
* and the end of the current selection in $element
*/
function getCaretPosition( $element ) {
var el = $element.get( 0 ),
start = 0,
@@ -883,13 +934,13 @@
return;
}
ime.load( inputmethodId, function () {
ime.load( inputmethodId ).done( function () {
imeselector.inputmethod = $.ime.inputmethods[inputmethodId];
imeselector.hide();
ime.enable();
ime.setIM( inputmethodId );
imeselector.$imeSetting.find( 'a.ime-name' ).text(
imeselector.inputmethod.name
$.ime.sources[inputmethodId].name
);
imeselector.position();