From 45a6e24299d74034edf8f0eb74120478614c8803 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Wed, 14 Dec 2011 15:49:19 +0100 Subject: [PATCH 1/2] Panel iconOn and iconOff do not behave correctly if application-specific classes are set in the control --- lib/OpenLayers/Control/Panel.js | 8 +++++-- tests/Control/Panel.html | 38 +++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/lib/OpenLayers/Control/Panel.js b/lib/OpenLayers/Control/Panel.js index 1129ef4e52..d2e6a12198 100644 --- a/lib/OpenLayers/Control/Panel.js +++ b/lib/OpenLayers/Control/Panel.js @@ -295,7 +295,9 @@ OpenLayers.Control.Panel = OpenLayers.Class(OpenLayers.Control, { */ iconOn: function() { var d = this.panel_div; // "this" refers to a control on panel! - d.className = d.className.replace(/ItemInactive$/, "ItemActive"); + var re = new RegExp(this.displayClass + 'ItemInactive'); + d.className = d.className.replace(re, + this.displayClass + "ItemActive"); }, /** @@ -304,7 +306,9 @@ OpenLayers.Control.Panel = OpenLayers.Class(OpenLayers.Control, { */ iconOff: function() { var d = this.panel_div; // "this" refers to a control on panel! - d.className = d.className.replace(/ItemActive$/, "ItemInactive"); + var re = new RegExp(this.displayClass + 'ItemActive'); + d.className = d.className.replace(re, + this.displayClass + "ItemInactive"); }, /** diff --git a/tests/Control/Panel.html b/tests/Control/Panel.html index ae07c9702f..2f5fa58e98 100644 --- a/tests/Control/Panel.html +++ b/tests/Control/Panel.html @@ -288,6 +288,44 @@ // panel.deactivate(); map.destroy(); } + + function test_iconOn_iconOff(t) { + t.plan(3); + + var map = new OpenLayers.Map('map'); + + var panel = new OpenLayers.Control.Panel(); + var ctrl = new OpenLayers.Control({displayClass: 'ctrl'}); + panel.addControls([ctrl]); + + map.addControl(panel); + + // add arbitrary classes to the panel div - we want to test + // than iconOn and iconOff do their jobs even when the panel + // div has application-specific classes. + + ctrl.panel_div.className = + 'ctrlItemInactive fooItemActive fooItemInactive'; + + t.eq(ctrl.panel_div.className, + 'ctrlItemInactive fooItemActive fooItemInactive', + 'initial className value is as expected'); + + panel.iconOn.call(ctrl); + t.eq(ctrl.panel_div.className, + 'ctrlItemActive fooItemActive fooItemInactive', + 'iconOn behaves as expected'); + + ctrl.panel_div.className = + 'ctrlItemActive fooItemActive fooItemInactive'; + + panel.iconOff.call(ctrl); + t.eq(ctrl.panel_div.className, + 'ctrlItemInactive fooItemActive fooItemInactive', + 'iconOff behaves as expected'); + + map.destroy(); + } From 6b0d61dbd14e548683336e359e3e99a4f33299d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Wed, 14 Dec 2011 16:08:34 +0100 Subject: [PATCH 2/2] remove useless assertion in Panel.html:test_iconOn_iconOff --- tests/Control/Panel.html | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/tests/Control/Panel.html b/tests/Control/Panel.html index 2f5fa58e98..d74526bda2 100644 --- a/tests/Control/Panel.html +++ b/tests/Control/Panel.html @@ -290,7 +290,7 @@ } function test_iconOn_iconOff(t) { - t.plan(3); + t.plan(2); var map = new OpenLayers.Map('map'); @@ -307,10 +307,6 @@ ctrl.panel_div.className = 'ctrlItemInactive fooItemActive fooItemInactive'; - t.eq(ctrl.panel_div.className, - 'ctrlItemInactive fooItemActive fooItemInactive', - 'initial className value is as expected'); - panel.iconOn.call(ctrl); t.eq(ctrl.panel_div.className, 'ctrlItemActive fooItemActive fooItemInactive',