/*
// OPDS basic gestion (only add entities and relations, not modify)
// Version: 0.1
// Pierre FAUQUE, <pierre@fauque.net>
// Script: 2014, Script->Class: 2019, Gestion: may 2020
// Encoding: UTF-8
// Text editor: GNU/Linux Debian Vi
// File: function.js (v0.1)
// Role: General javascript functions (library)
*/
//==================================================
// 18 feb 2006. (c) Pierre FAUQUE, pierre@fauque.net
// NB: Fonctions is...() only return TRUE or FALSE.
// Fonctions isValid...() return OK or an error message
// The other functions unnecessary for this application (ex: hours, etc.) have been removed.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Tests if the character passed in parameter (c) is an authorized character (list in parameter)
function isCharInList(c,list) {
var c,list;
if (list.indexOf(c.toLowerCase()) < 0) { return false; } else { return true; }
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Tests if all the characters of the string passed in parameter (str) are allowed
// Function dependent on isCharInList()
function isStringInList(str,list) {
var str,list,n;
for (n=0; n<str.length; n++) {
if (!isCharInList(str.substring(n,n+1),list)) { return false; }
}
return true;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Tests if the characters passed in parameter correspond to a valid Top Level Domain (TDL)
// Possible to add TLD
function isTLD(tld) {
var tld,domains;
domains = "com|net|int|org|edu|mil|gov|af|al|dz|as|ad|ao|ai|aq|ag|ar|am|aw|ac|au|at|"
+ "az|bh|bd|bb|by|be|bz|bj|bm|bt|bo|ba|bw|bv|br|io|bn|bg|bf|bi|gg|je|kh|cm|ca|"
+ "cv|ky|td|cl|cn|cx|cc|co|km|cg|ck|cr|ci|hr|cf|cu|cy|cz|dk|dj|dm|do|tp|ec|eg|"
+ "sv|gq|er|ee|et|fk|fo|fj|fi|gf|pf|tf|fr|fx|ga|gm|ge|de|gh|gi|gr|gl|gd|gp|gu|"
+ "gt|gn|gw|gy|ht|hm|hn|hk|hu|is|in|id|ir|iq|ie|im|il|it|jm|jp|jo|kz|ke|ki|kp|"
+ "kr|kw|kg|la|lv|lb|ls|lr|ly|li|lt|lu|mo|mk|mg|mw|my|mv|ml|mt|mh|mq|mr|mu|yt|"
+ "mx|fm|md|mc|mn|ms|ma|mz|mm|mp|na|nr|np|an|nl|nc|nz|ni|ne|ng|nu|nf|no|om|pk|"
+ "pw|pa|pg|py|pe|ph|pn|pl|pt|pr|qa|re|ro|ru|rw|gs|lc|ws|sm|st|sa|sn|sc|sl|sg|"
+ "sk|si|sb|so|za|es|lk|sh|kn|pm|vc|sd|sr|sj|sz|se|ch|sy|tw|tj|tz|th|bs|tg|tk|"
+ "to|tt|tn|tr|tm|tc|tv|um|ug|ua|uk|us|uy|ae|uz|vu|va|ve|vn|vg|vi|wf|eh|ye|yu|"
+ "zr|zm|zw|eu|"
+ "biz|info|aero";
if (domains.indexOf(tld.toLowerCase()) < 0) { return false; } else { return true; }
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Tests the format of an email address.
// Function dependent on isTLD()
// Login not null, must contain @ in the address, a . in the domain (>5 chars), a valid TLD
function isEmail(address) {
var address,parts,domains;
if (address.indexOf("@") <= 0) { return false; }
parts = address.split("@");
if (parts[0].length == 0) { return false; }
if (parts[1].length < 5) { return false; }
if (parts[1].indexOf(".") <= 0) { return false; }
domains = parts[1].split(".");
if (!isTLD(domains[domains.length-1])) { return false; }
return true;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Tests the format of a date (YYYY-MM-DD, MySQL Format).
function isDate(date) {
var date, reg = new RegExp("^[0-9]{4}[-]{1}[0-9]{2}[-]{1}[0-9]{2}$","g");
if(reg.test(date)) { return true; } else { return false; }
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Test the validity of a date (YYYY-MM-DD).
// Days and months set to 0 are possible, if unknown (JB Poquelin born on 1622-01-00, day=?)
// Function dependent on isDate()
function isValidDate(date) {
var date,tab;
if(isDate(date)) {
tab=date.split('-');
if((tab[0]*1)<0) { return "No year before Jesus Christ"; }
if((tab[1]*1)<0 || (tab[1]*1)>12) { return "Incorrect month"; }
if((tab[2]*1)<0 || (tab[2]*1)>31) { return "Incorrect day"; }
return "OK";
}
return "Incorrect date format";
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Tests the validity of a text field (length and characters allowed)
// Function dependent on isStringInList()
function isValidText(champ,chars,li,ls) {
var champ,chars,li,ls,lg,msg;
lg = champ.length;
if(li || ls) {
if(lg < li) { msg = "Input too short:\nMinimum : "+li; return msg; }
if(lg > ls) { msg = "Input too long:\nMaximum : "+ls; return msg; }
}
if(!isStringInList(champ,chars)) {
pos = " (pos: "+whereIsBadChar(champ,chars)+")";
msg = "Forbidden characters !"+pos; return msg;
}
return "OK";
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Removes leading and trailing spaces
function trim(myString) {
return myString.replace(/^\s+/g,'').replace(/\s+$/g,'');
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 16/05/2020. Remove accents from a string (to capitalize)
function noaccent(string) {
var string;
var accentsA = new RegExp('[???]', 'gi');
var accentsE = new RegExp('[????]', 'gi');
var accentsI = new RegExp('[???]', 'gi');
var accentsO = new RegExp('[???]', 'gi');
var accentsU = new RegExp('[???]', 'gi');
var accentsY = new RegExp('[?]', 'gi');
var accentsC = new RegExp('[?]', 'gi');
string = string.replace(accentsA, 'a');
string = string.replace(accentsE, 'e');
string = string.replace(accentsI, 'i');
string = string.replace(accentsO, 'o');
string = string.replace(accentsU, 'u');
string = string.replace(accentsY, 'y');
string = string.replace(accentsC, 'c');
return string;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 16/05/2020. Return the position of the forbidden character or -1 if no bad char
// Function dependent on isCharInList()
function whereIsBadChar(str,list) {
var str,list,n;
for (n=0; n<str.length; n++) {
if (!isCharInList(str.substring(n,n+1),list)) { return n; }
}
return -1;
}
//==========================================================================================
// Various variables
var ascii = "abcdefghijklmnopqrstuvwxyz";
var letters = "abcdefghijklmnopqrstuvwxyz????????????";
var digits = "0123456789";
|