-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
288 lines (252 loc) · 13.3 KB
/
Copy pathscript.js
File metadata and controls
288 lines (252 loc) · 13.3 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
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
/* -------------------------------------------------------------
MUHAMMAD AQNA - PORTFOLIO INTERACTIVE JAVASCRIPT
Apple-Style Executive Standard, Visual 3x3 OD Board, & Artifact Carousel Slider
------------------------------------------------------------- */
document.addEventListener('DOMContentLoaded', () => {
// 1. MOBILE NAVIGATION HAMBURGER TOGGLE
const hamburgerBtn = document.getElementById('hamburgerBtn');
const navMenu = document.getElementById('navMenu');
if (hamburgerBtn && navMenu) {
hamburgerBtn.addEventListener('click', () => {
navMenu.classList.toggle('active');
});
}
// 2. ARTIFACTS CAROUSEL SLIDER (LEFT/RIGHT NAVIGATION)
const carouselBtns = document.querySelectorAll('.carousel-nav');
if (carouselBtns.length > 0) {
carouselBtns.forEach(btn => {
btn.addEventListener('click', (e) => {
e.stopPropagation();
const carouselId = btn.getAttribute('data-carousel');
const carouselElem = document.getElementById(carouselId);
if (!carouselElem) return;
const slides = carouselElem.querySelectorAll('.carousel-slide');
let activeIndex = -1;
slides.forEach((slide, idx) => {
if (slide.classList.contains('active-slide')) {
activeIndex = idx;
}
});
if (activeIndex !== -1) {
slides[activeIndex].classList.remove('active-slide');
let nextIndex;
if (btn.classList.contains('carousel-next')) {
nextIndex = (activeIndex + 1) % slides.length;
} else {
nextIndex = (activeIndex - 1 + slides.length) % slides.length;
}
slides[nextIndex].classList.add('active-slide');
}
});
});
}
// 3. ARTIFACTS & EVIDENCE VAULT TAB FILTERING
const artifactTabBtns = document.querySelectorAll('.artifact-tab-btn');
const artifactCards = document.querySelectorAll('.artifact-card');
if (artifactTabBtns.length > 0) {
artifactTabBtns.forEach(btn => {
btn.addEventListener('click', () => {
const target = btn.getAttribute('data-target');
artifactTabBtns.forEach(b => b.classList.remove('active'));
btn.classList.add('active');
artifactCards.forEach(card => {
const category = card.getAttribute('data-category');
if (target === 'all' || category === target) {
card.style.display = 'flex';
} else {
card.style.display = 'none';
}
});
});
});
}
// 4. UPGRADED VISUAL 3x3 OD SYSTEM DEMO & 9-BOX GRID
const performanceSelect = document.getElementById('performanceSelect');
const potentialSelect = document.getElementById('potentialSelect');
const boxCategoryName = document.getElementById('boxCategoryName');
const odActionTitle = document.getElementById('odActionTitle');
const odActionDesc = document.getElementById('odActionDesc');
const cells9Box = document.querySelectorAll('.grid-9box-cell');
const odMatrix = {
'high_high': {
badge: "Star Candidate (Top Talent)",
title: "Intervensi OD: Fast-Track & Strategic Succession",
desc: "Karyawan merupakan aset utama kepemimpinan. Berikan penugasan khusus (stretch assignments), fasilitasi mentorship eksekutif, dan masukkan dalam jalur suksesi kepemimpinan utama (succession planning)."
},
'medium_high': {
badge: "High Potential (Future Star)",
title: "Intervensi OD: Skill Coaching & Role Alignment",
desc: "Karyawan memiliki kapasitas tumbuh tinggi namun kinerja belum optimal. Berikan pelatihan teknis intensif, coaching 1-on-1, dan evaluasi kesesuaian peran (job alignment)."
},
'low_high': {
badge: "Enigma (Misaligned Talent)",
title: "Intervensi OD: Diagnosis Hambatan & Job Crafting",
desc: "Terjadi ketidaksesuaian mendasar antara potensi tinggi karyawan dengan kinerjanya. Lakukan evaluasi Workload Analysis (WLA), audit hambatan lingkungan kerja, atau rotasi ke departemen yang lebih sesuai."
},
'high_medium': {
badge: "High Performer (Core Contributor)",
title: "Intervensi OD: Recognition & Skill Broadening",
desc: "Karyawan secara konsisten melampaui target kinerja harian. Berikan penyesuaian insentif/penghargaan, pertahankan motivasi kerja, dan berikan pelatihan untuk memperluas jangkauan kompetensi."
},
'medium_medium': {
badge: "Core Employee (Solid Performer)",
title: "Intervensi OD: Continuous Feedback & Maintenance",
desc: "Karyawan menopang operasional harian secara stabil. Berikan umpan balik kinerja secara berkala dan dorong partisipasi dalam program pengembangan keterampilan internal."
},
'low_medium': {
badge: "Dilemma (Underperformer)",
title: "Intervensi OD: Performance Improvement Plan (PIP)",
desc: "Karyawan menunjukkan kinerja di bawah standar. Terapkan program perbaikan kinerja (PIP) yang terstruktur selama 30-90 hari dengan indikator keberhasilan (KPI) yang jelas."
},
'high_low': {
badge: "Role Specialist (Expert Contributor)",
title: "Intervensi OD: Knowledge Transfer & Retention",
desc: "Karyawan sangat handal di posisi spesialisnya saat ini namun memiliki minat/kapasitas terbatas untuk naik ke jenjang manajemen. Maksimalkan perannya sebagai mentor teknis."
},
'medium_low': {
badge: "Effective Contributor",
title: "Intervensi OD: Process Standardisation",
desc: "Karyawan menjalankan tugas administratif rutin dengan baik. Pertahankan stabilitas peran dan berikan pelatihan automasi workflow sederhana."
},
'low_low': {
badge: "High Risk (Action Needed)",
title: "Intervensi OD: Role Realignment / Outplacement",
desc: "Karyawan tidak memenuhi standar kinerja maupun potensi pertumbuhan. Lakukan audit evaluasi mendalam, pertimbangkan reassignment ke tugas dasar, atau proses outplacement yang santun."
}
};
function updateODSystem(perf, pot) {
const key = `${perf}_${pot}`;
const data = odMatrix[key] || odMatrix['high_high'];
if (performanceSelect && performanceSelect.value !== perf) performanceSelect.value = perf;
if (potentialSelect && potentialSelect.value !== pot) potentialSelect.value = pot;
cells9Box.forEach(cell => {
if (cell.getAttribute('data-perf') === perf && cell.getAttribute('data-pot') === pot) {
cell.classList.add('active-cell');
} else {
cell.classList.remove('active-cell');
}
});
if (boxCategoryName) boxCategoryName.textContent = data.badge;
if (odActionTitle) odActionTitle.textContent = data.title;
if (odActionDesc) odActionDesc.textContent = data.desc;
}
cells9Box.forEach(cell => {
cell.addEventListener('click', () => {
const perf = cell.getAttribute('data-perf');
const pot = cell.getAttribute('data-pot');
updateODSystem(perf, pot);
});
});
if (performanceSelect && potentialSelect) {
performanceSelect.addEventListener('change', () => {
updateODSystem(performanceSelect.value, potentialSelect.value);
});
potentialSelect.addEventListener('change', () => {
updateODSystem(performanceSelect.value, potentialSelect.value);
});
updateODSystem(performanceSelect.value, potentialSelect.value);
}
// 5. SLIDER INPUTS & LIVE FLIGHT-RISK CALCULATOR
const satisfactionSlider = document.getElementById('satisfactionSlider');
const workloadSlider = document.getElementById('workloadSlider');
const compSlider = document.getElementById('compSlider');
const managerSlider = document.getElementById('managerSlider');
const satisfactionValue = document.getElementById('satisfactionValue');
const workloadValue = document.getElementById('workloadValue');
const compValue = document.getElementById('compValue');
const managerValue = document.getElementById('managerValue');
const riskScoreText = document.getElementById('riskScoreText');
const recommendationText = document.getElementById('recommendationText');
function calculateRisk() {
if (!satisfactionSlider) return;
const satisfaction = parseFloat(satisfactionSlider.value);
const workload = parseInt(workloadSlider.value);
const comp = parseInt(compSlider.value);
const manager = parseFloat(managerSlider.value);
if (satisfactionValue) satisfactionValue.textContent = satisfaction.toFixed(1);
if (workloadValue) workloadValue.textContent = workload + ' Jam';
if (compValue) compValue.textContent = comp + '%';
if (managerValue) managerValue.textContent = manager.toFixed(1);
let rawScore = ((10 - satisfaction) * 3) + ((workload - 35) * 1.2) + ((100 - comp) * 0.4) + ((5 - manager) * 5);
let riskPercentage = Math.min(Math.max(Math.round((rawScore / 85) * 100), 5), 98);
if (!riskScoreText || !recommendationText) return;
if (riskPercentage < 35) {
riskScoreText.style.color = '#16a34a';
riskScoreText.textContent = `LOW RISK (${riskPercentage}%)`;
recommendationText.textContent = 'Karyawan memiliki tingkat retensi tinggi. Fokus pada pengayaan peran (job enrichment) dan perencanaan jalur kepemimpinan jangka panjang.';
} else if (riskPercentage < 65) {
riskScoreText.style.color = '#d97706';
riskScoreText.textContent = `MODERATE RISK (${riskPercentage}%)`;
recommendationText.textContent = 'Terdeteksi potensi kejenuhan sedang. Disarankan untuk meninjau distribusi beban kerja harian dan memberikan sesi feedback 1-on-1.';
} else {
riskScoreText.style.color = '#dc2626';
riskScoreText.textContent = `HIGH RISK (${riskPercentage}%)`;
recommendationText.textContent = 'Tingkat risiko pengunduran diri kritis. Diperlukan intervensi penyesuaian kompensasi pasar, Workload Analysis (WLA), dan evaluasi hubungan manajerial.';
}
}
if (satisfactionSlider) {
[satisfactionSlider, workloadSlider, compSlider, managerSlider].forEach(slider => {
if (slider) slider.addEventListener('input', calculateRisk);
});
calculateRisk();
}
// 6. COPY EMAIL BUTTON INTERACTION
const copyEmailBtn = document.getElementById('copyEmailBtn');
if (copyEmailBtn) {
copyEmailBtn.addEventListener('click', () => {
navigator.clipboard.writeText('aqnahizbulha.work@gmail.com').then(() => {
const originalText = copyEmailBtn.innerHTML;
copyEmailBtn.innerHTML = `<i class="fas fa-check"></i> Email Berhasil Disalin!`;
copyEmailBtn.style.background = '#16a34a';
copyEmailBtn.style.color = '#ffffff';
setTimeout(() => {
copyEmailBtn.innerHTML = originalText;
copyEmailBtn.style.background = '';
copyEmailBtn.style.color = '';
}, 2500);
});
});
}
// 7. SMOOTH SCROLLING NAV
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
if (navMenu) navMenu.classList.remove('active');
const target = document.querySelector(this.getAttribute('href'));
if (target) {
target.scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
});
});
// 8. LIGHTBOX IMAGE FULLSCREEN ZOOM MODAL
const lightboxModal = document.getElementById('imageLightboxModal');
const lightboxImg = document.getElementById('lightboxImg');
const lightboxCaption = document.getElementById('lightboxCaption');
const lightboxClose = document.getElementById('lightboxClose');
if (lightboxModal && lightboxImg) {
document.querySelectorAll('.carousel-slide img').forEach(img => {
img.addEventListener('click', (e) => {
e.stopPropagation();
if (img.src && !img.src.includes('undefined')) {
lightboxModal.style.display = 'flex';
lightboxImg.src = img.src;
lightboxCaption.textContent = img.alt || 'Pratinjau Dokumen High Resolution';
}
});
});
if (lightboxClose) {
lightboxClose.addEventListener('click', () => {
lightboxModal.style.display = 'none';
});
}
lightboxModal.addEventListener('click', (e) => {
if (e.target === lightboxModal) {
lightboxModal.style.display = 'none';
}
});
}
console.log("Muhammad Aqna Portfolio Script Active with Carousel & HD Lightbox Modal.");
});