A bunch of new updates from icehrm pro

This commit is contained in:
Thilina Hasantha
2019-02-03 13:55:39 +01:00
parent a75325fb52
commit 96b0ad8496
598 changed files with 74156 additions and 29979 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1,503 +0,0 @@
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* AES implementation in JavaScript (c) Chris Veness 2005-2014 / MIT Licence */
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* jshint node:true *//* global define */
'use strict';
/**
* AES (Rijndael cipher) encryption routines,
*
* Reference implementation of FIPS-197 http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf.
*
* @namespace
*/
var Aes = {};
/**
* AES Cipher function: encrypt 'input' state with Rijndael algorithm [§5.1];
* applies Nr rounds (10/12/14) using key schedule w for 'add round key' stage.
*
* @param {number[]} input - 16-byte (128-bit) input state array.
* @param {number[][]} w - Key schedule as 2D byte-array (Nr+1 x Nb bytes).
* @returns {number[]} Encrypted output state array.
*/
Aes.cipher = function(input, w) {
var Nb = 4; // block size (in words): no of columns in state (fixed at 4 for AES)
var Nr = w.length/Nb - 1; // no of rounds: 10/12/14 for 128/192/256-bit keys
var state = [[],[],[],[]]; // initialise 4xNb byte-array 'state' with input [§3.4]
for (var i=0; i<4*Nb; i++) state[i%4][Math.floor(i/4)] = input[i];
state = Aes.addRoundKey(state, w, 0, Nb);
for (var round=1; round<Nr; round++) {
state = Aes.subBytes(state, Nb);
state = Aes.shiftRows(state, Nb);
state = Aes.mixColumns(state, Nb);
state = Aes.addRoundKey(state, w, round, Nb);
}
state = Aes.subBytes(state, Nb);
state = Aes.shiftRows(state, Nb);
state = Aes.addRoundKey(state, w, Nr, Nb);
var output = new Array(4*Nb); // convert state to 1-d array before returning [§3.4]
for (var i=0; i<4*Nb; i++) output[i] = state[i%4][Math.floor(i/4)];
return output;
};
/**
* Perform key expansion to generate a key schedule from a cipher key [§5.2].
*
* @param {number[]} key - Cipher key as 16/24/32-byte array.
* @returns {number[][]} Expanded key schedule as 2D byte-array (Nr+1 x Nb bytes).
*/
Aes.keyExpansion = function(key) {
var Nb = 4; // block size (in words): no of columns in state (fixed at 4 for AES)
var Nk = key.length/4; // key length (in words): 4/6/8 for 128/192/256-bit keys
var Nr = Nk + 6; // no of rounds: 10/12/14 for 128/192/256-bit keys
var w = new Array(Nb*(Nr+1));
var temp = new Array(4);
// initialise first Nk words of expanded key with cipher key
for (var i=0; i<Nk; i++) {
var r = [key[4*i], key[4*i+1], key[4*i+2], key[4*i+3]];
w[i] = r;
}
// expand the key into the remainder of the schedule
for (var i=Nk; i<(Nb*(Nr+1)); i++) {
w[i] = new Array(4);
for (var t=0; t<4; t++) temp[t] = w[i-1][t];
// each Nk'th word has extra transformation
if (i % Nk == 0) {
temp = Aes.subWord(Aes.rotWord(temp));
for (var t=0; t<4; t++) temp[t] ^= Aes.rCon[i/Nk][t];
}
// 256-bit key has subWord applied every 4th word
else if (Nk > 6 && i%Nk == 4) {
temp = Aes.subWord(temp);
}
// xor w[i] with w[i-1] and w[i-Nk]
for (var t=0; t<4; t++) w[i][t] = w[i-Nk][t] ^ temp[t];
}
return w;
};
/**
* Apply SBox to state S [§5.1.1]
* @private
*/
Aes.subBytes = function(s, Nb) {
for (var r=0; r<4; r++) {
for (var c=0; c<Nb; c++) s[r][c] = Aes.sBox[s[r][c]];
}
return s;
};
/**
* Shift row r of state S left by r bytes [§5.1.2]
* @private
*/
Aes.shiftRows = function(s, Nb) {
var t = new Array(4);
for (var r=1; r<4; r++) {
for (var c=0; c<4; c++) t[c] = s[r][(c+r)%Nb]; // shift into temp copy
for (var c=0; c<4; c++) s[r][c] = t[c]; // and copy back
} // note that this will work for Nb=4,5,6, but not 7,8 (always 4 for AES):
return s; // see asmaes.sourceforge.net/rijndael/rijndaelImplementation.pdf
};
/**
* Combine bytes of each col of state S [§5.1.3]
* @private
*/
Aes.mixColumns = function(s, Nb) {
for (var c=0; c<4; c++) {
var a = new Array(4); // 'a' is a copy of the current column from 's'
var b = new Array(4); // 'b' is a•{02} in GF(2^8)
for (var i=0; i<4; i++) {
a[i] = s[i][c];
b[i] = s[i][c]&0x80 ? s[i][c]<<1 ^ 0x011b : s[i][c]<<1;
}
// a[n] ^ b[n] is a•{03} in GF(2^8)
s[0][c] = b[0] ^ a[1] ^ b[1] ^ a[2] ^ a[3]; // {02}•a0 + {03}•a1 + a2 + a3
s[1][c] = a[0] ^ b[1] ^ a[2] ^ b[2] ^ a[3]; // a0 • {02}•a1 + {03}•a2 + a3
s[2][c] = a[0] ^ a[1] ^ b[2] ^ a[3] ^ b[3]; // a0 + a1 + {02}•a2 + {03}•a3
s[3][c] = a[0] ^ b[0] ^ a[1] ^ a[2] ^ b[3]; // {03}•a0 + a1 + a2 + {02}•a3
}
return s;
};
/**
* Xor Round Key into state S [§5.1.4]
* @private
*/
Aes.addRoundKey = function(state, w, rnd, Nb) {
for (var r=0; r<4; r++) {
for (var c=0; c<Nb; c++) state[r][c] ^= w[rnd*4+c][r];
}
return state;
};
/**
* Apply SBox to 4-byte word w
* @private
*/
Aes.subWord = function(w) {
for (var i=0; i<4; i++) w[i] = Aes.sBox[w[i]];
return w;
};
/**
* Rotate 4-byte word w left by one byte
* @private
*/
Aes.rotWord = function(w) {
var tmp = w[0];
for (var i=0; i<3; i++) w[i] = w[i+1];
w[3] = tmp;
return w;
};
// sBox is pre-computed multiplicative inverse in GF(2^8) used in subBytes and keyExpansion [§5.1.1]
Aes.sBox = [0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5,0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76,
0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0,0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0,
0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc,0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15,
0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a,0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75,
0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0,0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84,
0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b,0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf,
0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85,0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8,
0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5,0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2,
0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17,0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73,
0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88,0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb,
0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c,0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79,
0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9,0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08,
0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6,0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a,
0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e,0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e,
0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94,0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf,
0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68,0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16];
// rCon is Round Constant used for the Key Expansion [1st col is 2^(r-1) in GF(2^8)] [§5.2]
Aes.rCon = [ [0x00, 0x00, 0x00, 0x00],
[0x01, 0x00, 0x00, 0x00],
[0x02, 0x00, 0x00, 0x00],
[0x04, 0x00, 0x00, 0x00],
[0x08, 0x00, 0x00, 0x00],
[0x10, 0x00, 0x00, 0x00],
[0x20, 0x00, 0x00, 0x00],
[0x40, 0x00, 0x00, 0x00],
[0x80, 0x00, 0x00, 0x00],
[0x1b, 0x00, 0x00, 0x00],
[0x36, 0x00, 0x00, 0x00] ];
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
if (typeof module != 'undefined' && module.exports) module.exports = Aes; // CommonJs export
if (typeof define == 'function' && define.amd) define([], function() { return Aes; }); // AMD
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* AES Counter-mode implementation in JavaScript (c) Chris Veness 2005-2014 / MIT Licence */
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* jshint node:true *//* global define, escape, unescape, btoa, atob */
'use strict';
if (typeof module!='undefined' && module.exports) var Aes = require('./aes'); // CommonJS (Node.js)
/**
* Aes.Ctr: Counter-mode (CTR) wrapper for AES.
*
* This encrypts a Unicode string to produces a base64 ciphertext using 128/192/256-bit AES,
* and the converse to decrypt an encrypted ciphertext.
*
* See http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf
*
* @augments Aes
*/
Aes.Ctr = {};
/**
* Encrypt a text using AES encryption in Counter mode of operation.
*
* Unicode multi-byte character safe
*
* @param {string} plaintext - Source text to be encrypted.
* @param {string} password - The password to use to generate a key.
* @param {number} nBits - Number of bits to be used in the key; 128 / 192 / 256.
* @returns {string} Encrypted text.
*
* @example
* var encr = Aes.Ctr.encrypt('big secret', 'pāşšŵōřđ', 256); // encr: 'lwGl66VVwVObKIr6of8HVqJr'
*/
Aes.Ctr.encrypt = function(plaintext, password, nBits) {
var blockSize = 16; // block size fixed at 16 bytes / 128 bits (Nb=4) for AES
if (!(nBits==128 || nBits==192 || nBits==256)) return ''; // standard allows 128/192/256 bit keys
plaintext = String(plaintext).utf8Encode();
password = String(password).utf8Encode();
// use AES itself to encrypt password to get cipher key (using plain password as source for key
// expansion) - gives us well encrypted key (though hashed key might be preferred for prod'n use)
var nBytes = nBits/8; // no bytes in key (16/24/32)
var pwBytes = new Array(nBytes);
for (var i=0; i<nBytes; i++) { // use 1st 16/24/32 chars of password for key
pwBytes[i] = isNaN(password.charCodeAt(i)) ? 0 : password.charCodeAt(i);
}
var key = Aes.cipher(pwBytes, Aes.keyExpansion(pwBytes)); // gives us 16-byte key
key = key.concat(key.slice(0, nBytes-16)); // expand key to 16/24/32 bytes long
// initialise 1st 8 bytes of counter block with nonce (NIST SP800-38A §B.2): [0-1] = millisec,
// [2-3] = random, [4-7] = seconds, together giving full sub-millisec uniqueness up to Feb 2106
var counterBlock = new Array(blockSize);
var nonce = (new Date()).getTime(); // timestamp: milliseconds since 1-Jan-1970
var nonceMs = nonce%1000;
var nonceSec = Math.floor(nonce/1000);
var nonceRnd = Math.floor(Math.random()*0xffff);
// for debugging: nonce = nonceMs = nonceSec = nonceRnd = 0;
for (var i=0; i<2; i++) counterBlock[i] = (nonceMs >>> i*8) & 0xff;
for (var i=0; i<2; i++) counterBlock[i+2] = (nonceRnd >>> i*8) & 0xff;
for (var i=0; i<4; i++) counterBlock[i+4] = (nonceSec >>> i*8) & 0xff;
// and convert it to a string to go on the front of the ciphertext
var ctrTxt = '';
for (var i=0; i<8; i++) ctrTxt += String.fromCharCode(counterBlock[i]);
// generate key schedule - an expansion of the key into distinct Key Rounds for each round
var keySchedule = Aes.keyExpansion(key);
var blockCount = Math.ceil(plaintext.length/blockSize);
var ciphertxt = new Array(blockCount); // ciphertext as array of strings
for (var b=0; b<blockCount; b++) {
// set counter (block #) in last 8 bytes of counter block (leaving nonce in 1st 8 bytes)
// done in two stages for 32-bit ops: using two words allows us to go past 2^32 blocks (68GB)
for (var c=0; c<4; c++) counterBlock[15-c] = (b >>> c*8) & 0xff;
for (var c=0; c<4; c++) counterBlock[15-c-4] = (b/0x100000000 >>> c*8);
var cipherCntr = Aes.cipher(counterBlock, keySchedule); // -- encrypt counter block --
// block size is reduced on final block
var blockLength = b<blockCount-1 ? blockSize : (plaintext.length-1)%blockSize+1;
var cipherChar = new Array(blockLength);
for (var i=0; i<blockLength; i++) { // -- xor plaintext with ciphered counter char-by-char --
cipherChar[i] = cipherCntr[i] ^ plaintext.charCodeAt(b*blockSize+i);
cipherChar[i] = String.fromCharCode(cipherChar[i]);
}
ciphertxt[b] = cipherChar.join('');
}
// use Array.join() for better performance than repeated string appends
var ciphertext = ctrTxt + ciphertxt.join('');
ciphertext = ciphertext.base64Encode();
return ciphertext;
};
/**
* Decrypt a text encrypted by AES in counter mode of operation
*
* @param {string} ciphertext - Source text to be encrypted.
* @param {string} password - Password to use to generate a key.
* @param {number} nBits - Number of bits to be used in the key; 128 / 192 / 256.
* @returns {string} Decrypted text
*
* @example
* var decr = Aes.Ctr.encrypt('lwGl66VVwVObKIr6of8HVqJr', 'pāşšŵōřđ', 256); // decr: 'big secret'
*/
Aes.Ctr.decrypt = function(ciphertext, password, nBits) {
var blockSize = 16; // block size fixed at 16 bytes / 128 bits (Nb=4) for AES
if (!(nBits==128 || nBits==192 || nBits==256)) return ''; // standard allows 128/192/256 bit keys
ciphertext = String(ciphertext).base64Decode();
password = String(password).utf8Encode();
// use AES to encrypt password (mirroring encrypt routine)
var nBytes = nBits/8; // no bytes in key
var pwBytes = new Array(nBytes);
for (var i=0; i<nBytes; i++) {
pwBytes[i] = isNaN(password.charCodeAt(i)) ? 0 : password.charCodeAt(i);
}
var key = Aes.cipher(pwBytes, Aes.keyExpansion(pwBytes));
key = key.concat(key.slice(0, nBytes-16)); // expand key to 16/24/32 bytes long
// recover nonce from 1st 8 bytes of ciphertext
var counterBlock = new Array(8);
var ctrTxt = ciphertext.slice(0, 8);
for (var i=0; i<8; i++) counterBlock[i] = ctrTxt.charCodeAt(i);
// generate key schedule
var keySchedule = Aes.keyExpansion(key);
// separate ciphertext into blocks (skipping past initial 8 bytes)
var nBlocks = Math.ceil((ciphertext.length-8) / blockSize);
var ct = new Array(nBlocks);
for (var b=0; b<nBlocks; b++) ct[b] = ciphertext.slice(8+b*blockSize, 8+b*blockSize+blockSize);
ciphertext = ct; // ciphertext is now array of block-length strings
// plaintext will get generated block-by-block into array of block-length strings
var plaintxt = new Array(ciphertext.length);
for (var b=0; b<nBlocks; b++) {
// set counter (block #) in last 8 bytes of counter block (leaving nonce in 1st 8 bytes)
for (var c=0; c<4; c++) counterBlock[15-c] = ((b) >>> c*8) & 0xff;
for (var c=0; c<4; c++) counterBlock[15-c-4] = (((b+1)/0x100000000-1) >>> c*8) & 0xff;
var cipherCntr = Aes.cipher(counterBlock, keySchedule); // encrypt counter block
var plaintxtByte = new Array(ciphertext[b].length);
for (var i=0; i<ciphertext[b].length; i++) {
// -- xor plaintxt with ciphered counter byte-by-byte --
plaintxtByte[i] = cipherCntr[i] ^ ciphertext[b].charCodeAt(i);
plaintxtByte[i] = String.fromCharCode(plaintxtByte[i]);
}
plaintxt[b] = plaintxtByte.join('');
}
// join array of blocks into single plaintext string
var plaintext = plaintxt.join('');
plaintext = plaintext.utf8Decode(); // decode from UTF8 back to Unicode multi-byte chars
return plaintext;
};
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/** Extend String object with method to encode multi-byte string to utf8
* - monsur.hossa.in/2012/07/20/utf-8-in-javascript.html */
if (typeof String.prototype.utf8Encode == 'undefined') {
String.prototype.utf8Encode = function() {
return unescape( encodeURIComponent( this ) );
};
}
/** Extend String object with method to decode utf8 string to multi-byte */
if (typeof String.prototype.utf8Decode == 'undefined') {
String.prototype.utf8Decode = function() {
try {
return decodeURIComponent( escape( this ) );
} catch (e) {
return this; // invalid UTF-8? return as-is
}
};
}
/** Extend String object with method to encode base64
* - developer.mozilla.org/en-US/docs/Web/API/window.btoa, nodejs.org/api/buffer.html
* note: if btoa()/atob() are not available (eg IE9-), try github.com/davidchambers/Base64.js */
if (typeof String.prototype.base64Encode == 'undefined') {
String.prototype.base64Encode = function() {
if (typeof btoa != 'undefined') return btoa(this); // browser
if (typeof Buffer != 'undefined') return new Buffer(this, 'utf8').toString('base64'); // Node.js
throw new Error('No Base64 Encode');
};
}
/** Extend String object with method to decode base64 */
if (typeof String.prototype.base64Decode == 'undefined') {
String.prototype.base64Decode = function() {
if (typeof atob != 'undefined') return atob(this); // browser
if (typeof Buffer != 'undefined') return new Buffer(this, 'base64').toString('utf8'); // Node.js
throw new Error('No Base64 Decode');
};
}
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
if (typeof module != 'undefined' && module.exports) module.exports = Aes.Ctr; // CommonJs export
if (typeof define == 'function' && define.amd) define(['Aes'], function() { return Aes.Ctr; }); // AMD
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* Encrypt/decrypt files */
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
function encryptFile(file) {
// use FileReader.readAsArrayBuffer to handle binary files
var reader = new FileReader();
reader.readAsArrayBuffer(file);
reader.onload = function(evt) {
$('body').css({'cursor':'wait'});
// Aes.Ctr.encrypt expects a string, but converting binary file directly to string could
// give invalid Unicode sequences, so convert bytestream ArrayBuffer to single-byte chars
var contentBytes = new Uint8Array(reader.result); // ≡ evt.target.result
var contentStr = '';
for (var i=0; i<contentBytes.length; i++) {
contentStr += String.fromCharCode(contentBytes[i]);
}
var password = $('#password-file').val();
var t1 = new Date();
var ciphertext = Aes.Ctr.encrypt(contentStr, password, 256);
var t2 = new Date();
// use Blob to save encrypted file
var blob = new Blob([ciphertext], { type: 'text/plain' });
var filename = file.name+'.encrypted';
saveAs(blob, filename);
$('#encrypt-file-time').html(((t2 - t1)/1000)+'s'); // display time taken
$('body').css({'cursor':'default'});
}
}
function decryptFile(file) {
// use FileReader.ReadAsText to read (base64-encoded) ciphertext file
var reader = new FileReader();
reader.readAsText(file);
reader.onload = function(evt) {
$('body').css({'cursor':'wait'});
var content = reader.result; // ≡ evt.target.result
var password = $('#password-file').val();
var t1 = new Date();
var plaintext = Aes.Ctr.decrypt(content, password, 256);
var t2 = new Date();
// convert single-byte character stream to ArrayBuffer bytestream
var contentBytes = new Uint8Array(plaintext.length);
for (var i=0; i<plaintext.length; i++) {
contentBytes[i] = plaintext.charCodeAt(i);
}
// use Blob to save decrypted file
var blob = new Blob([contentBytes], { type: 'application/octet-stream' });
var filename = file.name.replace(/\.encrypted$/,'')+'.decrypted';
saveAs(blob, filename);
$('#decrypt-file-time').html(((t2 - t1)/1000)+'s'); // display time taken
$('body').css({'cursor':'default'});
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,13 @@
function ConversationsAdapter(endPoint,tab,filter,orderBy) {
this.initAdapter(endPoint,tab,filter,orderBy);
/*
Copyright (c) 2018 [Glacies UG, Berlin, Germany] (http://glacies.de)
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
*/
/* global showUploadDialog */
import AdapterBase from './AdapterBase';
class ConversationsAdapter extends AdapterBase {
constructor(endPoint, tab, filter, orderBy) {
super(endPoint, tab, filter, orderBy);
this.topLimit = 0;
this.bottomLimit = 0;
this.conversations = [];
@@ -10,339 +18,335 @@ function ConversationsAdapter(endPoint,tab,filter,orderBy) {
this.pageSize = 6;
this.currentPage = 1;
this.hasMoreData = true;
this.searchTerm = "";
this.searchTerm = '';
this.searchInput = null;
this.timer = null;
this.timeoutDelay = 0;
this.topLimitUpdated = false;
}
}
ConversationsAdapter.inherits(AdapterBase);
ConversationsAdapter.method('getDataMapping', function() {
getDataMapping() {
return [];
});
}
ConversationsAdapter.method('getHeaders', function() {
getHeaders() {
return [];
});
}
ConversationsAdapter.method('getFormFields', function() {
getFormFields() {
return [];
});
}
ConversationsAdapter.method('addConversation', function() {
var object = this.validateCreateConversation();
addConversation() {
const object = this.validateCreateConversation();
if (!object) {
return false;
return false;
}
object.type = this.type;
object.clienttime = (new Date()).getTimezoneOffset();
var reqJson = JSON.stringify(object);
var callBackData = [];
callBackData['callBackData'] = [];
callBackData['callBackSuccess'] = 'addConversationSuccessCallBack';
callBackData['callBackFail'] = 'addConversationFailCallBack';
const reqJson = JSON.stringify(object);
const callBackData = [];
callBackData.callBackData = [];
callBackData.callBackSuccess = 'addConversationSuccessCallBack';
callBackData.callBackFail = 'addConversationFailCallBack';
this.customAction('addConversation','modules=conversations',reqJson,callBackData);
});
this.customAction('addConversation', 'modules=conversations', reqJson, callBackData);
return true;
}
ConversationsAdapter.method('clearInputs', function() {
clearInputs() {
$('#contentMessage').data('simplemde').value('');
$('#attachment').html(this.gt('Attach File'));
$('#attachment_remove').hide();
$('#attachment_download').hide();
});
}
ConversationsAdapter.method('uploadPostAttachment', function() {
var rand = this.generateRandom(14);
showUploadDialog('attachment_'+rand,'Upload Attachment','Conversation',1,'attachment','html','name','all');
});
uploadPostAttachment() {
const rand = this.generateRandom(14);
showUploadDialog(`attachment_${rand}`, 'Upload Attachment', 'Conversation', 1, 'attachment', 'html', 'name', 'all');
}
ConversationsAdapter.method('setConversationType', function(type) {
setConversationType(type) {
this.type = type;
});
}
ConversationsAdapter.method('addConversationSuccessCallBack', function(callBackData) {
addConversationSuccessCallBack() {
this.clearInputs();
this.getConversations(this.topLimit, this.pageSize, true);
});
}
ConversationsAdapter.method('addConversationFailCallBack', function(callBackData) {
addConversationFailCallBack() {
});
}
ConversationsAdapter.method('deleteConversation', function(id) {
var object = {id: id};
var reqJson = JSON.stringify(object);
var callBackData = [];
callBackData['callBackData'] = [];
callBackData['callBackSuccess'] = 'deleteConversationSuccessCallBack';
callBackData['callBackFail'] = 'deleteConversationFailCallBack';
deleteConversation(id) {
const object = { id };
const reqJson = JSON.stringify(object);
const callBackData = [];
callBackData.callBackData = [];
callBackData.callBackSuccess = 'deleteConversationSuccessCallBack';
callBackData.callBackFail = 'deleteConversationFailCallBack';
this.customAction('deleteConversation','modules=conversations',reqJson,callBackData);
});
this.customAction('deleteConversation', 'modules=conversations', reqJson, callBackData);
}
deleteConversationSuccessCallBack(callBackData) {
$(`#obj_${callBackData}`).fadeOut();
}
ConversationsAdapter.method('deleteConversationSuccessCallBack', function(callBackData) {
$('#obj_'+callBackData).fadeOut();
});
deleteConversationFailCallBack() {
ConversationsAdapter.method('deleteConversationFailCallBack', function(callBackData) {
}
});
ConversationsAdapter.method('toggleConversationSize', function(id) {
$('#obj_'+id).find('.conversation-body').toggleClass('conversation-small');
if ($('#obj_'+id).find('.conversation-body').hasClass('conversation-small')) {
$('#obj_'+id).find('.conversation-expand-label').html(this.gt('Show More'));
toggleConversationSize(id) {
$(`#obj_${id}`).find('.conversation-body').toggleClass('conversation-small');
if ($(`#obj_${id}`).find('.conversation-body').hasClass('conversation-small')) {
$(`#obj_${id}`).find('.conversation-expand-label').html(this.gt('Show More'));
} else {
$('#obj_'+id).find('.conversation-expand-label').html(this.gt('Show Less'));
$(`#obj_${id}`).find('.conversation-expand-label').html(this.gt('Show Less'));
}
});
}
ConversationsAdapter.method('getConversations', function(start, limit, addToTop) {
var reqJson = JSON.stringify({
start: start,
limit: limit,
top: addToTop,
type: this.type
getConversations(start, limit, addToTop) {
const reqJson = JSON.stringify({
start,
limit,
top: addToTop,
type: this.type,
});
var callBackData = [addToTop];
callBackData['callBackData'] = callBackData;
callBackData['callBackSuccess'] = 'getConversationsSuccessCallBack';
callBackData['callBackFail'] = 'getConversationsFailCallBack';
const callBackData = [addToTop];
callBackData.callBackData = callBackData;
callBackData.callBackSuccess = 'getConversationsSuccessCallBack';
callBackData.callBackFail = 'getConversationsFailCallBack';
this.showConversationLoader();
this.customAction('getConversations','modules=conversations',reqJson,callBackData);
});
this.customAction('getConversations', 'modules=conversations', reqJson, callBackData);
}
ConversationsAdapter.method('getConversationsSuccessCallBack', function(addToTop, serverData) {
getConversationsSuccessCallBack(addToTop, serverData) {
this.hideLoader();
var data = [];
if(!addToTop && serverData.length > this.pageSize){
this.hasMoreData = true;
serverData.pop();
this.loadMoreButton.removeAttr('disabled');
this.loadMoreButton.show();
const data = [];
if (!addToTop && serverData.length > this.pageSize) {
this.hasMoreData = true;
serverData.pop();
this.loadMoreButton.removeAttr('disabled');
this.loadMoreButton.show();
} else if (!addToTop) {
this.hasMoreData = false;
this.loadMoreButton.hide();
this.hasMoreData = false;
this.loadMoreButton.hide();
}
if (!addToTop) {
this.scrollToElementBottom(this.container);
this.scrollToElementBottom(this.container);
}
for(var i=0;i<serverData.length;i++){
data.push(this.preProcessTableData(serverData[i]));
for (let i = 0; i < serverData.length; i++) {
data.push(this.preProcessTableData(serverData[i]));
}
this.sourceData = serverData;
this.topLimitUpdated = false;
for(var i=0;i<data.length;i++){
this.renderObject(data[i], addToTop);
if (data[i].timeint < this.bottomLimit || this.bottomLimit === 0) {
this.bottomLimit = data[i].timeint;
}
for (let i = 0; i < data.length; i++) {
this.renderObject(data[i], addToTop);
if (data[i].timeint < this.bottomLimit || this.bottomLimit === 0) {
this.bottomLimit = data[i].timeint;
}
if (data[i].timeint > this.topLimit || this.topLimit === 0) {
this.topLimit = data[i].timeint;
this.topLimitUpdated = true;
}
if (data[i].timeint > this.topLimit || this.topLimit === 0) {
this.topLimit = data[i].timeint;
this.topLimitUpdated = true;
}
}
this.hideConversationLoader();
});
}
ConversationsAdapter.method('getConversationsFailCallBack', function(callBackData) {
getConversationsFailCallBack() {
this.hideLoader();
this.hideConversationLoader();
if (this.timer !== null) {
clearTimeout(this.timer);
this.timer = null;
clearTimeout(this.timer);
this.timer = null;
}
});
}
ConversationsAdapter.method('getObjectHTML', function(object) {
var t = this.getCustomTemplate(this.getTemplateName());
getObjectHTML(object) {
let t = this.getCustomTemplate(this.getTemplateName());
t = t.replace(new RegExp('#_id_#', 'g'), object.id);
t = t.replace(new RegExp('#_message_#', 'g'), object.message);
t = t.replace(new RegExp('#_employeeName_#', 'g'), object.employeeName);
t = t.replace(new RegExp('#_employeeImage_#', 'g'), object.employeeImage);
t = t.replace(new RegExp('#_date_#', 'g'), object.date);
if (object.attachment !== '' && object.attachment !== null && object.attachment !== undefined) {
var at = this.getCustomTemplate('attachment.html');
at = at.replace(new RegExp('#_attachment_#', 'g'), object.attachment);
at = at.replace(new RegExp('#_icon_#', 'g'), this.getIconByFileType(object.file.type));
at = at.replace(new RegExp('#_color_#', 'g'), this.getColorByFileType(object.file.type));
at = at.replace(new RegExp('#_name_#', 'g'), object.file.name);
at = at.replace(new RegExp('#_size_#', 'g'), object.file.size_text);
t = t.replace(new RegExp('#_attachment_#', 'g'), at);
if (object.attachment !== '' && object.attachment !== null && object.attachment !== undefined) {
let at = this.getCustomTemplate('attachment.html');
at = at.replace(new RegExp('#_attachment_#', 'g'), object.attachment);
at = at.replace(new RegExp('#_icon_#', 'g'), this.getIconByFileType(object.file.type));
at = at.replace(new RegExp('#_color_#', 'g'), this.getColorByFileType(object.file.type));
at = at.replace(new RegExp('#_name_#', 'g'), object.file.name);
at = at.replace(new RegExp('#_size_#', 'g'), object.file.size_text);
t = t.replace(new RegExp('#_attachment_#', 'g'), at);
} else {
t = t.replace(new RegExp('#_attachment_#', 'g'), '');
t = t.replace(new RegExp('#_attachment_#', 'g'), '');
}
return t;
}
});
ConversationsAdapter.method('setPageSize', function(pageSize) {
setPageSize(pageSize) {
this.pageSize = pageSize;
});
}
ConversationsAdapter.method('addDomEvents', function(object) {
// eslint-disable-next-line no-unused-vars
addDomEvents(object) {
});
}
ConversationsAdapter.method('getTemplateName', function() {
getTemplateName() {
return 'conversation.html';
});
}
ConversationsAdapter.method('renderObject', function(object, addToTop) {
renderObject(object, addToTop) {
const objDom = this.getObjectDom(object.id);
var objDom = this.getObjectDom(object.id);
var html = this.getObjectHTML(object);
var domObj = $(html);
const html = this.getObjectHTML(object);
const domObj = $(html);
if (objDom !== undefined && objDom !== null) {
objDom.replace(domObj);
if (objDom !== undefined && objDom !== null) {
objDom.replace(domObj);
} else if (addToTop) {
this.container.prepend(domObj);
$('#obj_'+object.id).css('background-color', '#FFF8DC');
$('#obj_'+object.id).fadeIn('slow');
$('#obj_'+object.id).animate({backgroundColor: '#FFF'}, 'slow');
this.container.prepend(domObj);
$(`#obj_${object.id}`).css('background-color', '#FFF8DC');
$(`#obj_${object.id}`).fadeIn('slow');
$(`#obj_${object.id}`).animate({ backgroundColor: '#FFF' }, 'slow');
} else {
this.container.append(domObj);
$('#obj_'+object.id).fadeIn('slow');
this.container.append(domObj);
$(`#obj_${object.id}`).fadeIn('slow');
}
if (domObj.find('.conversation-body').prop('scrollHeight') > 290) {
domObj.find('.conversation-expand').show();
domObj.find('.conversation-expand').show();
}
if (object.actionDelete === 1) {
domObj.find('.delete-button').show();
domObj.find('.delete-button').show();
}
this.addDomEvents(domObj);
});
}
ConversationsAdapter.method('setContainer', function(container) {
setContainer(container) {
this.container = container;
});
}
ConversationsAdapter.method('setLoadMoreButton', function(loadMoreButton) {
var that = this;
setLoadMoreButton(loadMoreButton) {
const that = this;
this.loadMoreButton = loadMoreButton;
this.loadMoreButton.off().on('click',function(){
that.loadMoreButton.attr('disabled','disabled');
that.loadMore([]);
}
);
});
this.loadMoreButton.off().on('click', () => {
that.loadMoreButton.attr('disabled', 'disabled');
that.loadMore([]);
});
}
ConversationsAdapter.method('showLoadError', function(msg) {
$("#"+this.getTableName()+"_error").html(msg);
$("#"+this.getTableName()+"_error").show();
});
showLoadError(msg) {
$(`#${this.getTableName()}_error`).html(msg);
$(`#${this.getTableName()}_error`).show();
}
ConversationsAdapter.method('hideLoadError', function() {
$("#"+this.getTableName()+"_error").hide();
});
hideLoadError() {
$(`#${this.getTableName()}_error`).hide();
}
ConversationsAdapter.method('setSearchBox', function(searchInput) {
var that = this;
setSearchBox(searchInput) {
const that = this;
this.searchInput = searchInput;
this.searchInput.off();
this.searchInput.keydown(function(event){
var val = $(this).val();
if ( event.which == 13 ) {
event.preventDefault();
that.search([]);
}else if(( event.which == 8 || event.which == 46) && val.length == 1 && that.searchTerm != ''){
that.search([]);
}
this.searchInput.keydown(function (event) {
const val = $(this).val();
if (event.which === 13) {
event.preventDefault();
that.search([]);
} else if ((event.which === 8 || event.which === 46) && val.length === 1 && that.searchTerm !== '') {
that.search([]);
}
});
});
}
ConversationsAdapter.method('getObjectDom', function(id) {
obj = this.container.find("#obj_"+id);
if(obj.length){
return obj;
getObjectDom(id) {
const obj = this.container.find(`#obj_${id}`);
if (obj.length) {
return obj;
}
return null;
});
}
ConversationsAdapter.method('loadMore', function(callBackData) {
if(!this.hasMoreData){
return;
loadMore(callBackData) {
if (!this.hasMoreData) {
return;
}
this.currentPage++;
this.get(callBackData, true);
});
}
ConversationsAdapter.method('get', function(callBackData, loadMore) {
var that = this;
get(callBackData, loadMore) {
const that = this;
this.hideLoadError();
if(!loadMore){
this.currentPage = 1;
if(this.container != null){
this.container.html('');
}
this.hasMoreData = true;
this.tableData = [];
if (!loadMore) {
this.currentPage = 1;
if (this.container != null) {
this.container.html('');
}
this.hasMoreData = true;
this.tableData = [];
}
this.start = (this.currentPage === 1) ? 0 : this.bottomLimit;
this.container = $("#"+this.getTableName()).find('.objectList');
this.container = $(`#${this.getTableName()}`).find('.objectList');
that.showLoader();
this.getConversations(this.start, this.pageSize, false);
if (this.timer === null && that.getTimeout() > 0) {
this.timeoutDelay = 0;
this.timer = setTimeout(function tick() {
that.getConversations(that.topLimit, that.pageSize, true);
that.timeoutDelay += that.getTimeout();
if (that.topLimitUpdated) {
that.timeoutDelay = 0;
}
that.timer = setTimeout(tick, that.getTimeout() + that.timeoutDelay);
}, that.getTimeout() + that.timeoutDelay);
this.timeoutDelay = 0;
this.timer = setTimeout(function tick() {
that.getConversations(that.topLimit, that.pageSize, true);
that.timeoutDelay += that.getTimeout();
if (that.topLimitUpdated) {
that.timeoutDelay = 0;
}
that.timer = setTimeout(tick, that.getTimeout() + that.timeoutDelay);
}, that.getTimeout() + that.timeoutDelay);
}
}
});
ConversationsAdapter.method('getTimeout', function() {
getTimeout() {
return 0;
});
}
ConversationsAdapter.method('getTimeoutUpper', function() {
getTimeoutUpper() {
return 0;
});
}
ConversationsAdapter.method('showConversationLoader', function() {
//Do nothing
});
showConversationLoader() {
// Do nothing
}
ConversationsAdapter.method('hideConversationLoader', function() {
//Do nothing
});
hideConversationLoader() {
// Do nothing
}
ConversationsAdapter.method('search', function(callBackData) {
this.searchTerm = $("#"+this.getTableName()+"_search").val();
search(callBackData) {
this.searchTerm = $(`#${this.getTableName()}_search`).val();
this.get(callBackData);
}
}
});
export default ConversationsAdapter;

View File

@@ -1,280 +1,246 @@
/*
This file is part of Ice Framework.
Ice Framework is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Ice Framework is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Ice Framework. If not, see <http://www.gnu.org/licenses/>.
------------------------------------------------------------------
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
Copyright (c) 2018 [Glacies UG, Berlin, Germany] (http://glacies.de)
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
*/
/* global tinyMCE */
const ValidationRules = {
ValidationRules = {
float: function (str) {
var floatstr = /^[-+]?[0-9]+(\.[0-9]+)?$/;
if (str != null && str.match(floatstr)) {
return true;
} else {
return false;
}
},
number: function (str) {
var numstr = /^[0-9]+$/;
if (str != null && str.match(numstr)) {
return true;
} else {
return false;
}
},
numberOrEmpty: function (str) {
if(str == ""){
return true;
}
var numstr = /^[0-9]+$/;
if (str != null && str.match(numstr)) {
return true;
} else {
return false;
}
},
email: function (str) {
var emailPattern = /^\s*[\w\-\+_]+(\.[\w\-\+_]+)*\@[\w\-\+_]+\.[\w\-\+_]+(\.[\w\-\+_]+)*\s*$/;
return str != null && emailPattern.test(str);
},
emailOrEmpty: function (str) {
if(str == ""){
return true;
}
var emailPattern = /^\s*[\w\-\+_]+(\.[\w\-\+_]+)*\@[\w\-\+_]+\.[\w\-\+_]+(\.[\w\-\+_]+)*\s*$/;
return str != null && emailPattern.test(str);
},
username: function (str) {
var username = /^[a-zA-Z0-9\.-]+$/;
return str != null && username.test(str);
},
input: function (str) {
if (str != null && str.length > 0) {
return true;
} else {
return false;
}
float(str) {
const floatstr = /^[-+]?[0-9]+(\.[0-9]+)?$/;
if (str != null && str.match(floatstr)) {
return true;
}
return false;
},
number(str) {
const numstr = /^[0-9]+$/;
if (str != null && str.match(numstr)) {
return true;
}
return false;
},
numberOrEmpty(str) {
if (str === '') {
return true;
}
const numstr = /^[0-9]+$/;
if (str != null && str.match(numstr)) {
return true;
}
return false;
},
email(str) {
const emailPattern = /^\s*[\w\-+_]+(\.[\w\-+_]+)*@[\w\-+_]+\.[\w\-+_]+(\.[\w\-+_]+)*\s*$/;
return str != null && emailPattern.test(str);
},
emailOrEmpty(str) {
if (str === '') {
return true;
}
const emailPattern = /^\s*[\w\-+_]+(\.[\w\-+_]+)*@[\w\-+_]+\.[\w\-+_]+(\.[\w\-+_]+)*\s*$/;
return str != null && emailPattern.test(str);
},
username(str) {
const username = /^[a-zA-Z0-9.-]+$/;
return str != null && username.test(str);
},
input(str) {
if (str != null && str.length > 0) {
return true;
}
return false;
},
};
function FormValidation(formId,validateAll,options) {
class FormValidation {
constructor(formId, validateAll, options) {
this.tempOptions = {};
this.formId = formId;
this.formError = false;
this.formId = formId;
this.formError = false;
this.formObject = null;
this.errorMessages = "";
this.errorMessages = '';
this.popupDialog = null;
this.validateAll = validateAll;
this.errorMap = new Array();
this.errorMap = [];
this.settings = {"thirdPartyPopup":null,"LabelErrorClass":false, "ShowPopup":true};
this.settings = { thirdPartyPopup: null, LabelErrorClass: false, ShowPopup: true };
this.settings = jQuery.extend(this.settings,options);
this.settings = jQuery.extend(this.settings, options);
this.inputTypes = new Array( "text", "radio", "checkbox", "file", "password", "select-one","select-multi", "textarea","fileupload" ,"signature");
this.inputTypes = ['text', 'radio', 'checkbox', 'file', 'password', 'select-one', 'select-multi', 'textarea', 'fileupload', 'signature'];
this.validator = ValidationRules;
}
}
// eslint-disable-next-line no-unused-vars
clearError(formInput, overrideMessage) {
const id = formInput.attr('id');
$(`#${this.formId} #field_${id}`).removeClass('error');
$(`#${this.formId} #help_${id}`).html('');
}
FormValidation.method('clearError' , function(formInput, overrideMessage) {
var id = formInput.attr("id");
$('#'+ this.formId +' #field_'+id).removeClass('error');
$('#'+ this.formId +' #help_'+id).html('');
});
FormValidation.method('addError' , function(formInput, overrideMessage) {
// eslint-disable-next-line no-unused-vars
addError(formInput, overrideMessage) {
this.formError = true;
if(formInput.attr("message") != null) {
this.errorMessages += (formInput.attr("message") + "\n");
this.errorMap[formInput.attr("name")] = formInput.attr("message");
}else{
this.errorMap[formInput.attr("name")] = "";
if (formInput.attr('message') != null) {
this.errorMessages += (`${formInput.attr('message')}\n`);
this.errorMap[formInput.attr('name')] = formInput.attr('message');
} else {
this.errorMap[formInput.attr('name')] = '';
}
var id = formInput.attr("id");
var validation = formInput.attr("validation");
var message = formInput.attr("validation");
$('#'+ this.formId +' #field_'+id).addClass('error');
if(message == undefined || message == null || message == ""){
$('#'+ this.formId +' #help_err_'+id).html(message);
}else{
if(validation == undefined || validation == null || validation == ""){
$('#'+ this.formId +' #help_err_'+id).html("Required");
}else{
if(validation == "float" || validation == "number"){
$('#'+ this.formId +' #help_err_'+id).html("Number required");
}else if(validation == "email"){
$('#'+ this.formId +' #help_err_'+id).html("Email required");
}else{
$('#'+ this.formId +' #help_err_'+id).html("Required");
}
const id = formInput.attr('id');
const validation = formInput.attr('validation');
const message = formInput.attr('validation');
$(`#${this.formId} #field_${id}`).addClass('error');
if (message === undefined || message == null || message === '') {
$(`#${this.formId} #help_err_${id}`).html(message);
} else if (validation === undefined || validation == null || validation === '') {
$(`#${this.formId} #help_err_${id}`).html('Required');
} else if (validation === 'float' || validation === 'number') {
$(`#${this.formId} #help_err_${id}`).html('Number required');
} else if (validation === 'email') {
$(`#${this.formId} #help_err_${id}`).html('Email required');
} else {
$(`#${this.formId} #help_err_${id}`).html('Required');
}
}
showErrors() {
if (this.formError) {
if (this.settings.thirdPartyPopup !== undefined && this.settings.thirdPartyPopup != null) {
this.settings.thirdPartyPopup.alert();
} else if (this.settings.ShowPopup === true) {
if (this.tempOptions.popupTop !== undefined && this.tempOptions.popupTop != null) {
this.alert('Errors Found', this.errorMessages, this.tempOptions.popupTop);
} else {
this.alert('Errors Found', this.errorMessages, -1);
}
}
}
}
});
FormValidation.method('showErrors' , function() {
if(this.formError) {
if(this.settings['thirdPartyPopup'] != undefined && this.settings['thirdPartyPopup'] != null){
this.settings['thirdPartyPopup'].alert();
}else{
if(this.settings['ShowPopup'] == true){
if(this.tempOptions['popupTop'] != undefined && this.tempOptions['popupTop'] != null){
this.alert("Errors Found",this.errorMessages,this.tempOptions['popupTop']);
}else{
this.alert("Errors Found",this.errorMessages,-1);
}
}
}
}
});
FormValidation.method('checkValues' , function(options) {
checkValues(options) {
this.tempOptions = options;
var that = this;
const that = this;
this.formError = false;
this.errorMessages = "";
this.formObject = new Object();
var validate = function (inputObject) {
if(that.settings['LabelErrorClass'] != false){
$("label[for='" + name + "']").removeClass(that.settings['LabelErrorClass']);
}
var id = inputObject.attr("id");
var name = inputObject.attr("name");
var type = inputObject.attr("type");
this.errorMessages = '';
this.formObject = {};
// eslint-disable-next-line consistent-return
const validate = function (inputObject) {
let inputValue = null;
const name = inputObject.attr('name');
if (that.settings.LabelErrorClass !== false) {
$(`label[for='${name}']`).removeClass(that.settings.LabelErrorClass);
}
const id = inputObject.attr('id');
const type = inputObject.attr('type');
if(inputObject.hasClass('select2-focusser') || inputObject.hasClass('select2-input')){
return true;
if (inputObject.hasClass('select2-focusser') || inputObject.hasClass('select2-input')) {
return true;
}
if (jQuery.inArray(type, that.inputTypes) >= 0) {
if (inputObject.hasClass('uploadInput')) {
inputValue = inputObject.attr('val');
} else if (type === 'radio' || type === 'checkbox') {
inputValue = $(`input[name='${name}']:checked`).val();
} else if (inputObject.hasClass('select2Field')) {
if ($(`#${that.formId} #${id}`).select2('data') != null && $(`#${that.formId} #${id}`).select2('data') !== undefined) {
inputValue = $(`#${that.formId} #${id}`).select2('data').id;
} else {
inputValue = '';
}
} else if (inputObject.hasClass('select2Multi')) {
if ($(`#${that.formId} #${id}`).select2('data') != null && $(`#${that.formId} #${id}`).select2('data') !== undefined) {
const inputValueObjects = $(`#${that.formId} #${id}`).select2('data');
inputValue = [];
for (let i = 0; i < inputValueObjects.length; i++) {
inputValue.push(inputValueObjects[i].id);
}
inputValue = JSON.stringify(inputValue);
} else {
inputValue = '';
}
} else if (inputObject.hasClass('signatureField')) {
if ($(`#${that.formId} #${id}`).data('signaturePad').isEmpty()) {
inputValue = '';
} else {
inputValue = $(`#${id}`).data('signaturePad').toDataURL();
}
} else if (inputObject.hasClass('simplemde')) {
inputValue = $(`#${that.formId} #${id}`).data('simplemde').value();
} else if (inputObject.hasClass('tinymce')) {
inputValue = tinyMCE.get(id).getContent({ format: 'raw' });
} else {
inputValue = inputObject.val();
}
if(jQuery.inArray(type, that.inputTypes ) >= 0) {
if(inputObject.hasClass('uploadInput')){
inputValue = inputObject.attr("val");
//}else if(inputObject.hasClass('datetimeInput')){
//inputValue = inputObject.getDate()+":00";
}else{
//inputValue = (type == "radio" || type == "checkbox")?$("input[name='" + name + "']:checked").val():inputObject.val();
const validation = inputObject.attr('validation');
let valid = false;
inputValue = null;
if(type == "radio" || type == "checkbox"){
inputValue = $("input[name='" + name + "']:checked").val();
}else if(inputObject.hasClass('select2Field')){
if($('#'+id).select2('data') != null && $('#'+id).select2('data') != undefined){
inputValue = $('#'+id).select2('data').id;
}else{
inputValue = "";
}
}else if(inputObject.hasClass('select2Multi')){
if($('#'+id).select2('data') != null && $('#'+id).select2('data') != undefined){
inputValueObjects = $('#'+id).select2('data');
inputValue = [];
for(var i=0;i<inputValueObjects.length;i++){
inputValue.push(inputValueObjects[i].id);
}
inputValue = JSON.stringify(inputValue);
}else{
inputValue = "";
}
}else if(inputObject.hasClass('signatureField')){
if($('#'+id).data('signaturePad').isEmpty()){
inputValue = '';
}else{
inputValue = $('#'+id).data('signaturePad').toDataURL();
}
}else if(inputObject.hasClass('simplemde')){
inputValue = $('#'+id).data('simplemde').value();
}else if(inputObject.hasClass('tinymce')){
inputValue = tinyMCE.get(id).getContent({format : 'raw'});
}else{
inputValue = inputObject.val();
}
}
var validation = inputObject.attr('validation');
var valid = false;
if(validation != undefined && validation != null && that.validator[validation] != undefined && that.validator[validation] != null){
valid = that.validator[validation](inputValue);
}else{
if(that.validateAll){
if(validation != undefined && validation != null && validation == "none"){
valid = true;
}else{
valid = that.validator['input'](inputValue);
}
}else{
valid = true;
}
$(that.formObject).attr(id,inputValue);
}
if(!valid) {
that.addError(inputObject, null);
}else{
that.clearError(inputObject, null);
$(that.formObject).attr(id,inputValue);
if (validation !== undefined && validation != null && that.validator[validation] !== undefined && that.validator[validation] != null) {
valid = that.validator[validation](inputValue);
} else {
if (that.validateAll) {
if (validation !== undefined && validation != null && validation === 'none') {
valid = true;
} else {
valid = that.validator.input(inputValue);
}
} else {
valid = true;
}
that.formObject[id] = inputValue;
}
if (!valid) {
that.addError(inputObject, null);
} else {
that.clearError(inputObject, null);
that.formObject[id] = inputValue;
}
}
};
var inputs = $('#'+ this.formId + " :input");
inputs.each(function() {
var that = $(this);
validate(that);
let inputs = $(`#${this.formId} :input`);
inputs.each(function () {
validate($(this));
});
inputs = $('#'+ this.formId + " .uploadInput");
inputs.each(function() {
var that = $(this);
validate(that);
inputs = $(`#${this.formId} .uploadInput`);
inputs.each(function () {
validate($(this));
});
this.showErrors();
this.tempOptions = {};
return !this.formError;
});
}
FormValidation.method('getFormParameters' , function() {
getFormParameters() {
return this.formObject;
});
}
FormValidation.method('alert', function (title,text,top) {
alert(title, text) {
alert(text);
});
}
static getValidationRules() {
return ValidationRules;
}
}
export default FormValidation;

View File

@@ -1,138 +0,0 @@
/*
This file is part of Ice Framework.
Ice Framework is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Ice Framework is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Ice Framework. If not, see <http://www.gnu.org/licenses/>.
------------------------------------------------------------------
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
*/
function NotificationManager() {
this.baseUrl = "";
this.templates = {};
}
NotificationManager.method('setBaseUrl' , function(url) {
this.baseUrl = url;
});
NotificationManager.method('setTemplates' , function(data) {
this.templates = data;
});
NotificationManager.method('setTimeUtils' , function(timeUtils) {
this.timeUtils = timeUtils;
});
NotificationManager.method('getNotifications' , function(name, data) {
var that = this;
$.getJSON(this.baseUrl, {'a':'getNotifications'}, function(data) {
if(data.status == "SUCCESS"){
that.renderNotifications(data.data[1],data.data[0]);
}
});
});
NotificationManager.method('clearPendingNotifications' , function(name, data) {
var that = this;
$.getJSON(this.baseUrl, {'a':'clearNotifications'}, function(data) {
});
});
NotificationManager.method('renderNotifications' , function(notifications, unreadCount) {
if(notifications.length == 0){
return;
}
var t = this.templates['notifications'];
if(unreadCount > 0){
t = t.replace('#_count_#',unreadCount);
if(unreadCount > 1){
t = t.replace('#_header_#',"You have "+unreadCount+" new notifications");
}else{
t = t.replace('#_header_#',"You have "+unreadCount+" new notification");
}
}else{
t = t.replace('#_count_#',"");
t = t.replace('#_header_#',"You have no new notifications");
}
var notificationStr = "";
for (index in notifications){
notificationStr += this.renderNotification(notifications[index]);
}
t = t.replace('#_notifications_#',notificationStr);
$obj = $(t);
if(unreadCount == 0){
$obj.find('.label-danger').remove();
}
$obj.attr("id","notifications");
var k = $("#notifications");
k.replaceWith($obj);
$(".navbar .menu").slimscroll({
height: "320px",
alwaysVisible: false,
size: "3px"
}).css("width", "100%");
this.timeUtils.convertToRelativeTime($(".notificationTime"));
});
NotificationManager.method('renderNotification' , function(notification) {
var t = this.templates['notification'];
t = t.replace('#_image_#',notification.image);
try{
var json = JSON.parse(notification.action);
t = t.replace('#_url_#',this.baseUrl.replace('service.php','?')+json['url']);
}catch(e){
t = t.replace('#_url_#',"");
}
t = t.replace('#_time_#',notification.time);
t = t.replace('#_fromName_#',notification.type);
t = t.replace('#_message_#',this.getLineBreakString(notification.message,27));
return t;
});
NotificationManager.method('getLineBreakString' , function(str, len) {
var t = "";
try{
var arr = str.split(" ");
var count = 0;
for(var i=0;i<arr.length;i++){
count += arr[i].length + 1;
if(count > len){
t += arr[i] + "<br/>";
count = 0;
}else{
t += arr[i] + " ";
}
}
}catch(e){}
return t;
});

View File

@@ -1,47 +1,49 @@
function SocialShare(){
};
/* eslint-disable no-restricted-globals */
/*
Copyright (c) 2018 [Glacies UG, Berlin, Germany] (http://glacies.de)
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
*/
const SocialShare = {
facebook: (url) => {
const w = 700;
const h = 500;
const left = (screen.width / 2) - (w / 2);
const top = (screen.height / 2) - (h / 2);
SocialShare.facebook = function(url) {
var w = 700;
var h = 500;
var left = (screen.width/2)-(w/2);
var top = (screen.height/2)-(h/2);
var url = "https://www.facebook.com/sharer/sharer.php?u="+encodeURIComponent(url);
url = `https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(url)}`;
window.open(url, "Share on Facebook", "width="+w+",height="+h+",left="+left+",top="+top);
window.open(url, 'Share on Facebook', `width=${w},height=${h},left=${left},top=${top}`);
return false;
};
},
SocialShare.google = function(url) {
var w = 500;
var h = 500;
var left = (screen.width/2)-(w/2);
var top = (screen.height/2)-(h/2);
var url = "https://plus.google.com/share?url="+encodeURIComponent(url);
google: (url) => {
const w = 500;
const h = 500;
const left = (screen.width / 2) - (w / 2);
const top = (screen.height / 2) - (h / 2);
window.open(url, "Share on Google", "width="+w+",height="+h+",left="+left+",top="+top);
url = `https://plus.google.com/share?url=${encodeURIComponent(url)}`;
window.open(url, 'Share on Google', `width=${w},height=${h},left=${left},top=${top}`);
return false;
};
},
SocialShare.linkedin = function(url) {
var w = 500;
var h = 500;
var left = (screen.width/2)-(w/2);
var top = (screen.height/2)-(h/2);
var url = "https://www.linkedin.com/cws/share?url="+encodeURIComponent(url);
linkedin: (url) => {
const w = 500;
const h = 500;
const left = (screen.width / 2) - (w / 2);
const top = (screen.height / 2) - (h / 2);
window.open(url, "Share on Linked in", "width="+w+",height="+h+",left="+left+",top="+top);
url = `https://www.linkedin.com/cws/share?url=${encodeURIComponent(url)}`;
window.open(url, 'Share on Linked in', `width=${w},height=${h},left=${left},top=${top}`);
return false;
},
twitter(url, msg) {
window.open(`http://twitter.com/share?text=${escape(msg)}&url=${escape(url)}`, 'popup', 'width=550,height=260,scrollbars=yes,resizable=yes,toolbar=no,directories=no,location=no,menubar=no,status=no,left=200,top=200');
return false;
},
};
SocialShare.twitter = function(url, msg) {
window.open('http://twitter.com/share?text='+escape(msg) + '&url=' + escape(url),'popup','width=550,height=260,scrollbars=yes,resizable=yes,toolbar=no,directories=no,location=no,menubar=no,status=no,left=200,top=200');
return false;
};
export default SocialShare;

View File

@@ -1,163 +0,0 @@
/*
This file is part of Ice Framework.
Ice Framework is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Ice Framework is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Ice Framework. If not, see <http://www.gnu.org/licenses/>.
------------------------------------------------------------------
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
*/
function TimeUtils() {
}
TimeUtils.method('setServerGMToffset' , function(serverGMToffset) {
this.serverGMToffset = serverGMToffset;
});
TimeUtils.method('getMySQLFormatDate' , function(date) {
var format = function(val){
if(val < 10){return "0"+val;}
return val;
}
return date.getUTCFullYear()+"-"+format(date.getUTCMonth()+1)+"-"+format(date.getUTCDate());
});
TimeUtils.method('convertToRelativeTime',function(selector) {
var that = this;
var getAmPmTime = function(curHour, curMin) {
var amPm = "am";
var amPmHour = curHour;
if (amPmHour >= 12) {
amPm = "pm";
if (amPmHour > 12) {
amPmHour = amPmHour - 12;
}
}
var prefixCurMin = "";
if (curMin < 10) {
prefixCurMin = "0";
}
var prefixCurHour = "";
if (curHour == 0) {
prefixCurHour = "0";
}
return " at " + prefixCurHour + amPmHour + ":" + prefixCurMin + curMin + amPm;
};
var getBrowserTimeZone = function() {
var current_date = new Date();
var gmt_offset = current_date.getTimezoneOffset() / 60;
return -gmt_offset;
};
var curDate = new Date();
var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
var timezoneDiff = this.serverGMToffset - getBrowserTimeZone();
var timezoneTimeDiff = timezoneDiff*60*60*1000;
selector.each(function () {
try{
var thisValue = $(this).html();
// Split value into date and time
var thisValueArray = thisValue.split(" ");
var thisValueDate = thisValueArray[0];
var thisValueTime = thisValueArray[1];
// Split date into components
var thisValueDateArray = thisValueDate.split("-");
var curYear = thisValueDateArray[0];
var curMonth = thisValueDateArray[1]-1;
var curDay = thisValueDateArray[2];
// Split time into components
var thisValueTimeArray = thisValueTime.split(":");
var curHour = thisValueTimeArray[0];
var curMin = thisValueTimeArray[1];
var curSec = thisValueTimeArray[2];
// Create this date
var thisDate = new Date(curYear, curMonth, curDay, curHour, curMin, curSec);
var thisTime = thisDate.getTime();
var tzDate = new Date(thisTime - timezoneTimeDiff);
//var tzDay = tzDate.getDay();//getDay will return the day of the week not the month
//var tzDay = tzDate.getUTCDate(); //getUTCDate will return the day of the month
var tzDay = tzDate.toString('d'); //
var tzYear = tzDate.getFullYear();
var tzHour = tzDate.getHours();
var tzMin = tzDate.getMinutes();
// Create the full date
//var fullDate = days[tzDate.getDay()] + ", " + months[tzDate.getMonth()] + " " + tzDay + ", " + tzYear + getAmPmTime(tzHour, tzMin);
var fullDate = days[tzDate.getDay()] + ", " + months[tzDate.getMonth()] + " " + tzDay + ", " + tzYear + getAmPmTime(tzHour, tzMin);
// Get the time different
var timeDiff = (curDate.getTime() - tzDate.getTime())/1000;
var minDiff = Math.abs(timeDiff/60);
var hourDiff = Math.abs(timeDiff/(60*60));
var dayDiff = Math.abs(timeDiff/(60*60*24));
var yearDiff = Math.abs(timeDiff/(60*60*24*365));
// If more than a day old, display the month, day and time (and year, if applicable)
var fbDate = '';
if (dayDiff > 1) {
//fbDate = curDay + " " + months[tzDate.getMonth()].substring(0,3);
fbDate = tzDay + " " + months[tzDate.getMonth()].substring(0,3);
// Add the year, if applicable
if (yearDiff > 1) {
fbDate = fbDate + " "+ curYear;
}
// Add the time
fbDate = fbDate + getAmPmTime(tzHour, tzMin);
}
// Less than a day old, and more than an hour old
else if (hourDiff >= 1) {
var roundedHour = Math.round(hourDiff);
if (roundedHour == 1)
fbDate = "about an hour ago";
else
fbDate = roundedHour + " hours ago";
}
// Less than an hour, and more than a minute
else if (minDiff >= 1) {
var roundedMin = Math.round(minDiff);
if (roundedMin == 1)
fbDate = "about a minute ago";
else
fbDate = roundedMin + " minutes ago";
}
// Less than a minute
else if (minDiff < 1) {
fbDate = "less than a minute ago";
}
// Update this element
$(this).html(fbDate);
$(this).attr('title', fullDate);
}catch(e){}
});
});