devfolio-page 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +219 -0
- package/dist/cli/commands/init.js +282 -0
- package/dist/cli/commands/render.js +105 -0
- package/dist/cli/commands/themes.js +40 -0
- package/dist/cli/commands/validate.js +86 -0
- package/dist/cli/helpers/validate.js +99 -0
- package/dist/cli/index.js +51 -0
- package/dist/cli/postinstall.js +20 -0
- package/dist/cli/schemas/portfolio.schema.js +299 -0
- package/dist/generator/builder.js +551 -0
- package/dist/generator/markdown.js +57 -0
- package/dist/generator/themes/dark-academia/partials/education.html +15 -0
- package/dist/generator/themes/dark-academia/partials/experience.html +23 -0
- package/dist/generator/themes/dark-academia/partials/hero.html +15 -0
- package/dist/generator/themes/dark-academia/partials/projects.html +17 -0
- package/dist/generator/themes/dark-academia/partials/skills.html +11 -0
- package/dist/generator/themes/dark-academia/partials/writing.html +15 -0
- package/dist/generator/themes/dark-academia/script.js +91 -0
- package/dist/generator/themes/dark-academia/styles.css +913 -0
- package/dist/generator/themes/dark-academia/template.html +46 -0
- package/dist/generator/themes/dark-academia/templates/experiments-index.html +80 -0
- package/dist/generator/themes/dark-academia/templates/homepage.html +125 -0
- package/dist/generator/themes/dark-academia/templates/project.html +101 -0
- package/dist/generator/themes/dark-academia/templates/projects-index.html +80 -0
- package/dist/generator/themes/dark-academia/templates/writing-index.html +75 -0
- package/dist/generator/themes/modern/partials/education.html +14 -0
- package/dist/generator/themes/modern/partials/experience.html +21 -0
- package/dist/generator/themes/modern/partials/hero.html +15 -0
- package/dist/generator/themes/modern/partials/projects.html +17 -0
- package/dist/generator/themes/modern/partials/skills.html +11 -0
- package/dist/generator/themes/modern/partials/writing.html +14 -0
- package/dist/generator/themes/modern/script.js +136 -0
- package/dist/generator/themes/modern/styles.css +835 -0
- package/dist/generator/themes/modern/template.html +59 -0
- package/dist/generator/themes/modern/templates/experiments-index.html +78 -0
- package/dist/generator/themes/modern/templates/homepage.html +125 -0
- package/dist/generator/themes/modern/templates/project.html +98 -0
- package/dist/generator/themes/modern/templates/projects-index.html +79 -0
- package/dist/generator/themes/modern/templates/writing-index.html +73 -0
- package/dist/generator/themes/srcl/partials/education.html +27 -0
- package/dist/generator/themes/srcl/partials/experience.html +25 -0
- package/dist/generator/themes/srcl/partials/hero.html +22 -0
- package/dist/generator/themes/srcl/partials/projects.html +24 -0
- package/dist/generator/themes/srcl/partials/sections/code.html +8 -0
- package/dist/generator/themes/srcl/partials/sections/demo.html +8 -0
- package/dist/generator/themes/srcl/partials/sections/gallery.html +12 -0
- package/dist/generator/themes/srcl/partials/sections/image.html +6 -0
- package/dist/generator/themes/srcl/partials/sections/interactive.html +8 -0
- package/dist/generator/themes/srcl/partials/sections/metrics.html +10 -0
- package/dist/generator/themes/srcl/partials/sections/outcomes.html +5 -0
- package/dist/generator/themes/srcl/partials/sections/overview.html +5 -0
- package/dist/generator/themes/srcl/partials/sections/process.html +5 -0
- package/dist/generator/themes/srcl/partials/skills.html +21 -0
- package/dist/generator/themes/srcl/partials/writing.html +14 -0
- package/dist/generator/themes/srcl/script.js +354 -0
- package/dist/generator/themes/srcl/styles.css +1260 -0
- package/dist/generator/themes/srcl/template.html +46 -0
- package/dist/generator/themes/srcl/templates/experiments-index.html +66 -0
- package/dist/generator/themes/srcl/templates/homepage.html +136 -0
- package/dist/generator/themes/srcl/templates/project.html +96 -0
- package/dist/generator/themes/srcl/templates/projects-index.html +70 -0
- package/dist/generator/themes/srcl/templates/writing-index.html +61 -0
- package/dist/types/portfolio.js +4 -0
- package/package.json +58 -0
- package/src/generator/themes/dark-academia/partials/education.html +15 -0
- package/src/generator/themes/dark-academia/partials/experience.html +23 -0
- package/src/generator/themes/dark-academia/partials/hero.html +15 -0
- package/src/generator/themes/dark-academia/partials/projects.html +17 -0
- package/src/generator/themes/dark-academia/partials/skills.html +11 -0
- package/src/generator/themes/dark-academia/partials/writing.html +15 -0
- package/src/generator/themes/dark-academia/script.js +91 -0
- package/src/generator/themes/dark-academia/styles.css +913 -0
- package/src/generator/themes/dark-academia/template.html +46 -0
- package/src/generator/themes/dark-academia/templates/experiments-index.html +80 -0
- package/src/generator/themes/dark-academia/templates/homepage.html +125 -0
- package/src/generator/themes/dark-academia/templates/project.html +101 -0
- package/src/generator/themes/dark-academia/templates/projects-index.html +80 -0
- package/src/generator/themes/dark-academia/templates/writing-index.html +75 -0
- package/src/generator/themes/modern/partials/education.html +14 -0
- package/src/generator/themes/modern/partials/experience.html +21 -0
- package/src/generator/themes/modern/partials/hero.html +15 -0
- package/src/generator/themes/modern/partials/projects.html +17 -0
- package/src/generator/themes/modern/partials/skills.html +11 -0
- package/src/generator/themes/modern/partials/writing.html +14 -0
- package/src/generator/themes/modern/script.js +136 -0
- package/src/generator/themes/modern/styles.css +835 -0
- package/src/generator/themes/modern/template.html +59 -0
- package/src/generator/themes/modern/templates/experiments-index.html +78 -0
- package/src/generator/themes/modern/templates/homepage.html +125 -0
- package/src/generator/themes/modern/templates/project.html +98 -0
- package/src/generator/themes/modern/templates/projects-index.html +79 -0
- package/src/generator/themes/modern/templates/writing-index.html +73 -0
- package/src/generator/themes/srcl/partials/education.html +27 -0
- package/src/generator/themes/srcl/partials/experience.html +25 -0
- package/src/generator/themes/srcl/partials/hero.html +22 -0
- package/src/generator/themes/srcl/partials/projects.html +24 -0
- package/src/generator/themes/srcl/partials/sections/code.html +8 -0
- package/src/generator/themes/srcl/partials/sections/demo.html +8 -0
- package/src/generator/themes/srcl/partials/sections/gallery.html +12 -0
- package/src/generator/themes/srcl/partials/sections/image.html +6 -0
- package/src/generator/themes/srcl/partials/sections/interactive.html +8 -0
- package/src/generator/themes/srcl/partials/sections/metrics.html +10 -0
- package/src/generator/themes/srcl/partials/sections/outcomes.html +5 -0
- package/src/generator/themes/srcl/partials/sections/overview.html +5 -0
- package/src/generator/themes/srcl/partials/sections/process.html +5 -0
- package/src/generator/themes/srcl/partials/skills.html +21 -0
- package/src/generator/themes/srcl/partials/writing.html +14 -0
- package/src/generator/themes/srcl/script.js +354 -0
- package/src/generator/themes/srcl/styles.css +1260 -0
- package/src/generator/themes/srcl/template.html +46 -0
- package/src/generator/themes/srcl/templates/experiments-index.html +66 -0
- package/src/generator/themes/srcl/templates/homepage.html +136 -0
- package/src/generator/themes/srcl/templates/project.html +96 -0
- package/src/generator/themes/srcl/templates/projects-index.html +70 -0
- package/src/generator/themes/srcl/templates/writing-index.html +61 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<section id="writing" class="section">
|
|
2
|
+
<h2 class="section-title">Publications</h2>
|
|
3
|
+
<div class="writing-list">
|
|
4
|
+
{{#articles}}
|
|
5
|
+
<div class="writing-item">
|
|
6
|
+
<div class="writing-date">{{date}}</div>
|
|
7
|
+
<div class="writing-content">
|
|
8
|
+
<a href="{{url}}" target="_blank" class="writing-title">{{title}}</a>
|
|
9
|
+
{{#publication}}<div class="writing-publication">{{publication}}</div>{{/publication}}
|
|
10
|
+
{{#description}}<p class="writing-description">{{description}}</p>{{/description}}
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
13
|
+
{{/articles}}
|
|
14
|
+
</div>
|
|
15
|
+
</section>
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dark Academia Theme Interactive Features
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
(function() {
|
|
6
|
+
'use strict';
|
|
7
|
+
|
|
8
|
+
// Theme Toggle
|
|
9
|
+
function toggleTheme() {
|
|
10
|
+
const current = document.body.dataset.theme || document.documentElement.dataset.theme || 'dark';
|
|
11
|
+
const newTheme = current === 'dark' ? 'light' : 'dark';
|
|
12
|
+
|
|
13
|
+
// Set on both html and body for CSS compatibility
|
|
14
|
+
document.documentElement.dataset.theme = newTheme;
|
|
15
|
+
document.body.dataset.theme = newTheme;
|
|
16
|
+
|
|
17
|
+
try {
|
|
18
|
+
localStorage.setItem('academia-theme', newTheme);
|
|
19
|
+
} catch (e) {
|
|
20
|
+
// localStorage not available
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function loadThemePreference() {
|
|
25
|
+
try {
|
|
26
|
+
const saved = localStorage.getItem('academia-theme');
|
|
27
|
+
if (saved) {
|
|
28
|
+
// Set on both html and body for CSS compatibility
|
|
29
|
+
document.documentElement.dataset.theme = saved;
|
|
30
|
+
document.body.dataset.theme = saved;
|
|
31
|
+
}
|
|
32
|
+
} catch (e) {
|
|
33
|
+
// localStorage not available
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Smooth scroll for anchor links
|
|
38
|
+
function initSmoothScroll() {
|
|
39
|
+
document.querySelectorAll('a[href^="#"]').forEach(link => {
|
|
40
|
+
link.addEventListener('click', (e) => {
|
|
41
|
+
const href = link.getAttribute('href');
|
|
42
|
+
if (href === '#') return;
|
|
43
|
+
|
|
44
|
+
const target = document.querySelector(href);
|
|
45
|
+
if (target) {
|
|
46
|
+
e.preventDefault();
|
|
47
|
+
const navHeight = document.querySelector('.site-nav')?.offsetHeight || 60;
|
|
48
|
+
const targetPosition = target.getBoundingClientRect().top + window.scrollY - navHeight - 32;
|
|
49
|
+
|
|
50
|
+
window.scrollTo({
|
|
51
|
+
top: targetPosition,
|
|
52
|
+
behavior: 'smooth'
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
history.pushState(null, '', href);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Keyboard shortcuts
|
|
62
|
+
function initKeyboardShortcuts() {
|
|
63
|
+
document.addEventListener('keydown', (e) => {
|
|
64
|
+
if (e.target.matches('input, textarea, select')) return;
|
|
65
|
+
|
|
66
|
+
// Ctrl+T or Cmd+T: Toggle theme
|
|
67
|
+
if ((e.ctrlKey || e.metaKey) && e.key === 't') {
|
|
68
|
+
e.preventDefault();
|
|
69
|
+
toggleTheme();
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
// Theme toggle button click
|
|
74
|
+
document.querySelectorAll('.theme-btn, [data-hotkey="ctrl+t"]').forEach(button => {
|
|
75
|
+
button.addEventListener('click', toggleTheme);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Initialize
|
|
80
|
+
function init() {
|
|
81
|
+
loadThemePreference();
|
|
82
|
+
initSmoothScroll();
|
|
83
|
+
initKeyboardShortcuts();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (document.readyState === 'loading') {
|
|
87
|
+
document.addEventListener('DOMContentLoaded', init);
|
|
88
|
+
} else {
|
|
89
|
+
init();
|
|
90
|
+
}
|
|
91
|
+
})();
|