bilingual-jekyll-resume-theme 0.6.1 → 0.8.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.
Potentially problematic release.
This version of bilingual-jekyll-resume-theme might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/403.html +6 -0
- data/404.html +6 -0
- data/500.html +6 -0
- data/CHANGELOG.md +68 -0
- data/README.md +6 -3
- data/_data/error_pages.yml +33 -0
- data/_includes/analytics-body.html +0 -16
- data/_includes/analytics-head.html +10 -4
- data/_includes/ar-date.html +23 -17
- data/_includes/avatar.html +50 -0
- data/_includes/print-social-links.html +18 -14
- data/_includes/profile-head.html +2 -0
- data/_includes/resume-head-ar.html +8 -8
- data/_includes/resume-head-en.html +0 -5
- data/_includes/resume-section-ar.html +259 -67
- data/_includes/resume-section-en.html +257 -64
- data/_includes/shared-head.html +8 -4
- data/_includes/social-links.html +15 -43
- data/_includes/vendors/lineicons-v5.0/dev.svg +1 -1
- data/_includes/vendors/lineicons-v5.0/dribbble-symbol.svg +1 -1
- data/_includes/vendors/lineicons-v5.0/facebook.svg +1 -1
- data/_includes/vendors/lineicons-v5.0/flickr.svg +1 -1
- data/_includes/vendors/lineicons-v5.0/github.svg +1 -1
- data/_includes/vendors/lineicons-v5.0/globe-1.svg +1 -1
- data/_includes/vendors/lineicons-v5.0/instagram.svg +1 -1
- data/_includes/vendors/lineicons-v5.0/linkedin.svg +1 -1
- data/_includes/vendors/lineicons-v5.0/medium-alt.svg +1 -1
- data/_includes/vendors/lineicons-v5.0/pinterest.svg +1 -1
- data/_includes/vendors/lineicons-v5.0/telegram.svg +1 -1
- data/_includes/vendors/lineicons-v5.0/whatsapp.svg +1 -1
- data/_includes/vendors/lineicons-v5.0/x.svg +1 -1
- data/_includes/vendors/lineicons-v5.0/youtube.svg +1 -1
- data/_layouts/default.html +18 -3
- data/_layouts/error.html +79 -0
- data/_layouts/profile.html +56 -4
- data/_layouts/resume-ar.html +39 -13
- data/_layouts/resume-en.html +38 -12
- data/_plugins/error_pages_generator.rb +45 -0
- data/_sass/_all-pages.scss +349 -4
- data/_sass/_base.scss +14 -0
- data/_sass/_dark-mode.scss +5 -4
- data/_sass/_profile-page.scss +162 -0
- data/_sass/_profile.scss +2 -80
- data/_sass/_resume-rtl.scss +14 -0
- data/_sass/_resume.scss +29 -5
- data/assets/css/main.scss +1 -1
- data/assets/css/profile.scss +6 -0
- data/docs/COMPLETED_AUDIT.md +697 -0
- data/docs/CONFIG_GUIDE.md +394 -244
- data/docs/DATA_GUIDE.md +387 -462
- data/docs/INCLUDES_GUIDE.md +248 -413
- data/docs/LAYOUTS_GUIDE.md +215 -273
- data/docs/PROJECT_OVERVIEW.md +130 -69
- data/docs/SASS_GUIDE.md +173 -248
- data/docs/_data/_config.sample.yml +134 -81
- data/docs/_data/ar/associations.yml +30 -21
- data/docs/_data/ar/certifications.yml +47 -62
- data/docs/_data/ar/courses.yml +41 -33
- data/docs/_data/ar/education.yml +41 -39
- data/docs/_data/ar/experience.yml +56 -40
- data/docs/_data/ar/header.yml +6 -5
- data/docs/_data/ar/interests.yml +9 -7
- data/docs/_data/ar/languages.yml +21 -21
- data/docs/_data/ar/links.yml +17 -10
- data/docs/_data/ar/projects.yml +31 -22
- data/docs/_data/ar/recognitions.yml +28 -17
- data/docs/_data/ar/skills.yml +20 -9
- data/docs/_data/ar/volunteering.yml +47 -31
- data/docs/_data/en/associations.yml +31 -22
- data/docs/_data/en/certifications.yml +48 -63
- data/docs/_data/en/courses.yml +42 -34
- data/docs/_data/en/education.yml +42 -40
- data/docs/_data/en/experience.yml +57 -41
- data/docs/_data/en/header.yml +3 -2
- data/docs/_data/en/interests.yml +10 -8
- data/docs/_data/en/languages.yml +22 -22
- data/docs/_data/en/links.yml +18 -11
- data/docs/_data/en/projects.yml +32 -23
- data/docs/_data/en/recognitions.yml +29 -18
- data/docs/_data/en/skills.yml +21 -10
- data/docs/_data/en/volunteering.yml +48 -32
- data/lib/bilingual-jekyll-resume-theme.rb +4 -0
- metadata +14 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: bc4ee64a555f7e1df4e80b33d565d82142dd29f56b23204ad071fa1c970e2388
|
|
4
|
+
data.tar.gz: e7eb24a6509d3e10f7fd167fec77533483d8bb8e47b4c998ef6576e92291fc96
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c56b2e9e48c86c9da3d05f66767818277d4177eb0751c1b5906a0cf68299bf2f693e67e935bda825cb5137bf36c35e21a6ad14261994fb801a4e92be58788c97
|
|
7
|
+
data.tar.gz: 359e5532bf3e557bcbfeaf2d5ac40b767768dbda6af88400b67e8163c38adc27d5fe8e6c3ddd1290685bc1199c006f16225096e2b64c06bfe04a2337f1dbefba
|
data/403.html
ADDED
data/404.html
ADDED
data/500.html
ADDED
data/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,72 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
## [0.8.0] - 2026-09-19
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
* Add global .sr-only utility class for accessible icons ([`f25fcb6`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/f25fcb618c399a54039b00cb56e1d09724592516))
|
|
11
|
+
|
|
12
|
+
* Add error pages generator plugin and gem autoloading ([`9238b5a`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/9238b5ace273c9c64de5c90bbd8a19fe6ac5a27b))
|
|
13
|
+
|
|
14
|
+
* Add .agents/ to ignore list ([`568b874`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/568b874c290ae1673fe6c3e44b97a4c0c8e0b553))
|
|
15
|
+
|
|
16
|
+
* Add configurable avatar URL, bilingual alt text, and reusable include ([`a17cc60`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/a17cc603a3633bb5dc67589bcc01ce7ef886d88c))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
* Improve accessibility, icon contrast, mobile responsiveness, and RTL typography ([`add2625`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/add2625599027eb1f88ca6e1ec66c3bf2b334757))
|
|
21
|
+
|
|
22
|
+
* Populate comprehensive bilingual example data across all sections ([`1555d41`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/1555d41efef50cd9010d4bf08223fb81060bc8f3))
|
|
23
|
+
|
|
24
|
+
* Standardize recognition section toggle to plural with fallback ([`dccee09`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/dccee09c65e95a140281633342a09d58b236b888))
|
|
25
|
+
|
|
26
|
+
* Modernize all guides and master sample configuration ([`08f8823`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/08f8823f91984891e55dff0dcc8488601c185aea))
|
|
27
|
+
|
|
28
|
+
* Establish master feature roadmap and archive completed audit ([`f6d28a3`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/f6d28a354115fa6a0ce5e29250cd1b40be0c4dfd))
|
|
29
|
+
|
|
30
|
+
* Establish AGENTS.md master manual and refactor pointers ([`24ecf7e`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/24ecf7e751eebff79ac9e805d7a7de8696c52b43))
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
### Fixed
|
|
34
|
+
* Render section detail bullets conditionally with proper spacing ([`e4564cc`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/e4564cc43b5e5cec31ed704918cddbc124ec76ca))
|
|
35
|
+
|
|
36
|
+
* Enhance error layout usability, add sr-only styles, and maintain LTR/RTL parity ([`18a9b5b`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/18a9b5bbd18c52456a5a0dfd958d09187686a003))
|
|
37
|
+
|
|
38
|
+
* Restore standalone profile layout and eliminate icon underline artifacts ([`5bed5dd`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/5bed5ddc9b59bbfcb820df7793c2098ee0762d69))
|
|
39
|
+
|
|
40
|
+
* Resolve Liquid truthiness, unclosed tags, and Arabic date parsing ([`90a0750`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/90a075077c812bc56d31ac9622abdf2f3278dc98))
|
|
41
|
+
|
|
42
|
+
## [0.7.0] - 2026-09-12
|
|
43
|
+
|
|
44
|
+
### Added
|
|
45
|
+
* Add bilingual error suite (404, 403, 500) and reusable layout ([`4eab127`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/4eab127d8cc3a4cedccca89943482fd3a067ee14))
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
### Changed
|
|
49
|
+
* Enhance README and DATA_GUIDE with dark mode, typography, and error page details ([`8284ee7`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/8284ee7c0ffe351b823ad8ea0854b8e6d6afecd5))
|
|
50
|
+
|
|
51
|
+
* Implement universal dark mode and isolate profile layout styles ([`853a9ac`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/853a9ac1eaf11aadec62f198f6b7e9cdb2d3c209))
|
|
52
|
+
|
|
53
|
+
* Update analytics configuration to support direct measurement ID for Google Analytics 4 ([`dff8c3d`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/dff8c3d3ce3bfebf2ebb37d3ada348ed1a603f3c))
|
|
54
|
+
|
|
55
|
+
* Integrate Google Tag Manager analytics snippet into resume layouts ([`54f5c96`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/54f5c9676766c2ee04cd44a9b64b1a3472ca4d70))
|
|
56
|
+
|
|
57
|
+
* Enhance contact information handling and improve schema markup in resume layouts ([`caf726c`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/caf726c557e8289c991b6cb15acc3cc54504867e))
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
### Fixed
|
|
61
|
+
* Upgrade Arabic font loading and isolate print social links ([`ca6898b`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/ca6898b883a5264dbee9088c849bfd6a00fdf079))
|
|
62
|
+
|
|
63
|
+
* Scope global svg rules and add WCAG 2.1 AA accessible social links ([`d44dcb1`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/d44dcb15360ddd3c6e5eb42bc973564f882ee177))
|
|
64
|
+
|
|
65
|
+
* Centralize modern favicon suite and resolve subdirectory 404s ([`943d565`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/943d5653d5cbfa5f6189b4975a74f2e981c6ceb1))
|
|
66
|
+
|
|
67
|
+
* Add 'dir="ltr"' attribute to URLs for better text direction handling in resume sections ([`73da095`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/73da0959f2de2b7a6585d2c1c03fc59a4fa55f65))
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
### Removed
|
|
71
|
+
* Remove conflicting duplicate canonical tag from shared head ([`8f8b22b`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/8f8b22bfdea4e40371366db47bdddd98d412631a))
|
|
72
|
+
|
|
7
73
|
## [0.6.1] - 2026-08-21
|
|
8
74
|
|
|
9
75
|
### Changed
|
|
@@ -163,6 +229,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
163
229
|
|
|
164
230
|
* Initial commit (New Theme Template) ([`00af662`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/00af6628dfec7aefe0ef7d7083bf98c9713a5ffd))
|
|
165
231
|
|
|
232
|
+
[0.8.0]: https://github.com/kmutahar/bilingual-jekyll-resume-theme/compare/v0.7.0...v0.8.0
|
|
233
|
+
[0.7.0]: https://github.com/kmutahar/bilingual-jekyll-resume-theme/compare/v0.6.1...v0.7.0
|
|
166
234
|
[0.6.0]: https://github.com/kmutahar/bilingual-jekyll-resume-theme/compare/v0.5.2...v0.6.0
|
|
167
235
|
[0.5.2]: https://github.com/kmutahar/bilingual-jekyll-resume-theme/compare/v0.5.1...v0.5.2
|
|
168
236
|
[0.5.1]: https://github.com/kmutahar/bilingual-jekyll-resume-theme/compare/v0.5.0...v0.5.1
|
data/README.md
CHANGED
|
@@ -7,11 +7,14 @@ Inspired by and originally forked from [Joel Glovier’s resume template](https:
|
|
|
7
7
|
|
|
8
8
|
## Features
|
|
9
9
|
|
|
10
|
-
- **Bilingual support**: Separate layouts for English (`resume-en.html`) and Arabic (`resume-ar.html`) with full RTL support
|
|
10
|
+
- **Bilingual support**: Separate layouts for English (`resume-en.html`) and Arabic (`resume-ar.html`) with full RTL support and Cairo typography
|
|
11
|
+
- **Dark mode**: System preference detection (`prefers-color-scheme`) with optional interactive toggle, `localStorage` persistence, and zero-FOUC inline script
|
|
11
12
|
- **Data-driven architecture**: All resume content stored in YAML files, supporting multiple data paths and versioning
|
|
12
13
|
- **12 resume sections**: Experience, Education, Certifications, Courses, Volunteering, Projects, Skills, Recognition, Associations, Languages, Links, Interests
|
|
13
|
-
- **
|
|
14
|
-
- **
|
|
14
|
+
- **WCAG 2.1 AA Accessible**: Full screen reader and keyboard accessibility with `.sr-only` labels and declarative aria attributes
|
|
15
|
+
- **Modern favicon suite**: High-resolution favicons (Apple touch icon, 32x32, 16x16, webmanifest) with subpath-safe URLs and `_config.yml` override support
|
|
16
|
+
- **Print-friendly**: Optimized for PDF generation and printing with bidirectional text isolation (`dir="ltr"`) for URLs
|
|
17
|
+
- **SEO ready**: Built-in support for multilingual SEO, standardized canonical tags via `jekyll-seo-tag`, sitemaps, and feeds
|
|
15
18
|
- **Arabic month support**: Arabic date formatting included out of the box (`_data/ar/months.yml`)
|
|
16
19
|
|
|
17
20
|
## Quick Start
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Bilingual Error Page Definitions
|
|
2
|
+
# bilingual-jekyll-resume-theme
|
|
3
|
+
# Centralized English and Arabic content for HTTP error pages.
|
|
4
|
+
|
|
5
|
+
labels:
|
|
6
|
+
home: "Home / الرئيسية"
|
|
7
|
+
resume_en: "Resume (EN)"
|
|
8
|
+
resume_ar: "السيرة الذاتية (عربي)"
|
|
9
|
+
reload: "Reload Page / إعادة تحميل الصفحة"
|
|
10
|
+
|
|
11
|
+
"404":
|
|
12
|
+
title_en: "Page Not Found"
|
|
13
|
+
desc_en: "The page you are looking for might have been removed, had its name changed, or is temporarily unavailable."
|
|
14
|
+
title_ar: "الصفحة غير موجودة"
|
|
15
|
+
desc_ar: "ربما تمت إزالة الصفحة التي تبحث عنها، أو تم تغيير اسمها، أو أنها غير متوفرة مؤقتاً."
|
|
16
|
+
|
|
17
|
+
"403":
|
|
18
|
+
title_en: "Access Forbidden"
|
|
19
|
+
desc_en: "You do not have permission to access the requested resource or directory."
|
|
20
|
+
title_ar: "الوصول محظور"
|
|
21
|
+
desc_ar: "ليس لديك الصلاحية اللازمة للوصول إلى هذا المورد أو الدليل المطلوب."
|
|
22
|
+
|
|
23
|
+
"500":
|
|
24
|
+
title_en: "Internal Server Error"
|
|
25
|
+
desc_en: "The server encountered an unexpected condition that prevented it from fulfilling the request. Please try again later."
|
|
26
|
+
title_ar: "خطأ داخلي في الخادم"
|
|
27
|
+
desc_ar: "واجه الخادم ظرفاً غير متوقع منعه من إكمال الطلب. يرجى المحاولة مرة أخرى لاحقاً."
|
|
28
|
+
|
|
29
|
+
"503":
|
|
30
|
+
title_en: "Service Unavailable"
|
|
31
|
+
desc_en: "The server is currently unable to handle the request due to maintenance or capacity overload."
|
|
32
|
+
title_ar: "الخدمة غير متوفرة مؤقتاً"
|
|
33
|
+
desc_ar: "الخادم غير قادر على معالجة الطلب حالياً بسبب الصيانة أو زيادة الحمل."
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
{%- if site.analytics.gtm -%}
|
|
2
|
-
|
|
3
2
|
<!-- Google Tag Manager (noscript) -->
|
|
4
3
|
<noscript>
|
|
5
4
|
<iframe
|
|
@@ -10,19 +9,4 @@
|
|
|
10
9
|
</iframe>
|
|
11
10
|
</noscript>
|
|
12
11
|
<!-- End Google Tag Manager (noscript) -->
|
|
13
|
-
|
|
14
|
-
{%- else -%}
|
|
15
|
-
|
|
16
|
-
{%- if site.analytics.ga -%}
|
|
17
|
-
|
|
18
|
-
{%- comment -%}
|
|
19
|
-
No Google Analytics gtag.js exists for body so this section will return a blank.
|
|
20
|
-
{%- endcomment -%}
|
|
21
|
-
|
|
22
|
-
{%- endif -%}
|
|
23
|
-
|
|
24
|
-
{%- else -%}
|
|
25
|
-
|
|
26
|
-
<!-- No Analytics Added -->
|
|
27
|
-
|
|
28
12
|
{%- endif -%}
|
|
@@ -16,15 +16,21 @@
|
|
|
16
16
|
f.parentNode.insertBefore(j, f);
|
|
17
17
|
})(window, document, 'script', 'dataLayer', '{{ site.analytics.gtm }}');
|
|
18
18
|
</script>
|
|
19
|
-
|
|
20
19
|
<!-- End Google Tag Manager -->
|
|
21
20
|
|
|
22
21
|
{%- else -%}
|
|
23
22
|
|
|
24
|
-
{%-
|
|
23
|
+
{%- assign ga_id = nil -%}
|
|
24
|
+
{%- if site.analytics.gtag and site.analytics.gtag != "" -%}
|
|
25
|
+
{%- assign ga_id = site.analytics.gtag -%}
|
|
26
|
+
{%- elsif site.analytics.ga and site.analytics.ga != true and site.analytics.ga != "" -%}
|
|
27
|
+
{%- assign ga_id = site.analytics.ga -%}
|
|
28
|
+
{%- endif -%}
|
|
29
|
+
|
|
30
|
+
{%- if ga_id -%}
|
|
25
31
|
|
|
26
32
|
<!-- Global site tag (gtag.js) - Google Analytics -->
|
|
27
|
-
<script async src="https://www.googletagmanager.com/gtag/js?id={{
|
|
33
|
+
<script async src="https://www.googletagmanager.com/gtag/js?id={{ ga_id }}"></script>
|
|
28
34
|
<script>
|
|
29
35
|
window.dataLayer = window.dataLayer || [];
|
|
30
36
|
|
|
@@ -33,7 +39,7 @@
|
|
|
33
39
|
}
|
|
34
40
|
|
|
35
41
|
gtag('js', new Date());
|
|
36
|
-
gtag('config', '{{
|
|
42
|
+
gtag('config', '{{ ga_id }}');
|
|
37
43
|
</script>
|
|
38
44
|
|
|
39
45
|
{%- endif -%}
|
data/_includes/ar-date.html
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
{
|
|
1
|
+
{%- comment -%}
|
|
2
2
|
Arabic Date Formatter Include
|
|
3
3
|
This include file formats a date in Arabic format by looking up the Arabic month name
|
|
4
4
|
from the site data and formatting it according to the specified style.
|
|
@@ -10,32 +10,38 @@
|
|
|
10
10
|
Parameters:
|
|
11
11
|
- date: The date to format (required)
|
|
12
12
|
- style: "MDY" for "Month Day, Year" format, or any other value for "Month Year" format (optional)
|
|
13
|
-
{
|
|
13
|
+
{%- endcomment -%}
|
|
14
14
|
|
|
15
|
-
{
|
|
15
|
+
{%- comment -%}
|
|
16
16
|
Extract date components from the provided date using Jekyll date filters:
|
|
17
17
|
- "%-m": Month as a number (1-12) without leading zeros
|
|
18
18
|
- "%-d": Day as a number (1-31) without leading zeros
|
|
19
19
|
- "%Y": Year as a 4-digit number
|
|
20
|
-
{
|
|
21
|
-
{
|
|
22
|
-
{
|
|
23
|
-
{
|
|
20
|
+
{%- endcomment -%}
|
|
21
|
+
{%- if include.date and include.date != "" -%}
|
|
22
|
+
{%- assign m = include.date | date: "%-m" -%}
|
|
23
|
+
{%- assign d = include.date | date: "%-d" -%}
|
|
24
|
+
{%- assign y = include.date | date: "%Y" -%}
|
|
24
25
|
|
|
25
|
-
{
|
|
26
|
+
{%- comment -%}
|
|
26
27
|
Look up the Arabic month name from the site data file:
|
|
27
28
|
- site.data.ar.months is a YAML file containing month names in Arabic
|
|
28
29
|
- The month number (m) is used as the key to retrieve the corresponding Arabic month name
|
|
29
|
-
{
|
|
30
|
-
{
|
|
30
|
+
{%- endcomment -%}
|
|
31
|
+
{%- assign month_name = site.data.ar.months[m] -%}
|
|
31
32
|
|
|
32
|
-
{
|
|
33
|
+
{%- comment -%}
|
|
33
34
|
Format the date output based on the style parameter:
|
|
34
35
|
- If style is "MDY": Output "Month Day, Year" (e.g., "يناير 15, 2024")
|
|
35
36
|
- Otherwise: Output "Month Year" (e.g., "يناير 2024")
|
|
36
|
-
{
|
|
37
|
-
{
|
|
38
|
-
|
|
39
|
-
{
|
|
40
|
-
|
|
41
|
-
{
|
|
37
|
+
{%- endcomment -%}
|
|
38
|
+
{%- if month_name -%}
|
|
39
|
+
{%- if include.style == "MDY" -%}
|
|
40
|
+
{{ month_name }} {{ d }}, {{ y }}
|
|
41
|
+
{%- else -%}
|
|
42
|
+
{{ month_name }} {{ y }}
|
|
43
|
+
{%- endif -%}
|
|
44
|
+
{%- else -%}
|
|
45
|
+
{{ include.date }}
|
|
46
|
+
{%- endif -%}
|
|
47
|
+
{%- endif -%}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{%- comment -%}
|
|
2
|
+
Include: Reusable Avatar Component
|
|
3
|
+
- Purpose: Render accessible, configurable profile picture.
|
|
4
|
+
- Parameters:
|
|
5
|
+
- lang: Optional language code ('en' | 'ar'). Defaults to page.lang or site.lang or 'en'.
|
|
6
|
+
- link: Optional boolean to override link rendering.
|
|
7
|
+
- class: Optional extra CSS classes.
|
|
8
|
+
{%- endcomment -%}
|
|
9
|
+
|
|
10
|
+
{% assign current_lang = include.lang | default: page.lang | default: site.lang | default: 'en' %}
|
|
11
|
+
|
|
12
|
+
{% assign avatar_raw = site.avatar_url | default: site.avatar | default: '/assets/images/Profile-min.jpg' %}
|
|
13
|
+
{% if avatar_raw contains "://" %}
|
|
14
|
+
{% assign avatar_src = avatar_raw %}
|
|
15
|
+
{% else %}
|
|
16
|
+
{% assign avatar_src = avatar_raw | relative_url %}
|
|
17
|
+
{% endif %}
|
|
18
|
+
|
|
19
|
+
{% if current_lang == 'ar' %}
|
|
20
|
+
{% capture name_ar %}{{ site.name_ar.first }}{% if site.name_ar.middle %} {{ site.name_ar.middle }}{% endif %}{% if site.name_ar.last %} {{ site.name_ar.last }}{% endif %}{% endcapture %}
|
|
21
|
+
{% assign name_ar = name_ar | strip %}
|
|
22
|
+
{% assign avatar_alt = site.avatar_alt_ar | default: site.avatar_alt | default: name_ar | default: 'الصورة الشخصية' %}
|
|
23
|
+
{% assign link_title = site.title | default: 'الصفحة الرئيسية' %}
|
|
24
|
+
{% else %}
|
|
25
|
+
{% capture name_en %}{{ site.name.first }}{% if site.name.middle %} {{ site.name.middle }}{% endif %}{% if site.name.last %} {{ site.name.last }}{% endif %}{% endcapture %}
|
|
26
|
+
{% assign name_en = name_en | strip %}
|
|
27
|
+
{% assign avatar_alt = site.avatar_alt_en | default: site.avatar_alt | default: name_en | default: 'Profile photo' %}
|
|
28
|
+
{% assign link_title = site.title | default: 'Homepage' %}
|
|
29
|
+
{% endif %}
|
|
30
|
+
|
|
31
|
+
{% assign render_link = true %}
|
|
32
|
+
{% if site.avatar_link == false or include.link == false %}
|
|
33
|
+
{% assign render_link = false %}
|
|
34
|
+
{% endif %}
|
|
35
|
+
|
|
36
|
+
{% if render_link %}
|
|
37
|
+
{% assign avatar_link_raw = site.avatar_link | default: '/' %}
|
|
38
|
+
{% if avatar_link_raw contains "://" %}
|
|
39
|
+
{% assign avatar_href = avatar_link_raw %}
|
|
40
|
+
{% else %}
|
|
41
|
+
{% assign avatar_href = avatar_link_raw | relative_url %}
|
|
42
|
+
{% endif %}
|
|
43
|
+
{% assign avatar_target = site.avatar_link_target | default: '_self' %}
|
|
44
|
+
|
|
45
|
+
<a href="{{ avatar_href }}" title="{{ link_title }}" class="avatar-link no-print"{% if avatar_target != '_self' %} target="{{ avatar_target }}" rel="noopener"{% endif %}>
|
|
46
|
+
<img src="{{ avatar_src }}" alt="{{ avatar_alt }}" class="avatar no-print{% if include.class %} {{ include.class }}{% endif %}" itemprop="image">
|
|
47
|
+
</a>
|
|
48
|
+
{% else %}
|
|
49
|
+
<img src="{{ avatar_src }}" alt="{{ avatar_alt }}" class="avatar no-print{% if include.class %} {{ include.class }}{% endif %}" itemprop="image">
|
|
50
|
+
{% endif %}
|
|
@@ -1,75 +1,79 @@
|
|
|
1
1
|
<!-- and guess where these are defined? Yup, you guessed it: the _config.yml file -->
|
|
2
2
|
{% if site.resume_print_social_links %}
|
|
3
|
+
{% assign is_ar = false %}
|
|
4
|
+
{% if page.layout == "resume-ar" or page.lang == "ar" or page.language == "ar" or layout.lang == "ar" %}
|
|
5
|
+
{% assign is_ar = true %}
|
|
6
|
+
{% endif %}
|
|
3
7
|
<ul>
|
|
4
8
|
|
|
5
9
|
{% if site.social_links.github %}
|
|
6
10
|
<!-- GitHub link -->
|
|
7
|
-
<li><strong>
|
|
11
|
+
<li><strong>{% if is_ar %}جيت هاب (GitHub){% else %}GitHub{% endif %}</strong>: <span dir="ltr">{{ site.social_links.github }}</span></li>
|
|
8
12
|
{% endif %}
|
|
9
13
|
|
|
10
14
|
{% if site.social_links.twitter %}
|
|
11
15
|
<!-- Twitter link -->
|
|
12
|
-
<li><strong>Twitter</strong>: {{ site.social_links.twitter }}</li>
|
|
16
|
+
<li><strong>{% if is_ar %}إكس / تويتر (X / Twitter){% else %}X (Twitter){% endif %}</strong>: <span dir="ltr">{{ site.social_links.twitter }}</span></li>
|
|
13
17
|
{% endif %}
|
|
14
18
|
|
|
15
19
|
{% if site.social_links.medium %}
|
|
16
20
|
<!-- Medium link -->
|
|
17
|
-
<li><strong>Medium</strong>: {{ site.social_links.medium }}</li>
|
|
21
|
+
<li><strong>{% if is_ar %}ميديام (Medium){% else %}Medium{% endif %}</strong>: <span dir="ltr">{{ site.social_links.medium }}</span></li>
|
|
18
22
|
{% endif %}
|
|
19
23
|
|
|
20
24
|
{% if site.social_links.dribbble %}
|
|
21
25
|
<!-- Dribbble link -->
|
|
22
|
-
<li><strong>Dribbble</strong>: {{ site.social_links.dribbble }}</li>
|
|
26
|
+
<li><strong>{% if is_ar %}دريبل (Dribbble){% else %}Dribbble{% endif %}</strong>: <span dir="ltr">{{ site.social_links.dribbble }}</span></li>
|
|
23
27
|
{% endif %}
|
|
24
28
|
|
|
25
29
|
{% if site.social_links.facebook %}
|
|
26
30
|
<!-- Facebook link -->
|
|
27
|
-
<li><strong>Facebook</strong>: {{ site.social_links.facebook }}</li>
|
|
31
|
+
<li><strong>{% if is_ar %}فيسبوك (Facebook){% else %}Facebook{% endif %}</strong>: <span dir="ltr">{{ site.social_links.facebook }}</span></li>
|
|
28
32
|
{% endif %}
|
|
29
33
|
|
|
30
34
|
{% if site.social_links.linkedin %}
|
|
31
35
|
<!-- LinkedIn link -->
|
|
32
|
-
<li><strong>LinkedIn</strong>: {{ site.social_links.linkedin }}</li>
|
|
36
|
+
<li><strong>{% if is_ar %}لينكد إن (LinkedIn){% else %}LinkedIn{% endif %}</strong>: <span dir="ltr">{{ site.social_links.linkedin }}</span></li>
|
|
33
37
|
{% endif %}
|
|
34
38
|
|
|
35
39
|
{% if site.social_links.instagram %}
|
|
36
40
|
<!-- Instagram link -->
|
|
37
|
-
<li><strong>Instagram</strong>: {{ site.social_links.instagram }}</li>
|
|
41
|
+
<li><strong>{% if is_ar %}إنستغرام (Instagram){% else %}Instagram{% endif %}</strong>: <span dir="ltr">{{ site.social_links.instagram }}</span></li>
|
|
38
42
|
{% endif %}
|
|
39
43
|
|
|
40
44
|
{% if site.social_links.website %}
|
|
41
45
|
<!-- Website link -->
|
|
42
|
-
<li><strong>Website</strong>: {{ site.social_links.website }}</li>
|
|
46
|
+
<li><strong>{% if is_ar %}الموقع الشخصي (Website){% else %}Website{% endif %}</strong>: <span dir="ltr">{{ site.social_links.website }}</span></li>
|
|
43
47
|
{% endif %}
|
|
44
48
|
|
|
45
49
|
{% if site.social_links.whatsapp %}
|
|
46
50
|
<!-- Whatsapp link -->
|
|
47
|
-
<li><strong>
|
|
51
|
+
<li><strong>{% if is_ar %}واتساب (WhatsApp){% else %}WhatsApp{% endif %}</strong>: <span dir="ltr">{{ site.social_links.whatsapp }}</span></li>
|
|
48
52
|
{% endif %}
|
|
49
53
|
|
|
50
54
|
{% if site.social_links.devto %}
|
|
51
55
|
<!-- Devto link -->
|
|
52
|
-
<li><strong>
|
|
56
|
+
<li><strong>{% if is_ar %}ديف تو (Dev.to){% else %}Dev.to{% endif %}</strong>: <span dir="ltr">{{ site.social_links.devto }}</span></li>
|
|
53
57
|
{% endif %}
|
|
54
58
|
|
|
55
59
|
{% if site.social_links.flickr %}
|
|
56
60
|
<!-- Flickr link -->
|
|
57
|
-
<li><strong>Flickr</strong>: {{ site.social_links.flickr }}</li>
|
|
61
|
+
<li><strong>{% if is_ar %}فليكر (Flickr){% else %}Flickr{% endif %}</strong>: <span dir="ltr">{{ site.social_links.flickr }}</span></li>
|
|
58
62
|
{% endif %}
|
|
59
63
|
|
|
60
64
|
{% if site.social_links.pinterest %}
|
|
61
65
|
<!-- Pinterest link -->
|
|
62
|
-
<li><strong>Pinterest</strong>: {{ site.social_links.pinterest }}</li>
|
|
66
|
+
<li><strong>{% if is_ar %}بينتيريست (Pinterest){% else %}Pinterest{% endif %}</strong>: <span dir="ltr">{{ site.social_links.pinterest }}</span></li>
|
|
63
67
|
{% endif %}
|
|
64
68
|
|
|
65
69
|
{% if site.social_links.telegram %}
|
|
66
70
|
<!-- Telegram link -->
|
|
67
|
-
<li><strong>Telegram</strong>: {{ site.social_links.telegram }}</li>
|
|
71
|
+
<li><strong>{% if is_ar %}تيليجرام (Telegram){% else %}Telegram{% endif %}</strong>: <span dir="ltr">{{ site.social_links.telegram }}</span></li>
|
|
68
72
|
{% endif %}
|
|
69
73
|
|
|
70
74
|
{% if site.social_links.youtube %}
|
|
71
75
|
<!-- Youtube link -->
|
|
72
|
-
<li><strong>
|
|
76
|
+
<li><strong>{% if is_ar %}يوتيوب (YouTube){% else %}YouTube{% endif %}</strong>: <span dir="ltr">{{ site.social_links.youtube }}</span></li>
|
|
73
77
|
{% endif %}
|
|
74
78
|
|
|
75
79
|
</ul>
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
{% if site.
|
|
2
|
-
<!-- Arabic
|
|
3
|
-
<link
|
|
1
|
+
{% if site.font_ar_url %}
|
|
2
|
+
<!-- Custom Arabic Font Stylesheet -->
|
|
3
|
+
<link rel="stylesheet" href="{{ site.font_ar_url | relative_url }}">
|
|
4
|
+
{% elsif site.disable_google_fonts != true and site.resume_theme != 'no-custom-fonts' %}
|
|
5
|
+
<!-- Arabic-friendly font (Cairo) with preconnect for performance -->
|
|
6
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
7
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
8
|
+
<link href="https://fonts.googleapis.com/css2?family=Cairo:wght@300;400;600;700;900&display=swap" rel="stylesheet">
|
|
4
9
|
{% endif %}
|
|
5
10
|
|
|
6
11
|
<link rel="stylesheet" type="text/css" href="{{ 'assets/css/cv-ar.css' | relative_url }}">
|
|
7
12
|
|
|
8
|
-
<!-- favicons generated by favicon.io -->
|
|
9
|
-
<link rel="apple-touch-icon" sizes="180x180" href="{{ 'assets/favicon/resume/apple-touch-icon.png' | relative_url }}">
|
|
10
|
-
<link rel="icon" type="image/png" sizes="32x32" href="{{ 'assets/favicon/resume/favicon-32x32.png' | relative_url }}">
|
|
11
|
-
<link rel="icon" type="image/png" sizes="16x16" href="{{ 'assets/favicon/resume/favicon-16x16.png' | relative_url }}">
|
|
12
|
-
<link rel="manifest" href="{{ 'assets/favicon/resume/site.webmanifest' | relative_url }}">
|
|
13
13
|
|
|
14
14
|
{% include hreflang.html %}
|
|
@@ -4,10 +4,5 @@
|
|
|
4
4
|
|
|
5
5
|
<link rel="stylesheet" type="text/css" href="{{ 'assets/css/cv.css' | relative_url }}">
|
|
6
6
|
|
|
7
|
-
<!-- favicons generated by favicon.io -->
|
|
8
|
-
<link rel="apple-touch-icon" sizes="180x180" href="{{ 'assets/favicon/resume/apple-touch-icon.png' | relative_url }}">
|
|
9
|
-
<link rel="icon" type="image/png" sizes="32x32" href="{{ 'assets/favicon/resume/favicon-32x32.png' | relative_url }}">
|
|
10
|
-
<link rel="icon" type="image/png" sizes="16x16" href="{{ 'assets/favicon/resume/favicon-16x16.png' | relative_url }}">
|
|
11
|
-
<link rel="manifest" href="{{ 'assets/favicon/resume/site.webmanifest' | relative_url }}">
|
|
12
7
|
|
|
13
8
|
{% include hreflang.html %}
|