| //>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude); |
| //>>description: Generates dividers for listview items |
| //>>label: Listview Autodividers |
| //>>group: Widgets |
| define( [ "jquery", "./listview" ], function( jQuery ) { |
| //>>excludeEnd("jqmBuildExclude"); |
| (function( $, undefined ) { |
| |
| $.mobile.listview.prototype.options.autodividers = false; |
| $.mobile.listview.prototype.options.autodividersSelector = function( elt ) { |
| // look for the text in the given element |
| var text = elt.text() || null; |
| |
| if ( !text ) { |
| return null; |
| } |
| |
| // create the text for the divider (first uppercased letter) |
| text = text.trim().slice( 0, 1 ).toUpperCase(); |
| |
| return text; |
| }; |
| |
| $.mobile.$document.delegate( "ul,ol", "listviewcreate", function() { |
| |
| var list = $( this ), |
| listview = list.data( "listview" ); |
| |
| if ( !listview || !listview.options.autodividers ) { |
| return; |
| } |
| |
| var replaceDividers = function () { |
| list.find( "li:jqmData(role='list-divider')" ).remove(); |
| |
| var lis = list.find( 'li' ), |
| lastDividerText = null, li, dividerText; |
| |
| for ( var i = 0; i < lis.length ; i++ ) { |
| li = lis[i]; |
| dividerText = listview.options.autodividersSelector( $( li ) ); |
| |
| if ( dividerText && lastDividerText !== dividerText ) { |
| var divider = document.createElement( 'li' ); |
| divider.appendChild( document.createTextNode( dividerText ) ); |
| divider.setAttribute( 'data-' + $.mobile.ns + 'role', 'list-divider' ); |
| li.parentNode.insertBefore( divider, li ); |
| } |
| |
| lastDividerText = dividerText; |
| } |
| }; |
| |
| var afterListviewRefresh = function () { |
| list.unbind( 'listviewafterrefresh', afterListviewRefresh ); |
| replaceDividers(); |
| listview.refresh(); |
| list.bind( 'listviewafterrefresh', afterListviewRefresh ); |
| }; |
| |
| afterListviewRefresh(); |
| }); |
| |
| })( jQuery ); |
| //>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude); |
| }); |
| //>>excludeEnd("jqmBuildExclude"); |