From ac4f42a8c6c2733e174b359fedd34eca7d15ccc0 Mon Sep 17 00:00:00 2001 From: hg <none@none> Date: Thu, 25 Jun 2015 11:10:50 +0200 Subject: [PATCH] OO-1575: fix wrong for attribute in static text, radio and check box elements, fix duplicate class --- .../gui/components/form/flexible/FormItem.java | 6 ++++++ .../form/flexible/impl/FormItemImpl.java | 17 +++++++++++++---- .../impl/components/SimpleLabelText.java | 17 +++++++++-------- .../elements/MultipleSelectionElementImpl.java | 5 ++++- .../impl/elements/SingleSelectionImpl.java | 4 ++++ .../impl/elements/StaticTextElementImpl.java | 7 ++++++- .../ims/qti/editor/_content/tab_assess.html | 2 +- 7 files changed, 43 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/FormItem.java b/src/main/java/org/olat/core/gui/components/form/flexible/FormItem.java index 090507cfdcd..95165b210d1 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/FormItem.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/FormItem.java @@ -208,6 +208,12 @@ public interface FormItem extends FormBaseComponentIdProvider { * The id of the item, can be null */ public String getFormItemId(); + + /** + * Return the id for the attribute for of the label or null + * if the component isn't an HTML form control. + */ + public String getForId(); /** * The elements panel to be rendered by the GUI Framework. diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormItemImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormItemImpl.java index 91525a6b634..7616122982b 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormItemImpl.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormItemImpl.java @@ -105,19 +105,28 @@ public abstract class FormItemImpl implements FormItem, InlineElement { examplePanel = new Panel(PREFIX + name + FormItem.EXAMPLEC); labelPanel = new Panel(PREFIX + name + FormItem.LABELC); } - + + @Override public String getFormItemId() { return id; } - + + @Override + public String getForId() { + return getFormDispatchId(); + } + + @Override public String getName() { return name; } + @Override public String getElementCssClass() { return elementCssClass; } + @Override public void setElementCssClass(String elementCssClass) { this.elementCssClass = elementCssClass; } @@ -203,7 +212,7 @@ public abstract class FormItemImpl implements FormItem, InlineElement { } } if(labelKey != null) { - labelC = new SimpleLabelText(labelKey, labelTrsl, componentIsMandatory); + labelC = new SimpleLabelText(this, labelKey, labelTrsl, componentIsMandatory); labelC.setTranslator(translator); labelPanel.setContent(labelC); } @@ -240,7 +249,7 @@ public abstract class FormItemImpl implements FormItem, InlineElement { labelParams = params; // set label may be called before the translator is available if (getTranslator() != null && labelKey != null) { - labelC = new SimpleLabelText(label, getLabelText(), componentIsMandatory); + labelC = new SimpleLabelText(this, label, getLabelText(), componentIsMandatory); labelC.setTranslator(getTranslator()); labelPanel.setContent(labelC); } else if(label == null) { diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/components/SimpleLabelText.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/components/SimpleLabelText.java index 333220f47ee..56ed88a188b 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/components/SimpleLabelText.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/components/SimpleLabelText.java @@ -28,6 +28,7 @@ package org.olat.core.gui.components.form.flexible.impl.components; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.ComponentRenderer; import org.olat.core.gui.components.DefaultComponentRenderer; +import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.impl.FormBaseComponentImpl; import org.olat.core.gui.render.RenderResult; import org.olat.core.gui.render.Renderer; @@ -49,10 +50,12 @@ public class SimpleLabelText extends FormBaseComponentImpl { private final String text; private boolean componentIsMandatory; + private final FormItem item; - public SimpleLabelText(String name, String text, boolean mandatory) { + public SimpleLabelText(FormItem item, String name, String text, boolean mandatory) { super(name); this.text = text; + this.item = item; this.componentIsMandatory = mandatory; // to minimize DOM tree we provide our own DOM ID (o_c12245) this.setDomReplacementWrapperRequired(false); @@ -80,23 +83,21 @@ public class SimpleLabelText extends FormBaseComponentImpl { RenderResult renderResult, String[] args) { SimpleLabelText stc = (SimpleLabelText) source; sb.append("<label class='control-label "); - String target = null; if (args != null && args.length > 0) { for (int i = 0; i < args.length; i++) { String arg = args[i]; if (arg.startsWith("col-")) { sb.append(arg); - } else { - target = arg; } } } sb.append("' id='o_c").append(source.getDispatchID()).append("'"); // add the reference to form element for which this label stands. this is important for screen readers - if (target != null) { - sb.append(" for=\""); - sb.append(target); - sb.append("\""); + if (stc.item != null) { + String forId = stc.item.getForId(); + if(forId != null) { + sb.append(" for=\"").append(forId).append("\""); + } } sb.append(">"); if (StringHelper.containsNonWhitespace(stc.text)) { diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/MultipleSelectionElementImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/MultipleSelectionElementImpl.java index b1f9ae7b625..1108e637b3c 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/MultipleSelectionElementImpl.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/MultipleSelectionElementImpl.java @@ -78,7 +78,10 @@ public class MultipleSelectionElementImpl extends FormItemImpl implements Multip this.columns = columns; } - + @Override + public String getForId() { + return null; + } @Override public void setDomReplacementWrapperRequired(boolean required) { diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/SingleSelectionImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/SingleSelectionImpl.java index 7a615f0222f..7a1c289bc84 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/SingleSelectionImpl.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/SingleSelectionImpl.java @@ -77,6 +77,10 @@ public class SingleSelectionImpl extends FormItemImpl implements SingleSelection public void setDomReplacementWrapperRequired(boolean required) { component.setDomReplacementWrapperRequired(required); } + + public String getForId() { + return null;//every radio box has its own label + } /** * @see org.olat.core.gui.components.form.flexible.elements.SingleSelectionContainer#getSelected() diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/StaticTextElementImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/StaticTextElementImpl.java index 21cabccbb1f..f814f397fc3 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/StaticTextElementImpl.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/StaticTextElementImpl.java @@ -65,7 +65,12 @@ public class StaticTextElementImpl extends FormItemImpl implements StaticTextEle @Override public void reset() { // static text can not be resetted - }; + } + + @Override + public String getForId() { + return null;//text is not a form control + } protected Component getFormItemComponent() { return component; diff --git a/src/main/java/org/olat/ims/qti/editor/_content/tab_assess.html b/src/main/java/org/olat/ims/qti/editor/_content/tab_assess.html index dcfc9775efc..03e5cfca068 100644 --- a/src/main/java/org/olat/ims/qti/editor/_content/tab_assess.html +++ b/src/main/java/org/olat/ims/qti/editor/_content/tab_assess.html @@ -89,7 +89,7 @@ <div class="form-group"> <label class="control-label col-sm-3">$r.translate("form.assessment.order_type")</label> <div class="col-sm-9"> - <select id="order_type" name="order_type" class="form-control" onchange="return setFormDirty('ofo_assessform')" onclick="return setFormDirty('ofo_assessform')" $readonly class="$css"> + <select id="order_type" name="order_type" class="form-control $css" onchange="return setFormDirty('ofo_assessform')" onclick="return setFormDirty('ofo_assessform')" $readonly> <option value="Random" #if ($order_type == "Random") selected="selected" #end >$r.translate("form.section.order_type.random")</option> <option value="Sequential" #if ($order_type == "Sequential") selected="selected" #end -- GitLab