jekyll-theme-resume 1.3.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.
- checksums.yaml +7 -0
- data/403.html +6 -0
- data/404.html +6 -0
- data/500.html +6 -0
- data/CHANGELOG.md +498 -0
- data/CODE_OF_CONDUCT.md +92 -0
- data/LICENSE.txt +22 -0
- data/README.md +184 -0
- data/SECURITY.md +30 -0
- data/_config.sample.yml +329 -0
- data/_data/locales/ar.yml +85 -0
- data/_data/locales/de.yml +86 -0
- data/_data/locales/en.yml +84 -0
- data/_data/locales/es.yml +86 -0
- data/_data/locales/fr.yml +86 -0
- data/_data/locales/ur.yml +86 -0
- data/_data/social_networks.yml +83 -0
- data/_includes/analytics-body.html +12 -0
- data/_includes/analytics-head.html +36 -0
- data/_includes/avatar.html +84 -0
- data/_includes/dark-mode-toggle.html +202 -0
- data/_includes/data-loader.html +42 -0
- data/_includes/date-formatter.html +63 -0
- data/_includes/grouped-item-list.html +53 -0
- data/_includes/hreflang.html +58 -0
- data/_includes/language-switcher.html +72 -0
- data/_includes/print-social-links.html +23 -0
- data/_includes/resume-section.html +547 -0
- data/_includes/safe-url.html +21 -0
- data/_includes/shared-head.html +51 -0
- data/_includes/social-links.html +54 -0
- data/_includes/vendors/svg-icons/ATTRIBUTION.md +34 -0
- data/_includes/vendors/svg-icons/dev.svg +3 -0
- data/_includes/vendors/svg-icons/dribbble-symbol.svg +3 -0
- data/_includes/vendors/svg-icons/envelope.svg +4 -0
- data/_includes/vendors/svg-icons/facebook.svg +3 -0
- data/_includes/vendors/svg-icons/flickr.svg +4 -0
- data/_includes/vendors/svg-icons/github.svg +3 -0
- data/_includes/vendors/svg-icons/globe-1.svg +3 -0
- data/_includes/vendors/svg-icons/instagram.svg +4 -0
- data/_includes/vendors/svg-icons/linkedin.svg +3 -0
- data/_includes/vendors/svg-icons/medium.svg +3 -0
- data/_includes/vendors/svg-icons/phone.svg +13 -0
- data/_includes/vendors/svg-icons/pinterest.svg +3 -0
- data/_includes/vendors/svg-icons/postcard.svg +14 -0
- data/_includes/vendors/svg-icons/telegram.svg +3 -0
- data/_includes/vendors/svg-icons/whatsapp.svg +3 -0
- data/_includes/vendors/svg-icons/x.svg +3 -0
- data/_includes/vendors/svg-icons/youtube.svg +3 -0
- data/_layouts/default.html +65 -0
- data/_layouts/error.html +138 -0
- data/_layouts/profile.html +123 -0
- data/_layouts/resume.html +238 -0
- data/_plugins/error_pages_generator.rb +71 -0
- data/_plugins/json_resume_generator.rb +79 -0
- data/_plugins/resume_pages_generator.rb +71 -0
- data/_plugins/resume_validator.rb +40 -0
- data/_sass/_all-pages.scss +335 -0
- data/_sass/_base.scss +130 -0
- data/_sass/_dark-mode.scss +387 -0
- data/_sass/_layout.scss +116 -0
- data/_sass/_mixins.scss +136 -0
- data/_sass/_normalize.scss +379 -0
- data/_sass/_profile-page.scss +60 -0
- data/_sass/_resume-ltr.scss +436 -0
- data/_sass/_resume-rtl.scss +91 -0
- data/_sass/_variables.scss +45 -0
- data/assets/css/cv-ltr.scss +31 -0
- data/assets/css/cv-rtl.scss +36 -0
- data/assets/css/main.scss +8 -0
- data/assets/css/profile.scss +9 -0
- data/assets/favicon/resume/about.txt +6 -0
- data/assets/favicon/resume/android-chrome-192x192.png +0 -0
- data/assets/favicon/resume/android-chrome-512x512.png +0 -0
- data/assets/favicon/resume/apple-touch-icon.png +0 -0
- data/assets/favicon/resume/favicon-16x16.png +0 -0
- data/assets/favicon/resume/favicon-32x32.png +0 -0
- data/assets/favicon/resume/favicon.ico +0 -0
- data/assets/favicon/resume/site.webmanifest +1 -0
- data/bin/validate-resume +89 -0
- data/bin/verify +27 -0
- data/docs/README.md +89 -0
- data/docs/explanation/accessibility-decisions.md +27 -0
- data/docs/explanation/architecture.md +44 -0
- data/docs/explanation/dark-mode-approach.md +25 -0
- data/docs/explanation/data-driven-model.md +25 -0
- data/docs/explanation/multilingual-and-rtl-design.md +40 -0
- data/docs/how-to/add-a-language.md +57 -0
- data/docs/how-to/add-a-section.md +35 -0
- data/docs/how-to/add-a-social-platform.md +32 -0
- data/docs/how-to/add-a-test.md +34 -0
- data/docs/how-to/create-a-custom-layout.md +64 -0
- data/docs/how-to/enable-dark-mode.md +43 -0
- data/docs/how-to/link-translations-with-hreflang.md +25 -0
- data/docs/how-to/migrate-v0.9-to-v1.0.md +46 -0
- data/docs/how-to/override-locale-strings.md +51 -0
- data/docs/how-to/override-sass-partials.md +26 -0
- data/docs/how-to/proof-built-html.md +22 -0
- data/docs/how-to/publish-json-resume.md +38 -0
- data/docs/how-to/show-language-proficiency-in-header.md +13 -0
- data/docs/how-to/switch-resume-versions.md +42 -0
- data/docs/how-to/troubleshoot-builds.md +39 -0
- data/docs/how-to/validate-in-ci.md +38 -0
- data/docs/how-to/verify-accessibility.md +28 -0
- data/docs/reference/accessibility-coverage.md +39 -0
- data/docs/reference/config.md +378 -0
- data/docs/reference/data-schemas.md +529 -0
- data/docs/reference/glossary.md +39 -0
- data/docs/reference/includes.md +197 -0
- data/docs/reference/json-resume-fields.md +148 -0
- data/docs/reference/layouts.md +144 -0
- data/docs/reference/locale-keys.md +76 -0
- data/docs/reference/repository-map.md +83 -0
- data/docs/reference/sass-tokens.md +279 -0
- data/docs/reference/testing-suites.md +62 -0
- data/docs/reference/validator-cli.md +203 -0
- data/docs/tutorials/getting-started.md +173 -0
- data/lib/jekyll-theme-resume/json_resume_exporter.rb +334 -0
- data/lib/jekyll-theme-resume/resume_validator.rb +853 -0
- data/lib/jekyll-theme-resume/schemas/LICENSE.md +21 -0
- data/lib/jekyll-theme-resume/schemas/json_resume_v1.0.0.json +500 -0
- data/lib/jekyll-theme-resume.rb +21 -0
- metadata +371 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
direction: "ltr"
|
|
2
|
+
font_family: ""
|
|
3
|
+
font_url: ""
|
|
4
|
+
line_height: 1.5
|
|
5
|
+
ui:
|
|
6
|
+
home: "Startseite"
|
|
7
|
+
skip_to_content: "Zum Hauptinhalt springen"
|
|
8
|
+
photo_alt: "Profilfoto"
|
|
9
|
+
present: "Heute"
|
|
10
|
+
date_of_birth: "Geburtsdatum:"
|
|
11
|
+
languages: "Sprachen:"
|
|
12
|
+
contact_me: "Kontaktieren Sie mich"
|
|
13
|
+
cv_button: "Lebenslauf"
|
|
14
|
+
not_looking_for_work: "Ich bin derzeit nicht auf Jobsuche."
|
|
15
|
+
social_links: "Soziale Links"
|
|
16
|
+
page_last_generated_on: "Diese Seite wurde zuletzt generiert am"
|
|
17
|
+
cv_last_generated_on: "Dieser Lebenslauf wurde zuletzt generiert am"
|
|
18
|
+
at: "um"
|
|
19
|
+
credential_id: "Zertifikats-ID:"
|
|
20
|
+
list_separator: ", "
|
|
21
|
+
dark_mode_toggle: "Zum Dunkelmodus wechseln"
|
|
22
|
+
language_switcher: "Sprachauswahl"
|
|
23
|
+
language_name: "Deutsch"
|
|
24
|
+
reload_page: "Seite neu laden"
|
|
25
|
+
section_titles:
|
|
26
|
+
experience: "Berufserfahrung"
|
|
27
|
+
education: "Ausbildung"
|
|
28
|
+
certifications: "Lizenzen & Zertifizierungen"
|
|
29
|
+
courses: "Kurse"
|
|
30
|
+
volunteering: "Ehrenamt"
|
|
31
|
+
projects: "Projekte"
|
|
32
|
+
skills: "Fähigkeiten"
|
|
33
|
+
recognitions: "Auszeichnungen"
|
|
34
|
+
associations: "Mitgliedschaften"
|
|
35
|
+
interests: "Interessen"
|
|
36
|
+
languages: "Sprachen"
|
|
37
|
+
links: "Weitere Links"
|
|
38
|
+
publications: "Veröffentlichungen"
|
|
39
|
+
references: "Referenzen"
|
|
40
|
+
social_labels:
|
|
41
|
+
email: "E-Mail"
|
|
42
|
+
github: "GitHub"
|
|
43
|
+
twitter: "X (Twitter)"
|
|
44
|
+
medium: "Medium"
|
|
45
|
+
dribbble: "Dribbble"
|
|
46
|
+
facebook: "Facebook"
|
|
47
|
+
linkedin: "LinkedIn"
|
|
48
|
+
instagram: "Instagram"
|
|
49
|
+
website: "Webseite"
|
|
50
|
+
whatsapp: "WhatsApp"
|
|
51
|
+
devto: "Dev.to"
|
|
52
|
+
flickr: "Flickr"
|
|
53
|
+
pinterest: "Pinterest"
|
|
54
|
+
telegram: "Telegram"
|
|
55
|
+
youtube: "YouTube"
|
|
56
|
+
error_pages:
|
|
57
|
+
"404":
|
|
58
|
+
title: "Seite Nicht Gefunden"
|
|
59
|
+
message: "Die gesuchte Seite wurde möglicherweise entfernt, umbenannt oder ist vorübergehend nicht verfügbar."
|
|
60
|
+
"403":
|
|
61
|
+
title: "Zugriff Verweigert"
|
|
62
|
+
message: "Sie haben keine Berechtigung, auf die angeforderte Ressource oder das Verzeichnis zuzugreifen."
|
|
63
|
+
"500":
|
|
64
|
+
title: "Interner Serverfehler"
|
|
65
|
+
message: "Der Server hat einen unerwarteten Zustand festgestellt, der die Bearbeitung der Anfrage verhindert hat. Bitte versuchen Sie es später erneut."
|
|
66
|
+
"503":
|
|
67
|
+
title: "Dienst Nicht Verfügbar"
|
|
68
|
+
message: "Der Server kann die Anfrage derzeit aufgrund von Wartungsarbeiten oder Überlastung nicht bearbeiten."
|
|
69
|
+
present_values:
|
|
70
|
+
- "present"
|
|
71
|
+
- "heute"
|
|
72
|
+
- "aktuell"
|
|
73
|
+
- "gegenwärtig"
|
|
74
|
+
months:
|
|
75
|
+
- "Januar"
|
|
76
|
+
- "Februar"
|
|
77
|
+
- "März"
|
|
78
|
+
- "April"
|
|
79
|
+
- "Mai"
|
|
80
|
+
- "Juni"
|
|
81
|
+
- "Juli"
|
|
82
|
+
- "August"
|
|
83
|
+
- "September"
|
|
84
|
+
- "Oktober"
|
|
85
|
+
- "November"
|
|
86
|
+
- "Dezember"
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
direction: "ltr"
|
|
2
|
+
font_family: ""
|
|
3
|
+
font_url: ""
|
|
4
|
+
line_height: 1.5
|
|
5
|
+
ui:
|
|
6
|
+
home: "Home"
|
|
7
|
+
skip_to_content: "Skip to main content"
|
|
8
|
+
photo_alt: "Profile photo"
|
|
9
|
+
present: "Present"
|
|
10
|
+
date_of_birth: "DoB:"
|
|
11
|
+
languages: "Languages:"
|
|
12
|
+
contact_me: "Contact me"
|
|
13
|
+
cv_button: "Curriculum Vitae"
|
|
14
|
+
not_looking_for_work: "I'm not looking for work right now."
|
|
15
|
+
social_links: "Social Links"
|
|
16
|
+
page_last_generated_on: "This page was last generated on"
|
|
17
|
+
cv_last_generated_on: "This CV was last generated on"
|
|
18
|
+
at: "at"
|
|
19
|
+
credential_id: "Credential ID:"
|
|
20
|
+
list_separator: ", "
|
|
21
|
+
dark_mode_toggle: "Switch to dark mode"
|
|
22
|
+
language_switcher: "Language Selector"
|
|
23
|
+
language_name: "English"
|
|
24
|
+
reload_page: "Reload Page"
|
|
25
|
+
section_titles:
|
|
26
|
+
experience: "Experience"
|
|
27
|
+
education: "Education"
|
|
28
|
+
certifications: "Licenses & Certifications"
|
|
29
|
+
courses: "Courses"
|
|
30
|
+
volunteering: "Volunteering"
|
|
31
|
+
projects: "Projects"
|
|
32
|
+
skills: "Skills"
|
|
33
|
+
recognitions: "Recognition"
|
|
34
|
+
associations: "Associations"
|
|
35
|
+
interests: "Outside Interests"
|
|
36
|
+
languages: "Languages"
|
|
37
|
+
links: "Additional Links"
|
|
38
|
+
publications: "Publications"
|
|
39
|
+
references: "References"
|
|
40
|
+
social_labels:
|
|
41
|
+
email: "Email"
|
|
42
|
+
github: "GitHub"
|
|
43
|
+
twitter: "X (Twitter)"
|
|
44
|
+
medium: "Medium"
|
|
45
|
+
dribbble: "Dribbble"
|
|
46
|
+
facebook: "Facebook"
|
|
47
|
+
linkedin: "LinkedIn"
|
|
48
|
+
instagram: "Instagram"
|
|
49
|
+
website: "Website"
|
|
50
|
+
whatsapp: "WhatsApp"
|
|
51
|
+
devto: "Dev.to"
|
|
52
|
+
flickr: "Flickr"
|
|
53
|
+
pinterest: "Pinterest"
|
|
54
|
+
telegram: "Telegram"
|
|
55
|
+
youtube: "YouTube"
|
|
56
|
+
error_pages:
|
|
57
|
+
"404":
|
|
58
|
+
title: "Page Not Found"
|
|
59
|
+
message: "The page you are looking for might have been removed, had its name changed, or is temporarily unavailable."
|
|
60
|
+
"403":
|
|
61
|
+
title: "Access Forbidden"
|
|
62
|
+
message: "You do not have permission to access the requested resource or directory."
|
|
63
|
+
"500":
|
|
64
|
+
title: "Internal Server Error"
|
|
65
|
+
message: "The server encountered an unexpected condition that prevented it from fulfilling the request. Please try again later."
|
|
66
|
+
"503":
|
|
67
|
+
title: "Service Unavailable"
|
|
68
|
+
message: "The server is currently unable to handle the request due to maintenance or capacity overload."
|
|
69
|
+
present_values:
|
|
70
|
+
- "present"
|
|
71
|
+
- "current"
|
|
72
|
+
months:
|
|
73
|
+
- "January"
|
|
74
|
+
- "February"
|
|
75
|
+
- "March"
|
|
76
|
+
- "April"
|
|
77
|
+
- "May"
|
|
78
|
+
- "June"
|
|
79
|
+
- "July"
|
|
80
|
+
- "August"
|
|
81
|
+
- "September"
|
|
82
|
+
- "October"
|
|
83
|
+
- "November"
|
|
84
|
+
- "December"
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
direction: "ltr"
|
|
2
|
+
font_family: ""
|
|
3
|
+
font_url: ""
|
|
4
|
+
line_height: 1.5
|
|
5
|
+
ui:
|
|
6
|
+
home: "Inicio"
|
|
7
|
+
skip_to_content: "Saltar al contenido principal"
|
|
8
|
+
photo_alt: "Foto de perfil"
|
|
9
|
+
present: "Actualidad"
|
|
10
|
+
date_of_birth: "Fecha de nacimiento:"
|
|
11
|
+
languages: "Idiomas:"
|
|
12
|
+
contact_me: "Contáctame"
|
|
13
|
+
cv_button: "Currículum Vitae"
|
|
14
|
+
not_looking_for_work: "No estoy buscando trabajo en este momento."
|
|
15
|
+
social_links: "Redes Sociales"
|
|
16
|
+
page_last_generated_on: "Esta página se generó por última vez el"
|
|
17
|
+
cv_last_generated_on: "Este CV se generó por última vez el"
|
|
18
|
+
at: "a las"
|
|
19
|
+
credential_id: "ID de credencial:"
|
|
20
|
+
list_separator: ", "
|
|
21
|
+
dark_mode_toggle: "Cambiar a modo oscuro"
|
|
22
|
+
language_switcher: "Selector de idioma"
|
|
23
|
+
language_name: "Español"
|
|
24
|
+
reload_page: "Recargar página"
|
|
25
|
+
section_titles:
|
|
26
|
+
experience: "Experiencia"
|
|
27
|
+
education: "Educación"
|
|
28
|
+
certifications: "Licencias y Certificaciones"
|
|
29
|
+
courses: "Cursos"
|
|
30
|
+
volunteering: "Voluntariado"
|
|
31
|
+
projects: "Proyectos"
|
|
32
|
+
skills: "Habilidades"
|
|
33
|
+
recognitions: "Reconocimientos"
|
|
34
|
+
associations: "Asociaciones"
|
|
35
|
+
interests: "Intereses Personales"
|
|
36
|
+
languages: "Idiomas"
|
|
37
|
+
links: "Enlaces Adicionales"
|
|
38
|
+
publications: "Publicaciones"
|
|
39
|
+
references: "Referencias"
|
|
40
|
+
social_labels:
|
|
41
|
+
email: "Correo electrónico"
|
|
42
|
+
github: "GitHub"
|
|
43
|
+
twitter: "X (Twitter)"
|
|
44
|
+
medium: "Medium"
|
|
45
|
+
dribbble: "Dribbble"
|
|
46
|
+
facebook: "Facebook"
|
|
47
|
+
linkedin: "LinkedIn"
|
|
48
|
+
instagram: "Instagram"
|
|
49
|
+
website: "Sitio web"
|
|
50
|
+
whatsapp: "WhatsApp"
|
|
51
|
+
devto: "Dev.to"
|
|
52
|
+
flickr: "Flickr"
|
|
53
|
+
pinterest: "Pinterest"
|
|
54
|
+
telegram: "Telegram"
|
|
55
|
+
youtube: "YouTube"
|
|
56
|
+
error_pages:
|
|
57
|
+
"404":
|
|
58
|
+
title: "Página No Encontrada"
|
|
59
|
+
message: "La página que busca pudo haber sido eliminada, cambiado de nombre o no está disponible temporalmente."
|
|
60
|
+
"403":
|
|
61
|
+
title: "Acceso Prohibido"
|
|
62
|
+
message: "No tiene permiso para acceder al recurso o directorio solicitado."
|
|
63
|
+
"500":
|
|
64
|
+
title: "Error Interno del Servidor"
|
|
65
|
+
message: "El servidor encontró una condición inesperada que le impidió completar la solicitud. Inténtelo de nuevo más tarde."
|
|
66
|
+
"503":
|
|
67
|
+
title: "Servicio No Disponible"
|
|
68
|
+
message: "El servidor no puede procesar la solicitud actualmente debido a mantenimiento o sobrecarga."
|
|
69
|
+
present_values:
|
|
70
|
+
- "present"
|
|
71
|
+
- "actualidad"
|
|
72
|
+
- "actualmente"
|
|
73
|
+
- "presente"
|
|
74
|
+
months:
|
|
75
|
+
- "enero"
|
|
76
|
+
- "febrero"
|
|
77
|
+
- "marzo"
|
|
78
|
+
- "abril"
|
|
79
|
+
- "mayo"
|
|
80
|
+
- "junio"
|
|
81
|
+
- "julio"
|
|
82
|
+
- "agosto"
|
|
83
|
+
- "septiembre"
|
|
84
|
+
- "octubre"
|
|
85
|
+
- "noviembre"
|
|
86
|
+
- "diciembre"
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
direction: "ltr"
|
|
2
|
+
font_family: ""
|
|
3
|
+
font_url: ""
|
|
4
|
+
line_height: 1.5
|
|
5
|
+
ui:
|
|
6
|
+
home: "Accueil"
|
|
7
|
+
skip_to_content: "Aller au contenu principal"
|
|
8
|
+
photo_alt: "Photo de profil"
|
|
9
|
+
present: "Présent"
|
|
10
|
+
date_of_birth: "Date de naissance :"
|
|
11
|
+
languages: "Langues :"
|
|
12
|
+
contact_me: "Me contacter"
|
|
13
|
+
cv_button: "CV"
|
|
14
|
+
not_looking_for_work: "Je ne suis pas activement à la recherche d'un emploi."
|
|
15
|
+
social_links: "Liens Sociaux"
|
|
16
|
+
page_last_generated_on: "Cette page a été générée pour la dernière fois le"
|
|
17
|
+
cv_last_generated_on: "Ce CV a été généré pour la dernière fois le"
|
|
18
|
+
at: "à"
|
|
19
|
+
credential_id: "ID de certification :"
|
|
20
|
+
list_separator: ", "
|
|
21
|
+
dark_mode_toggle: "Passer en mode sombre"
|
|
22
|
+
language_switcher: "Sélecteur de langue"
|
|
23
|
+
language_name: "Français"
|
|
24
|
+
reload_page: "Recharger la page"
|
|
25
|
+
section_titles:
|
|
26
|
+
experience: "Expérience"
|
|
27
|
+
education: "Formation"
|
|
28
|
+
certifications: "Licences et Certifications"
|
|
29
|
+
courses: "Cours"
|
|
30
|
+
volunteering: "Bénévolat"
|
|
31
|
+
projects: "Projets"
|
|
32
|
+
skills: "Compétences"
|
|
33
|
+
recognitions: "Distinctions"
|
|
34
|
+
associations: "Associations"
|
|
35
|
+
interests: "Centres d'Intérêt"
|
|
36
|
+
languages: "Langues"
|
|
37
|
+
links: "Liens Complémentaires"
|
|
38
|
+
publications: "Publications"
|
|
39
|
+
references: "Références"
|
|
40
|
+
social_labels:
|
|
41
|
+
email: "E-mail"
|
|
42
|
+
github: "GitHub"
|
|
43
|
+
twitter: "X (Twitter)"
|
|
44
|
+
medium: "Medium"
|
|
45
|
+
dribbble: "Dribbble"
|
|
46
|
+
facebook: "Facebook"
|
|
47
|
+
linkedin: "LinkedIn"
|
|
48
|
+
instagram: "Instagram"
|
|
49
|
+
website: "Site web"
|
|
50
|
+
whatsapp: "WhatsApp"
|
|
51
|
+
devto: "Dev.to"
|
|
52
|
+
flickr: "Flickr"
|
|
53
|
+
pinterest: "Pinterest"
|
|
54
|
+
telegram: "Telegram"
|
|
55
|
+
youtube: "YouTube"
|
|
56
|
+
error_pages:
|
|
57
|
+
"404":
|
|
58
|
+
title: "Page Introuvable"
|
|
59
|
+
message: "La page que vous recherchez a peut-être été supprimée, renommée ou est temporairement indisponible."
|
|
60
|
+
"403":
|
|
61
|
+
title: "Accès Interdit"
|
|
62
|
+
message: "Vous n'avez pas l'autorisation d'accéder à la ressource ou au répertoire demandé."
|
|
63
|
+
"500":
|
|
64
|
+
title: "Erreur Interne du Serveur"
|
|
65
|
+
message: "Le serveur a rencontré une condition inattendue qui l'a empêché de traiter la demande. Veuillez réessayer plus tard."
|
|
66
|
+
"503":
|
|
67
|
+
title: "Service Indisponible"
|
|
68
|
+
message: "Le serveur est actuellement incapable de traiter la demande en raison d'une maintenance ou d'une surcharge."
|
|
69
|
+
present_values:
|
|
70
|
+
- "present"
|
|
71
|
+
- "actuel"
|
|
72
|
+
- "actuellement"
|
|
73
|
+
- "présent"
|
|
74
|
+
months:
|
|
75
|
+
- "janvier"
|
|
76
|
+
- "février"
|
|
77
|
+
- "mars"
|
|
78
|
+
- "avril"
|
|
79
|
+
- "mai"
|
|
80
|
+
- "juin"
|
|
81
|
+
- "juillet"
|
|
82
|
+
- "août"
|
|
83
|
+
- "septembre"
|
|
84
|
+
- "octobre"
|
|
85
|
+
- "novembre"
|
|
86
|
+
- "décembre"
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
direction: "rtl"
|
|
2
|
+
font_family: "'Noto Nastaliq Urdu', serif"
|
|
3
|
+
font_url: "https://fonts.googleapis.com/css2?family=Noto+Nastaliq+Urdu:wght@400..700&display=swap"
|
|
4
|
+
line_height: 2.0
|
|
5
|
+
ui:
|
|
6
|
+
home: "صفحہ اول"
|
|
7
|
+
skip_to_content: "مرکزی مواد پر جائیں"
|
|
8
|
+
photo_alt: "پروفائل تصویر"
|
|
9
|
+
present: "تاحال"
|
|
10
|
+
date_of_birth: "تاریخ پیدائش:"
|
|
11
|
+
languages: "زبانیں:"
|
|
12
|
+
contact_me: "مجھ سے رابطہ کریں"
|
|
13
|
+
cv_button: "سی وی"
|
|
14
|
+
not_looking_for_work: "میں فی الحال ملازمت کی تلاش میں نہیں ہوں۔"
|
|
15
|
+
social_links: "سوشل لنکس"
|
|
16
|
+
page_last_generated_on: "یہ صفحہ آخری بار تیار کیا گیا"
|
|
17
|
+
cv_last_generated_on: "یہ سی وی آخری بار تیار کیا گیا"
|
|
18
|
+
at: "بوقت"
|
|
19
|
+
credential_id: "اسناد کا شناختی نمبر:"
|
|
20
|
+
list_separator: "، "
|
|
21
|
+
dark_mode_toggle: "ڈارک موڈ میں تبدیل کریں"
|
|
22
|
+
language_switcher: "زبان کا انتخاب"
|
|
23
|
+
language_name: "اردو"
|
|
24
|
+
reload_page: "صفحہ دوبارہ لوڈ کریں"
|
|
25
|
+
section_titles:
|
|
26
|
+
experience: "تجربہ"
|
|
27
|
+
education: "تعلیم"
|
|
28
|
+
certifications: "لائسنس اور سرٹیفیکیشنز"
|
|
29
|
+
courses: "کورسز"
|
|
30
|
+
volunteering: "رضاکارانہ خدمات"
|
|
31
|
+
projects: "منصوبے"
|
|
32
|
+
skills: "مہارتیں"
|
|
33
|
+
recognitions: "اعزازات"
|
|
34
|
+
associations: "رکنیتیں"
|
|
35
|
+
interests: "دلچسپیاں"
|
|
36
|
+
languages: "زبانیں"
|
|
37
|
+
links: "مزید لنکس"
|
|
38
|
+
publications: "اشاعتیں"
|
|
39
|
+
references: "حوالہ جات"
|
|
40
|
+
social_labels:
|
|
41
|
+
email: "ای میل"
|
|
42
|
+
github: "گٹ ہب"
|
|
43
|
+
twitter: "ایکس (ٹوئٹر)"
|
|
44
|
+
medium: "میڈیم"
|
|
45
|
+
dribbble: "ڈرِبل"
|
|
46
|
+
facebook: "فیس بک"
|
|
47
|
+
linkedin: "لنکڈ اِن"
|
|
48
|
+
instagram: "انسٹاگرام"
|
|
49
|
+
website: "ویب سائٹ"
|
|
50
|
+
whatsapp: "واٹس ایپ"
|
|
51
|
+
devto: "ڈیو ٹو"
|
|
52
|
+
flickr: "فلکر"
|
|
53
|
+
pinterest: "پن ٹریسٹ"
|
|
54
|
+
telegram: "ٹیلیگرام"
|
|
55
|
+
youtube: "یوٹیوب"
|
|
56
|
+
error_pages:
|
|
57
|
+
"404":
|
|
58
|
+
title: "صفحہ نہیں ملا"
|
|
59
|
+
message: "جو صفحہ آپ تلاش کر رہے ہیں وہ ہٹا دیا گیا ہو، اس کا نام تبدیل کر دیا گیا ہو، یا عارضی طور پر دستیاب نہ ہو۔"
|
|
60
|
+
"403":
|
|
61
|
+
title: "رسائی ممنوع ہے"
|
|
62
|
+
message: "آپ کو مطلوبہ وسیلے یا ڈائریکٹری تک رسائی کی اجازت نہیں ہے۔"
|
|
63
|
+
"500":
|
|
64
|
+
title: "سرور کی اندرونی خرابی"
|
|
65
|
+
message: "سرور کو ایک غیر متوقع مسئلہ پیش آیا جس کی وجہ سے درخواست مکمل نہ ہو سکی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔"
|
|
66
|
+
"503":
|
|
67
|
+
title: "سروس عارضی طور پر دستیاب نہیں"
|
|
68
|
+
message: "دیکھ بھال یا زیادہ لوڈ کی وجہ سے سرور فی الحال درخواست پر عمل کرنے سے قاصر ہے۔"
|
|
69
|
+
present_values:
|
|
70
|
+
- "present"
|
|
71
|
+
- "حال"
|
|
72
|
+
- "موجودہ"
|
|
73
|
+
- "تاحال"
|
|
74
|
+
months:
|
|
75
|
+
- "جنوری"
|
|
76
|
+
- "فروری"
|
|
77
|
+
- "مارچ"
|
|
78
|
+
- "اپریل"
|
|
79
|
+
- "مئی"
|
|
80
|
+
- "جون"
|
|
81
|
+
- "جولائی"
|
|
82
|
+
- "اگست"
|
|
83
|
+
- "ستمبر"
|
|
84
|
+
- "اکتوبر"
|
|
85
|
+
- "نومبر"
|
|
86
|
+
- "دسمبر"
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Shared network list for _includes/social-links.html and
|
|
2
|
+
# _includes/print-social-links.html: one entry per site.social_links.<key>
|
|
3
|
+
# platform. Order here is the icon/print display order. To add a platform,
|
|
4
|
+
# add its SVG to _includes/vendors/svg-icons/ and an entry here.
|
|
5
|
+
#
|
|
6
|
+
# icon: filename (without .svg) under _includes/vendors/svg-icons/
|
|
7
|
+
# itemprop: schema.org microdata value social-links.html sets on the <a>
|
|
8
|
+
# label: English fallback for the icon's aria-label/title; each locale's
|
|
9
|
+
# ui.social_labels.<key> wins when present (print labels use it too)
|
|
10
|
+
- key: devto
|
|
11
|
+
icon: dev
|
|
12
|
+
itemprop: url
|
|
13
|
+
label: Dev.to
|
|
14
|
+
|
|
15
|
+
- key: dribbble
|
|
16
|
+
icon: dribbble-symbol
|
|
17
|
+
itemprop: sameAs
|
|
18
|
+
label: Dribbble
|
|
19
|
+
|
|
20
|
+
- key: email
|
|
21
|
+
icon: envelope
|
|
22
|
+
itemprop: email
|
|
23
|
+
label: Email
|
|
24
|
+
|
|
25
|
+
- key: facebook
|
|
26
|
+
icon: facebook
|
|
27
|
+
itemprop: sameAs
|
|
28
|
+
label: Facebook
|
|
29
|
+
|
|
30
|
+
- key: flickr
|
|
31
|
+
icon: flickr
|
|
32
|
+
itemprop: url
|
|
33
|
+
label: Flickr
|
|
34
|
+
|
|
35
|
+
- key: github
|
|
36
|
+
icon: github
|
|
37
|
+
itemprop: sameAs
|
|
38
|
+
label: GitHub
|
|
39
|
+
|
|
40
|
+
- key: instagram
|
|
41
|
+
icon: instagram
|
|
42
|
+
itemprop: sameAs
|
|
43
|
+
label: Instagram
|
|
44
|
+
|
|
45
|
+
- key: linkedin
|
|
46
|
+
icon: linkedin
|
|
47
|
+
itemprop: sameAs
|
|
48
|
+
label: LinkedIn
|
|
49
|
+
|
|
50
|
+
- key: medium
|
|
51
|
+
icon: medium
|
|
52
|
+
itemprop: url
|
|
53
|
+
label: Medium
|
|
54
|
+
|
|
55
|
+
- key: pinterest
|
|
56
|
+
icon: pinterest
|
|
57
|
+
itemprop: url
|
|
58
|
+
label: Pinterest
|
|
59
|
+
|
|
60
|
+
- key: telegram
|
|
61
|
+
icon: telegram
|
|
62
|
+
itemprop: url
|
|
63
|
+
label: Telegram
|
|
64
|
+
|
|
65
|
+
- key: twitter
|
|
66
|
+
icon: x
|
|
67
|
+
itemprop: sameAs
|
|
68
|
+
label: X (Twitter)
|
|
69
|
+
|
|
70
|
+
- key: website
|
|
71
|
+
icon: globe-1
|
|
72
|
+
itemprop: url
|
|
73
|
+
label: Website
|
|
74
|
+
|
|
75
|
+
- key: whatsapp
|
|
76
|
+
icon: whatsapp
|
|
77
|
+
itemprop: url
|
|
78
|
+
label: WhatsApp
|
|
79
|
+
|
|
80
|
+
- key: youtube
|
|
81
|
+
icon: youtube
|
|
82
|
+
itemprop: url
|
|
83
|
+
label: YouTube
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{%- if site.analytics.gtm -%}
|
|
2
|
+
<!-- Google Tag Manager (noscript) -->
|
|
3
|
+
<noscript>
|
|
4
|
+
<iframe
|
|
5
|
+
src="https://www.googletagmanager.com/ns.html?id={{ site.analytics.gtm | url_encode }}"
|
|
6
|
+
height="0"
|
|
7
|
+
width="0"
|
|
8
|
+
style="display:none;visibility:hidden">
|
|
9
|
+
</iframe>
|
|
10
|
+
</noscript>
|
|
11
|
+
<!-- End Google Tag Manager (noscript) -->
|
|
12
|
+
{%- endif -%}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{%- if site.analytics.gtm -%}
|
|
2
|
+
|
|
3
|
+
<!-- Google Tag Manager -->
|
|
4
|
+
<script>
|
|
5
|
+
(function (w, d, s, l, i) {
|
|
6
|
+
w[l] = w[l] || [];
|
|
7
|
+
w[l].push({
|
|
8
|
+
'gtm.start': new Date().getTime(),
|
|
9
|
+
event: 'gtm.js'
|
|
10
|
+
});
|
|
11
|
+
var f = d.getElementsByTagName(s)[0],
|
|
12
|
+
j = d.createElement(s),
|
|
13
|
+
dl = l != 'dataLayer' ? '&l=' + l : '';
|
|
14
|
+
j.async = true;
|
|
15
|
+
j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
|
|
16
|
+
f.parentNode.insertBefore(j, f);
|
|
17
|
+
})(window, document, 'script', 'dataLayer', {{ site.analytics.gtm | jsonify | replace: '<', '\u003c' }});
|
|
18
|
+
</script>
|
|
19
|
+
<!-- End Google Tag Manager -->
|
|
20
|
+
|
|
21
|
+
{%- elsif site.analytics.gtag and site.analytics.gtag != "" -%}
|
|
22
|
+
|
|
23
|
+
<!-- Global site tag (gtag.js) - Google Analytics -->
|
|
24
|
+
<script async src="https://www.googletagmanager.com/gtag/js?id={{ site.analytics.gtag | url_encode }}"></script>
|
|
25
|
+
<script>
|
|
26
|
+
window.dataLayer = window.dataLayer || [];
|
|
27
|
+
|
|
28
|
+
function gtag() {
|
|
29
|
+
dataLayer.push(arguments);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
gtag('js', new Date());
|
|
33
|
+
gtag('config', {{ site.analytics.gtag | jsonify | replace: '<', '\u003c' }});
|
|
34
|
+
</script>
|
|
35
|
+
|
|
36
|
+
{%- endif -%}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
{%- comment -%}
|
|
2
|
+
Include: Reusable Avatar Component
|
|
3
|
+
- Purpose: Render accessible, configurable profile picture.
|
|
4
|
+
- Parameters:
|
|
5
|
+
- lang: Optional language code. Defaults to page.lang, then site.default_lang, then 'en'.
|
|
6
|
+
- link: Optional boolean to override link rendering.
|
|
7
|
+
- class: Optional extra CSS classes.
|
|
8
|
+
{%- endcomment -%}
|
|
9
|
+
|
|
10
|
+
{%- comment -%}
|
|
11
|
+
Language Detection Cascade:
|
|
12
|
+
Resolves language in order of specificity: explicit include parameter -> page front matter -> site default -> 'en'.
|
|
13
|
+
{%- endcomment -%}
|
|
14
|
+
{% assign current_lang = include.lang | default: page.lang | default: site.default_lang | default: 'en' %}
|
|
15
|
+
{% assign lang_cfg = site.languages[current_lang] %}
|
|
16
|
+
{% assign locale = site.data.locales[current_lang] | default: site.data.locales[site.default_lang] %}
|
|
17
|
+
|
|
18
|
+
{%- comment -%}
|
|
19
|
+
Image Source Resolution Hierarchy & Subpath Safety:
|
|
20
|
+
1. Priority: site.avatar_url (explicit configuration) -> '/assets/images/Profile-min.jpg' (bundled default).
|
|
21
|
+
2. Scheme Safety: avatar_url allows only http/https and avatar_link http/https/mailto/tel (see safe-url.html);
|
|
22
|
+
anything else is dropped (no image, or an unlinked image), never rendered.
|
|
23
|
+
3. Subpath Safety: If the avatar path contains a scheme (':'), it is treated as an absolute external CDN URL and preserved as-is.
|
|
24
|
+
Otherwise, it is piped through Liquid's `relative_url` filter to ensure correct resolution on GitHub Pages sites
|
|
25
|
+
hosted under repository subpaths (e.g. username.github.io/project-name/).
|
|
26
|
+
{%- endcomment -%}
|
|
27
|
+
{% include safe-url.html url=site.avatar_url schemes="http,https" %}
|
|
28
|
+
{% if site.avatar_url == nil or site.avatar_url == "" %}{% assign safe_url = '/assets/images/Profile-min.jpg' %}{% endif %}
|
|
29
|
+
{% if safe_url == nil %}
|
|
30
|
+
{% assign render_avatar = false %}
|
|
31
|
+
{% else %}
|
|
32
|
+
{% assign render_avatar = true %}
|
|
33
|
+
{% if safe_url contains ":" %}
|
|
34
|
+
{% assign avatar_src = safe_url %}
|
|
35
|
+
{% else %}
|
|
36
|
+
{% assign avatar_src = safe_url | relative_url %}
|
|
37
|
+
{% endif %}
|
|
38
|
+
{% endif %}
|
|
39
|
+
|
|
40
|
+
{%- comment -%}
|
|
41
|
+
Localized Alt Text & Title Resolution:
|
|
42
|
+
Generates meaningful alt text to satisfy WCAG 2.2 non-empty alt text requirements.
|
|
43
|
+
Alt text cascade: languages.<lang>.avatar_alt -> languages.<lang>.name -> locale.ui.photo_alt.
|
|
44
|
+
{%- endcomment -%}
|
|
45
|
+
{% assign avatar_alt = lang_cfg.avatar_alt | default: lang_cfg.name | default: locale.ui.photo_alt %}
|
|
46
|
+
{% assign link_title = site.title | default: locale.ui.home %}
|
|
47
|
+
|
|
48
|
+
{%- comment -%}
|
|
49
|
+
Hyperlink Wrapping Toggle:
|
|
50
|
+
Defaults to true. Disabling can occur globally via `site.avatar_link: false` or locally via `include.link: false`.
|
|
51
|
+
{%- endcomment -%}
|
|
52
|
+
{% assign render_link = true %}
|
|
53
|
+
{% if site.avatar_link == false or include.link == false %}
|
|
54
|
+
{% assign render_link = false %}
|
|
55
|
+
{% endif %}
|
|
56
|
+
|
|
57
|
+
{%- comment -%}
|
|
58
|
+
Avatar Markup Rendering:
|
|
59
|
+
- If the avatar_url scheme is not allowed, nothing is rendered.
|
|
60
|
+
- If linked: Wraps <img> in <a> with subpath-safe href and tab-nabbing security (rel="noopener" if target != '_self').
|
|
61
|
+
- If unlinked: Renders standalone <img>.
|
|
62
|
+
Both branches include class="no-print" and itemprop="image".
|
|
63
|
+
{%- endcomment -%}
|
|
64
|
+
{% if render_link %}
|
|
65
|
+
{% include safe-url.html url=site.avatar_link schemes="http,https,mailto,tel" %}
|
|
66
|
+
{% if site.avatar_link == nil or site.avatar_link == "" or site.avatar_link == true %}{% assign safe_url = '/' %}{% endif %}
|
|
67
|
+
{% if safe_url == nil %}
|
|
68
|
+
{% assign render_link = false %}
|
|
69
|
+
{% elsif safe_url contains ":" %}
|
|
70
|
+
{% assign avatar_href = safe_url %}
|
|
71
|
+
{% else %}
|
|
72
|
+
{% assign avatar_href = safe_url | relative_url %}
|
|
73
|
+
{% endif %}
|
|
74
|
+
{% assign avatar_target = site.avatar_link_target | default: '_self' %}
|
|
75
|
+
{% endif %}
|
|
76
|
+
|
|
77
|
+
{% if render_avatar and render_link %}
|
|
78
|
+
<a href="{{ avatar_href | escape }}" title="{{ link_title | escape }}" class="avatar-link no-print"{% if avatar_target != '_self' %} target="{{ avatar_target | escape }}" rel="noopener"{% endif %}>
|
|
79
|
+
<img src="{{ avatar_src | escape }}" alt="{{ avatar_alt | escape }}" class="avatar no-print{% if include.class %} {{ include.class | escape }}{% endif %}" itemprop="image">
|
|
80
|
+
</a>
|
|
81
|
+
{% elsif render_avatar %}
|
|
82
|
+
<img src="{{ avatar_src | escape }}" alt="{{ avatar_alt | escape }}" class="avatar no-print{% if include.class %} {{ include.class | escape }}{% endif %}" itemprop="image">
|
|
83
|
+
{% endif %}
|
|
84
|
+
|