forked from JiyaGupta-cs/fosscu-git
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
453 lines (354 loc) · 18.1 KB
/
index.js
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
// async function fetchMembers() {
// const steeringCouncil = document.getElementById('steeringCouncil');
// const loader = document.getElementById('loader');
// loader.style.display = 'flex'; // Show the loader initially
// const categories = ["ADMIN","IT", "CSE", "CSE(AI)", "CSE(AIML)", "CS", "ECE", "ME"];
// const startNumber = 1;
// const endNumber = 4000;
// const jsonFiles = [];
// // Prepare all file paths based on categories and member numbers
// for (const category of categories) {
// for (let i = startNumber; i <= endNumber; i++) {
// jsonFiles.push(`member/member${category}${i}.json`);
// }
// }
// const batchSize = 10; // Process files in batches of 10
// const validMembers = []; // Array to hold valid member data
// let firstMemberLoaded = false; // Flag to track if at least one member is loaded
// const fetchMember = async (file) => {
// try {
// const response = await fetch(file);
// if (response.ok) {
// const data = await response.json();
// validMembers.push(data);
// displayMember(data); // Display each member as soon as data is available
// // Hide the loader as soon as the first valid member is fetched
// if (!firstMemberLoaded) {
// loader.style.display = 'none';
// firstMemberLoaded = true; // Set flag to true after the first load
// }
// } else {
// console.warn(`Unable to fetch ${file}: ${response.status}`);
// }
// } catch (error) {
// console.error(`Error fetching ${file}:`, error);
// }
// };
// // Function to display individual member data
// const displayMember = (data) => {
// const memberCard = document.createElement('div');
// memberCard.className = "cc flex flex-col gap-8 items-center justify-around text-center w-[260px] rounded-lg p-6 shadow-lg";
// memberCard.innerHTML = `
// <div>
// <div class="box">
// <div class="content">
// <img class="w-24 h-24 rounded-full mx-auto" src="${data.image}" alt="${data.name}" />
// </div>
// </div>
// <p class="text-xl mt-6 mb-1 font-black text-white">${data.name}</p>
// <p class="text-md text-gray-400">${data.description}</p>
// </div>
// `;
// steeringCouncil.appendChild(memberCard); // Append member card to the DOM
// };
// // Function to process files in batches
// for (let i = 0; i < jsonFiles.length; i += batchSize) {
// const currentBatch = jsonFiles.slice(i, i + batchSize);
// const promises = currentBatch.map(fetchMember);
// await Promise.all(promises); // Wait for all promises in the current batch to resolve
// }
// // If no valid members were fetched, hide the loader and display a message
// if (!firstMemberLoaded) {
// loader.style.display = 'none'; // Hide the loader if no members were loaded
// steeringCouncil.innerHTML = '<p>No members found.</p>';
// }
// }
// document.addEventListener('DOMContentLoaded', fetchMembers);
// async function fetchMembers() {
// const steeringCouncil = document.getElementById('steeringCouncil');
// const loader = document.getElementById('loader');
// loader.style.display = 'flex'; // Show the loader initially
// const categories = ["ADMIN", "IT", "CSE", "CSE(AI)", "CSE(AIML)", "CS", "ECE", "ME"];
// const startNumber = 1;
// const endNumber = 4000;
// const jsonFiles = [];
// // Prepare all file paths based on categories and member numbers
// for (const category of categories) {
// for (let i = startNumber; i <= endNumber; i++) {
// jsonFiles.push(`member/member${category}${i}.json`);
// }
// }
// const batchSize = 10; // Process files in batches of 10
// const firstBatchSize = 500; // First batch of 500 members
// const validMembers = []; // Array to hold valid member data
// let firstBatchLoaded = false; // Flag to track if the first 500 members are loaded
// const fetchMember = async (file) => {
// try {
// const response = await fetch(file);
// if (response.ok) {
// const data = await response.json();
// validMembers.push(data);
// displayMember(data); // Display each member as soon as data is available
// } else {
// console.warn(`Unable to fetch ${file}: ${response.status}`);
// }
// } catch (error) {
// console.error(`Error fetching ${file}:`, error);
// }
// };
// // Function to display individual member data
// const displayMember = (data) => {
// const memberCard = document.createElement('div');
// memberCard.className = "cc flex flex-col gap-8 items-center justify-around text-center w-[260px] rounded-lg p-6 shadow-lg";
// memberCard.innerHTML = `
// <div>
// <div class="box">
// <div class="content">
// <img class="w-24 h-24 rounded-full mx-auto" src="${data.image}" alt="${data.name}" />
// </div>
// </div>
// <p class="text-xl mt-6 mb-1 font-black text-white">${data.name}</p>
// <p class="text-md text-gray-400">${data.description}</p>
// </div>
// `;
// steeringCouncil.appendChild(memberCard); // Append member card to the DOM
// };
// // Function to fetch the first batch of 500 members
// const fetchFirstBatch = async () => {
// const firstBatch = jsonFiles.slice(0, firstBatchSize); // Get the first 500 files
// const firstBatchPromises = firstBatch.map(fetchMember);
// await Promise.all(firstBatchPromises); // Wait for all first batch promises to resolve
// };
// // Function to fetch remaining members in smaller batches (starting from 501)
// const fetchRemainingBatches = async () => {
// for (let i = firstBatchSize; i < jsonFiles.length; i += batchSize) {
// const currentBatch = jsonFiles.slice(i, i + batchSize);
// const promises = currentBatch.map(fetchMember);
// await Promise.all(promises); // Process each batch and wait for it to complete
// }
// };
// // Fetch the first 500 members and hide the loader once done
// await fetchFirstBatch();
// loader.style.display = 'none'; // Hide the loader after the first 500 members are loaded
// // Fetch the remaining members in the background
// fetchRemainingBatches();
// }
// document.addEventListener('DOMContentLoaded', fetchMembers);
// async function fetchMembers() {
// const steeringCouncil = document.getElementById('steeringCouncil');
// const loader = document.getElementById('loader');
// loader.style.display = 'flex'; // Show the loader initially
// const categories = ["ADMIN", "IT", "CSE", "CSE(AI)", "CSE(AIML)", "CS", "ECE", "ME"];
// const startNumber = 1;
// const endNumber = 4000;
// const jsonFiles = [];
// // Prepare all file paths based on categories and member numbers
// for (const category of categories) {
// for (let i = startNumber; i <= endNumber; i++) {
// jsonFiles.push(`member/member${category}${i}.json`);
// }
// }
// const batchSize = 10; // Process the first 10 files immediately
// const validMembers = []; // Array to hold valid member data
// let firstBatchLoaded = false; // Flag to check if the first batch is loaded
// // Function to fetch each JSON file
// const fetchMember = async (file) => {
// try {
// const response = await fetch(file);
// if (response.ok) {
// const data = await response.json();
// validMembers.push(data);
// displayMember(data); // Display each member as soon as data is available
// } else {
// console.warn(`Unable to fetch ${file}: ${response.status}`);
// }
// } catch (error) {
// console.error(`Error fetching ${file}:`, error);
// }
// };
// // Function to display individual member data
// const displayMember = (data) => {
// const memberCard = document.createElement('div');
// memberCard.className = "cc flex flex-col gap-8 items-center justify-around text-center w-[260px] rounded-lg p-6 shadow-lg";
// memberCard.innerHTML = `
// <div>
// <div class="box">
// <div class="content">
// <img class="w-24 h-24 rounded-full mx-auto" src="${data.image}" alt="${data.name}" />
// </div>
// </div>
// <p class="text-xl mt-6 mb-1 font-black text-white">${data.name}</p>
// <p class="text-md text-gray-400">${data.description}</p>
// </div>
// `;
// steeringCouncil.appendChild(memberCard); // Append member card to the DOM
// };
// // Function to load the first batch and then show the site content
// const loadInitialBatch = async () => {
// const initialBatch = jsonFiles.slice(0, batchSize); // Fetch the first 10 files
// const promises = initialBatch.map(fetchMember);
// await Promise.all(promises); // Wait for the first 10 files to be fetched
// // Hide the loader after the first batch has been loaded
// loader.style.display = 'none';
// firstBatchLoaded = true; // Set flag to true after the first batch is loaded
// };
// // Function to process the remaining files in the background
// const loadRemainingFiles = async () => {
// for (let i = batchSize; i < jsonFiles.length; i += batchSize) {
// const currentBatch = jsonFiles.slice(i, i + batchSize);
// const promises = currentBatch.map(fetchMember);
// await Promise.all(promises); // Wait for all promises in the current batch to resolve
// }
// };
// // Start loading the first batch immediately
// await loadInitialBatch();
// // Load the remaining files in the background without delaying the site load
// loadRemainingFiles();
// }
// document.addEventListener('DOMContentLoaded', fetchMembers);
// async function fetchMembers() {
// const steeringCouncil = document.getElementById('steeringCouncil');
// const loader = document.getElementById('loader');
// loader.style.display = 'flex'; // Show the loader initially
// const categories = ["ADMIN", "IT", "CSE", "CSE(AI)", "CSE(AIML)", "CS", "ECE", "ME"];
// const startNumber = 1;
// const endNumber = 4000;
// const firstBatchCount = 50; // Fetch 50 files before hiding the loader
// const jsonFiles = [];
// // Prepare all file paths based on categories and member numbers
// for (const category of categories) {
// for (let i = startNumber; i <= endNumber; i++) {
// jsonFiles.push(`member/member${category}${i}.json`);
// }
// }
// const batchSize = 10; // Process files in batches of 10
// const validMembers = []; // Array to hold valid member data
// let firstBatchFetched = false; // Flag to track if the first 50 members have been fetched
// // Function to display individual member data
// const displayMember = (data) => {
// const memberCard = document.createElement('div');
// memberCard.className = "cc flex flex-col gap-8 items-center justify-around text-center w-[260px] rounded-lg p-6 shadow-lg";
// memberCard.innerHTML = `
// <div>
// <div class="box">
// <div class="content">
// <img class="w-24 h-24 rounded-full mx-auto" src="${data.image}" alt="${data.name}" />
// </div>
// </div>
// <p class="text-xl mt-6 mb-1 font-black text-white">${data.name}</p>
// <p class="text-md text-gray-400">${data.description}</p>
// </div>
// `;
// steeringCouncil.appendChild(memberCard); // Append member card to the DOM
// };
// const fetchMember = async (file) => {
// try {
// const response = await fetch(file);
// if (response.ok) {
// const data = await response.json();
// validMembers.push(data);
// displayMember(data); // Display each member as soon as data is available
// } else {
// console.warn(`Unable to fetch ${file}: ${response.status}`);
// }
// } catch (error) {
// console.error(`Error fetching ${file}:`, error);
// }
// };
// // Function to process files in batches
// const processBatches = async (files, batchCount) => {
// for (let i = 0; i < files.length; i += batchSize) {
// const currentBatch = files.slice(i, i + batchSize);
// const promises = currentBatch.map(fetchMember);
// await Promise.all(promises); // Wait for all promises in the current batch to resolve
// // If the first 50 files are fetched, hide the loader and show the website
// if (!firstBatchFetched && validMembers.length >= batchCount) {
// loader.style.display = 'none'; // Hide the loader after 50 valid members are fetched
// firstBatchFetched = true; // Set the flag to indicate the first batch is done
// }
// }
// };
// // Fetch the first 50 JSON files before showing the website
// await processBatches(jsonFiles.slice(0, firstBatchCount), firstBatchCount);
// // After the first 50, continue fetching the rest in the background without the loader
// processBatches(jsonFiles.slice(firstBatchCount), jsonFiles.length - firstBatchCount);
// // If no valid members were fetched after the first batch, hide the loader and display a message
// if (!firstBatchFetched) {
// loader.style.display = 'none'; // Hide the loader if no members were loaded
// steeringCouncil.innerHTML = '<p>No members found.</p>';
// }
// }
// document.addEventListener('DOMContentLoaded', fetchMembers);
async function fetchMembers() {
const steeringCouncil = document.getElementById('steeringCouncil');
const loader = document.getElementById('loader');
loader.style.display = 'flex'; // Show the loader initially
const categories = ["ADMIN", "IT", "CSE", "CSE(AI)", "CSE(AIML)", "CS", "ECE", "ME"];
const startNumber = 1;
const endNumber = 4000;
const firstBatchCount = 50; // Fetch 50 files before background loading starts
const jsonFiles = [];
// Prepare all file paths based on categories and member numbers
for (const category of categories) {
for (let i = startNumber; i <= endNumber; i++) {
jsonFiles.push(`member/member${category}${i}.json`);
}
}
const batchSize = 10; // Process files in batches of 10
const validMembers = []; // Array to hold valid member data
let firstValidFileFetched = false; // Flag to check if at least one valid file is fetched
// Function to display individual member data
const displayMember = (data) => {
const memberCard = document.createElement('div');
memberCard.className = "cc flex flex-col gap-8 items-center justify-around text-center w-[260px] rounded-lg p-6 shadow-lg";
memberCard.innerHTML = `
<div>
<div class="box">
<div class="content">
<img class="w-24 h-24 rounded-full mx-auto" src="${data.image}" alt="${data.name}" />
</div>
</div>
<p class="text-xl mt-6 mb-1 font-black text-white">${data.name}</p>
<p class="text-md text-gray-400">${data.description}</p>
</div>
`;
steeringCouncil.appendChild(memberCard); // Append member card to the DOM
};
const fetchMember = async (file) => {
try {
const response = await fetch(file);
if (response.ok) {
const data = await response.json();
validMembers.push(data);
displayMember(data); // Display each member as soon as data is available
// Hide the loader as soon as the first valid file is fetched
if (!firstValidFileFetched) {
loader.style.display = 'none'; // Hide the loader
firstValidFileFetched = true; // Set flag to indicate a valid file was fetched
}
} else {
console.warn(`Unable to fetch ${file}: ${response.status}`);
}
} catch (error) {
console.error(`Error fetching ${file}:`, error);
}
};
// Function to process files in batches
const processBatches = async (files, batchCount) => {
for (let i = 0; i < files.length; i += batchSize) {
const currentBatch = files.slice(i, i + batchSize);
const promises = currentBatch.map(fetchMember);
await Promise.all(promises); // Wait for all promises in the current batch to resolve
// If the first valid file is fetched, continue to load the remaining files in the background
if (firstValidFileFetched && validMembers.length >= batchCount) {
break; // Break the loop if the first 50 valid files are loaded
}
}
};
// Fetch the first 50 JSON files before showing the website
await processBatches(jsonFiles.slice(0, firstBatchCount), firstBatchCount);
// After the first valid file is fetched, continue fetching the rest in the background
processBatches(jsonFiles.slice(firstBatchCount), jsonFiles.length - firstBatchCount);
// If no valid members were fetched, the loader will remain until the first valid file is fetched
}
document.addEventListener('DOMContentLoaded', fetchMembers);