You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
691 lines
20 KiB
691 lines
20 KiB
3 years ago
|
/*
|
||
|
Copyright (c) 2012-2017 Open Lab
|
||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||
|
a copy of this software and associated documentation files (the
|
||
|
"Software"), to deal in the Software without restriction, including
|
||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||
|
permit persons to whom the Software is furnished to do so, subject to
|
||
|
the following conditions:
|
||
|
|
||
|
The above copyright notice and this permission notice shall be
|
||
|
included in all copies or substantial portions of the Software.
|
||
|
|
||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||
|
*/
|
||
|
|
||
|
var muteAlertOnChange = false;
|
||
|
|
||
|
|
||
|
// isRequired ----------------------------------------------------------------------------
|
||
|
|
||
|
//return true if every mandatory field is filled and highlight empty ones
|
||
|
jQuery.fn.isFullfilled = function () {
|
||
|
var canSubmit = true;
|
||
|
var firstErrorElement = "";
|
||
|
|
||
|
this.each(function () {
|
||
|
var theElement = $(this);
|
||
|
theElement.removeClass("formElementsError");
|
||
|
//if (theElement.val().trim().length == 0 || theElement.attr("invalid") == "true") { //robicch 13/2/15
|
||
|
if (theElement.is("[required]") && theElement.val().trim().length == 0 || theElement.attr("invalid") == "true") {
|
||
|
if (theElement.attr("type") == "hidden") {
|
||
|
theElement = theElement.prevAll("#" + theElement.prop("id") + "_txt:first");
|
||
|
} else if (theElement.is("[withTinyMCE]")){
|
||
|
if (tinymce.activeEditor.getContent()=="")
|
||
|
theElement=$("#"+theElement.attr("name")+"_tbl");
|
||
|
else
|
||
|
return true;// in order to continue the loop
|
||
|
}
|
||
|
theElement.addClass("formElementsError");
|
||
|
canSubmit = false;
|
||
|
|
||
|
if (firstErrorElement == "")
|
||
|
firstErrorElement = theElement;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
if (!canSubmit) {
|
||
|
// get the tabdiv
|
||
|
var theTabDiv = firstErrorElement.closest(".tabBox");
|
||
|
if (theTabDiv.length > 0)
|
||
|
clickTab(theTabDiv.attr("tabId"));
|
||
|
|
||
|
// highlight element
|
||
|
firstErrorElement.effect("highlight", { color:"red" }, 1500);
|
||
|
}
|
||
|
return canSubmit;
|
||
|
|
||
|
};
|
||
|
|
||
|
function canSubmitForm(formOrId) {
|
||
|
//console.debug("canSubmitForm",formOrId);
|
||
|
if (typeof formOrId != "object")
|
||
|
formOrId=$("#" + formOrId);
|
||
|
return formOrId.find(":input[required],:input[invalid=true]").isFullfilled();
|
||
|
}
|
||
|
|
||
|
function showSavingMessage() {
|
||
|
$("#savingMessage:hidden").fadeIn();
|
||
|
$("body").addClass("waiting");
|
||
|
$(window).resize();
|
||
|
}
|
||
|
function hideSavingMessage() {
|
||
|
$("#savingMessage:visible").fadeOut();
|
||
|
$("body").removeClass("waiting");
|
||
|
$(window).resize();
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/* Types Function */
|
||
|
|
||
|
function isValidURL(url) {
|
||
|
var RegExp = /^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/;
|
||
|
return RegExp.test(url);
|
||
|
}
|
||
|
|
||
|
function isValidEmail(email) {
|
||
|
//var RegExp = /^((([a-z]|[0-9]|!|#|$|%|&|'|\*|\+|\-|\/|=|\?|\^|_|`|\{|\||\}|~)+(\.([a-z]|[0-9]|!|#|$|%|&|'|\*|\+|\-|\/|=|\?|\^|_|`|\{|\||\}|~)+)*)@((((([a-z]|[0-9])([a-z]|[0-9]|\-){0,61}([a-z]|[0-9])\.))*([a-z]|[0-9])([a-z]|[0-9]|\-){0,61}([a-z]|[0-9])\.)[\w]{2,4}|(((([0-9]){1,3}\.){3}([0-9]){1,3}))|(\[((([0-9]){1,3}\.){3}([0-9]){1,3})\])))$/;
|
||
|
var RegExp = /^.+@\S+\.\S+$/;
|
||
|
return RegExp.test(email);
|
||
|
}
|
||
|
|
||
|
function isValidInteger(n) {
|
||
|
reg = new RegExp("^[-+]{0,1}[0-9]*$");
|
||
|
return reg.test(n) || isNumericExpression(n);
|
||
|
}
|
||
|
|
||
|
function isValidDouble(n) {
|
||
|
var sep = Number.decimalSeparator;
|
||
|
reg = new RegExp("^[-+]{0,1}[0-9]*[" + sep + "]{0,1}[0-9]*$");
|
||
|
return reg.test(n) || isNumericExpression(n);
|
||
|
}
|
||
|
|
||
|
function isValidTime(n) {
|
||
|
return !isNaN(millisFromHourMinute(n));
|
||
|
}
|
||
|
|
||
|
function isValidDurationDays(n) {
|
||
|
return !isNaN(daysFromString(n));
|
||
|
}
|
||
|
|
||
|
function isValidDurationMillis(n) {
|
||
|
return !isNaN(millisFromString(n));
|
||
|
}
|
||
|
|
||
|
function isNumericExpression(expr) {
|
||
|
try {
|
||
|
var a = eval(expr);
|
||
|
return typeof(a) == 'number';
|
||
|
} catch (t) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
function getNumericExpression(expr) {
|
||
|
var ret;
|
||
|
try {
|
||
|
var a = eval(expr);
|
||
|
if (typeof(a) == 'number')
|
||
|
ret = a;
|
||
|
} catch (t) {
|
||
|
}
|
||
|
return ret;
|
||
|
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
supports almost all Java currency format e.g.: ###,##0.00EUR €#,###.00 #,###.00€ -$#,###.00 $-#,###.00
|
||
|
*/
|
||
|
function isValidCurrency(numStr) {
|
||
|
//first try to convert format in a regex
|
||
|
var regex = "";
|
||
|
var format = Number.currencyFormat + "";
|
||
|
|
||
|
var minusFound = false;
|
||
|
var numFound = false;
|
||
|
var currencyString = "";
|
||
|
var numberRegex = "[0-9\\" + Number.groupingSeparator + "]+[\\" + Number.decimalSeparator + "]?[0-9]*";
|
||
|
|
||
|
for (var i = 0; i < format.length; i++) {
|
||
|
var ch = format.charAt(i);
|
||
|
|
||
|
if (ch == "." || ch == "," || ch == "0") {
|
||
|
//skip it
|
||
|
if (currencyString != "") {
|
||
|
regex = regex + "(?:" + RegExp.quote(currencyString) + ")?";
|
||
|
currencyString = "";
|
||
|
}
|
||
|
|
||
|
} else if (ch == "#") {
|
||
|
if (currencyString != "") {
|
||
|
regex = regex + "(?:" + RegExp.quote(currencyString) + ")?";
|
||
|
currencyString = "";
|
||
|
}
|
||
|
|
||
|
if (!numFound) {
|
||
|
numFound = true;
|
||
|
regex = regex + numberRegex;
|
||
|
}
|
||
|
|
||
|
} else if (ch == "-") {
|
||
|
if (currencyString != "") {
|
||
|
regex = regex + "(?:" + RegExp.quote(currencyString) + ")?";
|
||
|
currencyString = "";
|
||
|
}
|
||
|
if (!minusFound) {
|
||
|
minusFound = true;
|
||
|
regex = regex + "[-]?";
|
||
|
}
|
||
|
|
||
|
} else {
|
||
|
currencyString = currencyString + ch;
|
||
|
}
|
||
|
}
|
||
|
if (!minusFound)
|
||
|
regex = "[-]?" + regex;
|
||
|
|
||
|
if (currencyString != "")
|
||
|
regex = regex + "(?:" + RegExp.quote(currencyString) + ")?";
|
||
|
|
||
|
regex = "^" + regex + "$";
|
||
|
|
||
|
var rg = new RegExp(regex);
|
||
|
return rg.test(numStr) || isNumericExpression(numStr);
|
||
|
}
|
||
|
|
||
|
function getCurrencyValue(numStr) {
|
||
|
if (!isValidCurrency(numStr))
|
||
|
return NaN;
|
||
|
|
||
|
var ripul = numStr.replaceAll(Number.groupingSeparator, "").replaceAll(Number.decimalSeparator, ".");
|
||
|
return getNumericExpression(ripul) || parseFloat(ripul.replace(/[^-0123456789.]/, ""));
|
||
|
}
|
||
|
|
||
|
|
||
|
function formatCurrency(numberString) {
|
||
|
return formatNumber(numberString, Number.currencyFormat);
|
||
|
}
|
||
|
|
||
|
|
||
|
function formatNumber(numberString, format) {
|
||
|
if (!format)
|
||
|
format = "##0.00";
|
||
|
|
||
|
var dec = Number.decimalSeparator;
|
||
|
var group = Number.groupingSeparator;
|
||
|
var neg = Number.minusSign;
|
||
|
|
||
|
var round = true;
|
||
|
|
||
|
var validFormat = "0#-,.";
|
||
|
|
||
|
// strip all the invalid characters at the beginning and the end
|
||
|
// of the format, and we'll stick them back on at the end
|
||
|
// make a special case for the negative sign "-" though, so
|
||
|
// we can have formats like -$23.32
|
||
|
var prefix = "";
|
||
|
var negativeInFront = false;
|
||
|
for (var i = 0; i < format.length; i++) {
|
||
|
if (validFormat.indexOf(format.charAt(i)) == -1) {
|
||
|
prefix = prefix + format.charAt(i);
|
||
|
} else {
|
||
|
if (i == 0 && format.charAt(i) == '-') {
|
||
|
negativeInFront = true;
|
||
|
} else {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
var suffix = "";
|
||
|
for (var i = format.length - 1; i >= 0; i--) {
|
||
|
if (validFormat.indexOf(format.charAt(i)) == -1)
|
||
|
suffix = format.charAt(i) + suffix;
|
||
|
else
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
format = format.substring(prefix.length);
|
||
|
format = format.substring(0, format.length - suffix.length);
|
||
|
|
||
|
// now we need to convert it into a number
|
||
|
//while (numberString.indexOf(group) > -1)
|
||
|
// numberString = numberString.replace(group, '');
|
||
|
//var number = new Number(numberString.replace(dec, ".").replace(neg, "-"));
|
||
|
var number = new Number(numberString);
|
||
|
|
||
|
|
||
|
var forcedToZero = false;
|
||
|
if (isNaN(number)) {
|
||
|
number = 0;
|
||
|
forcedToZero = true;
|
||
|
}
|
||
|
|
||
|
// special case for percentages
|
||
|
if (suffix == "%")
|
||
|
number = number * 100;
|
||
|
|
||
|
var returnString = "";
|
||
|
if (format.indexOf(".") > -1) {
|
||
|
var decimalPortion = dec;
|
||
|
var decimalFormat = format.substring(format.lastIndexOf(".") + 1);
|
||
|
|
||
|
// round or truncate number as needed
|
||
|
if (round)
|
||
|
number = new Number(number.toFixed(decimalFormat.length));
|
||
|
else {
|
||
|
var numStr = number.toString();
|
||
|
numStr = numStr.substring(0, numStr.lastIndexOf('.') + decimalFormat.length + 1);
|
||
|
number = new Number(numStr);
|
||
|
}
|
||
|
|
||
|
var decimalValue = number % 1;
|
||
|
var decimalString = new String(decimalValue.toFixed(decimalFormat.length));
|
||
|
decimalString = decimalString.substring(decimalString.lastIndexOf(".") + 1);
|
||
|
|
||
|
for (var i = 0; i < decimalFormat.length; i++) {
|
||
|
if (decimalFormat.charAt(i) == '#' && decimalString.charAt(i) != '0') {
|
||
|
decimalPortion += decimalString.charAt(i);
|
||
|
} else if (decimalFormat.charAt(i) == '#' && decimalString.charAt(i) == '0') {
|
||
|
var notParsed = decimalString.substring(i);
|
||
|
if (notParsed.match('[1-9]')) {
|
||
|
decimalPortion += decimalString.charAt(i);
|
||
|
} else {
|
||
|
break;
|
||
|
}
|
||
|
} else if (decimalFormat.charAt(i) == "0") {
|
||
|
decimalPortion += decimalString.charAt(i);
|
||
|
}
|
||
|
}
|
||
|
returnString += decimalPortion;
|
||
|
} else {
|
||
|
number = Math.round(number);
|
||
|
}
|
||
|
var ones = Math.floor(number);
|
||
|
if (number < 0)
|
||
|
ones = Math.ceil(number);
|
||
|
|
||
|
var onesFormat = "";
|
||
|
if (format.indexOf(".") == -1)
|
||
|
onesFormat = format;
|
||
|
else
|
||
|
onesFormat = format.substring(0, format.indexOf("."));
|
||
|
|
||
|
var onePortion = "";
|
||
|
if (!(ones == 0 && onesFormat.substr(onesFormat.length - 1) == '#') || forcedToZero) {
|
||
|
// find how many digits are in the group
|
||
|
var oneText = new String(Math.abs(ones));
|
||
|
var groupLength = 9999;
|
||
|
if (onesFormat.lastIndexOf(",") != -1)
|
||
|
groupLength = onesFormat.length - onesFormat.lastIndexOf(",") - 1;
|
||
|
var groupCount = 0;
|
||
|
for (var i = oneText.length - 1; i > -1; i--) {
|
||
|
onePortion = oneText.charAt(i) + onePortion;
|
||
|
groupCount++;
|
||
|
if (groupCount == groupLength && i != 0) {
|
||
|
onePortion = group + onePortion;
|
||
|
groupCount = 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// account for any pre-data padding
|
||
|
if (onesFormat.length > onePortion.length) {
|
||
|
var padStart = onesFormat.indexOf('0');
|
||
|
if (padStart != -1) {
|
||
|
var padLen = onesFormat.length - padStart;
|
||
|
|
||
|
// pad to left with 0's or group char
|
||
|
var pos = onesFormat.length - onePortion.length - 1;
|
||
|
while (onePortion.length < padLen) {
|
||
|
var padChar = onesFormat.charAt(pos);
|
||
|
// replace with real group char if needed
|
||
|
if (padChar == ',')
|
||
|
padChar = group;
|
||
|
onePortion = padChar + onePortion;
|
||
|
pos--;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!onePortion && onesFormat.indexOf('0', onesFormat.length - 1) !== -1)
|
||
|
onePortion = '0';
|
||
|
|
||
|
returnString = onePortion + returnString;
|
||
|
|
||
|
// handle special case where negative is in front of the invalid characters
|
||
|
if (number < 0 && negativeInFront && prefix.length > 0)
|
||
|
prefix = neg + prefix;
|
||
|
else if (number < 0)
|
||
|
returnString = neg + returnString;
|
||
|
|
||
|
if (returnString.lastIndexOf(dec) == returnString.length - 1) {
|
||
|
returnString = returnString.substring(0, returnString.length - 1);
|
||
|
}
|
||
|
returnString = prefix + returnString + suffix;
|
||
|
return returnString;
|
||
|
}
|
||
|
|
||
|
|
||
|
//validation functions - used by textfield and datefield
|
||
|
jQuery.fn.validateField = function () {
|
||
|
var isValid = true;
|
||
|
|
||
|
this.each(function () {
|
||
|
var el = $(this);
|
||
|
el.clearErrorAlert();
|
||
|
|
||
|
var value = el.val();
|
||
|
if (value) {
|
||
|
var rett = true;
|
||
|
var type = (el.attr('entryType')+"").toUpperCase();
|
||
|
var errParam;
|
||
|
|
||
|
if (type == "INTEGER") {
|
||
|
rett = isValidInteger(value);
|
||
|
} else if (type == "DOUBLE") {
|
||
|
rett = isValidDouble(value);
|
||
|
} else if (type == "PERCENTILE") {
|
||
|
rett = isValidDouble(value);
|
||
|
} else if (type == "URL") {
|
||
|
rett = isValidURL(value);
|
||
|
} else if (type == "EMAIL") {
|
||
|
rett = isValidEmail(value);
|
||
|
} else if (type == "DURATIONMILLIS") {
|
||
|
rett = isValidDurationMillis(value);
|
||
|
} else if (type == "DURATIONDAYS") {
|
||
|
rett = isValidDurationDays(value);
|
||
|
} else if (type == "DATE") {
|
||
|
rett = Date.isValid(value, el.attr("format"), true);
|
||
|
if (!rett)
|
||
|
errParam = el.attr("format");
|
||
|
} else if (type == "TIME") {
|
||
|
rett = isValidTime(value);
|
||
|
} else if (type == "CURRENCY") {
|
||
|
rett = isValidCurrency(value);
|
||
|
}
|
||
|
|
||
|
if (!rett) {
|
||
|
el.createErrorAlert(i18n.ERROR_ON_FIELD, i18n.INVALID_DATA + (errParam ? " " + errParam : ""));
|
||
|
isValid=false;
|
||
|
}
|
||
|
|
||
|
|
||
|
//check limits minValue : maxValue
|
||
|
if (rett && (el.attr("minValue") || el.attr("maxValue"))){
|
||
|
var val=value;
|
||
|
var min=el.attr("minValue");
|
||
|
var max=el.attr("maxValue");
|
||
|
if (type == "INTEGER") {
|
||
|
val=parseInt(value);
|
||
|
min=parseInt(min);
|
||
|
max=parseInt(max);
|
||
|
} else if (type == "DOUBLE" || type == "PERCENTILE") {
|
||
|
val=parseDouble(value);
|
||
|
min=parseDouble(min);
|
||
|
max=parseDouble(max);
|
||
|
} else if (type == "URL") {
|
||
|
val=value;
|
||
|
} else if (type == "EMAIL") {
|
||
|
val=value;
|
||
|
} else if (type == "DURATIONMILLIS") {
|
||
|
val=millisFromString(value);
|
||
|
min=millisFromString(min);
|
||
|
max=millisFromString(max);
|
||
|
|
||
|
} else if (type == "DURATIONDAYS") {
|
||
|
val=daysFromString(value);
|
||
|
min=daysFromString(min);
|
||
|
max=daysFromString(max);
|
||
|
} else if (type == "DATE") {
|
||
|
val=Date.parseString(value, el.attr("format"),true).getTime();
|
||
|
min=Date.parseString(min, el.attr("format"),true).getTime();
|
||
|
max=Date.parseString(max, el.attr("format"),true).getTime();
|
||
|
} else if (type == "TIME") {
|
||
|
val = millisFromHourMinute(value);
|
||
|
min = millisFromHourMinute(min);
|
||
|
max = millisFromHourMinute(max);
|
||
|
} else if (type == "CURRENCY") {
|
||
|
val=getCurrencyValue(value);
|
||
|
min=getCurrencyValue(min);
|
||
|
max=getCurrencyValue(max);
|
||
|
}
|
||
|
|
||
|
if (el.attr("minValue") && val<min){
|
||
|
el.createErrorAlert(i18n.ERROR_ON_FIELD, i18n.OUT_OF_BOUDARIES + " ("+el.attr("minValue")+" : "+(el.attr("maxValue")?el.attr("maxValue"):"--")+")");
|
||
|
rett=false;
|
||
|
isValid=false;
|
||
|
|
||
|
$("body").trigger("error");
|
||
|
}
|
||
|
|
||
|
if (rett && el.attr("maxValue") && val>max){
|
||
|
el.createErrorAlert(i18n.ERROR_ON_FIELD, i18n.OUT_OF_BOUDARIES + " ("+(el.attr("minValue")?el.attr("minValue"):"--")+" : "+el.attr("maxValue")+")");
|
||
|
rett=false;
|
||
|
isValid=false;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
return isValid;
|
||
|
};
|
||
|
|
||
|
jQuery.fn.clearErrorAlert = function () {
|
||
|
this.each(function () {
|
||
|
var el = $(this);
|
||
|
el.removeAttr("invalid").removeClass("formElementsError");
|
||
|
$("#" + el.prop("id") + "error").remove();
|
||
|
});
|
||
|
return this;
|
||
|
};
|
||
|
|
||
|
jQuery.fn.createErrorAlert = function (errorCode, message) {
|
||
|
this.each(function () {
|
||
|
var el = $(this);
|
||
|
el.attr("invalid", "true").addClass("formElementsError");
|
||
|
if ($("#" + el.prop("id") + "error").length <= 0) {
|
||
|
var errMess = (errorCode ? errorCode : "") + ": " + (message ? message : "");
|
||
|
var err = "<span class='formElementExclamation' id=\"" + el.prop("id") + "error\" error='1'";
|
||
|
err += " onclick=\"alert($(this).attr('title'))\" border='0' align='absmiddle'> ";
|
||
|
err += "</span>\n";
|
||
|
err = $(err);
|
||
|
err.prop("title", errMess);
|
||
|
el.after(err);
|
||
|
}
|
||
|
});
|
||
|
return this;
|
||
|
};
|
||
|
|
||
|
|
||
|
// button submit support BEGIN ------------------
|
||
|
|
||
|
function saveFormValues(idForm) {
|
||
|
var formx = obj(idForm);
|
||
|
formx.setAttribute("savedAction", formx.action);
|
||
|
formx.setAttribute("savedTarget", formx.target);
|
||
|
var el = formx.elements;
|
||
|
for (i = 0; i < el.length; i++) {
|
||
|
if (el[i].getAttribute("savedValue") != null) {
|
||
|
el[i].setAttribute("savedValue", el[i].value);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function restoreFormValues(idForm) {
|
||
|
var formx = obj(idForm);
|
||
|
formx.action = formx.getAttribute("savedAction");
|
||
|
formx.target = formx.getAttribute("savedTarget");
|
||
|
var el = formx.elements;
|
||
|
for (i = 0; i < el.length; i++) {
|
||
|
if (el[i].getAttribute("savedValue") != null) {
|
||
|
el[i].value = el[i].getAttribute("savedValue");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function changeActionAndSubmit(action,command){
|
||
|
var f=$("form:first");
|
||
|
f.prop("action",action);
|
||
|
f.find("[name=CM]").val(command);
|
||
|
f.submit();
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
// textarea limit size -------------------------------------------------
|
||
|
function limitSize(ob) {
|
||
|
if (ob.getAttribute("maxlength")) {
|
||
|
var ml =parseInt(ob.getAttribute("maxlength"));
|
||
|
var val = ob.value;//.replace(/\r\n/g,"\n");
|
||
|
if (val.length > ml) {
|
||
|
ob.value = val.substr(0, ml);
|
||
|
$(ob).createErrorAlert("Error",i18n.ERR_FIELD_MAX_SIZE_EXCEEDED);
|
||
|
} else {
|
||
|
$(ob).clearErrorAlert();
|
||
|
}
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
// verify before unload BEGIN ----------------------------------------------------------------------------
|
||
|
|
||
|
function alertOnUnload(container) {
|
||
|
//console.debug("alertOnUnload",container,muteAlertOnChange);
|
||
|
if (!muteAlertOnChange) {
|
||
|
|
||
|
//first try to call a function eventually defined on the page
|
||
|
if (typeof(managePageUnload) == "function")
|
||
|
managePageUnload();
|
||
|
|
||
|
container=container||$("body");
|
||
|
var inps= $("[alertonchange=true]",container).find("[oldValue=1]");
|
||
|
for (var j = 0; j < inps.length; j++) {
|
||
|
var anInput = inps.eq(j);
|
||
|
//console.debug(j,anInput,anInput.isValueChanged())
|
||
|
var oldValue = anInput.getOldValue() + "";
|
||
|
if (!('true' == '' + anInput.attr('excludeFromAlert'))) {
|
||
|
if (anInput.attr("maleficoTiny")) {
|
||
|
if (tinymce.EditorManager.get(anInput.prop("id")).isDirty()) {
|
||
|
return i18n.FORM_IS_CHANGED + " \"" + anInput.prop("name") + "\"";
|
||
|
}
|
||
|
|
||
|
} else if (anInput.isValueChanged()) {
|
||
|
var inputLabel = $("label[for='" + anInput.prop("id") + "']").text(); //use label element
|
||
|
inputLabel = inputLabel ? inputLabel : anInput.prop("name");
|
||
|
return i18n.FORM_IS_CHANGED + " \"" + inputLabel + "\"";
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return undefined;
|
||
|
}
|
||
|
|
||
|
function canILeave(){
|
||
|
var ret = window.onbeforeunload();
|
||
|
if (typeof(ret)!="undefined" && !confirm(ret+" \n"+i18n.PROCEED))
|
||
|
return false;
|
||
|
else
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
// ---------------------------------- oldvalues management
|
||
|
// update all values selected
|
||
|
jQuery.fn.updateOldValue = function () {
|
||
|
this.each(function () {
|
||
|
var el = $(this);
|
||
|
var val=(el.is(":checkbox,:radio")?el.prop("checked"):el.val())+"";
|
||
|
el.data("_oldvalue", val);
|
||
|
});
|
||
|
return this;
|
||
|
};
|
||
|
|
||
|
// return true if at least one element has changed
|
||
|
jQuery.fn.isValueChanged = function () {
|
||
|
var ret = false;
|
||
|
this.each(function () {
|
||
|
var el = $(this);
|
||
|
var val=(el.is(":checkbox,:radio")?el.prop("checked"):el.val())+"";
|
||
|
if (val != el.data("_oldvalue") + "") {
|
||
|
//console.debug("io sono diverso "+el.prop("id")+ " :"+el.val()+" != "+el.data("_oldvalue"));
|
||
|
ret = true;
|
||
|
return false;
|
||
|
}
|
||
|
});
|
||
|
return ret;
|
||
|
};
|
||
|
|
||
|
jQuery.fn.getOldValue = function () {
|
||
|
return $(this).data("_oldvalue");
|
||
|
};
|
||
|
|
||
|
jQuery.fn.fillJsonWithInputValues = function (jsonObject) {
|
||
|
var inputs = this.find(":input");
|
||
|
$.each(inputs.serializeArray(),function(){
|
||
|
if (this.name) {
|
||
|
jsonObject[this.name] = this.value;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
inputs.filter(":checkbox[name]").each(function () {
|
||
|
var el = $(this);
|
||
|
jsonObject[el.attr("name")] = el.is(":checked") ? "yes" : "no";
|
||
|
|
||
|
})
|
||
|
|
||
|
return this;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
function enlargeTextArea(immediate) {
|
||
|
//console.debug("enlargeTextArea",immediate);
|
||
|
var el = $(this);
|
||
|
|
||
|
var delay=immediate===true?1:300;
|
||
|
el.stopTime("taResizeApply");
|
||
|
el.oneTime(delay,"taResizeApply",function(){
|
||
|
|
||
|
var miH = el.is("[minHeight]") ? parseInt(el.attr("minHeight")) : 30;
|
||
|
var maH = el.is("[maxHeight]") ? parseInt(el.attr("maxHeight")) : 400;
|
||
|
var inc = el.is("[lineHeight]") ? parseInt(el.attr("lineHeight")) : 30;
|
||
|
|
||
|
//si copiano nel css per sicurezza
|
||
|
el.css({maxHeight:maH,minHeight:miH});
|
||
|
|
||
|
var domEl = el.get(0);
|
||
|
var pad = el.outerHeight()-el.height();
|
||
|
//devo allargare
|
||
|
if (domEl.scrollHeight>el.outerHeight() && el.outerHeight()<maH){
|
||
|
var nh=domEl.scrollHeight-pad + inc;
|
||
|
nh=nh>maH-pad?maH-pad:nh;
|
||
|
el.height(nh);
|
||
|
} else if (el.height()>miH){
|
||
|
//devo stringere
|
||
|
el.height(el.height()-inc);
|
||
|
|
||
|
while(el.outerHeight()-domEl.scrollHeight > 0 && el.height()>miH){
|
||
|
el.height(el.height()-inc);
|
||
|
}
|
||
|
var newH=domEl.scrollHeight-pad +inc;
|
||
|
//newH=newH<minH?minH:newH;
|
||
|
el.height(newH);
|
||
|
|
||
|
}
|
||
|
el.stopTime("winResize");
|
||
|
});
|
||
|
|
||
|
}
|