Skip to content

Commit 0721c16

Browse files
author
Gabriel Schulhof
committed
Listview: Correctly update icon at runtime
Fixes jquery-archivegh-8334
1 parent 9e48975 commit 0721c16

File tree

3 files changed

+54
-8
lines changed

3 files changed

+54
-8
lines changed

js/widgets/listview.js

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -149,9 +149,8 @@ return $.widget( "mobile.listview", $.extend( {
149149
var buttonClass, pos, numli, item, itemClass, itemExtraClass, itemTheme, itemIcon, icon, a,
150150
isDivider, startCount, newStartCount, value, last, splittheme, splitThemeClass, li, ol,
151151
altButtonClass, dividerTheme, start, itemClassDict, dictionaryKey, span, spliticon,
152-
allItems,
152+
allItems, newSpan,
153153
currentOptions = this.options,
154-
createEnhanced = create && this.options.enhanced,
155154
list = this.element;
156155

157156
ol = !!$.nodeName( list[ 0 ], "ol" );
@@ -204,25 +203,38 @@ return $.widget( "mobile.listview", $.extend( {
204203
getAttribute( item[ 0 ], "icon" ) || currentOptions.splitIcon;
205204
altButtonClass = "ui-button ui-button-icon-only" + splitThemeClass;
206205

207-
span = createEnhanced ? last.children( ".ui-listview-item-split-icon" ) :
208-
$( "<span>" );
206+
newSpan = false;
207+
span = last.children( ".ui-listview-item-split-icon" );
208+
if ( !span.length ) {
209+
span = $( "<span>" );
210+
newSpan = true;
211+
}
212+
209213
addItemToDictionary( itemClassDict, span[ 0 ],
210214
"ui-listview-item-split-icon", "ui-icon ui-icon-" + spliticon );
211215
addItemToDictionary( itemClassDict, last[ 0 ],
212216
"ui-listview-item-split-button", altButtonClass );
213217
last.attr( "title", $.trim( last.getEncodedText() ) );
214-
if ( !createEnhanced ) {
218+
219+
if ( newSpan ) {
215220
last.empty().prepend( span );
216221
}
217222

218223
// Reduce to the first anchor, because only the first gets the buttonClass
219224
a = a.first();
220225
} else if ( icon ) {
221-
span = createEnhanced ? a.children( ".ui-listview-item-icon" ) :
222-
$( "<span>" );
226+
227+
newSpan = false;
228+
span = a.children( ".ui-listview-item-icon" );
229+
if ( !span.length ) {
230+
span = $( "<span>" );
231+
newSpan = true;
232+
}
233+
223234
addItemToDictionary( itemClassDict, span[ 0 ], "ui-listview-item-icon",
224235
"ui-icon ui-icon-" + icon + " ui-widget-icon-floatend" );
225-
if ( !createEnhanced ) {
236+
237+
if ( newSpan ) {
226238
a.prepend( span );
227239
}
228240
}

tests/integration/listview/index.html

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,16 @@
181181
</li>
182182
</ul>
183183

184+
<ul data-ui-role="listview" id="icon-refresh">
185+
<li data-ui-icon="home"><a href="#">Home</a></li>
186+
<li data-ui-icon="delete"><a href="#">Delete</a></li>
187+
</ul>
188+
189+
<ul data-ui-role="listview" id="icon-update-items">
190+
<li data-ui-icon="home"><a href="#">Home</a></li>
191+
<li data-ui-icon="delete"><a href="#">Delete</a></li>
192+
</ul>
193+
184194
<ul data-ui-role="listview" id="sparing-check">
185195
<li id="sparing-check-first-item">Item 1</li>
186196
<li id="sparing-check-second-item">Item 2</li>

tests/integration/listview/listview_core.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,4 +489,28 @@ QUnit.test( "updateItems()", function( assert ) {
489489
"The single item in the call is as expected" );
490490
} );
491491

492+
QUnit.module( "Dynamic icon update" );
493+
494+
QUnit.test( "via refresh()", function( assert ) {
495+
var listview = $( "#icon-refresh" );
496+
497+
listview.children().first().attr( "data-ui-icon", "back" );
498+
listview.listview( "refresh" );
499+
500+
assert.hasClasses( listview.children().first().find( ".ui-listview-item-icon" ),
501+
"ui-icon-back",
502+
"Listview item icon is as expected" );
503+
} );
504+
505+
QUnit.test( "via updateItems()", function( assert ) {
506+
var listview = $( "#icon-update-items" );
507+
508+
listview.children().first().attr( "data-ui-icon", "back" );
509+
listview.listview( "updateItems", listview.children().first() );
510+
511+
assert.hasClasses( listview.children().first().find( ".ui-listview-item-icon" ),
512+
"ui-icon-back",
513+
"Listview item icon is as expected" );
514+
} );
515+
492516
} );

0 commit comments

Comments
 (0)