_defaultDuration: 500,
_timer: null,
_isFadeOut: false,
+ _charSet: null,
_create: function () {
var $el = this.element,
});
},
+ _findClosestDivider: function ( targetChar ) {
+ var i,
+ dividerMap = this._dividerMap,
+ charSet = this._charSet,
+ charSetLen = charSet.length,
+ targetIdx = charSet.indexOf( targetChar ),
+ lastDivider,
+ subDivider = null;
+
+ for ( i = 0; i < targetIdx; ++i ) {
+ lastDivider = dividerMap[ charSet.charAt( i ) ];
+ if ( lastDivider !== undefined ) {
+ subDivider = lastDivider;
+ }
+ }
+ if ( !subDivider ) {
+ for ( ++i; i < charSetLen; ++i ) {
+ lastDivider = dividerMap[ charSet.charAt( i ) ];
+ if ( lastDivider !== undefined ) {
+ subDivider = lastDivider;
+ break;
+ }
+ }
+ }
+ return subDivider;
+ },
+
_hitOmitItem: function ( listItem, text ) {
- var self = this,
- $popup = self.scrollview.find( '.ui-fastscroll-popup' ),
- divider = self._dividerMap[ text ];
+ var $popup = this.scrollview.find( '.ui-fastscroll-popup' ),
+ divider;
+ divider = this._dividerMap[ text ] || this._findClosestDivider( text );
if ( typeof divider !== "undefined" ) {
- self.jumpToDivider( $( divider ) );
+ this.jumpToDivider( $( divider ) );
}
$popup.text( text )
},
_hitItem: function ( listItem ) {
- var self = this,
- $popup = self.scrollview.find( '.ui-fastscroll-popup' ),
+ var $popup = this.scrollview.find( '.ui-fastscroll-popup' ),
text = listItem.text(),
divider;
if ( text === "#" ) {
- divider = self._dividerMap.number;
+ divider = this._dividerMap.number;
} else {
- divider = self._dividerMap[ text ];
+ divider = this._dividerMap[ text ] || this._findClosestDivider( text );
}
if ( typeof divider !== "undefined" ) {
- self.jumpToDivider( $( divider ) );
+ this.jumpToDivider( $( divider ) );
}
$popup.text( text )
},
_createDividerMap: function () {
- var self = this,
- primaryCharacterSet = self._primaryLanguage ? self._primaryLanguage.replace( /,/g, "" ) : null,
- secondCharacterSet = self._secondLanguage ? self._secondLanguage.replace( /,/g, "" ) : null,
+ var primaryCharacterSet = this._primaryLanguage ? this._primaryLanguage.replace( /,/g, "" ) : null,
+ secondCharacterSet = this._secondLanguage ? this._secondLanguage.replace( /,/g, "" ) : null,
numberSet = "0123456789",
- dividers = self.element.find( '.ui-li-divider' ),
+ dividers = this.element.find( '.ui-li-divider' ),
map = {},
matchToDivider,
makeCharacterSet,
}
dividers.each( function ( index, divider ) {
- if ( numberSet.search( $( divider ).text() ) !== -1 ) {
+ if ( numberSet.search( $( divider ).text() ) !== -1 ) {
map.number = divider;
return false;
}
});
- self._dividerMap = map;
+ this._dividerMap = map;
+ this._charSet = primaryCharacterSet + secondCharacterSet;
},
_setTimer: function ( start ) {