@naimi/alib
Version:
571 lines (504 loc) • 17.9 kB
JavaScript
//!--- Ali ---
get_fn = function(fn) {
try {
var fn_path = fn.split("/").slice(0, -1).join("/");
if (fn_path == "") fn_path = fn.split("\\").slice(0, -1).join("\\"); //split to array & remove last element
if (fn_path == "") fn_path = ".\\";
if (jscript) {
return {
// example: c:\temp\naimi.txt
f: fs.GetAbsolutePathName(fn), // c:\temp\naimi.txt
// fn : fs.GetFile(fn), // DNW
l3ch: fs.GetBaseName(fn).slice(-3), // imi
n: fs.GetBaseName(fn), // naimi
nx: fs.GetFileName(fn), // naimi.txt
p: fn_path, // c:\temp
// folder : fs.GetFolder(fn), // DNW
pr: fs.GetParentFolderName(fn), // c:\temp
pn: fs.GetParentFolderName(fn) + "\\" + fs.GetBaseName(fn), // c:\temp\naimi
x: fs.GetExtensionName(fn) // txt
};
} else {
path=require('path');
return {
n: (fn.split('\\').pop().split('/').pop().split('.'))[0],
p: path.dirname(fn)
}
}
} catch (e) {
console.log("ERROR " + e.number + ": " + e.description + " - processing file/folder names (" + fn + ")\n");
return -1;
}
}
//!--- make a copy of an object
read_json = function(file_name) {
console.log("read_json");
try {
console.log(file_name);
if (typeof js_engine != 'undefined') //! if (js_engine) //js_engine = 0: node, 1: JScript
str = fs.OpenTextFile(file_name, 1).ReadAll();
else
str = require('fs').readFileSync(file_name, 'utf8');
return JSON.parse(str);
} catch (e) {
console.log("ERROR " + e.number + ": " + e.description + " - while loading alib.jse (" + file_name + ")\n");
return -1;
}
}
//!--- make a copy of an object
clone_obj = function(obj) {
return JSON.parse(JSON.stringify(obj));
}
//!--- remove all functions, properties, arrays, ...
clean_obj = function(obj_ref) {
var obj = JSON.parse(JSON.stringify(obj_ref));
for (var prop in obj) {
//! remove arrays
if (Array.isArray(obj[prop])) {
delete(obj[prop])
}
if (typeof(obj[prop] != "string")) {
delete(obj[prop])
}
typeof(obj[prop] != "string")
}
}
GetCurrentDate = function() {
var dt = new Date();
return "Now: " + format_dt(dt);
}
getFileDate = function(file_name) {
var f = fs.GetFile(file_name);
var dt = new Date(f.DateLastModified);
return (file_name + " was last modified on: " + format_dt(dt));
}
jalali = function(dt) {
// var dt = (item.imgDate.getFullYear() < 1900) ? item.modifiedDate : item.imgDate;
var dt_g = dt.getFullYear() + "-" + ("0" + (dt.getMonth() + 1)).slice(-2) + "-" + ("0" + dt.getDate()).slice(-2);
dt_g = dt_g + " " + ("0" + dt.getHours()).slice(-2) + "-" + ("0" + dt.getMinutes()).slice(-2) + "-" + ("0" + dt.getSeconds()).slice(-2);
//var alreadyRenYr = parseInt(item.name.substr(0, 4));
//var alreadyRen = (alreadyRenYr > 1950 & alreadyRenYr < 2300);
//! Jalali Cal
var gy = dt.getFullYear();
var gm = dt.getMonth() + 1;
var gd = dt.getDate();
var g_d_m, jy, jm, jd, gy2, days;
var g_d_m = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
var jy, jm, jd = 0;
if (gy > 1600) {
jy = 979;
gy -= 1600;
} else {
jy = 0;
gy -= 621;
}
var gy2 = (gm > 2) ? (gy + 1) : gy;
var days = (365 * gy) + (parseInt((gy2 + 3) / 4)) - (parseInt((gy2 + 99) / 100)) + (parseInt((gy2 + 399) / 400)) - 80 + gd + g_d_m[gm - 1];
jy += 33 * (parseInt(days / 12053));
days %= 12053;
jy += 4 * (parseInt(days / 1461));
days %= 1461;
if (days > 365) {
jy += parseInt((days - 1) / 365);
days = (days - 1) % 365;
}
jm = (days < 186) ? 1 + parseInt(days / 31) : 7 + parseInt((days - 186) / 30);
jd = 1 + ((days < 186) ? (days % 31) : ((days - 186) % 30));
var dt_j = jy + "-" + ("0" + (jm + 1)).slice(-2) + "-" + ("0" + (jd + 1)).slice(-2);
//! Combine Stuff:
//var oldNameStuff = alreadyRen ? item.name.substr(33, 400) : item.name;
var str = dt_g + " (" + dt_j + ")";
//str += " " + oldNameStuff ;
return str;
}
Date.prototype.dt = function() {
yyyy = this.getFullYear();
mm = this.getMonth() + 1; //! getMonth() is zero-based
mm = (mm > 9 ? '' : '0') + mm;
dd = this.getDate();
dd = (dd > 9 ? '' : '0') + dd;
d = new Date();
hh = addZero(d.getHours());
mn = addZero(d.getMinutes());
ss = addZero(d.getSeconds());
return yyyy + "-" + mm + "-" + dd + "_" + hh + mn + ss;
};
Date.prototype.yyyymmdd = function() {
yyyy = this.getFullYear();
mm = this.getMonth() + 1; //! getMonth() is zero-based
mm = (mm > 9 ? '' : '0') + mm;
dd = this.getDate();
dd = (dd > 9 ? '' : '0') + dd;
d = new Date();
hh = addZero(d.getHours());
mn = addZero(d.getMinutes());
ss = addZero(d.getSeconds());
return yyyy + mm + dd;
};
format_dt = function(dt) {
dt_formatted_old = dt.getFullYear() + "-" + ("0" + (dt.getMonth() + 1)).slice(-2) + "-" + ("0" + dt.getDate()).slice(-2) + " " +
("0" + dt.getHours()).slice(-2) + "-" + ("0" + dt.getMinutes()).slice(-2) + "-" + ("0" + dt.getSeconds()).slice(-2);
dt_formatted = dt.getFullYear() + "-" + ("0" + (dt.getMonth() + 1)).slice(-2) + "-" + ("0" + dt.getDate()).slice(-2) + "_" +
("0" + dt.getHours()).slice(-2) + "" + ("0" + dt.getMinutes()).slice(-2) + "" + ("0" + dt.getSeconds()).slice(-2);
return dt_formatted;
}
simpleCrypto = {
_charset: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789%",
rotateKey: function(s, amt) {
amt = amt % s.length;
if (amt < 0) {
amt = s.length + amt;
}
if (amt != 0) {
return s.substr(s.length - amt, amt) + s.substr(0, s.length - amt);
} else {
return unescape(s);
}
},
generateKey: function() {
var str = "";
var tar;
tar = new Array();
for (var c = 0; c < this._charset.length; c++) {
tar.push(this._charset.substr(c, 1));
}
for (var c = 0; c < this._charset.length; c++) {
str += tar.splice(Math.round(Math.random() * (tar.length - 1)), 1);
}
return str;
},
encrypt: function(v, _key) {
var str = "";
var key = _key;
if (_key.length > 0 && v.length > 0) {
//v = Server.URLEncode(v);
for (var c = 0; c < v.length; c++) {
var ch = this._charset.indexOf(v.substr(c, 1));
if (ch > -1) {
str += key.substr(ch, 1);
key = this.rotateKey(key, v.charCodeAt(c));
}
}
return str;
} else {
return "";
}
},
decrypt: function(v, _key) {
var str = "";
var key = this._charset;
if (_key.length > 0 && v.length > 0) {
for (var c = 0; c < v.length; c++) {
var ch = _key.indexOf(v.substr(c, 1));
if (ch > -1) {
str += key.substr(ch, 1);
key = this.rotateKey(key, -key.charCodeAt(ch));
}
}
return str;
} else {
return "";
}
}
}
Base64 = {
// private property
_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
// public method for encoding
encode: function(input) {
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
input = Base64._utf8_encode(input);
while (i < input.length) {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output +
this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
}
return output;
},
// public method for decoding
decode: function(input) {
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (i < input.length) {
enc1 = this._keyStr.indexOf(input.charAt(i++));
enc2 = this._keyStr.indexOf(input.charAt(i++));
enc3 = this._keyStr.indexOf(input.charAt(i++));
enc4 = this._keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
}
output = Base64._utf8_decode(output);
return output;
},
// private method for UTF-8 encoding
_utf8_encode: function(string) {
string = string.replace(/\r\n/g, "\n");
var utftext = "";
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) {
utftext += String.fromCharCode(c);
} else if ((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
} else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
}
return utftext;
},
// private method for UTF-8 decoding
_utf8_decode: function(utftext) {
var string = "";
var i = 0;
var c = c1 = c2 = 0;
while (i < utftext.length) {
c = utftext.charCodeAt(i);
if (c < 128) {
string += String.fromCharCode(c);
i++;
} else if ((c > 191) && (c < 224)) {
c2 = utftext.charCodeAt(i + 1);
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
i += 2;
} else {
c2 = utftext.charCodeAt(i + 1);
c3 = utftext.charCodeAt(i + 2);
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
i += 3;
}
}
return string;
}
}
MD5 = function(string) {
function RotateLeft(lValue, iShiftBits) {
return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
}
function AddUnsigned(lX, lY) {
var lX4, lY4, lX8, lY8, lResult;
lX8 = (lX & 0x80000000);
lY8 = (lY & 0x80000000);
lX4 = (lX & 0x40000000);
lY4 = (lY & 0x40000000);
lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
if (lX4 & lY4) {
return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
}
if (lX4 | lY4) {
if (lResult & 0x40000000) {
return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
} else {
return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
}
} else {
return (lResult ^ lX8 ^ lY8);
}
}
function F(x, y, z) {
return (x & y) | ((~x) & z);
}
function G(x, y, z) {
return (x & z) | (y & (~z));
}
function H(x, y, z) {
return (x ^ y ^ z);
}
function I(x, y, z) {
return (y ^ (x | (~z)));
}
function FF(a, b, c, d, x, s, ac) {
a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
return AddUnsigned(RotateLeft(a, s), b);
};
function GG(a, b, c, d, x, s, ac) {
a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
return AddUnsigned(RotateLeft(a, s), b);
};
function HH(a, b, c, d, x, s, ac) {
a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
return AddUnsigned(RotateLeft(a, s), b);
};
function II(a, b, c, d, x, s, ac) {
a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
return AddUnsigned(RotateLeft(a, s), b);
};
function ConvertToWordArray(string) {
var lWordCount;
var lMessageLength = string.length;
var lNumberOfWords_temp1 = lMessageLength + 8;
var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;
var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;
var lWordArray = Array(lNumberOfWords - 1);
var lBytePosition = 0;
var lByteCount = 0;
while (lByteCount < lMessageLength) {
lWordCount = (lByteCount - (lByteCount % 4)) / 4;
lBytePosition = (lByteCount % 4) * 8;
lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition));
lByteCount++;
}
lWordCount = (lByteCount - (lByteCount % 4)) / 4;
lBytePosition = (lByteCount % 4) * 8;
lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
return lWordArray;
};
function WordToHex(lValue) {
var WordToHexValue = "",
WordToHexValue_temp = "",
lByte, lCount;
for (lCount = 0; lCount <= 3; lCount++) {
lByte = (lValue >>> (lCount * 8)) & 255;
WordToHexValue_temp = "0" + lByte.toString(16);
WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2);
}
return WordToHexValue;
};
function Utf8Encode(string) {
string = string.replace(/\r\n/g, "\n");
var utftext = "";
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) {
utftext += String.fromCharCode(c);
} else if ((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
} else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
}
return utftext;
};
var x = Array();
var k, AA, BB, CC, DD, a, b, c, d;
var S11 = 7,
S12 = 12,
S13 = 17,
S14 = 22;
var S21 = 5,
S22 = 9,
S23 = 14,
S24 = 20;
var S31 = 4,
S32 = 11,
S33 = 16,
S34 = 23;
var S41 = 6,
S42 = 10,
S43 = 15,
S44 = 21;
string = Utf8Encode(string);
x = ConvertToWordArray(string);
a = 0x67452301;
b = 0xEFCDAB89;
c = 0x98BADCFE;
d = 0x10325476;
for (k = 0; k < x.length; k += 16) {
AA = a;
BB = b;
CC = c;
DD = d;
a = FF(a, b, c, d, x[k + 0], S11, 0xD76AA478);
d = FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756);
c = FF(c, d, a, b, x[k + 2], S13, 0x242070DB);
b = FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE);
a = FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF);
d = FF(d, a, b, c, x[k + 5], S12, 0x4787C62A);
c = FF(c, d, a, b, x[k + 6], S13, 0xA8304613);
b = FF(b, c, d, a, x[k + 7], S14, 0xFD469501);
a = FF(a, b, c, d, x[k + 8], S11, 0x698098D8);
d = FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF);
c = FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1);
b = FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE);
a = FF(a, b, c, d, x[k + 12], S11, 0x6B901122);
d = FF(d, a, b, c, x[k + 13], S12, 0xFD987193);
c = FF(c, d, a, b, x[k + 14], S13, 0xA679438E);
b = FF(b, c, d, a, x[k + 15], S14, 0x49B40821);
a = GG(a, b, c, d, x[k + 1], S21, 0xF61E2562);
d = GG(d, a, b, c, x[k + 6], S22, 0xC040B340);
c = GG(c, d, a, b, x[k + 11], S23, 0x265E5A51);
b = GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA);
a = GG(a, b, c, d, x[k + 5], S21, 0xD62F105D);
d = GG(d, a, b, c, x[k + 10], S22, 0x2441453);
c = GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681);
b = GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8);
a = GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6);
d = GG(d, a, b, c, x[k + 14], S22, 0xC33707D6);
c = GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87);
b = GG(b, c, d, a, x[k + 8], S24, 0x455A14ED);
a = GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905);
d = GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8);
c = GG(c, d, a, b, x[k + 7], S23, 0x676F02D9);
b = GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A);
a = HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942);
d = HH(d, a, b, c, x[k + 8], S32, 0x8771F681);
c = HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122);
b = HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C);
a = HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44);
d = HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9);
c = HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60);
b = HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70);
a = HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6);
d = HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA);
c = HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085);
b = HH(b, c, d, a, x[k + 6], S34, 0x4881D05);
a = HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039);
d = HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5);
c = HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8);
b = HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665);
a = II(a, b, c, d, x[k + 0], S41, 0xF4292244);
d = II(d, a, b, c, x[k + 7], S42, 0x432AFF97);
c = II(c, d, a, b, x[k + 14], S43, 0xAB9423A7);
b = II(b, c, d, a, x[k + 5], S44, 0xFC93A039);
a = II(a, b, c, d, x[k + 12], S41, 0x655B59C3);
d = II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92);
c = II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D);
b = II(b, c, d, a, x[k + 1], S44, 0x85845DD1);
a = II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F);
d = II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0);
c = II(c, d, a, b, x[k + 6], S43, 0xA3014314);
b = II(b, c, d, a, x[k + 13], S44, 0x4E0811A1);
a = II(a, b, c, d, x[k + 4], S41, 0xF7537E82);
d = II(d, a, b, c, x[k + 11], S42, 0xBD3AF235);
c = II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB);
b = II(b, c, d, a, x[k + 9], S44, 0xEB86D391);
a = AddUnsigned(a, AA);
b = AddUnsigned(b, BB);
c = AddUnsigned(c, CC);
d = AddUnsigned(d, DD);
}
var temp = WordToHex(a) + WordToHex(b) + WordToHex(c) + WordToHex(d);
return temp.toLowerCase();
}