1
0
Fork 0
mirror of synced 2024-06-01 10:29:48 +12:00
appwrite/public/scripts/filters.js

472 lines
14 KiB
JavaScript
Raw Normal View History

2019-05-09 20:23:22 +12:00
window.ls.filter
.add("gravatar", function($value, element) {
if (!$value) {
return "";
}
// MD5 (Message-Digest Algorithm) by WebToolkit
let MD5 = function(s) {
function L(k, d) {
return (k << d) | (k >>> (32 - d));
}
function K(G, k) {
let I, d, F, H, x;
F = G & 2147483648;
H = k & 2147483648;
I = G & 1073741824;
d = k & 1073741824;
x = (G & 1073741823) + (k & 1073741823);
if (I & d) {
return x ^ 2147483648 ^ F ^ H;
2019-05-09 20:23:22 +12:00
}
if (I | d) {
if (x & 1073741824) {
return x ^ 3221225472 ^ F ^ H;
} else {
return x ^ 1073741824 ^ F ^ H;
}
} else {
return x ^ F ^ H;
2019-05-09 20:23:22 +12:00
}
}
function r(d, F, k) {
return (d & F) | (~d & k);
}
function q(d, F, k) {
return (d & k) | (F & ~k);
}
function p(d, F, k) {
return d ^ F ^ k;
}
function n(d, F, k) {
return F ^ (d | ~k);
}
function u(G, F, aa, Z, k, H, I) {
G = K(G, K(K(r(F, aa, Z), k), I));
return K(L(G, H), F);
}
function f(G, F, aa, Z, k, H, I) {
G = K(G, K(K(q(F, aa, Z), k), I));
return K(L(G, H), F);
}
function D(G, F, aa, Z, k, H, I) {
G = K(G, K(K(p(F, aa, Z), k), I));
return K(L(G, H), F);
}
function t(G, F, aa, Z, k, H, I) {
G = K(G, K(K(n(F, aa, Z), k), I));
return K(L(G, H), F);
}
function e(G) {
let Z;
let F = G.length;
let x = F + 8;
let k = (x - (x % 64)) / 64;
let I = (k + 1) * 16;
let aa = Array(I - 1);
let d = 0;
let H = 0;
while (H < F) {
Z = (H - (H % 4)) / 4;
d = (H % 4) * 8;
aa[Z] = aa[Z] | (G.charCodeAt(H) << d);
H++;
2019-05-09 20:23:22 +12:00
}
Z = (H - (H % 4)) / 4;
d = (H % 4) * 8;
aa[Z] = aa[Z] | (128 << d);
aa[I - 2] = F << 3;
aa[I - 1] = F >>> 29;
return aa;
}
function B(x) {
let k = "",
F = "",
G,
d;
for (d = 0; d <= 3; d++) {
G = (x >>> (d * 8)) & 255;
F = "0" + G.toString(16);
k = k + F.substr(F.length - 2, 2);
}
return k;
}
function J(k) {
k = k.replace(/rn/g, "n");
let d = "";
for (let F = 0; F < k.length; F++) {
let x = k.charCodeAt(F);
if (x < 128) {
d += String.fromCharCode(x);
} else {
if (x > 127 && x < 2048) {
d += String.fromCharCode((x >> 6) | 192);
d += String.fromCharCode((x & 63) | 128);
} else {
d += String.fromCharCode((x >> 12) | 224);
d += String.fromCharCode(((x >> 6) & 63) | 128);
d += String.fromCharCode((x & 63) | 128);
}
}
}
return d;
}
let C = Array();
let P, h, E, v, g, Y, X, W, V;
let S = 7,
Q = 12,
N = 17,
M = 22;
let A = 5,
z = 9,
y = 14,
w = 20;
let o = 4,
m = 11,
l = 16,
j = 23;
let U = 6,
T = 10,
R = 15,
O = 21;
s = J(s);
C = e(s);
Y = 1732584193;
X = 4023233417;
W = 2562383102;
V = 271733878;
for (P = 0; P < C.length; P += 16) {
h = Y;
E = X;
v = W;
g = V;
Y = u(Y, X, W, V, C[P + 0], S, 3614090360);
V = u(V, Y, X, W, C[P + 1], Q, 3905402710);
W = u(W, V, Y, X, C[P + 2], N, 606105819);
X = u(X, W, V, Y, C[P + 3], M, 3250441966);
Y = u(Y, X, W, V, C[P + 4], S, 4118548399);
V = u(V, Y, X, W, C[P + 5], Q, 1200080426);
W = u(W, V, Y, X, C[P + 6], N, 2821735955);
X = u(X, W, V, Y, C[P + 7], M, 4249261313);
Y = u(Y, X, W, V, C[P + 8], S, 1770035416);
V = u(V, Y, X, W, C[P + 9], Q, 2336552879);
W = u(W, V, Y, X, C[P + 10], N, 4294925233);
X = u(X, W, V, Y, C[P + 11], M, 2304563134);
Y = u(Y, X, W, V, C[P + 12], S, 1804603682);
V = u(V, Y, X, W, C[P + 13], Q, 4254626195);
W = u(W, V, Y, X, C[P + 14], N, 2792965006);
X = u(X, W, V, Y, C[P + 15], M, 1236535329);
Y = f(Y, X, W, V, C[P + 1], A, 4129170786);
V = f(V, Y, X, W, C[P + 6], z, 3225465664);
W = f(W, V, Y, X, C[P + 11], y, 643717713);
X = f(X, W, V, Y, C[P + 0], w, 3921069994);
Y = f(Y, X, W, V, C[P + 5], A, 3593408605);
V = f(V, Y, X, W, C[P + 10], z, 38016083);
W = f(W, V, Y, X, C[P + 15], y, 3634488961);
X = f(X, W, V, Y, C[P + 4], w, 3889429448);
Y = f(Y, X, W, V, C[P + 9], A, 568446438);
V = f(V, Y, X, W, C[P + 14], z, 3275163606);
W = f(W, V, Y, X, C[P + 3], y, 4107603335);
X = f(X, W, V, Y, C[P + 8], w, 1163531501);
Y = f(Y, X, W, V, C[P + 13], A, 2850285829);
V = f(V, Y, X, W, C[P + 2], z, 4243563512);
W = f(W, V, Y, X, C[P + 7], y, 1735328473);
X = f(X, W, V, Y, C[P + 12], w, 2368359562);
Y = D(Y, X, W, V, C[P + 5], o, 4294588738);
V = D(V, Y, X, W, C[P + 8], m, 2272392833);
W = D(W, V, Y, X, C[P + 11], l, 1839030562);
X = D(X, W, V, Y, C[P + 14], j, 4259657740);
Y = D(Y, X, W, V, C[P + 1], o, 2763975236);
V = D(V, Y, X, W, C[P + 4], m, 1272893353);
W = D(W, V, Y, X, C[P + 7], l, 4139469664);
X = D(X, W, V, Y, C[P + 10], j, 3200236656);
Y = D(Y, X, W, V, C[P + 13], o, 681279174);
V = D(V, Y, X, W, C[P + 0], m, 3936430074);
W = D(W, V, Y, X, C[P + 3], l, 3572445317);
X = D(X, W, V, Y, C[P + 6], j, 76029189);
Y = D(Y, X, W, V, C[P + 9], o, 3654602809);
V = D(V, Y, X, W, C[P + 12], m, 3873151461);
W = D(W, V, Y, X, C[P + 15], l, 530742520);
X = D(X, W, V, Y, C[P + 2], j, 3299628645);
Y = t(Y, X, W, V, C[P + 0], U, 4096336452);
V = t(V, Y, X, W, C[P + 7], T, 1126891415);
W = t(W, V, Y, X, C[P + 14], R, 2878612391);
X = t(X, W, V, Y, C[P + 5], O, 4237533241);
Y = t(Y, X, W, V, C[P + 12], U, 1700485571);
V = t(V, Y, X, W, C[P + 3], T, 2399980690);
W = t(W, V, Y, X, C[P + 10], R, 4293915773);
X = t(X, W, V, Y, C[P + 1], O, 2240044497);
Y = t(Y, X, W, V, C[P + 8], U, 1873313359);
V = t(V, Y, X, W, C[P + 15], T, 4264355552);
W = t(W, V, Y, X, C[P + 6], R, 2734768916);
X = t(X, W, V, Y, C[P + 13], O, 1309151649);
Y = t(Y, X, W, V, C[P + 4], U, 4149444226);
V = t(V, Y, X, W, C[P + 11], T, 3174756917);
W = t(W, V, Y, X, C[P + 2], R, 718787259);
X = t(X, W, V, Y, C[P + 9], O, 3951481745);
Y = K(Y, h);
X = K(X, E);
W = K(W, v);
V = K(V, g);
}
let i = B(Y) + B(X) + B(W) + B(V);
return i.toLowerCase();
};
let size = element.dataset["size"] || 80;
let email = $value.email || $value || "";
let name = $value.name || $value || "";
2019-10-13 10:53:03 +13:00
name = (typeof name !== 'string') ? '--' : name;
2019-10-13 10:53:03 +13:00
// let theme = name
// .split("")
// .map(char => char.charCodeAt(0))
// .reduce((a, b) => a + b, 0)
// .toString();
// let themes = [
// { color: "27005e", background: "e1d2f6" }, // VIOLET
// { color: "5e2700", background: "f3d9c6" }, // ORANGE
// { color: "006128", background: "c9f3c6" }, // GREEN
// { color: "580061", background: "f2d1f5" }, // FUSCHIA
// { color: "00365d", background: "c6e1f3" }, // BLUE
// { color: "00075c", background: "d2d5f6" }, // INDIGO
// { color: "610038", background: "f5d1e6" }, // PINK
// { color: "386100", background: "dcf1bd" }, // LIME
// { color: "615800", background: "f1ecba" }, // YELLOW
// { color: "610008", background: "f6d2d5" } // RED
// ];
2019-05-09 20:23:22 +12:00
// name =
// name
// .split(" ")
// .map(function(n) {
// if (!isNaN(parseFloat(n)) && isFinite(n)) {
// return "";
// }
2019-05-09 20:23:22 +12:00
// return n[0];
// })
// .join("") || "--";
2019-05-09 20:23:22 +12:00
// let background = themes[theme[theme.length - 1]]["background"];
// let color = themes[theme[theme.length - 1]]["color"];
2019-05-09 20:23:22 +12:00
let def =
"/v1/avatars/initials?project=console"+
"&name=" +
encodeURIComponent(name) +
"&width=" +
size +
"&height=" +
size;
2019-05-09 20:23:22 +12:00
return def;
// let def =
// "https://ui-avatars.com/api/" +
// encodeURIComponent(name) +
// "/" +
// size +
// "/" +
// encodeURIComponent(background) +
// "/" +
// encodeURIComponent(color);
// return (
// "//www.gravatar.com/avatar/" +
// MD5(email) +
// ".jpg?s=" +
// size +
// "&d=" +
// encodeURIComponent(def)
// );
})
.add("selectedCollection", function($value, router) {
return $value === router.params.collectionId ? "selected" : "";
})
.add("selectedDocument", function($value, router) {
return $value === router.params.documentId ? "selected" : "";
})
.add("localeString", function($value) {
$value = parseInt($value);
return !Number.isNaN($value) ? $value.toLocaleString() : "";
})
.add("date", function($value, date) {
return date.format("Y-m-d", $value);
})
.add("date-time", function($value, date) {
return date.format("Y-m-d H:i", $value);
})
.add("date-text", function($value, date) {
return date.format("d M Y", $value);
})
.add("ms2hum", function($value) {
let temp = $value;
const years = Math.floor(temp / 31536000),
days = Math.floor((temp %= 31536000) / 86400),
hours = Math.floor((temp %= 86400) / 3600),
minutes = Math.floor((temp %= 3600) / 60),
seconds = temp % 60;
2019-05-09 20:23:22 +12:00
if (days || hours || seconds || minutes) {
return (
(years ? years + "y " : "") +
(days ? days + "d " : "") +
(hours ? hours + "h " : "") +
(minutes ? minutes + "m " : "") +
Number.parseFloat(seconds).toFixed(0) +
"s"
);
2019-05-09 20:23:22 +12:00
}
return "< 1s";
})
.add("markdown", function($value, markdown) {
return markdown.render($value);
})
.add("pageCurrent", function($value, env) {
return Math.ceil(parseInt($value || 0) / env.PAGING_LIMIT) + 1;
})
.add("pageTotal", function($value, env) {
let total = Math.ceil(parseInt($value || 0) / env.PAGING_LIMIT);
return total ? total : 1;
})
.add("humanFileSize", function($value) {
if (!$value) {
return 0;
2019-05-09 20:23:22 +12:00
}
let thresh = 1000;
if (Math.abs($value) < thresh) {
return $value + " B";
2019-05-09 20:23:22 +12:00
}
let units = ["kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
let u = -1;
do {
$value /= thresh;
++u;
} while (Math.abs($value) >= thresh && u < units.length - 1);
return (
$value.toFixed(1) +
'<span class="text-size-small unit">' +
units[u] +
"</span>"
);
})
.add("statsTotal", function($value) {
if (!$value) {
return 0;
2019-05-09 20:23:22 +12:00
}
2020-05-30 00:04:22 +12:00
$value = abbreviate($value, 0, false, false);
return $value === "0" ? "N/A" : $value;
})
2020-04-28 06:38:06 +12:00
.add("isEmpty", function($value) {
return (!!$value);
})
.add("isEmptyObject", function($value) {
return ((Object.keys($value).length === 0 && $value.constructor === Object) || $value.length === 0)
2020-02-25 01:56:57 +13:00
})
.add("activeDomainsCount", function($value) {
let result = [];
if(Array.isArray($value)) {
result = $value.filter(function(node) {
return (node.verification && node.certificateId);
});
}
return result.length;
2020-03-15 17:54:55 +13:00
})
2020-04-02 10:41:29 +13:00
.add("documentAction", function(container) {
let collection = container.get('project-collection');
let document = container.get('project-document');
if(collection && document && !document.$id) {
return 'database.createDocument';
}
return 'database.updateDocument';
})
.add("documentSuccess", function(container) {
let document = container.get('project-document');
if(document && !document.$id) {
return ',redirect';
}
return '';
})
.add("firstElement", function($value) {
if($value && $value[0]) {
return $value[0];
}
return $value;
})
2020-04-12 18:03:00 +12:00
.add("platformsLimit", function($value) {
return $value;
})
2020-05-04 17:04:30 +12:00
.add("limit", function($value) {
let postfix = ($value.length >= 50) ? '...' : '';
return $value.substring(0, 50) + postfix;
;
})
2020-03-30 08:38:15 +13:00
;
function abbreviate(number, maxPlaces, forcePlaces, forceLetter) {
number = Number(number);
forceLetter = forceLetter || false;
if (forceLetter !== false) {
return annotate(number, maxPlaces, forcePlaces, forceLetter);
}
let abbr;
if (number >= 1e12) {
abbr = "T";
} else if (number >= 1e9) {
abbr = "B";
} else if (number >= 1e6) {
abbr = "M";
} else if (number >= 1e3) {
abbr = "K";
} else {
abbr = "";
}
return annotate(number, maxPlaces, forcePlaces, abbr);
2019-05-09 20:23:22 +12:00
}
function annotate(number, maxPlaces, forcePlaces, abbr) {
// set places to false to not round
let rounded = 0;
switch (abbr) {
case "T":
rounded = number / 1e12;
break;
case "B":
rounded = number / 1e9;
break;
case "M":
rounded = number / 1e6;
break;
case "K":
rounded = number / 1e3;
break;
case "":
rounded = number;
break;
}
if (maxPlaces !== false) {
let test = new RegExp("\\.\\d{" + (maxPlaces + 1) + ",}$");
if (test.test("" + rounded)) {
rounded = rounded.toFixed(maxPlaces);
2019-05-09 20:23:22 +12:00
}
}
if (forcePlaces !== false) {
rounded = Number(rounded).toFixed(forcePlaces);
}
return rounded + abbr;
}