@@ -17,6 +17,7 @@ var rInitialLetter = /([A-Z])/g;
1717
1818$ . widget ( "mobile.collapsible" , {
1919 options : {
20+ enhanced : false ,
2021 expandCueText : null ,
2122 collapseCueText : null ,
2223 collapsed : true ,
@@ -32,68 +33,77 @@ $.widget( "mobile.collapsible", {
3233 } ,
3334
3435 _create : function ( ) {
35- var anchor , placeholder ,
36- $el = this . element . addClass ( "ui-collapsible" ) ,
37- opts = this . options ,
38- heading = $el . children ( opts . heading ) . first ( ) ,
39- replacementHeading = heading ,
40- content = $el . wrapInner ( "<div class='ui-collapsible-content'></div>" ) . children ( ".ui-collapsible-content" ) ,
41- accordion = $el . closest ( ":jqmData(role='collapsible-set')" + ( $ . mobile . collapsibleset ? ", :mobile-collapsibleset" : "" ) ) . addClass ( "ui-collapsible-set" ) ;
42-
43- // Replace collapsibleHeading if it's a legend
44- if ( heading . is ( "legend" ) ) {
45- replacementHeading = $ ( "<div role='heading'>" + heading . html ( ) + "</div>" ) ;
46- placeholder = $ ( "<div><!-- placeholder for legend --></div>" ) . insertBefore ( heading ) ;
47- heading . remove ( ) ;
48- }
49-
50- anchor = replacementHeading
51- . detach ( )
52- //modify markup & attributes
53- . addClass ( "ui-collapsible-heading" )
54- . append ( "<span class='ui-collapsible-heading-status'></span>" )
55- . wrapInner ( "<a href='#' class='ui-collapsible-heading-toggle'></a>" )
56- . find ( "a" )
57- . first ( )
58- . addClass ( "ui-btn" ) ;
59-
60- //drop heading in before content
61- replacementHeading . insertBefore ( content ) ;
36+ var elem = this . element ,
37+ ui = {
38+ accordion : elem
39+ . closest ( ":jqmData(role='collapsible-set')" +
40+ ( $ . mobile . collapsibleset ? ", :mobile-collapsibleset" : "" ) )
41+ . addClass ( "ui-collapsible-set" )
42+ } ,
43+ opts = this . options ;
6244
6345 $ . extend ( this , {
64- _accordion : accordion ,
65- _accordionWidget : null ,
6646 _anchorClasses : "" ,
6747 _elClasses : "" ,
6848 _contentTheme : "" ,
69- _ui : {
70- placeholder : placeholder ,
71- originalHeading : heading ,
72- anchor : anchor ,
73- content : content ,
74- heading : replacementHeading
75- }
49+ _ui : ui
7650 } ) ;
7751
52+ if ( opts . enhanced ) {
53+ ui . heading = $ ( ".ui-collapsible-heading" , this . element [ 0 ] ) ;
54+ ui . content = ui . heading . next ( ) ;
55+ ui . anchor = $ ( "a" , ui . heading [ 0 ] ) . first ( ) ;
56+ } else {
57+ this . _enhance ( elem , ui ) ;
58+ this . _setOptions ( opts ) ;
59+ }
60+
7861 //events
7962 this . _on ( {
8063 "expand" : "_handleExpandCollapse" ,
8164 "collapse" : "_handleExpandCollapse"
8265 } ) ;
8366
84- this . _on ( heading , {
85- "tap" : function ( /* event */ ) {
86- heading . find ( "a" ) . first ( ) . addClass ( $ . mobile . activeBtnClass ) ;
67+ this . _on ( ui . heading , {
68+ "tap" : function ( ) {
69+ ui . heading . find ( "a" ) . first ( ) . addClass ( $ . mobile . activeBtnClass ) ;
8770 } ,
8871
8972 "click" : function ( event ) {
90- this . _handleExpandCollapse ( ! heading . hasClass ( "ui-collapsible-heading-collapsed" ) ) ;
73+ this . _handleExpandCollapse ( ! ui . heading . hasClass ( "ui-collapsible-heading-collapsed" ) ) ;
9174 event . preventDefault ( ) ;
9275 event . stopPropagation ( ) ;
9376 }
9477 } ) ;
78+ } ,
79+
80+ _enhance : function ( elem , ui ) {
81+ elem . addClass ( "ui-collapsible" ) ;
82+ ui . originalHeading = elem . children ( this . options . heading ) . first ( ) ,
83+ ui . content = elem . wrapInner ( "<div class='ui-collapsible-content'></div>" ) . children ( ".ui-collapsible-content" ) ,
84+ ui . heading = ui . originalHeading ;
85+
86+ // Replace collapsibleHeading if it's a legend
87+ if ( ui . heading . is ( "legend" ) ) {
88+ ui . heading = $ ( "<div role='heading'>" + ui . heading . html ( ) + "</div>" ) ;
89+ ui . placeholder = $ ( "<div><!-- placeholder for legend --></div>" ) . insertBefore ( ui . originalHeading ) ;
90+ ui . originalHeading . remove ( ) ;
91+ }
9592
96- this . _setOptions ( opts ) ;
93+ ui . anchor = ui . heading
94+ . detach ( )
95+ //modify markup & attributes
96+ . addClass ( "ui-collapsible-heading" )
97+ . append ( "<span class='ui-collapsible-heading-status'></span>" )
98+ . wrapInner ( "<a href='#' class='ui-collapsible-heading-toggle'></a>" )
99+ . find ( "a" )
100+ . first ( )
101+ . addClass ( "ui-btn" ) ;
102+
103+ //drop heading in before content
104+ ui . heading . insertBefore ( ui . content ) ;
105+
106+ return ui ;
97107 } ,
98108
99109 _handleExpandCollapse : function ( isCollapse ) {
@@ -131,11 +141,11 @@ $.widget( "mobile.collapsible", {
131141 // parent accordion, then from the defaults.
132142 _optionValue : function ( options , name ) {
133143 var ret ,
134- accordion = this . _accordion ,
135- accordionWidget = this . _accordionWidget ;
144+ accordion = this . _ui . accordion ,
145+ accordionWidget = this . _ui . accordionWidget ;
136146
137147 if ( accordion . length && ! accordionWidget ) {
138- this . _accordionWidget = accordionWidget = accordion . data ( "mobile-collapsibleset" ) ;
148+ this . _ui . accordionWidget = accordionWidget = accordion . data ( "mobile-collapsibleset" ) ;
139149 }
140150
141151 ret =
@@ -166,6 +176,10 @@ $.widget( "mobile.collapsible", {
166176 _destroy : function ( ) {
167177 var ui = this . _ui ;
168178
179+ if ( this . options . enhanced ) {
180+ return ;
181+ }
182+
169183 if ( ui . placeholder ) {
170184 ui . originalHeading . insertBefore ( ui . placeholder ) ;
171185 ui . placeholder . remove ( ) ;
@@ -200,7 +214,7 @@ $.widget( "mobile.collapsible", {
200214 }
201215
202216 // Set corners for individual collapsibles to false when in a collapsible-set
203- if ( this . _accordion . length > 0 ) {
217+ if ( this . _ui . accordion . length > 0 ) {
204218 opts . corners = false ;
205219 }
206220
0 commit comments