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] 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(); + }