tahweel 0.1.1 → 0.1.3
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 +4 -4
- data/.vscode/settings.json +1 -0
- data/CHANGELOG.md +13 -0
- data/README.en.md +468 -0
- data/README.md +464 -20
- data/assets/logo.png +0 -0
- data/assets/windows/tahweel.ico +0 -0
- data/bin/tahweel +10 -5
- data/bin/tahweel-ui +300 -0
- data/lib/tahweel/authorizer.rb +17 -7
- data/lib/tahweel/cli/file_processor.rb +14 -2
- data/lib/tahweel/cli/options.rb +24 -7
- data/lib/tahweel/cli/progress_renderer.rb +7 -0
- data/lib/tahweel/converter.rb +46 -9
- data/lib/tahweel/pdf_splitter.rb +92 -38
- data/lib/tahweel/poppler_installer.rb +185 -0
- data/lib/tahweel/processors/google_drive.rb +1 -1
- data/lib/tahweel/version.rb +1 -1
- data/lib/tahweel/writer.rb +1 -1
- data/lib/tahweel/writers/docx.rb +26 -3
- data/lib/tahweel.rb +8 -3
- data/website/favicon.ico +0 -0
- data/website/index.html +792 -0
- data/website/logo.png +0 -0
- data/website/privacy.html +489 -0
- metadata +53 -15
data/website/logo.png
ADDED
|
Binary file
|
|
@@ -0,0 +1,489 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="ar" dir="rtl">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>سياسة الخصوصية | تحويل</title>
|
|
7
|
+
<meta name="description" content="سياسة الخصوصية لتطبيق تحويل - Privacy Policy for Tahweel">
|
|
8
|
+
|
|
9
|
+
<!-- Favicon -->
|
|
10
|
+
<link rel="icon" type="image/x-icon" href="favicon.ico">
|
|
11
|
+
<link rel="icon" type="image/png" href="logo.png">
|
|
12
|
+
<link rel="apple-touch-icon" href="logo.png">
|
|
13
|
+
|
|
14
|
+
<!-- Google Fonts: Poppins for English, Cairo for Arabic -->
|
|
15
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
16
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
17
|
+
<link href="https://fonts.googleapis.com/css2?family=Cairo:wght@400;600;700;800&family=Poppins:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
18
|
+
|
|
19
|
+
<style>
|
|
20
|
+
:root {
|
|
21
|
+
--primary-color: #10b981;
|
|
22
|
+
--primary-hover: #059669;
|
|
23
|
+
--primary-light: #d1fae5;
|
|
24
|
+
--bg-gradient: linear-gradient(135deg, #f0fdf4 0%, #ecfdf5 50%, #d1fae5 100%);
|
|
25
|
+
--text-dark: #1f2937;
|
|
26
|
+
--text-light: #6b7280;
|
|
27
|
+
--card-bg: rgba(255, 255, 255, 0.95);
|
|
28
|
+
--card-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
* {
|
|
32
|
+
margin: 0;
|
|
33
|
+
padding: 0;
|
|
34
|
+
box-sizing: border-box;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
html {
|
|
38
|
+
background: #ecfdf5;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
body {
|
|
42
|
+
min-height: 100vh;
|
|
43
|
+
font-family: 'Cairo', sans-serif;
|
|
44
|
+
color: var(--text-dark);
|
|
45
|
+
line-height: 1.8;
|
|
46
|
+
overflow-x: hidden;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
body.font-en {
|
|
50
|
+
font-family: 'Poppins', sans-serif;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/* Extended gradient background */
|
|
54
|
+
body::before {
|
|
55
|
+
content: '';
|
|
56
|
+
position: fixed;
|
|
57
|
+
top: -50vh;
|
|
58
|
+
left: 0;
|
|
59
|
+
width: 100%;
|
|
60
|
+
height: 200vh;
|
|
61
|
+
background: linear-gradient(135deg,
|
|
62
|
+
#e6f7ed 0%,
|
|
63
|
+
#f0fdf4 20%,
|
|
64
|
+
#ecfdf5 50%,
|
|
65
|
+
#d1fae5 80%,
|
|
66
|
+
#c6f6d5 100%
|
|
67
|
+
);
|
|
68
|
+
pointer-events: none;
|
|
69
|
+
z-index: -2;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
body::after {
|
|
73
|
+
content: '';
|
|
74
|
+
position: fixed;
|
|
75
|
+
top: 0;
|
|
76
|
+
left: 0;
|
|
77
|
+
width: 100%;
|
|
78
|
+
height: 100%;
|
|
79
|
+
background-image:
|
|
80
|
+
radial-gradient(circle at 20% 80%, rgba(16, 185, 129, 0.08) 0%, transparent 50%),
|
|
81
|
+
radial-gradient(circle at 80% 20%, rgba(59, 130, 246, 0.06) 0%, transparent 50%);
|
|
82
|
+
pointer-events: none;
|
|
83
|
+
z-index: -1;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/* Language Toggle */
|
|
87
|
+
.lang-btn {
|
|
88
|
+
position: fixed;
|
|
89
|
+
top: 20px;
|
|
90
|
+
right: 20px;
|
|
91
|
+
background: white;
|
|
92
|
+
border: 1px solid #e5e7eb;
|
|
93
|
+
padding: 10px 20px;
|
|
94
|
+
border-radius: 25px;
|
|
95
|
+
font-family: inherit;
|
|
96
|
+
font-size: 0.9rem;
|
|
97
|
+
font-weight: 600;
|
|
98
|
+
color: var(--text-dark);
|
|
99
|
+
cursor: pointer;
|
|
100
|
+
box-shadow: 0 2px 10px rgba(0,0,0,0.08);
|
|
101
|
+
transition: all 0.3s ease;
|
|
102
|
+
display: flex;
|
|
103
|
+
align-items: center;
|
|
104
|
+
gap: 8px;
|
|
105
|
+
z-index: 1000;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
html[dir="ltr"] .lang-btn {
|
|
109
|
+
right: auto;
|
|
110
|
+
left: 20px;
|
|
111
|
+
font-family: 'Cairo', sans-serif;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.lang-btn:hover {
|
|
115
|
+
background: #f9fafb;
|
|
116
|
+
transform: translateY(-2px);
|
|
117
|
+
box-shadow: 0 6px 20px rgba(0,0,0,0.12);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/* Container */
|
|
121
|
+
.container {
|
|
122
|
+
max-width: 900px;
|
|
123
|
+
margin: 0 auto;
|
|
124
|
+
padding: 0 20px;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/* Header */
|
|
128
|
+
header {
|
|
129
|
+
padding: 100px 0 40px;
|
|
130
|
+
text-align: center;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.logo-link {
|
|
134
|
+
display: inline-block;
|
|
135
|
+
margin-bottom: 20px;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.logo {
|
|
139
|
+
width: 100px;
|
|
140
|
+
height: auto;
|
|
141
|
+
mix-blend-mode: multiply;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
header h1 {
|
|
145
|
+
font-size: 2.5rem;
|
|
146
|
+
font-weight: 700;
|
|
147
|
+
color: var(--text-dark);
|
|
148
|
+
margin-bottom: 10px;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
header p {
|
|
152
|
+
color: var(--text-light);
|
|
153
|
+
font-size: 1.1rem;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/* Content */
|
|
157
|
+
.content {
|
|
158
|
+
background: var(--card-bg);
|
|
159
|
+
border-radius: 24px;
|
|
160
|
+
padding: 50px;
|
|
161
|
+
box-shadow: var(--card-shadow);
|
|
162
|
+
margin-bottom: 60px;
|
|
163
|
+
backdrop-filter: blur(10px);
|
|
164
|
+
border: 1px solid rgba(255,255,255,0.5);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.content h2 {
|
|
168
|
+
font-size: 1.5rem;
|
|
169
|
+
font-weight: 700;
|
|
170
|
+
color: var(--text-dark);
|
|
171
|
+
margin: 30px 0 15px;
|
|
172
|
+
padding-bottom: 10px;
|
|
173
|
+
border-bottom: 2px solid var(--primary-light);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.content h2:first-child {
|
|
177
|
+
margin-top: 0;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.content p {
|
|
181
|
+
margin-bottom: 15px;
|
|
182
|
+
color: var(--text-dark);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.content ul {
|
|
186
|
+
margin: 15px 0;
|
|
187
|
+
padding-right: 25px;
|
|
188
|
+
padding-left: 25px;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
html[dir="ltr"] .content ul {
|
|
192
|
+
padding-right: 0;
|
|
193
|
+
padding-left: 25px;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.content li {
|
|
197
|
+
margin-bottom: 10px;
|
|
198
|
+
color: var(--text-dark);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.content a {
|
|
202
|
+
color: var(--primary-color);
|
|
203
|
+
text-decoration: none;
|
|
204
|
+
font-weight: 600;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.content a:hover {
|
|
208
|
+
text-decoration: underline;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
.last-updated {
|
|
212
|
+
margin-top: 40px;
|
|
213
|
+
padding-top: 20px;
|
|
214
|
+
border-top: 1px solid #e5e7eb;
|
|
215
|
+
color: var(--text-light);
|
|
216
|
+
font-size: 0.9rem;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/* Back Link */
|
|
220
|
+
.back-link {
|
|
221
|
+
display: inline-flex;
|
|
222
|
+
align-items: center;
|
|
223
|
+
gap: 8px;
|
|
224
|
+
color: var(--primary-color);
|
|
225
|
+
text-decoration: none;
|
|
226
|
+
font-weight: 600;
|
|
227
|
+
margin-bottom: 30px;
|
|
228
|
+
transition: all 0.3s ease;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
.back-link:hover {
|
|
232
|
+
gap: 12px;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
.back-link svg {
|
|
236
|
+
width: 20px;
|
|
237
|
+
height: 20px;
|
|
238
|
+
transition: transform 0.3s ease;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
html[dir="rtl"] .back-link svg {
|
|
242
|
+
transform: rotate(180deg);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
html[dir="rtl"] .back-link:hover svg {
|
|
246
|
+
transform: rotate(180deg) translateX(4px);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
html[dir="ltr"] .back-link:hover svg {
|
|
250
|
+
transform: translateX(-4px);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/* Footer */
|
|
254
|
+
footer {
|
|
255
|
+
padding: 40px 0;
|
|
256
|
+
text-align: center;
|
|
257
|
+
color: var(--text-light);
|
|
258
|
+
font-size: 0.9rem;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
footer a {
|
|
262
|
+
color: var(--primary-color);
|
|
263
|
+
text-decoration: none;
|
|
264
|
+
font-weight: 600;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/* Responsive */
|
|
268
|
+
@media (max-width: 768px) {
|
|
269
|
+
header { padding: 80px 0 30px; }
|
|
270
|
+
header h1 { font-size: 1.8rem; }
|
|
271
|
+
.content { padding: 30px 20px; }
|
|
272
|
+
.content h2 { font-size: 1.3rem; }
|
|
273
|
+
.lang-btn { padding: 8px 16px; font-size: 0.8rem; }
|
|
274
|
+
}
|
|
275
|
+
</style>
|
|
276
|
+
</head>
|
|
277
|
+
<body>
|
|
278
|
+
<!-- Language Toggle -->
|
|
279
|
+
<button class="lang-btn" onclick="toggleLanguage()" id="langBtn">
|
|
280
|
+
<span>🌐</span> <span id="btnText">English</span>
|
|
281
|
+
</button>
|
|
282
|
+
|
|
283
|
+
<div class="container">
|
|
284
|
+
<!-- Header -->
|
|
285
|
+
<header>
|
|
286
|
+
<a href="index.html" class="logo-link">
|
|
287
|
+
<img src="logo.png" alt="Tahweel Logo" class="logo">
|
|
288
|
+
</a>
|
|
289
|
+
<h1 id="pageTitle">سياسة الخصوصية</h1>
|
|
290
|
+
<p id="pageSubtitle">آخر تحديث: يناير 2026</p>
|
|
291
|
+
</header>
|
|
292
|
+
|
|
293
|
+
<!-- Back Link -->
|
|
294
|
+
<a href="index.html" class="back-link" id="backLink">
|
|
295
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
296
|
+
<path d="M19 12H5M12 19l-7-7 7-7"/>
|
|
297
|
+
</svg>
|
|
298
|
+
<span id="backText">العودة للصفحة الرئيسية</span>
|
|
299
|
+
</a>
|
|
300
|
+
|
|
301
|
+
<!-- Content -->
|
|
302
|
+
<div class="content">
|
|
303
|
+
<div id="content-ar">
|
|
304
|
+
<h2>مقدمة</h2>
|
|
305
|
+
<p>مرحباً بك في تحويل. نحن نقدر خصوصيتك ونلتزم بحماية بياناتك الشخصية. توضح سياسة الخصوصية هذه كيفية جمع واستخدام وحماية معلوماتك عند استخدام تطبيق تحويل.</p>
|
|
306
|
+
|
|
307
|
+
<h2>البيانات التي نجمعها</h2>
|
|
308
|
+
<p>يستخدم تحويل واجهة برمجة تطبيقات Google Drive لإجراء التعرف الضوئي على الحروف (OCR) على ملفات PDF والصور. عند استخدام خدمتنا:</p>
|
|
309
|
+
<ul>
|
|
310
|
+
<li><strong>الوصول إلى Google Drive:</strong> نطلب إذن الوصول إلى Google Drive الخاص بك لرفع الملفات مؤقتاً لمعالجة OCR.</li>
|
|
311
|
+
<li><strong>معالجة الملفات:</strong> يتم رفع ملفات PDF والصور الخاصة بك مؤقتاً إلى Google Drive لاستخراج النص.</li>
|
|
312
|
+
<li><strong>لا تخزين دائم:</strong> يتم حذف جميع الملفات المرفوعة تلقائياً من Google Drive فور اكتمال معالجة OCR.</li>
|
|
313
|
+
</ul>
|
|
314
|
+
|
|
315
|
+
<h2>كيف نستخدم بياناتك</h2>
|
|
316
|
+
<p>نستخدم الوصول الممنوح فقط من أجل:</p>
|
|
317
|
+
<ul>
|
|
318
|
+
<li>رفع ملفاتك مؤقتاً إلى Google Drive لمعالجة OCR</li>
|
|
319
|
+
<li>استخراج النص من ملفاتك باستخدام إمكانيات OCR في Google Drive</li>
|
|
320
|
+
<li>حذف الملفات المرفوعة فوراً بعد المعالجة</li>
|
|
321
|
+
</ul>
|
|
322
|
+
<p>نحن لا نقوم بـ:</p>
|
|
323
|
+
<ul>
|
|
324
|
+
<li>تخزين ملفاتك أو محتواها على خوادمنا</li>
|
|
325
|
+
<li>مشاركة بياناتك مع أطراف ثالثة</li>
|
|
326
|
+
<li>استخدام بياناتك لأي غرض آخر غير معالجة OCR</li>
|
|
327
|
+
<li>الوصول إلى أي ملفات أخرى في Google Drive الخاص بك</li>
|
|
328
|
+
</ul>
|
|
329
|
+
|
|
330
|
+
<h2>أمان البيانات</h2>
|
|
331
|
+
<p>نتخذ أمان بياناتك على محمل الجد:</p>
|
|
332
|
+
<ul>
|
|
333
|
+
<li>جميع الاتصالات مشفرة باستخدام HTTPS/TLS</li>
|
|
334
|
+
<li>يتم تخزين بيانات اعتماد OAuth بشكل آمن على جهازك المحلي</li>
|
|
335
|
+
<li>لا نقوم بتخزين أو نقل ملفاتك إلى أي خوادم خارج Google Drive</li>
|
|
336
|
+
<li>يتم حذف الملفات فوراً بعد المعالجة</li>
|
|
337
|
+
</ul>
|
|
338
|
+
|
|
339
|
+
<h2>حقوقك</h2>
|
|
340
|
+
<p>لديك الحق في:</p>
|
|
341
|
+
<ul>
|
|
342
|
+
<li>إلغاء الوصول إلى Google Drive في أي وقت من خلال إعدادات حساب Google الخاص بك</li>
|
|
343
|
+
<li>طلب معلومات حول البيانات التي نعالجها</li>
|
|
344
|
+
<li>التواصل معنا بخصوص أي مخاوف تتعلق بالخصوصية</li>
|
|
345
|
+
</ul>
|
|
346
|
+
|
|
347
|
+
<h2>خدمات الطرف الثالث</h2>
|
|
348
|
+
<p>يستخدم تحويل خدمات Google التالية:</p>
|
|
349
|
+
<ul>
|
|
350
|
+
<li><strong>Google Drive API:</strong> لرفع الملفات ومعالجة OCR. يرجى مراجعة <a href="https://policies.google.com/privacy" target="_blank">سياسة خصوصية Google</a> لمزيد من المعلومات.</li>
|
|
351
|
+
</ul>
|
|
352
|
+
|
|
353
|
+
<h2>التغييرات على هذه السياسة</h2>
|
|
354
|
+
<p>قد نقوم بتحديث سياسة الخصوصية هذه من وقت لآخر. سنقوم بإعلامك بأي تغييرات عن طريق نشر السياسة الجديدة على هذه الصفحة وتحديث تاريخ "آخر تحديث".</p>
|
|
355
|
+
|
|
356
|
+
<h2>تواصل معنا</h2>
|
|
357
|
+
<p>إذا كان لديك أي أسئلة حول سياسة الخصوصية هذه، يرجى التواصل معنا:</p>
|
|
358
|
+
<ul>
|
|
359
|
+
<li>GitHub: <a href="https://github.com/ieasybooks/tahweel.rb" target="_blank">github.com/ieasybooks/tahweel.rb</a></li>
|
|
360
|
+
<li>الموقع: <a href="https://ieasybooks.com" target="_blank">ieasybooks.com</a></li>
|
|
361
|
+
</ul>
|
|
362
|
+
</div>
|
|
363
|
+
|
|
364
|
+
<div id="content-en" style="display: none;">
|
|
365
|
+
<h2>Introduction</h2>
|
|
366
|
+
<p>Welcome to Tahweel. We value your privacy and are committed to protecting your personal data. This Privacy Policy explains how we collect, use, and protect your information when you use the Tahweel application.</p>
|
|
367
|
+
|
|
368
|
+
<h2>Data We Collect</h2>
|
|
369
|
+
<p>Tahweel uses the Google Drive API to perform Optical Character Recognition (OCR) on PDF and image files. When you use our service:</p>
|
|
370
|
+
<ul>
|
|
371
|
+
<li><strong>Google Drive Access:</strong> We request permission to access your Google Drive to temporarily upload files for OCR processing.</li>
|
|
372
|
+
<li><strong>File Processing:</strong> Your PDF and image files are temporarily uploaded to Google Drive for text extraction.</li>
|
|
373
|
+
<li><strong>No Permanent Storage:</strong> All uploaded files are automatically deleted from Google Drive immediately after OCR processing is complete.</li>
|
|
374
|
+
</ul>
|
|
375
|
+
|
|
376
|
+
<h2>How We Use Your Data</h2>
|
|
377
|
+
<p>We use the granted access solely to:</p>
|
|
378
|
+
<ul>
|
|
379
|
+
<li>Temporarily upload your files to Google Drive for OCR processing</li>
|
|
380
|
+
<li>Extract text from your files using Google Drive's OCR capabilities</li>
|
|
381
|
+
<li>Delete the uploaded files immediately after processing</li>
|
|
382
|
+
</ul>
|
|
383
|
+
<p>We do NOT:</p>
|
|
384
|
+
<ul>
|
|
385
|
+
<li>Store your files or their contents on our servers</li>
|
|
386
|
+
<li>Share your data with third parties</li>
|
|
387
|
+
<li>Use your data for any purpose other than OCR processing</li>
|
|
388
|
+
<li>Access any other files in your Google Drive</li>
|
|
389
|
+
</ul>
|
|
390
|
+
|
|
391
|
+
<h2>Data Security</h2>
|
|
392
|
+
<p>We take your data security seriously:</p>
|
|
393
|
+
<ul>
|
|
394
|
+
<li>All communications are encrypted using HTTPS/TLS</li>
|
|
395
|
+
<li>OAuth credentials are stored securely on your local device</li>
|
|
396
|
+
<li>We do not store or transmit your files to any servers outside of Google Drive</li>
|
|
397
|
+
<li>Files are deleted immediately after processing</li>
|
|
398
|
+
</ul>
|
|
399
|
+
|
|
400
|
+
<h2>Your Rights</h2>
|
|
401
|
+
<p>You have the right to:</p>
|
|
402
|
+
<ul>
|
|
403
|
+
<li>Revoke access to your Google Drive at any time through your Google account settings</li>
|
|
404
|
+
<li>Request information about the data we process</li>
|
|
405
|
+
<li>Contact us with any privacy concerns</li>
|
|
406
|
+
</ul>
|
|
407
|
+
|
|
408
|
+
<h2>Third-Party Services</h2>
|
|
409
|
+
<p>Tahweel uses the following Google services:</p>
|
|
410
|
+
<ul>
|
|
411
|
+
<li><strong>Google Drive API:</strong> For file upload and OCR processing. Please review <a href="https://policies.google.com/privacy" target="_blank">Google's Privacy Policy</a> for more information.</li>
|
|
412
|
+
</ul>
|
|
413
|
+
|
|
414
|
+
<h2>Changes to This Policy</h2>
|
|
415
|
+
<p>We may update this Privacy Policy from time to time. We will notify you of any changes by posting the new policy on this page and updating the "Last Updated" date.</p>
|
|
416
|
+
|
|
417
|
+
<h2>Contact Us</h2>
|
|
418
|
+
<p>If you have any questions about this Privacy Policy, please contact us:</p>
|
|
419
|
+
<ul>
|
|
420
|
+
<li>GitHub: <a href="https://github.com/ieasybooks/tahweel.rb" target="_blank">github.com/ieasybooks/tahweel.rb</a></li>
|
|
421
|
+
<li>Website: <a href="https://ieasybooks.com" target="_blank">ieasybooks.com</a></li>
|
|
422
|
+
</ul>
|
|
423
|
+
</div>
|
|
424
|
+
|
|
425
|
+
<p class="last-updated" id="lastUpdated">آخر تحديث: يناير 2026</p>
|
|
426
|
+
</div>
|
|
427
|
+
</div>
|
|
428
|
+
|
|
429
|
+
<!-- Footer -->
|
|
430
|
+
<footer>
|
|
431
|
+
<div class="container">
|
|
432
|
+
<p id="footerText">
|
|
433
|
+
© 2026 <a href="https://ieasybooks.com" target="_blank">iEasyBooks</a>. جميع الحقوق محفوظة.
|
|
434
|
+
</p>
|
|
435
|
+
</div>
|
|
436
|
+
</footer>
|
|
437
|
+
|
|
438
|
+
<script>
|
|
439
|
+
const content = {
|
|
440
|
+
ar: {
|
|
441
|
+
btn: "English",
|
|
442
|
+
pageTitle: "سياسة الخصوصية",
|
|
443
|
+
pageSubtitle: "آخر تحديث: يناير 2026",
|
|
444
|
+
backText: "العودة للصفحة الرئيسية",
|
|
445
|
+
lastUpdated: "آخر تحديث: يناير 2026",
|
|
446
|
+
footerText: "© 2026 <a href='https://ieasybooks.com' target='_blank'>iEasyBooks</a>. جميع الحقوق محفوظة.",
|
|
447
|
+
docTitle: "سياسة الخصوصية | تحويل"
|
|
448
|
+
},
|
|
449
|
+
en: {
|
|
450
|
+
btn: "العربية",
|
|
451
|
+
pageTitle: "Privacy Policy",
|
|
452
|
+
pageSubtitle: "Last Updated: January 2026",
|
|
453
|
+
backText: "Back to Home",
|
|
454
|
+
lastUpdated: "Last Updated: January 2026",
|
|
455
|
+
footerText: "© 2026 <a href='https://ieasybooks.com' target='_blank'>iEasyBooks</a>. All rights reserved.",
|
|
456
|
+
docTitle: "Privacy Policy | Tahweel"
|
|
457
|
+
}
|
|
458
|
+
};
|
|
459
|
+
|
|
460
|
+
let currentLang = 'ar';
|
|
461
|
+
|
|
462
|
+
function toggleLanguage() {
|
|
463
|
+
currentLang = currentLang === 'ar' ? 'en' : 'ar';
|
|
464
|
+
const c = content[currentLang];
|
|
465
|
+
|
|
466
|
+
// Toggle Direction and Lang
|
|
467
|
+
const htmlEl = document.documentElement;
|
|
468
|
+
htmlEl.lang = currentLang;
|
|
469
|
+
htmlEl.dir = currentLang === 'ar' ? 'rtl' : 'ltr';
|
|
470
|
+
|
|
471
|
+
// Toggle Font
|
|
472
|
+
document.body.classList.toggle('font-en', currentLang === 'en');
|
|
473
|
+
|
|
474
|
+
// Update content
|
|
475
|
+
document.title = c.docTitle;
|
|
476
|
+
document.getElementById('btnText').textContent = c.btn;
|
|
477
|
+
document.getElementById('pageTitle').textContent = c.pageTitle;
|
|
478
|
+
document.getElementById('pageSubtitle').textContent = c.pageSubtitle;
|
|
479
|
+
document.getElementById('backText').textContent = c.backText;
|
|
480
|
+
document.getElementById('lastUpdated').textContent = c.lastUpdated;
|
|
481
|
+
document.getElementById('footerText').innerHTML = c.footerText;
|
|
482
|
+
|
|
483
|
+
// Toggle content sections
|
|
484
|
+
document.getElementById('content-ar').style.display = currentLang === 'ar' ? 'block' : 'none';
|
|
485
|
+
document.getElementById('content-en').style.display = currentLang === 'en' ? 'block' : 'none';
|
|
486
|
+
}
|
|
487
|
+
</script>
|
|
488
|
+
</body>
|
|
489
|
+
</html>
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: tahweel
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ali Hamdi Ali Fadel
|
|
@@ -23,6 +23,48 @@ dependencies:
|
|
|
23
23
|
- - "~>"
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
25
|
version: '1.4'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: csv
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - "~>"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '3.3'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - "~>"
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '3.3'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: fiddle
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - "~>"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '1.1'
|
|
47
|
+
type: :runtime
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '1.1'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: glimmer-dsl-libui
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - "~>"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: 0.13.1
|
|
61
|
+
type: :runtime
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - "~>"
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: 0.13.1
|
|
26
68
|
- !ruby/object:Gem::Dependency
|
|
27
69
|
name: google-apis-drive_v3
|
|
28
70
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -79,20 +121,6 @@ dependencies:
|
|
|
79
121
|
- - "~>"
|
|
80
122
|
- !ruby/object:Gem::Version
|
|
81
123
|
version: '3.3'
|
|
82
|
-
- !ruby/object:Gem::Dependency
|
|
83
|
-
name: ruby-vips
|
|
84
|
-
requirement: !ruby/object:Gem::Requirement
|
|
85
|
-
requirements:
|
|
86
|
-
- - "~>"
|
|
87
|
-
- !ruby/object:Gem::Version
|
|
88
|
-
version: '2.2'
|
|
89
|
-
type: :runtime
|
|
90
|
-
prerelease: false
|
|
91
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
92
|
-
requirements:
|
|
93
|
-
- - "~>"
|
|
94
|
-
- !ruby/object:Gem::Version
|
|
95
|
-
version: '2.2'
|
|
96
124
|
- !ruby/object:Gem::Dependency
|
|
97
125
|
name: xdg
|
|
98
126
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -114,6 +142,7 @@ email:
|
|
|
114
142
|
executables:
|
|
115
143
|
- tahweel
|
|
116
144
|
- tahweel-clear
|
|
145
|
+
- tahweel-ui
|
|
117
146
|
extensions: []
|
|
118
147
|
extra_rdoc_files: []
|
|
119
148
|
files:
|
|
@@ -122,10 +151,14 @@ files:
|
|
|
122
151
|
- CHANGELOG.md
|
|
123
152
|
- CODE_OF_CONDUCT.md
|
|
124
153
|
- LICENSE.txt
|
|
154
|
+
- README.en.md
|
|
125
155
|
- README.md
|
|
126
156
|
- Rakefile
|
|
157
|
+
- assets/logo.png
|
|
158
|
+
- assets/windows/tahweel.ico
|
|
127
159
|
- bin/tahweel
|
|
128
160
|
- bin/tahweel-clear
|
|
161
|
+
- bin/tahweel-ui
|
|
129
162
|
- lib/tahweel.rb
|
|
130
163
|
- lib/tahweel/authorizer.rb
|
|
131
164
|
- lib/tahweel/cli/file_collector.rb
|
|
@@ -135,6 +168,7 @@ files:
|
|
|
135
168
|
- lib/tahweel/converter.rb
|
|
136
169
|
- lib/tahweel/ocr.rb
|
|
137
170
|
- lib/tahweel/pdf_splitter.rb
|
|
171
|
+
- lib/tahweel/poppler_installer.rb
|
|
138
172
|
- lib/tahweel/processors/google_drive.rb
|
|
139
173
|
- lib/tahweel/templates/success.html
|
|
140
174
|
- lib/tahweel/version.rb
|
|
@@ -144,6 +178,10 @@ files:
|
|
|
144
178
|
- lib/tahweel/writers/txt.rb
|
|
145
179
|
- mise.toml
|
|
146
180
|
- sig/tahweel.rbs
|
|
181
|
+
- website/favicon.ico
|
|
182
|
+
- website/index.html
|
|
183
|
+
- website/logo.png
|
|
184
|
+
- website/privacy.html
|
|
147
185
|
homepage: https://github.com/ieasybooks/tahweel.rb
|
|
148
186
|
licenses:
|
|
149
187
|
- MIT
|