קורא ZIM — תוסף לאוצריא (מהדורת rework)
תוסף לקריאת קבצי ZIM (הפורמט של Kiwix / openZIM) בתוך אוצריא — ויקיפדיה/ויקיטקסט offline, מילונים, אנציקלופדיות תורניות ועוד. מבוסס על ספריית libzim המהודרת ל-WebAssembly, הרצה בתוך Web Worker.
מהדורה זו היא rework מקיף של התוסף המקורי של @האדם-החושב — מציג ה-ZIM שהוא יצר לנו ברוב גאונותו. שיפרתי אותו מכמה מקומות, והנה התוצאה.
מה חדש במהדורה זו
- א. אפשרות לטעון כמה קבצי ZIM במקביל, והם נשמרים בזיכרון התוסף לפתיחה הבאה.
- ב. התוסף זוכר כעת את המיקום האחרון — הדף האחרון שהייתם בו — מה שלא היה קודם.
- ג. מהירות הטעינה של הקבצים עלתה משמעותית.
- ד. חיפוש נוח ומהיר בתוסף.
- ה. חיפוש חכם — כולל חיפוש במילים מנוקדות, חיפוש עם טעויות (כמו "כלומ" במקום "כלום"), וחיפוש עם הטיות: "שלום" ימצא גם "שהשלום"/"והשלום"/"כשהשלום" וכו'.
- ו. חלונית חיפוש בכותרות ובתוכן, עם הצגת התוצאות, הכותרות וההקשר שלהן.
- ז. חלונית ניווט בין הכותרות בדף שבו אתם נמצאים.
- ח. חיפוש בתוך הדף הפתוח, עם ניווט בין המופעים בדף.
- ט. חלונית להורדת המאגרים הבאים דרך התוסף:
- ויקימילון כלי קודש — ויקימילון מסונן ומשוכתב שנוצר ע"י @pcinfogmach לפרויקט כלי קודש. תשואות חן לו על התוכן ועל העזרה.
- ויקיסוגיה — מאתר ויקי.
- ויקישיבה — מאתר ויקי.
- ויקי אוצריא — התיעוד הרשמי של אוצריא, נבנה ומתעדכן אוטומטית מהוויקי החי בגיטהאב.
- אוצר הספרים היהודי השיתופי — אוסף ספרים תורניים.
- י. בעקבות הוראת הרבנים — התוסף כעת חוסם כל אפשרות של טעינת קובץ ZIM אחר שאינו ברשימה דלעיל, מכיוון שזהו תוסף לתוכנה תורנית, ולא ח"ו פתח לדברים לא טובים.
- יא. קישורים חיצוניים בתוך ערך אינם נפתחים ישירות — עולה פופאפ אישור שמזהיר שהמדובר בקישור לאתר חוץ, ורק אישור מפורש פותח אותו בדפדפן החיצוני.
- יב. היסטוריית ניווט (קדימה/אחורה), סימניות, ורשימת "נצפו לאחרונה" — גלובליות בין כל הארכיונים, עם ציון הארכיון שממנו כל פריט.
- יג. בקרת גודל טקסט לקריאה נוחה יותר.
- יד. מאגרי ויקי אוצריא ומילון כלי קודש מתעדכנים אוטומטית מהמקור החי שלהם (ראו עדכונים אוטומטיים).
נשמח להערות והארות.
תוכן עניינים
הבעיות שנפתרו מהגרסה המקורית
המחבר המקורי ציין שלוש בעיות ידועות. כולן טופלו:
| # | הבעיה המקורית | הפתרון במהדורה זו |
|---|
| 1 | קבצים כבדים לא נטענים | אסטרטגיית-טעינה לפי גודל: קבצים עד ~600MB נטענים במלואם לזיכרון (WORKERFS) לפתיחה מיידית ואמינה; קבצים גדולים יותר נטענים ב-streaming עצל (HTTP Range) בלי להוריד את כל הקובץ. בנוסף — טלאי-קריאה בגושים (bulk-read) שמחליף קריאה בית-אחר-בית. |
| 2 | הממשק איטי | עיצוב מחדש קליל, טעינת ערכים אסינכרונית, השהיית-הקלדה בחיפוש, שמירת-רצף (seq) שמונעת רינדור מיושן, ופתיחת ערכים מהירה. |
| 3 | לא נשמרים מיקומים בין הפעלות | ספריית-ארכיונים מתמשכת (persistent library), שמירת הקובץ האחרון, ושמירת המיקום האחרון בכל ארכיון (לפי token) — הכול נטען אוטומטית בהפעלה הבאה. |
רשימת היכולות המלאה
טעינה וארכיונים
- טעינת קובץ
.zim מקומי דרך File Picker (עם token מתמשך בין הפעלות).
- ריבוי ארכיונים פתוחים בו-זמנית ומעבר ביניהם (כמו Kiwix), עם בורר קבצים.
- זכירת הקובץ האחרון והמיקום האחרון בכל ארכיון.
- זיהוי קבצים פגומים לפני הטעינה — קובץ פגום/חלקי מקבל שגיאה ברורה מיד, במקום להיתקע בטעינה.
חיפוש (חכם)
- הצעות לפי כותרת (live) + חיפוש טקסט-מלא (Xapian) בתוך התוכן — עם מתג "☑ בתוכן".
- התאמה עברית חכמה: התעלמות מניקוד וטעמים, מאותיות סופיות (ך=כ ם=מ ן=נ ף=פ ץ=צ), ומגרשיים/מרכאות; והתאמת אותיות שימוש (ה/ו/ב/כ/ל/מ/ש) — כך ש"ריבית" נמצא גם ב"הריבית".
- תיקון אוט' של סיומת מילה: הקלדת אות אמצעית בסוף מילה מתוקנת לצורתה הסופית (למשל "כלומ" → "כלום").
- "האם התכוונת" לראשי-תיבות: כשאין תוצאות, מנסה וריאנט עם גרשיים (למשל "רמבם" → "רמב״ם").
- התאמת גבול-מילה — לא מסמן חלקי-מילה שגויים.
- קטע הקשר של 3 שורות בכל תוצאה (לפני / התאמה / אחרי), שנבנה מהתוכן.
קריאה וניווט
- ניווט פנימי בין ערכים, כולל קישורים, תמונות וגיליונות-סגנון (מוטמעים כ-Blob URLs).
- הסרת JavaScript מכל ערך (אבטחה), ומיזוג רקע של MediaWiki כדי למנוע פס אפור.
- תוכן עניינים / ניווט לפי כותרות הדף, מתעדכן לפי הערך הפתוח.
- סימון צהוב של מילת-החיפוש בדף וקפיצה אליה, כולל "חיפוש בדף" עם ניווט הבא/קודם ומונה מופעים.
ממשק
- עיצוב מודרני (כפתורי-גלולה, תמיכת-מגע), פאנל-צד נשלף לתוצאות/ניווט, כותרת עם שם-הקובץ במרכז, וחלונית הורדות.
איך זה עובד — פירוט מקצועי
מנוע הקריאה: libzim (WebAssembly)
התוסף משתמש בספריית libzim של openZIM (אותה ספרייה שמפעילה את Kiwix), המהודרת ל-WebAssembly. היא רצה ב-Web Worker נפרד כדי לא לחסום את ה-UI, ומתקשרת עם הדף דרך MessageChannel (RPC).
אתחול ב-WebView עם origin=null
בתוך WebView של file:// (origin = null) אי-אפשר ליצור Worker מ-URL של אותו origin, וגם fetch() לקבצים מקומיים נכשל. הפתרון:
- קוד ה-worker נשלח כמחרוזת ב-
js/libzim-wasm-source.js (self.__libzimWasmSource), וה-WASM כ-base64 ב-js/libzim-wasm-data.js (self.__libzimWasmBase64) — שניהם נטענים דרך <script> רגיל (שעובד מ-file://).
- נבנה Blob URL ל-worker, וה-WASM מוזרק ל-Emscripten דרך
Module.wasmBinary (עם locateFile שמדלג על fetch של רשת).
אסטרטגיית טעינה (הפתרון ל"קבצים כבדים")
- ≤ ~600MB → הקובץ נמשך במלואו ל-Blob ומחובר דרך WORKERFS (
FileReaderSync) — פתיחה מהירה ואמינה. פורמט ZIM ישן (v5) שפתיחתו מבצעת ריבוי קריאות קטנות נפתח כך ללא תקיעות.
- גדול יותר → createLazyFile עם בקשות HTTP Range סינכרוניות (streaming), בלי להעלות את כל הקובץ לזיכרון.
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗