ARBO#35417 Betere lengtecontrole TEXTAREA's

svn path=/Website/trunk/; revision=28135
This commit is contained in:
Jos Groot Lipman
2016-02-11 14:35:04 +00:00
parent 5bdf4e9fee
commit 0a3f69196c
6 changed files with 78 additions and 11 deletions

View File

@@ -397,6 +397,39 @@ api2 = {
return model.aliasprefix + (field.dbs == model.primary ? field.dbs : fld);
},
// Vult bij alle varchar en memo velden de len property in als dat nog niet is gedaan
setfieldlengths: function _setfieldlengths(model)
{
var dblengths = null;
for (var fld in model.fields)
{
if (fld.substring(0,1) == "_")
continue;
var field = model.fields[fld];
if (!field.dbs || field.hidden || field.len || field.readonly)
continue;
if (field.typ != "varchar" && field.typ != "memo")
continue;
if (!dblengths)
{
dblengths = {};
var sql = "SELECT column_name, data_length"
+ " FROM user_tab_columns"
+ " WHERE table_name = " + safe.quoted_sql_upper(model.table)
+ " AND data_type = 'VARCHAR2'";
var oRs = Oracle.Execute(sql);
while (!oRs.Eof)
{
dblengths[oRs("column_name").Value] = oRs("data_length").Value;
oRs.MoveNext();
}
oRs.Close()
__Log(dblengths);
}
field.len = dblengths[field.dbs.toUpperCase()];
}
},
// Bepaal bij een GET welke velden op te halen
sqlfields: function _sqlfields(params, model)
{

View File

@@ -223,6 +223,19 @@ jQuery.extend({
FcltMgr.resized(window);
}
/* Experimentele max-lengte indicatie onder label
var len = this.value.length;
var maxlen = parseInt(this.getAttribute("maxlength"), 10)||4000;
var $lbl = $("label[for="+ this.name +"]");
$lbl.find("div").remove();
if ($lbl.length && len > maxlen * (90/100))
{
if (len > maxlen)
$lbl.append("<div style='color:red;font-size:0.9em;'>Te lang.<br>Maximum is {0}, huidig is {1}</div>".format(maxlen, len));
else
$lbl.append("<div style='color:blue;font-size:0.9em'>{1}/{0} karakters</div>".format(maxlen, len));
}
*/
}
$(this).change(delayedUpdate).keyup(delayedUpdate).keydown(delayedUpdate).blur(update);

View File

@@ -206,11 +206,7 @@ function validateForm(fName, params)
{
hint = L("lcl_shared_validator_format");
}
if (validatorHint == '')
{
validatorHint = validatorHint + '\n';
}
validatorHint = validatorHint + (spantitle[0].textContent || spantitle[0].innerText) + ' ' + hint + '\n';
validatorHint.push((spantitle[0].textContent || spantitle[0].innerText) + ' ' + hint);
}
vIsGood = false;
}
@@ -230,7 +226,7 @@ function validateForm(fName, params)
var clsName = "missing";
var anyMissing = false;
var anyBad = false;
var validatorHint = "";
var validatorHint = [];
var jqcheckonly="*";
if (params.checkOnly) // slechts enkele velden controleren
@@ -314,6 +310,24 @@ function validateForm(fName, params)
}
}
)
/* Experimenteel. Nieuwe browsers staan bij een maxlength ook in een textarea niet al
te veel karakters toe dus is dan dubbelop
// Lengte controle
$("input:enabled,textarea:enabled").filter(jqcheckonly).not(jqchecknot).each(function (i)
{
var txt = $(this).val()||"";
var maxlen = parseInt($(this).attr("maxlength"), 10)||4000;
if (txt.length > maxlen)
{
var lbl = $("label[for="+ this.name +"]").text()||"";
lbl = lbl.replace(/\:$/, ""); // Dubbele punt aan einde weg
validatorHint.push(("Veld '{0}' is te lang. Maximum is {1} karakters, huidig is {2}.".format(lbl, maxlen, txt.length)));
anyBad = true;
}
}
)
*/
$(".suggestBad").each(function (i)
{
@@ -410,11 +424,11 @@ function validateForm(fName, params)
}
else if (anyBad)
{
if (validatorHint == '')
if (!validatorHint.length)
{
validatorHint = L("lcl_shared_validator_format");
validatorHint = [L("lcl_shared_validator_format")];
}
alert(validatorHint);
alert(validatorHint.join("\n"));
return false;
}

View File

@@ -454,8 +454,9 @@ function scf_RWFIELDTR(model, fld, val, key, params)
if (field.translate && key)
params.translate = { fld: fld.dbs, key: key };
params.maxlength = field.len;
if (field.typ == "memo")
RWTEXTAREATR(fld, "fld", field.label, val, params)
RWTEXTAREATR(fld, "fld", field.label, val, params);
else
{
switch (field.typ)

View File

@@ -94,6 +94,8 @@ function scaffolding_edit(model, scf_params)
}
}
}
api2.setfieldlengths(model); // max lengtes bepalen
if ("hook_pre_edit" in model)
model.hook_pre_edit(xxx_data, model.fields);

View File

@@ -375,7 +375,11 @@ function RWTEXTAREATR(pname, pclass, plabel, pvalue, params)
%><tr <%=params.trclass?"class='"+params.trclass+"'":""%>>
<%if (plabel) {%><td class="label"><label for="<%=pname%>"><%=plabel? plabel + ":" : ""%></label></td><% } %>
<td <%=(params.tdhtml_ta? " " + params.tdhtml_ta : "")%>>
<textarea class="<%=pclass%>"<%=(params.html? " " + params.html + " " : "")%><%=' id=\"' + pname + '\"' + ' name=\"' + pname + '\"'%><%=(params.readonly? " readonly " : "")%>><%=safe.textarea(pvalue)%></textarea>
<textarea class="<%=pclass%>"
<%=(params.html? " " + params.html + " " : "")%>
<%=' id=\"' + pname + '\"' + ' name=\"' + pname + '\"'%>
<%=" maxlength="+(params.maxlength||4000)%>
<%=(params.readonly? " readonly " : "")%>><%=safe.textarea(pvalue)%></textarea>
</td>
</tr><%
}