-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathportfolio.js
More file actions
89 lines (75 loc) · 3.16 KB
/
portfolio.js
File metadata and controls
89 lines (75 loc) · 3.16 KB
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
// portfolio.js - Dynamic rendering for portfolio page
async function loadProjects() {
try {
const response = await fetch('./projects/projects.json');
const projects = await response.json();
renderProjects(projects);
} catch (error) {
console.error('Error loading projects:', error);
// Fallback to show error message or empty state
document.querySelector('.project-list').innerHTML = '<p>Error loading projects. Please try again later.</p>';
}
}
function renderProjects(projects) {
const projectList = document.querySelector('.project-list');
projectList.innerHTML = ''; // Clear existing content
projects.forEach(project => {
const projectBox = createProjectBox(project);
projectList.appendChild(projectBox);
});
}
function createProjectBox(project) {
const projectBox = document.createElement('div');
projectBox.className = 'project-preview-box';
// Create title
const title = document.createElement('h3');
title.textContent = project.title;
projectBox.appendChild(title);
// Create year
const year = document.createElement('p');
year.innerHTML = `<b>Year:</b> ${project.year}`;
projectBox.appendChild(year);
// Create technologies (if exists)
if (project.technologies && project.technologies.trim()) {
const technologies = document.createElement('p');
technologies.innerHTML = `<b>Technologies:</b> ${project.technologies}`;
projectBox.appendChild(technologies);
}
// Create advisors (if exists)
if (project.advisors && project.advisors.trim()) {
const advisors = document.createElement('p');
advisors.innerHTML = `<b>Advisor(s):</b> ${project.advisors}`;
projectBox.appendChild(advisors);
}
// Create collaborators (if exists)
if (project.collaborators && project.collaborators.trim()) {
const collaborators = document.createElement('p');
collaborators.innerHTML = `<b>Collaborator(s):</b> ${project.collaborators}`;
projectBox.appendChild(collaborators);
}
// Create description
const description = document.createElement('p');
description.textContent = project.description;
projectBox.appendChild(description);
// Create links
if (project.links && project.links.length > 0) {
project.links.forEach((link, index) => {
const linkElement = document.createElement('a');
linkElement.href = link.url;
linkElement.target = '_blank';
linkElement.className = 'project-link';
linkElement.textContent = link.text;
projectBox.appendChild(linkElement);
// Add separator after each link except the last one
if (index < project.links.length - 1) {
const separator = document.createElement('span');
separator.textContent = ' • ';
separator.style.color = '#666';
projectBox.appendChild(separator);
}
});
}
return projectBox;
}
// Load projects when the page loads
document.addEventListener('DOMContentLoaded', loadProjects);