diff --git a/source/java/org/alfresco/web/forms/xforms/Schema2XForms.java b/source/java/org/alfresco/web/forms/xforms/Schema2XForms.java
index 05534979d1..5815d61d53 100644
--- a/source/java/org/alfresco/web/forms/xforms/Schema2XForms.java
+++ b/source/java/org/alfresco/web/forms/xforms/Schema2XForms.java
@@ -956,9 +956,15 @@ public class Schema2XForms implements Serializable
" at " + newPathToRoot);
try
{
- final String defaultValue = (currentAttributeUse.getConstraintType() == XSConstants.VC_NONE
+ String defaultValue = (currentAttributeUse.getConstraintType() == XSConstants.VC_NONE
? null
: currentAttributeUse.getConstraintValue());
+ // make sure boolean attributes have a default value
+ if (defaultValue == null && "boolean".equals(currentAttribute.getTypeDefinition().getName()))
+ {
+ defaultValue = "false";
+ }
+
if (namespacePrefix.length() > 0)
{
defaultInstanceElement.setAttributeNS(this.targetNamespace,
@@ -1714,6 +1720,12 @@ public class Schema2XForms implements Serializable
Node value = xformsDocument.createTextNode(element.getConstraintValue());
newDefaultInstanceElement.appendChild(value);
}
+ else if ("boolean".equals(element.getTypeDefinition().getName()))
+ {
+ // we have a boolean element without a default value, default to false
+ Node value = xformsDocument.createTextNode("false");
+ newDefaultInstanceElement.appendChild(value);
+ }
this.addElement(xformsDocument,
modelSection,
diff --git a/source/java/org/alfresco/web/ui/common/renderer/DatePickerRenderer.java b/source/java/org/alfresco/web/ui/common/renderer/DatePickerRenderer.java
index 2376282f80..834ad69d61 100644
--- a/source/java/org/alfresco/web/ui/common/renderer/DatePickerRenderer.java
+++ b/source/java/org/alfresco/web/ui/common/renderer/DatePickerRenderer.java
@@ -396,7 +396,7 @@ public class DatePickerRenderer extends BaseRenderer
if (showTime)
{
- out.write(" type='text' size='1' maxlength='2'");
+ out.write(" type='text' size='2' maxlength='2'");
if (component.getAttributes().get("disabled") != null)
{
diff --git a/source/test-resources/xforms/tests/bugs/ETHREEOH-1886.xsd b/source/test-resources/xforms/tests/bugs/ETHREEOH-1886.xsd
new file mode 100644
index 0000000000..ff891ebfc5
--- /dev/null
+++ b/source/test-resources/xforms/tests/bugs/ETHREEOH-1886.xsd
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This control does not have an overridden alert
+
+
+
+
+
+
+
+ Please enter a value for hint-alert
+ This control should have a hint.
+
+
+
+
+
+
+
diff --git a/source/test-resources/xforms/tests/bugs/ETHREEOH-1940.xsd b/source/test-resources/xforms/tests/bugs/ETHREEOH-1940.xsd
new file mode 100644
index 0000000000..5662202cc7
--- /dev/null
+++ b/source/test-resources/xforms/tests/bugs/ETHREEOH-1940.xsd
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/source/test-resources/xforms/tests/bugs/ETHREEOH-1941.xsd b/source/test-resources/xforms/tests/bugs/ETHREEOH-1941.xsd
new file mode 100644
index 0000000000..aec6976011
--- /dev/null
+++ b/source/test-resources/xforms/tests/bugs/ETHREEOH-1941.xsd
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/source/web/scripts/ajax/tagger.js b/source/web/scripts/ajax/tagger.js
index 568f15121e..ca90bb04d6 100644
--- a/source/web/scripts/ajax/tagger.js
+++ b/source/web/scripts/ajax/tagger.js
@@ -78,7 +78,10 @@ var AlfTagger = new Class(
// Add click event handlers for the add and cancel buttons
$(this.id + "-addTag-ok").addEvent("click", function()
{
- this.addTag($(this.id + "-addTag-box").value);
+ if (this.validateTagBox())
+ {
+ this.addTag($(this.id + "-addTag-box").value);
+ }
}.bind(this));
$(this.id + "-addTag-cancel").addEvent("click", function()
@@ -110,15 +113,28 @@ var AlfTagger = new Class(
{
e.stop();
}
- }
+ };
+ // Add validation of tagName and cancel enter keys
$(this.id + "-addTag-box").addEvents(
{
- "keyup": fnEnterStop,
+ "keyup": function(e)
+ {
+ var addTagOk = $(this.id + "-addTag-ok")
+ if (!this.validateTagBox())
+ {
+ addTagOk.setStyle("opacity", 0.5);
+ }
+ else
+ {
+ addTagOk.setStyle("opacity", 1);
+ }
+ fnEnterStop(e);
+ }.bind(this),
"keypress": fnEnterStop
});
},
-
+
setDefaultIcon: function(icon)
{
this.defaultIcon = icon;
@@ -585,5 +601,11 @@ var AlfTagger = new Class(
{
}
}).request();
+ },
+
+ validateTagBox: function()
+ {
+ var tagBox = $(this.id + "-addTag-box");
+ return tagBox && tagBox.value && tagBox.value.length > 0 && validateName(tagBox);
}
});
\ No newline at end of file
diff --git a/source/web/scripts/ajax/xforms.js b/source/web/scripts/ajax/xforms.js
index f24a6d5bde..38949fb071 100644
--- a/source/web/scripts/ajax/xforms.js
+++ b/source/web/scripts/ajax/xforms.js
@@ -412,7 +412,7 @@ alfresco.xforms.Widget = new Class({
/** Returns the widget's label. */
getLabel: function()
{
- var result = "";
+ var result = "";
var node = this._getChildXFormsNode("label");
if (node && node.firstChild !== null)
@@ -430,15 +430,29 @@ alfresco.xforms.Widget = new Class({
/** Returns the widget's alert text. */
getAlert: function()
{
+ var result = "";
var node = this._getChildXFormsNode("alert");
- return node ? node.firstChild.nodeValue : "";
+
+ if (node && node.firstChild !== null)
+ {
+ result = node.firstChild.nodeValue;
+ }
+
+ return result;
},
/** Returns the widget's alert text. */
getHint: function()
{
+ var result = null;
var node = this._getChildXFormsNode("hint");
- return node ? node.firstChild.nodeValue : null;
+
+ if (node && node.firstChild !== null)
+ {
+ result = node.firstChild.nodeValue;
+ }
+
+ return result;
},
/** Makes the label red. */
@@ -2310,6 +2324,7 @@ alfresco.xforms.MonthPicker = alfresco.xforms.ComboboxSelect1.extend({
initialize: function(xform, xformsNode)
{
this.parent(xform, xformsNode);
+ dojo.require("dojo.date.format");
},
/////////////////////////////////////////////////////////////////