Skip to content
This repository was archived by the owner on Oct 8, 2021. It is now read-only.

Commit dfcc6a5

Browse files
author
Gabriel Schulhof
committed
Listview: Autodividers: Converting to extension.
1 parent 3f7a788 commit dfcc6a5

File tree

1 file changed

+31
-23
lines changed

1 file changed

+31
-23
lines changed

js/widgets/listview.autodividers.js

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ define( [ "jquery", "./listview" ], function( jQuery ) {
66
//>>excludeEnd("jqmBuildExclude");
77
(function( $, undefined ) {
88

9-
$.mobile.listview.prototype.options.autodividers = false;
10-
$.mobile.listview.prototype.options.autodividersSelector = function( elt ) {
9+
function defaultAutodividersSelector( elt ) {
1110
// look for the text in the given element
1211
var text = $.trim( elt.text() ) || null;
1312

@@ -19,26 +18,34 @@ $.mobile.listview.prototype.options.autodividersSelector = function( elt ) {
1918
text = text.slice( 0, 1 ).toUpperCase();
2019

2120
return text;
22-
};
21+
}
2322

24-
$.mobile.document.delegate( "ul,ol", "listviewcreate", function() {
23+
$.widget( "mobile.listview", $.mobile.listview, {
24+
options: {
25+
autodividers: false,
26+
autodividersSelector: defaultAutodividersSelector
27+
},
2528

26-
var list = $( this ),
27-
listview = list.data( "mobile-listview" );
29+
_afterListviewRefresh: function() {
30+
var el = this.element;
31+
this._off( el, "listviewafterrefresh" );
32+
this._replaceDividers();
33+
this.refresh();
34+
this._on( el, { listviewafterrefresh: "_afterListviewRefresh" } );
35+
},
2836

29-
if ( !listview || !listview.options.autodividers ) {
30-
return;
31-
}
37+
_replaceDividers: function() {
38+
var i, lis, li, dividerText,
39+
lastDividerText = null,
40+
list = this.element;
3241

33-
var replaceDividers = function () {
3442
list.find( "li:jqmData(role='list-divider')" ).remove();
3543

36-
var lis = list.find( 'li' ),
37-
lastDividerText = null, li, dividerText;
44+
lis = list.find( 'li' );
3845

39-
for ( var i = 0; i < lis.length ; i++ ) {
40-
li = lis[i];
41-
dividerText = listview.options.autodividersSelector( $( li ) );
46+
for ( i = 0; i < lis.length ; i++ ) {
47+
li = lis[ i ];
48+
dividerText = this.options.autodividersSelector( $( li ) );
4249

4350
if ( dividerText && lastDividerText !== dividerText ) {
4451
var divider = document.createElement( 'li' );
@@ -49,16 +56,17 @@ $.mobile.document.delegate( "ul,ol", "listviewcreate", function() {
4956

5057
lastDividerText = dividerText;
5158
}
52-
};
59+
},
60+
61+
_create: function() {
62+
this._super();
5363

54-
var afterListviewRefresh = function () {
55-
list.unbind( 'listviewafterrefresh', afterListviewRefresh );
56-
replaceDividers();
57-
listview.refresh();
58-
list.bind( 'listviewafterrefresh', afterListviewRefresh );
59-
};
64+
if ( !this.options.autodividers ) {
65+
return;
66+
}
6067

61-
afterListviewRefresh();
68+
this._afterListviewRefresh();
69+
}
6270
});
6371

6472
})( jQuery );

0 commit comments

Comments
 (0)