Spaces:
Sleeping
Sleeping
| // 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); | |