Spaces:
Sleeping
Sleeping
File size: 1,750 Bytes
216c0a4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | // Deterministic pseudo-random helpers for stable D3 renders.
(function (root) {
const chartUtils = root.chartUtils;
const random = chartUtils.random;
random.hashString = value => {
let hash = 2166136261;
const text = String(value == null ? "" : value);
for (let i = 0; i < text.length; i++) {
hash ^= text.charCodeAt(i);
hash = Math.imul(hash, 16777619);
}
return hash >>> 0;
};
random.seed = (jsonData, salt = "") => {
const data = jsonData && jsonData.data ? jsonData.data : {};
const columns = Array.isArray(data.columns) ? data.columns : [];
const rows = Array.isArray(data.data) ? data.data : [];
return random.hashString([
salt,
jsonData && jsonData.name,
jsonData && jsonData.chart_name,
rows.length,
JSON.stringify(columns.map(column => [
column && column.name,
column && column.role,
column && column.data_type,
])),
].join("|"));
};
random.generator = (jsonDataOrSeed, salt = "") => {
let state = typeof jsonDataOrSeed === "number"
? jsonDataOrSeed >>> 0
: random.seed(jsonDataOrSeed, salt);
return () => {
state = (state + 0x6D2B79F5) >>> 0;
let t = state;
t = Math.imul(t ^ (t >>> 15), t | 1);
t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
};
};
random.value = (jsonData, salt = "") => random.generator(jsonData, salt)();
random.id = (jsonData, salt = "") => random.seed(jsonData, salt).toString(36);
})(globalThis);
|