Skip to content

Commit 8928245

Browse files
committed
Fix for #4222
1 parent 2291be6 commit 8928245

4 files changed

Lines changed: 59 additions & 10 deletions

File tree

demos/accordion/custom-icons.html

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,17 @@
99
<link type="text/css" href="../demos.css" rel="stylesheet" />
1010
<script type="text/javascript">
1111
$(function() {
12+
var icons = {
13+
header: "ui-icon-circle-arrow-e",
14+
headerSelected: "ui-icon-circle-arrow-s"
15+
};
1216
$("#accordion").accordion({
13-
icons: {
14-
header: "ui-icon-circle-arrow-e",
15-
headerSelected: "ui-icon-circle-arrow-s"
16-
}
17+
icons: icons
18+
});
19+
$("#toggle").toggle(function() {
20+
$("#accordion").accordion("option", "icons", false);
21+
}, function() {
22+
$("#accordion").accordion("option", "icons", icons);
1723
});
1824
});
1925
</script>
@@ -46,6 +52,8 @@ <h3><a href="#">Section 4</a></h3>
4652
</div>
4753
</div>
4854

55+
<button id="toggle">Toggle icons</button>
56+
4957
</div><!-- End demo -->
5058

5159

tests/unit/accordion/accordion_options.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,23 @@ test("{ icons: { 'header': 'ui-icon-foo', 'headerSelected': 'ui-icon-bar' } }",
119119
ok(false, 'missing test - untested code is broken code');
120120
});
121121

122+
test("{ icons: false }", function() {
123+
function icons(on) {
124+
same($("#list1 span.ui-icon:visible").length, on ? 3 : 0);
125+
same( $("#list1").hasClass("ui-accordion-icons"), on );
126+
}
127+
$("#list1").accordion();
128+
icons(true);
129+
$("#list1").accordion("destroy").accordion({
130+
icons: false
131+
});
132+
icons(false);
133+
$("#list1").accordion("option", "icons", $.ui.accordion.defaults.icons);
134+
icons(true);
135+
$("#list1").accordion("option", "icons", false);
136+
icons(false);
137+
});
138+
122139
test("{ navigation: false }, default", function() {
123140
ok(false, 'missing test - untested code is broken code');
124141
});

themes/base/ui.accordion.css

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
44
.ui-accordion .ui-accordion-li-fix { display: inline; }
55
.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
6-
.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }
6+
.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
7+
.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
78
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
89
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; }
910
.ui-accordion .ui-accordion-content-active { display: block; }

ui/ui.accordion.js

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,7 @@ $.widget("ui.accordion", {
6060
this.active.next().addClass('ui-accordion-content-active');
6161

6262
//Append icon elements
63-
$("<span/>").addClass("ui-icon " + o.icons.header).prependTo(this.headers);
64-
this.active.find(".ui-icon").toggleClass(o.icons.header).toggleClass(o.icons.headerSelected);
63+
this._createIcons();
6564

6665
// IE7-/Win - Extra vertical space in lists fixed
6766
if ($.browser.msie) {
@@ -104,6 +103,20 @@ $.widget("ui.accordion", {
104103
}
105104

106105
},
106+
107+
_createIcons: function() {
108+
var o = this.options;
109+
if (o.icons) {
110+
$("<span/>").addClass("ui-icon " + o.icons.header).prependTo(this.headers);
111+
this.active.find(".ui-icon").toggleClass(o.icons.header).toggleClass(o.icons.headerSelected);
112+
this.element.addClass("ui-accordion-icons");
113+
}
114+
},
115+
116+
_destroyIcons: function() {
117+
this.headers.children(".ui-icon").remove();
118+
this.element.removeClass("ui-accordion-icons");
119+
},
107120

108121
destroy: function() {
109122
var o = this.options;
@@ -120,7 +133,7 @@ $.widget("ui.accordion", {
120133
.removeAttr("role").removeAttr("aria-expanded").removeAttr("tabindex");
121134

122135
this.headers.find("a").removeAttr("tabindex");
123-
this.headers.children(".ui-icon").remove();
136+
this._destroyIcons();
124137
var contents = this.headers.next().css("display", "").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active");
125138
if (o.autoHeight || o.fillHeight) {
126139
contents.css("height", "");
@@ -130,8 +143,18 @@ $.widget("ui.accordion", {
130143
},
131144

132145
_setData: function(key, value) {
133-
if(key == 'alwaysOpen') { key = 'collapsible'; value = !value; }
134-
$.widget.prototype._setData.apply(this, arguments);
146+
// alwaysOpen is deprecated
147+
if(key == 'alwaysOpen'){ key = 'collapsible'; value = !value; }
148+
149+
$.widget.prototype._setData.apply(this, arguments);
150+
151+
if (key == "icons") {
152+
this._destroyIcons();
153+
if (value) {
154+
this._createIcons();
155+
}
156+
}
157+
135158
},
136159

137160
_keydown: function(event) {

0 commit comments

Comments
 (0)