You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "James McIntosh (JIRA)" <ji...@apache.org> on 2010/03/29 00:35:27 UTC

[jira] Commented: (WICKET-2806) Javascript looking for related radio in group is not working if css class is already assigned to radio

    [ https://issues.apache.org/jira/browse/WICKET-2806?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12850750#action_12850750 ] 

James McIntosh commented on WICKET-2806:
----------------------------------------

The check above does not cover all cases, what is missing is a function to check if a string has a CSS class in it.

For the above case the likelihood of a problem occurring is pretty close to zero because of the 'wicket-' prefix but the function might be a nice one to have available if CSS classes are used similarly elsewhere.

What the function does:
 - check if the value equals the class
 - check if the value starts with or ends with the class
 - check if the value contains the class with a space before and after

This will avoid the case where you have added a css attribute which contains the same value as 'wicket-'+markupId

Example / test code

<html>
<head><title></title></head>
<body>
<script type="text/javascript">

function hasCSSClass(value, clazz) {
  return clazz != null && value != null && (
     clazz === value
     || value.match('^'+clazz) != null
     || value.match(clazz+'$') != null
     || value.indexOf(' '+clazz+' ') > 0
  );
}

function assert(value, expectedValue) {
   return value === expectedValue ? "SUCCESS" : "FAILURE";
}

var clazz = "testclass";
var i = 1;
// check nulls
document.write(i++ + ": " + assert(hasCSSClass(null, clazz), false) + "<br />");
document.write(i++ + ": " + assert(hasCSSClass(clazz, null), false) + "<br />");
document.write(i++ + ": " + assert(hasCSSClass(null, null), false) + "<br />");
// equals
document.write(i++ + ": " + assert(hasCSSClass(clazz, clazz), true) + "<br />");
// starts with
document.write(i++ + ": " + assert(hasCSSClass(clazz + " blah", clazz), true) + "<br />");
// ends with
document.write(i++ + ": " + assert(hasCSSClass("blah " + clazz, clazz), true) + "<br />");
// contains
document.write(i++ + ": " + assert(hasCSSClass("blah " + clazz + " blah", clazz), true) + "<br />");
// contains as part of other value
document.write(i++ + ": " + assert(hasCSSClass("blah" + clazz + "blah", clazz), false) + "<br />");

</script>

</body>
</html>

> Javascript looking for related radio in group is not working if css class is already assigned to radio
> ------------------------------------------------------------------------------------------------------
>
>                 Key: WICKET-2806
>                 URL: https://issues.apache.org/jira/browse/WICKET-2806
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 1.4.7
>         Environment: Windows XP
>            Reporter: Per Newgro
>            Assignee: Igor Vaynberg
>             Fix For: 1.4.8, 1.5-M1
>
>
> We added a RadioGroup and two Radios. We often use multiple css classes for a component. Everything is working, until we add the class attribute to the radios. Then the click on radio is ignored.
> The sad thing is that the tests for behavior with WicketTester are working. This problem is only related to the browsers. So we can't provide a testcase. 
> Sorry you have to check it manually.
> We traced it to the line 73 in AjaxFormChoiceComponentUpdatingBehavior
> <code>
> asb.append(" if (!(inputNode.className.indexOf('wicket-'+markupId)===0)&&!(inputNode.id.indexOf(markupId+'-')===0)) continue;\n");
> </code>
> That means that the className has to start with the appropriate "wicket-markupId" value. But it will be added to the end of the class attribute value in
> line 226 of Radio. So we get "abc wicket-markupId".
> It is working with
> asb.append(" if (!(inputNode.className.indexOf('wicket-'+markupId)>=0 || inputNode.id.indexOf(markupId+'-')>=0)) continue;\n");
> Alternatively the class for identifying in script has to be added at beginning
> Radio line 226:
> clazz = marker + " " + clazz;

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.