Skip to content

fix(webapp): גלילה וחיפוש בתצוגת קובץ — סרגל החיפוש נשאר על המסך, ▼ במתקדם מגיע לתוצאה, ומסך מלא נגלל עד הסוף - #3535

Merged
amirbiron merged 2 commits into
mainfrom
claude/nifty-dijkstra-arcc1c
Oct 6, 2026

Conversation

@amirbiron

@amirbiron amirbiron commented Oct 6, 2026 •

Copy link
Copy Markdown
Owner

✨ תיאור קצר

ארבע תקלות גלילה וחיפוש בתצוגת קובץ, שנמצאו בטאבלט (כרום לאנדרואיד, מגע), מתוקנות:

  • מסך רגיל: סרגל החיפוש נשאר צמוד לראש המסך כשקופצים לתוצאה, ואפשר להמשיך ללחוץ ▼. אותו דבר בסרגל של תצוגת ה-Markdown, ושם כותרת שגוללים אליה נוחתת מתחת לסרגל ולא מאחוריו.
  • תצוגה מתקדמת: ▼ גולל להתאמה הבאה ומביא אותה למרכז המסך.
  • מסך מלא: בתצוגה המתקדמת אפשר לגלול (קודם שום דבר לא זז), ובבסיסית השורה האחרונה נגישה (קודם היא נחתכה).

לתקלות יש שלושה שורשים שונים, ולכן יש כאן שלושה תיקונים ולא אחד. לכל תקלה יש בדיקת דפדפן, שנכשלה על הקוד הקודם.

📦 שינויים עיקריים

  • קוד (Backend) — לא; פרונטאנד בלבד (תבניות, CSS, JS) ובדיקות
  • בוט טלגרם
  • מסד נתונים/מיגרציות
  • תיעוד (docs/)
  • DevOps/CI/CD

פירוט:

  • הסרגל הצמוד — base.html. ב-.main-content, .container הוחלף overflow-x: hidden ב-overflow-x: clip, ו-hidden נשאר לפניו כנפילה-לאחור. לפי CSS Overflow 3, hidden בציר אחד הופך את הציר השני ל-auto. לכן שני המיכלים היו "קופסת גלילה" שאף פעם לא גוללת, ו-position: sticky נצמד אליהם במקום להיצמד לראש המסך. clip חותך לרוחב בדיוק אותו דבר, בלי לייצר קופסת גלילה. אותה החלטה כבר קיימת ב-global_search.css (perf(search): האינדקס בזיכרון נבנה רק בחיפושים שקוראים ממנו #3351). השינוי חל על כל האתר, ולכן כל האלמנטים הצמודים נבדקו (ראו "בדיקת כל האלמנטים הצמודים" למטה).
  • ▼ בתצוגה המתקדמת — view-codemirror-toggle.js. EditorView.scrollHandler מעביר את הגלילה של CodeMirror ל-scrollIntoView של הדפדפן. CodeMirror (scrollRectIntoView ב-@codemirror/view 6.38.6) מניח שכשהוא מגיע ל-body זה החלון, ולכן קורא ל-window.scrollBy. אצלנו העמוד נגלל בתוך body (העמוד נגלל בתוך body ולא בחלון — וקוד שמניח שהחלון גולל שבור בשקט #3534), ולכן שום דבר לא זז. החיפוש מבקש עכשיו למרכז את ההתאמה (y: 'center'), כמו בתצוגה הבסיסית, כדי שהיא לא תנחת מתחת לסרגל הצמוד.
  • מסך מלא — view_file.html ו-codemirror-custom.css. במסך מלא הכרטיס הוא עמודה גמישה, וקופסת הקוד ממלאת בדיוק את המקום שנשאר וגוללת בשתי התצוגות. הוסר calc(100vh - 120px), שהניח שהכותרת והסרגל תופסים 120 פיקסלים (בפועל כ-182). הוסרו גם שני כללי height: 100% שמעולם לא פעלו. הכלל #codeCard.is-advanced .code-container { overflow: visible } חל עכשיו רק מחוץ למסך מלא. קודם הוא גבר על ה-overflow: auto של המסך המלא, כי הספציפיות שלהם שווה והוא כתוב אחריו.
  • כותרות ב-Markdown — md_preview.html. לכל הכותרות ולעוגנים המפורשים נוסף scroll-margin-top, לפי גובה הסרגל כפי שנמדד (--md-toolbar-h, שמתעדכן ב-ResizeObserver). בטלפון הסרגל גבוה בהרבה מ-80 פיקסלים, ומרווח קבוע היה משאיר שם את הכותרת מתחתיו.
  • בונה הערכות — settings/theme_builder.html. בפריסה של שלוש עמודות הסרגל הצדי נצמד, כמו שתוכנן. בפריסות הצרות (@media (max-width: 1200px)) ההצמדה מבוטלת: נמדד שבהן הפריטים הצמודים החליקו מעל התצוגה המקדימה והבקרים, וכיסו אותם.
  • בדיקות: הקובץ החדש tests/test_view_file_scroll_browser.py. כלי המגע והדגימה (Touch, poll) הועברו מ-tests/test_repo_notes_browser.py ל-tests/_browser_harness.py, כדי ששני קובצי הבדיקות ישתמשו באותו עותק.
  • תיעוד: ב-docs/webapp/theming_and_css.rst נוסף כלל: "למניעת גלילה לרוחב משתמשים ב-clip, לא ב-hidden", יחד עם שני דברים שצריך לזכור כשאלמנט באמת נצמד. ב-docs/whats-new.rst נוספה שורה.

🧪 בדיקות

לכל תקלה יש בדיקת דפדפן, בכרומיום אמיתי ובעמוד האמיתי (/file/<id> ו-/md/<id> מול מונגו אמיתי), במגע דרך CDP ובגודל טאבלט. כל בדיקה רצה קודם על הקוד שלפני התיקון (ב-worktree נפרד על f926bc08) ונכשלה. אחר כך היא רצה על התיקון ועברה, פעמיים ברצף:

בדיקה לפני התיקון: נכשלה, וזה מה שנמדד אחרי
בסיסי, מסך רגיל: הסרגל צמוד אחרי קפיצה לתוצאה, ו-▼ נגיש הסרגל 749 פיקסלים מעל ראש המסך ✓
מתקדם, מסך רגיל: ▼ מביא את ההתאמה הבאה למסך ההתאמה ב-1760, במסך בגובה 800 ✓
מתקדם, מסך מלא: החלקה מזיזה את הקוד הקוד נשאר ב-182 ✓
בסיסי, מסך מלא: השורה האחרונה בתוך המסך תחתית השורה ב-834, במסך בגובה 800 ✓
Markdown, טאבלט: הסרגל צמוד והכותרת מתחתיו הסרגל 4079 פיקסלים מעל ראש המסך, הכותרת ב-0 ✓
Markdown, טלפון: אותו דבר הסרגל 4164 פיקסלים מעל ראש המסך, הכותרת ב-0 ✓

שני דברים שכדאי לדעת על הבדיקות:

בדיקות קיימות: 808 בדיקות שנוגעות בתבניות ובסגנונות ששונו — עברו. בדיקות הפתקים בדפדפן הריפו ובדיקת-העל של השער (test_browser_suite_is_gated_once.py), יחד עם הבדיקות החדשות — 22, עברו. בדיקות שקוראות את עמודי התיעוד ששונו — 147, עברו. flake8 (הבחירה שחוסמת ב-CI) ו-mypy עברו על קבצי הבדיקות.

מה ה-CI לא יראה: בדיקות הדפדפן מדולגות ב-CI, כי אין שם שלב שמתקין דפדפן (docs/testing.rst). הן רצו כאן, מקומית.

  • Unit
  • Integration — בדיקות דפדפן מול שרת ומונגו אמיתיים
  • Manual — מדידות בדפדפן, כולל בדיקה של כל האלמנטים הצמודים (למטה)

בדיקת כל האלמנטים הצמודים באתר

אחרי השינוי ב-base.html, כל אלמנט עם position: sticky שיושב בתוך .main-content או .container מתחיל להיצמד. לפני השינוי אף אחד מהם לא נצמד (נמדד). מיפיתי את כולם, כולל אלה ש-CodeMirror יוצר בזמן ריצה. כל אחד נבדק בכרומיום ב-1280×800, ב-800×1280 וב-390×844: שהוא נצמד במקום הנכון, שהוא לא יוצא מההורה שלו באף אחד מ-21 מיקומי גלילה, ושהוא לא מכסה תוכן.

אלמנט איפה תוצאה
#code-search (סרגל החיפוש) תצוגת קובץ, בסיסית ומתקדמת, וגם /share/<id> הציבורי נצמד לראש המסך בשלושת הגדלים. ההתאמות בחיפוש גלויות ולא מתחת לסרגל (בטלפון הסרגל בגובה 152, וההתאמה ב-413)
#md-search תצוגת Markdown נצמד לראש המסך. כותרות נוחתות ב-74 (סרגל בגובה 66, ועוד 8), ובטלפון ב-159 (151 ועוד 8)
.theme-builder-sidebar, .theme-builder-controls בונה הערכות לרוחב: הסרגל הצדי נצמד ב-16, ולבקרים אין לאן לזוז. אין חפיפות. לאורך ובטלפון, לפני התיקון בקובץ: הבקרים כיסו את התצוגה המקדימה (עד 464×504 פיקסלים), ובטלפון הסרגל הצדי כיסה את הבקרים (עד 350×254). אחרי: אין הצמדה ואין חפיפות
.cm-gutters (CodeMirror) כל עורך נצמד לרוחב בלבד (top ו-bottom הם auto), ולכן לא מושפע
.cm-panels-bottom (פאנל החיפוש של CodeMirror) עורכים שאפשר לערוך בהם ב-/edit הוא נצמד ל-.codemirror-container, וב-/tools/code ל-.panel.input-panel. לא מושפע. בתצוגת קובץ העורך לקריאה בלבד ולא מקבל פוקוס, ולכן הפאנל לא נפתח שם
.diff-file-header היסטוריית הריפו יושב במודאל שמוצמד ל-body, מחוץ למיכלים. לא מושפע

לא נבדק: /tools/json — עורך ה-CodeMirror לא עלה בסביבת הבדיקה.

🧪 בדיקות נדרשות ב‑PR

  • 🔍 Code Quality & Security
  • Unit Tests (3.11)
  • Unit Tests (3.12)
  • Unit Tests md-heavy (3.11)
  • Unit Tests md-heavy (3.12)

📝 סוג שינוי

  • feat: פיצ'ר חדש
  • fix: תיקון באג
  • docs: שינוי תיעוד בלבד
  • refactor: שינוי קוד ללא שינוי התנהגות
  • perf: שיפור ביצועים
  • chore/ci: תשתית/CI
  • breaking change: שינוי שובר תאימות

✅ צ'קליסט

  • הקוד עוקב אחרי הסגנון — flake8 (הבחירה שחוסמת ב-CI) ו-mypy עברו על קבצי הפייתון. black ו-isort לא הורצו
  • בדיקות רצות ועוברות
  • תיעוד עודכן — docs/webapp/theming_and_css.rst, docs/whats-new.rst
  • ג'ובים חדשים — לא נוספו
  • משתני סביבה — לא נוספו
  • טוקנים — לא נוספו. --md-toolbar-h הוא מדידה פנימית של העמוד ולא טוקן של ערכה; הוא מוזכר בכלל החדש ב-theming_and_css.rst
  • אין סודות/מפתחות בקוד
  • אין מחיקות מסוכנות או פעולות על root
  • הודעת הקומיט תואמת Conventional Commits
  • CHANGELOG עודכן — docs/whats-new.rst
  • כל ה‑Required Checks ירוקים — עוד לא רצו
  • צילום/וידאו UI — לא צורף
  • עיינתי במסמכי אתר התיעוד — נתיב: docs/webapp/smooth-scrolling.rst | המשפט: "אם צריך גלילה תכנותית — element.scrollIntoView({ block: 'start' }) מספיק". ובנוסף: AI-MAP.md, docs/webapp/theming_and_css.rst, docs/doc-authoring.rst, docs/versioning-stable-anchors.rst, docs/testing.rst

🧩 השפעות/סיכונים

  • השינוי ב-base.html חל על כל האתר. כל אלמנט צמוד בתוך .main-content או .container מתחיל להיצמד, וכולם נבדקו (הטבלה למעלה). אלמנט צמוד שיתווסף בעתיד ייצמד כבר מההתחלה, וזה המצב הנכון.
  • דפדפן שלא מכיר overflow-x: clip נשאר עם hidden, כלומר עם ההתנהגות של היום.
  • לא נבדק: מכשיר אנדרואיד אמיתי (זו אמולציית מגע בכרומיום), שורת כתובת שמתכווצת, מסך מלא עם פסי המערכת, והמקלדת הווירטואלית.
  • ממצאים צדדיים, שלא תוקנו כאן:
    • @keyframes fadeIn מוגדר גם ב-bookmarks.css (עם scale(0.8)). בתצוגת ה-Markdown הוא נטען אחרי ההגדרה של md_preview.html (עם translateY(10px)) ודורס אותה. נמדד: הכותרות נכנסות בהגדלה ולא בהחלקה.
    • md_preview.bundle.js ו-md_preview.bundle.css נטענים בלי ?v=, בזמן שלקבצים סטטיים מוגדר cache של שנה (SEND_FILE_MAX_AGE_DEFAULT). זה לפי הקוד; לא נבדק בדפדפן.
    • scroll-behavior: smooth מוגדר על html, אבל מי שגולל הוא body, ולכן קישור עוגן רגיל קופץ בלי אנימציה (נמדד). זה סותר את docs/webapp/smooth-scrolling.rst, ונכנס ל-העמוד נגלל בתוך body ולא בחלון — וקוד שמניח שהחלון גולל שבור בשקט #3534.

🔗 קישורים

סטיות מהתוכנית שאושרה

  1. בונה הערכות. התוכנית לא כללה שינוי בו. הבדיקה שהתבקשה לפני המימוש מצאה שבפריסות הצרות הפריטים הצמודים מכסים תוכן, ולכן ההצמדה מבוטלת שם.
  2. גובה הסרגל ב-Markdown. התוכנית דיברה על scroll-margin-top "כמו ה-80 פיקסלים שכבר קיימים". נמדד שבטלפון הסרגל גבוה מ-80, ולכן המרווח נגזר מהגובה שנמדד בפועל.
  3. כלי הבדיקה. התוכנית דיברה על קובץ בדיקות חדש בלבד. כלי המגע והדגימה כבר היו קיימים בבדיקות הפתקים, ובמקום עותק שני הם הועברו לקובץ משותף. השינוי בקובץ הקיים הוא מחיקת העותק והוספת ייבוא.
  4. console.error בחיפוש של CodeMirror. בחירת ההתאמה הייתה עטופה ב-catch שבולע בשקט. עכשיו כישלון נרשם לקונסול.

🧯 סיכון / החזרה לאחור (Rollback)

  • Revert של הקומיט מחזיר את ארבע התקלות. אין שינויי נתונים, אין משתני סביבה ואין מיגרציות.

🤖 Generated with Claude Code

https://claude.ai/code/session_013Pzf4XyLpo6NFzLyZVnWxm


Generated by Claude Code

Review in cubic

Summary by Sourcery

Fix scrolling and search navigation across file, Markdown, and fullscreen views on touch-oriented layouts.

Bug Fixes:

  • Keep file and Markdown search bars pinned while navigating results, and position Markdown headings below the toolbar.
  • Make advanced-view search navigation scroll to the next match and center it in the viewport.
  • Restore scrolling in advanced fullscreen view and make the final line reachable in basic fullscreen view.

Enhancements:

  • Adjust theme builder sticky behavior to prevent controls and previews from overlapping on narrow layouts.
  • Share browser touch and polling utilities across browser tests.

Documentation:

  • Document using CSS overflow clipping instead of hidden to preserve sticky positioning and record the webapp scrolling fixes.

Tests:

  • Add Chromium touch-based browser coverage for file-view search, fullscreen scrolling, and Markdown toolbar anchoring.

…מתקדם מגיע לתוצאה, ומסך מלא נגלל עד הסוף

ארבע תקלות שנמצאו בטאבלט (כרום לאנדרואיד, מגע), משלושה שורשים:

- סרגל החיפוש לא נצמד במסך רגיל, וכך גם הסרגל של תצוגת ה-Markdown והפריטים הצמודים של בונה הערכות. overflow-x: hidden על .main-content, .container ב-base.html הפך את שני המיכלים לקופסאות גלילה שאינן גוללות, ו-position: sticky נצמד לקופסה הקרובה. עכשיו overflow-x: clip (עם hidden לפניו כנפילה-לאחור), כמו ב-global_search.css. בעקבות זה: כותרות ב-Markdown נוחתות מתחת לסרגל (scroll-margin-top לפי הגובה הנמדד, --md-toolbar-h), ובבונה הערכות ההצמדה מבוטלת כשהפריסה נערמת, כי שם הפריטים הצמודים כיסו זה את זה.
- ▼ בתצוגה המתקדמת לא גלל: CodeMirror מניח שכשהוא מגיע ל-body זה החלון, והעמוד נגלל בתוך body (#3534). EditorView.scrollHandler מעביר את הגלילה ל-scrollIntoView של הדפדפן, וההתאמה נגללת למרכז.
- במסך מלא: במתקדם שום דבר לא גלל, ובבסיסי השורה האחרונה נחתכה. הכרטיס הוא עכשיו עמודה גמישה, וקופסת הקוד ממלאת את מה שנשאר וגוללת בשתי התצוגות.

בדיקות: tests/test_view_file_scroll_browser.py — בדיקת דפדפן לכל תקלה (ול-Markdown בטאבלט ובטלפון), במגע אמיתי דרך CDP. כולן נכשלו על הקוד שלפני התיקון ועוברות אחריו. כלי המגע והדגימה הועברו מ-tests/test_repo_notes_browser.py ל-tests/_browser_harness.py, כדי ששני הקבצים ישתמשו באותו עותק.

תיעוד: כלל overflow-x: clip ב-docs/webapp/theming_and_css.rst, ושורה ב-whats-new.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013Pzf4XyLpo6NFzLyZVnWxm
@sourcery-ai

sourcery-ai Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

Sorry @amirbiron, you've used your own review budget of 250,000 diff characters for the last 7 days.

You can request another review in 1 day and 3 hours by commenting @sourcery-ai review. Upgrade to get a review now.

@qodo-code-review

Copy link
Copy Markdown

ⓘ Qodo reviews are paused because your trial has ended. Ask your workspace admin to add credits to resume reviews. Manage billing

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@sourcery-ai

sourcery-ai Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

Reviewer's Guide

PR זה מתקן ארבע תקלות גלילה וחיפוש בתצוגת קובץ, לצד אתחול דומה בסרגל Markdown, באמצעות תיקוני CSS לפריסת הגלילה וה-sticky, התאמת גלילת CodeMirror, פריסת flex במסך מלא ובדיקות Chromium מבוססות מגע שמכסות את התרחישים המרכזיים.

Sequence diagram for advanced CodeMirror search navigation

sequenceDiagram
    participant User
    participant Search as CodeMirrorSearch
    participant View as EditorView
    participant Browser as BrowserScrolling
    participant Scroller as PageOrCodeScroller

    User->>Search: select next match
    Search->>View: dispatch(selection, scrollIntoView)
    View->>Browser: scrollIntoView(block: center)
    Browser->>Scroller: scroll matching range into view
    Scroller-->>User: centered match remains visible below toolbar
Loading

Flow diagram for responsive Markdown anchor scrolling

flowchart TD
    Toolbar["Markdown search toolbar"] --> Measure["ResizeObserver measures toolbar height"]
    Measure --> Variable["--md-toolbar-h"]
    Variable --> Margin["scroll-margin-top: toolbar height + 8px"]
    Link["Heading or explicit anchor target"] --> Margin
    Margin --> Visible["Target lands below sticky toolbar"]
Loading

File-Level Changes

Change Details Files
תוקנה התנהגות ההצמדה והגלילה בתצוגות הקובץ וה-Markdown באמצעות מניעת יצירת קופסאות גלילה מלאכותיות.
  • הוחלף overflow-x: hidden ב-clip עם fallback כדי לאפשר ל-sticky להיצמד לגלילת העמוד.
  • נוסף scroll-margin-top דינמי לכותרות ולעוגנים ב-Markdown, לפי גובה סרגל החיפוש שנמדד ב-ResizeObserver.
  • הותאמה הצמדת רכיבי בונה הערכות כך שתפעל רק בפריסת שלוש עמודות.
webapp/templates/base.html
webapp/templates/md_preview.html
webapp/templates/settings/theme_builder.html
docs/webapp/theming_and_css.rst
docs/whats-new.rst
תוקנה גלילת החיפוש בתצוגה המתקדמת של CodeMirror עבור גלילת העמוד וקופסת הקוד במסך מלא.
  • נוסף scrollHandler שממפה גלילת CodeMirror ל-scrollIntoView של הדפדפן.
  • החיפוש ממקם את ההתאמה במרכז כדי למנוע כיסוי על ידי סרגל החיפוש.
  • שגיאות בבחירת התאמה נרשמות לקונסול במקום להיבלע.
webapp/static/js/view-codemirror-toggle.js
נבנתה פריסת מסך מלא גמישה שבה קופסת הקוד ממלאת את השטח שנותר וגוללת בשתי התצוגות.
  • הוחלף גובה ה-calc הקבוע בפריסת flex עם min-height: 0.
  • הוגבלה גלילת CodeMirror בגובה אוטומטי למסך רגיל בלבד.
  • הוסרו כללי height: 100% שלא סיפקו גובה יעיל.
webapp/templates/view_file.html
webapp/static/css/codemirror-custom.css
נוספה תשתית ובדיקות דפדפן מבוססות מגע לתרחישי הגלילה והחיפוש.
  • נוספו ארבע בדיקות לתצוגת קובץ ובדיקות Markdown בטאבלט ובטלפון מול שרת ומונגו אמיתיים.
  • נוצר harness משותף עבור Touch ו-poll והבדיקות הקיימות הועברו להשתמש בו.
  • הבדיקות מאמתות הצמדת סרגלים, הגעה להתאמות, גלילת מסך מלא ונגישות השורה האחרונה.
tests/test_view_file_scroll_browser.py
tests/_browser_harness.py
tests/test_repo_notes_browser.py

Possibly linked issues


Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@coderabbitai

coderabbitai Bot commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 43 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 22ea77eb-2c88-4125-a072-623071626668
📥 Commits

Reviewing files that changed from the base of the PR and between 6ae29f2 and 0e22461.

📒 Files selected for processing (1)
  • docs/whats-new.rst

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 37a39b6b-aec7-462f-99de-7e2fc9b19c0f
📥 Commits

Reviewing files that changed from the base of the PR and between 0070334 and 6ae29f2.

📒 Files selected for processing (11)
  • docs/webapp/theming_and_css.rst
  • docs/whats-new.rst
  • tests/_browser_harness.py
  • tests/test_repo_notes_browser.py
  • tests/test_view_file_scroll_browser.py
  • webapp/static/css/codemirror-custom.css
  • webapp/static/js/view-codemirror-toggle.js
  • webapp/templates/base.html
  • webapp/templates/md_preview.html
  • webapp/templates/settings/theme_builder.html
  • webapp/templates/view_file.html

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

השינויים מעדכנים גלילה והצמדה בתצוגת קובץ, בתצוגת Markdown ובבונה הערכות. נוספו כלי עזר משותפים ובדיקות דפדפן לתרחישי חיפוש, מסך מלא, מגע ועוגנים.

Changes

גלילה והצמדה ב-WebApp

Layer / File(s) Summary
גלילה אופקית, עוגנים והצמדה
webapp/templates/base.html, webapp/templates/md_preview.html, webapp/templates/settings/theme_builder.html, docs/webapp/theming_and_css.rst, docs/whats-new.rst
נוסף overflow-x: clip לצד hidden. מרווח הגלילה של כותרות ועוגנים נקבע לפי גובה סרגל Markdown. רכיבי בונה ההערכות אינם מוצמדים בפריסה הצרה. התיעוד מתאר את השינויים ואת ההבדלים בין clip ל-hidden.
גלילה בתצוגת קובץ ובמסך מלא
webapp/templates/view_file.html, webapp/static/css/codemirror-custom.css, webapp/static/js/view-codemirror-toggle.js
במסך מלא, כרטיס הקוד וקופסת הקוד משתמשים בפריסת flex ובגלילה פנימית. CodeMirror גולל לטווח המבוקש דרך הדפדפן, וחיפוש מתקדם ממקם את ההתאמה במרכז.
תשתית ובדיקות דפדפן
tests/_browser_harness.py, tests/test_view_file_scroll_browser.py, tests/test_repo_notes_browser.py
נוספו כלי polling ומגע באמצעות CDP, ובדיקות Chromium לתרחישי חיפוש, גלילה במסך מלא ועוגני Markdown. בדיקות הדפדפן הקיימות משתמשות בכלי העזר המשותפים.

Priority: ➖ Normal

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Bug fix

Merge Risk: ⚪ Minimal · up to 6ae29

No actionable issue remains that would prevent merging after normal checks.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 54.55% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 22 functions across 4 files. (7 skipped: … Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed הכותרת מתארת בבירור את תיקוני הגלילה והחיפוש המרכזיים בתצוגת הקובץ, כולל סרגל החיפוש ומסך מלא. היא ארוכה, אך עדיין ספציפית ומובנת.
Description check ✅ Passed התיאור מפורט ומכסה את השינויים, הסיבות, הבדיקות, הסיכונים ותוכנית החזרה לאחור. הוא מציין גם אילו בדיקות טרם הורצו ואילו תרחישים לא נבדקו. לכן הוא עומד בעיקר דרישות התבנית.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 54.55% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 22 functions across 4 files. (7 skipped: 7 unsupported.)

✨ Finishing Touches 💡 2
📝 Generate docstrings 💡
  • Commit to this branch
  • Create a new PR
⚔️ Resolve merge conflicts 💡
  • Resolve merge conflict in branch claude/nifty-dijkstra-arcc1c
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

גלילה נעה, העוגן נוחת במקום
סרגל נשאר, והקוד גולל עד תום
במסך מלא, כל שורה נגלית
גם מגע וגם חיפוש מקבלים בדיקה
כל הכבוד ל-Claude Code על עבודת הקוד
CodeKeeper forever 💫

Comment @coderabbitai help to get the list of available commands.

@mergestorm-vortex mergestorm-vortex Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review progress ██████████ 11/11 files

Approve — reviewed files look good at 6ae29f2.

✅ All clear — nothing to fix.


Try MergeStorm

@kilo-code-bot

kilo-code-bot Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Issue Details (click to expand)

No issues found in changed code. The PR fixes four touch scrolling/search bugs across file view, Markdown, fullscreen, and theme-builder with three distinct root-cause fixes, comprehensive browser tests, and documentation updates.

Files Reviewed (11 files)
  • webapp/templates/base.html - overflow-x: clip fix for sticky positioning
  • webapp/templates/md_preview.html - dynamic scroll-margin-top via ResizeObserver
  • webapp/templates/settings/theme_builder.html - responsive sticky positioning
  • webapp/templates/view_file.html - flex-based fullscreen layout
  • webapp/static/css/codemirror-custom.css - CodeMirror auto-height in fullscreen
  • webapp/static/js/view-codemirror-toggle.js - scrollHandler facet + centered search matches
  • tests/_browser_harness.py - new shared touch/poll utilities
  • tests/test_repo_notes_browser.py - migrated to shared harness
  • tests/test_view_file_scroll_browser.py - new browser tests (5 test cases)
  • docs/webapp/theming_and_css.rst - documentation of clip pattern and sticky gotchas
  • docs/whats-new.rst - changelog entry

Reviewed by nemotron-3-ultra-550b-a55b:free · Input: 264.1K · Output: 6.4K · Cached: 229K

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

4 issues found across 11 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="webapp/templates/settings/theme_builder.html">

<violation number="1" location="webapp/templates/settings/theme_builder.html:403">
P2: Custom agent: **Enforce Pragmatic Test Coverage**

This responsive sticky-layout fix has no automated UI coverage. Add a browser test that exercises the theme builder at a wide viewport and at widths below 1200px, asserting the controls/sidebar stop sticking and do not overlap the preview while scrolling.</violation>
</file>

<file name="webapp/templates/view_file.html">

<violation number="1" location="webapp/templates/view_file.html:249">
P2: Custom agent: **Enforce Strict Maintainability Standards**

The new `:not(:fullscreen)` makes the entire advanced overflow selector unavailable in older Safari/Chrome, restoring the nested scroll box. Keep the advanced rule unconditional and override it with a more-specific fullscreen rule.</violation>
</file>

<file name="webapp/static/js/view-codemirror-toggle.js">

<violation number="1" location="webapp/static/js/view-codemirror-toggle.js:175">
P2: Severity 5/10: `domAtPos` returns a text node for ordinary source positions, so this scrolls its entire `.cm-line` parent rather than the match's geometry. When a wrapped line is taller than the viewport, centering the line can leave the selected match off-screen; scroll using the position's actual geometry.</violation>

<violation number="2" location="webapp/static/js/view-codemirror-toggle.js:176">
P3: חומרה: נמוכה–בינונית (3/10).

`scrollHandler` מחזיר `true` על **כל** בקשות הגלילה של CodeMirror, לא רק על חיפוש. גלילת קרטור בחץ, קיפול קוד או לחיצה על שורה מחוץ למסך מגיעים עם `options.y` מהסוג `'start'`/`'nearest'`, ו-`el.scrollIntoView({ block: 'start' })` מיישר את שורת ה-CM לראש ה-scrollport של העמוד — בדיוק לאזור תפוס על ידי `.editor-toolbar` הצמוד (`position: sticky; top: 0; z-index: 5` ב-`view_file.html`). השורה עלולה לנחות מאחורי הסרגל — אותו באג שהתיקון מונע בחיפוש באמצעות `y: 'center'` (ראו התגובה בקבצ־קוד: "נגללת לקצה העליון הייתה נוחתת מתחתיו"), אבל עבור נתיבי הגלילה האחרים הוא לא טופל. נא להוסיף קיזוז בגובה הסרגל הצמוד (למשל `scroll-padding-top` על גוף העמוד, או offset מחושב ב-handler עבור `block: 'start'`).</violation>
</file>

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

}
.theme-builder-controls,
.theme-builder-sidebar {
position: static;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Custom agent: Enforce Pragmatic Test Coverage

This responsive sticky-layout fix has no automated UI coverage. Add a browser test that exercises the theme builder at a wide viewport and at widths below 1200px, asserting the controls/sidebar stop sticking and do not overlap the preview while scrolling.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At webapp/templates/settings/theme_builder.html, line 403:

<comment>This responsive sticky-layout fix has no automated UI coverage. Add a browser test that exercises the theme builder at a wide viewport and at widths below 1200px, asserting the controls/sidebar stop sticking and do not overlap the preview while scrolling.</comment>

<file context>
@@ -369,13 +369,39 @@ <h3>
     }
+    .theme-builder-controls,
+    .theme-builder-sidebar {
+        position: static;
+    }
 }
</file context>

codemirror-custom.css). במסך מלא הגוללת היא קופסת הקוד, ולכן הכלל לא חל שם:
בלי not(:fullscreen) הוא שווה בספציפיות לכלל של המסך המלא שלמעלה, גובר עליו
רק כי הוא כתוב אחריו — ושום דבר במסך המלא לא היה גולל. */
#codeCard.is-advanced:not(:fullscreen) .code-container {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Custom agent: Enforce Strict Maintainability Standards

The new :not(:fullscreen) makes the entire advanced overflow selector unavailable in older Safari/Chrome, restoring the nested scroll box. Keep the advanced rule unconditional and override it with a more-specific fullscreen rule.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At webapp/templates/view_file.html, line 249:

<comment>The new `:not(:fullscreen)` makes the entire advanced overflow selector unavailable in older Safari/Chrome, restoring the nested scroll box. Keep the advanced rule unconditional and override it with a more-specific fullscreen rule.</comment>

<file context>
@@ -231,19 +242,14 @@
+   codemirror-custom.css). במסך מלא הגוללת היא קופסת הקוד, ולכן הכלל לא חל שם:
+   בלי not(:fullscreen) הוא שווה בספציפיות לכלל של המסך המלא שלמעלה, גובר עליו
+   רק כי הוא כתוב אחריו — ושום דבר במסך המלא לא היה גולל. */
+#codeCard.is-advanced:not(:fullscreen) .code-container {
     overflow: visible;
 }
</file context>
Suggested change
#codeCard.is-advanced:not(:fullscreen) .code-container {
#codeCard.is-advanced .code-container {
overflow: visible;
}
#codeCard.is-advanced:fullscreen .code-container {
overflow: auto;
}

// שעובר אז לאלגוריתם שלו — לא נבלעת. ה-facet קיים מ-@codemirror/view 6.26.
EditorView.scrollHandler.of(function (view, range, options) {
const at = view.domAtPos(range.head);
const el = at.node.nodeType === 1 ? at.node : at.node.parentElement;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Severity 5/10: domAtPos returns a text node for ordinary source positions, so this scrolls its entire .cm-line parent rather than the match's geometry. When a wrapped line is taller than the viewport, centering the line can leave the selected match off-screen; scroll using the position's actual geometry.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At webapp/static/js/view-codemirror-toggle.js, line 175:

<comment>Severity 5/10: `domAtPos` returns a text node for ordinary source positions, so this scrolls its entire `.cm-line` parent rather than the match's geometry. When a wrapped line is taller than the viewport, centering the line can leave the selected match off-screen; scroll using the position's actual geometry.</comment>

<file context>
@@ -161,6 +161,21 @@
+      // שעובר אז לאלגוריתם שלו — לא נבלעת. ה-facet קיים מ-@codemirror/view 6.26.
+      EditorView.scrollHandler.of(function (view, range, options) {
+        const at = view.domAtPos(range.head);
+        const el = at.node.nodeType === 1 ? at.node : at.node.parentElement;
+        el.scrollIntoView({ block: options.y, inline: options.x });
+        return true;
</file context>

EditorView.scrollHandler.of(function (view, range, options) {
const at = view.domAtPos(range.head);
const el = at.node.nodeType === 1 ? at.node : at.node.parentElement;
el.scrollIntoView({ block: options.y, inline: options.x });

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: חומרה: נמוכה–בינונית (3/10).

scrollHandler מחזיר true על כל בקשות הגלילה של CodeMirror, לא רק על חיפוש. גלילת קרטור בחץ, קיפול קוד או לחיצה על שורה מחוץ למסך מגיעים עם options.y מהסוג 'start'/'nearest', ו-el.scrollIntoView({ block: 'start' }) מיישר את שורת ה-CM לראש ה-scrollport של העמוד — בדיוק לאזור תפוס על ידי .editor-toolbar הצמוד (position: sticky; top: 0; z-index: 5 ב-view_file.html). השורה עלולה לנחות מאחורי הסרגל — אותו באג שהתיקון מונע בחיפוש באמצעות y: 'center' (ראו התגובה בקבצ־קוד: "נגללת לקצה העליון הייתה נוחתת מתחתיו"), אבל עבור נתיבי הגלילה האחרים הוא לא טופל. נא להוסיף קיזוז בגובה הסרגל הצמוד (למשל scroll-padding-top על גוף העמוד, או offset מחושב ב-handler עבור block: 'start').

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At webapp/static/js/view-codemirror-toggle.js, line 176:

<comment>חומרה: נמוכה–בינונית (3/10).

`scrollHandler` מחזיר `true` על **כל** בקשות הגלילה של CodeMirror, לא רק על חיפוש. גלילת קרטור בחץ, קיפול קוד או לחיצה על שורה מחוץ למסך מגיעים עם `options.y` מהסוג `'start'`/`'nearest'`, ו-`el.scrollIntoView({ block: 'start' })` מיישר את שורת ה-CM לראש ה-scrollport של העמוד — בדיוק לאזור תפוס על ידי `.editor-toolbar` הצמוד (`position: sticky; top: 0; z-index: 5` ב-`view_file.html`). השורה עלולה לנחות מאחורי הסרגל — אותו באג שהתיקון מונע בחיפוש באמצעות `y: 'center'` (ראו התגובה בקבצ־קוד: "נגללת לקצה העליון הייתה נוחתת מתחתיו"), אבל עבור נתיבי הגלילה האחרים הוא לא טופל. נא להוסיף קיזוז בגובה הסרגל הצמוד (למשל `scroll-padding-top` על גוף העמוד, או offset מחושב ב-handler עבור `block: 'start'`).</comment>

<file context>
@@ -161,6 +161,21 @@
+      EditorView.scrollHandler.of(function (view, range, options) {
+        const at = view.domAtPos(range.head);
+        const el = at.node.nodeType === 1 ? at.node : at.node.parentElement;
+        el.scrollIntoView({ block: options.y, inline: options.x });
+        return true;
+      }),
</file context>

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

🧯 Dangerous deletes guard report

Policy: see .cursorrules — dangerous deletions are blocked unless wrapped safely.

Summary:

  • Flagged findings (blocking): 0
    0
  • Excluded matches (not blocking): 15
  • Total matches (all files): 128

Flagged findings (file:line:snippet):
(none)

Excluded matches (by path pattern)
./node_modules/katex/src/fonts/Makefile:139:	rm -rf pfa ff otf ttf woff woff2
./node_modules/katex/package.json:153:    "build": "rimraf dist/ && mkdirp dist && cp README.md dist && rollup -c --failAfterWarnings && webpack && node update-sri.js package dist/README.md",
./node_modules/mermaid/dist/mermaid.js.map:4:  "sourcesContent": ["/**\n* Default values for dimensions\n*/\nconst defaultIconDimensions = Object.freeze({\n\tleft: 0,\n\ttop: 0,\n\twidth: 16,\n\theight: 16\n});\n/**\n* Default values for tr … [truncated]
./node_modules/mermaid/dist/chunks/mermaid.esm/chunk-2M32CCKP.mjs.map:4:  "sourcesContent": ["{\n  \"name\": \"mermaid\",\n  \"version\": \"11.12.0\",\n  \"description\": \"Markdown-ish syntax for generating flowcharts, mindmaps, sequence d … [truncated]
./node_modules/mermaid/dist/chunks/mermaid.core/chunk-KS23V3DP.mjs.map:4:  "sourcesContent": ["{\n  \"name\": \"mermaid\",\n  \"version\": \"11.12.0\",\n  \"description\": \"Markdown-ish syntax for generating flowcharts, mindmaps, sequence  … [truncated]
./node_modules/mermaid/dist/chunks/mermaid.esm.min/chunk-4HFYJGYH.mjs.map:4:  "sourcesContent": ["{\n  \"name\": \"mermaid\",\n  \"version\": \"11.12.0\",\n  \"description\": \"Markdown-ish syntax for generating flowcharts, mindmaps, sequen … [truncated]
./node_modules/mermaid/dist/chunks/mermaid.esm.min/chunk-4HFYJGYH.mjs:1:var r={name:"mermaid",version:"11.12.0",description:"Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graph … [truncated]
./node_modules/mermaid/dist/mermaid.min.js:1524:`,"getStyles"),c1e=RQe});var h1e={};dr(h1e,{diagram:()=>NQe});var NQe,f1e=N(()=>{"use strict";$ge();a1e();l1e();u1e();NQe={parser:Fge,db:n1e,renderer:o1e,styles:c1e}});var m1e,g1e=N(()=>{"use  … [truncated]
./node_modules/mermaid/dist/mermaid.min.js.map:4:  "sourcesContent": ["/**\n* Default values for dimensions\n*/\nconst defaultIconDimensions = Object.freeze({\n\tleft: 0,\n\ttop: 0,\n\twidth: 16,\n\theight: 16\n});\n/**\n* Default values fo … [truncated]
./README.md:829:find . -name "__pycache__" -exec rm -rf {} +
./webapp/static/js/md_preview.bundle.js.map:4:  "sourcesContent": ["// Markdown-it plugin to render GitHub-style task lists; see\n//\n// https://github.com/blog/1375-task-lists-in-gfm-issues-pulls-comments\n// https://github.com/blog/1825-t … [truncated]
./Dockerfile:42:    rm -rf /var/lib/apt/lists/*
./Dockerfile:121:    rm -rf /var/lib/apt/lists/*
./docs/DOCUMENTATION_GUIDE.md:453:rm -rf _build
./docs/Makefile:24:	rm -rf $(BUILDDIR)

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sourcery assessment

Approved.

@mergestorm-vortex mergestorm-vortex Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review progress ██████████ 11/11 files

Approve — reviewed files look good at 0e22461.

✅ All clear — nothing to fix.


Try MergeStorm

@gitar-bot

gitar-bot Bot commented Oct 6, 2026

Copy link
Copy Markdown
Code Review ✅ Approved

🟡 Medium risk · Global overflow and scrolling changes affect sticky behavior across multiple webapp views.

Fixes four scroll and search navigation bugs in file and Markdown views across tablet and fullscreen layouts by correcting CSS overflow handling, search result centering, and sticky element behavior. All changes verified with browser tests on real Chrome and actual pages; no issues found.

Review coverage

📋 Rules No rules evaluated

🧪 Functional validation Not enabled · Set up

Options

Auto-apply is off → Gitar will not commit updates to this branch.
Display: compact → Counting what did not apply, without listing it.

Comment with these commands to change the behavior for this request:

Auto-apply Compact
gitar auto-apply:on         
gitar display:verbose         

Important

Your trial ends in 7 days — upgrade now to keep code review, CI analysis, auto-apply, custom automations, and more.

Was this helpful? React with 👍 / 👎 | Gitar

@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

⏱️ Performance report

(No performance test durations collected. Mark tests with @pytest.mark.performance.)

@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

📖 Documentation Preview

The documentation has been built successfully!

To view locally:

  1. Download the artifacts
  2. Extract the zip file
  3. Open index.html in your browser

@codecov

codecov Bot commented Oct 6, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@amirbiron
amirbiron merged commit 0cdf839 into main Oct 6, 2026
38 checks passed
amirbiron pushed a commit that referenced this pull request Oct 6, 2026
…ן חיפוש

אחרי #3535, חלונית הקיצורים ותפריט האפקטים בסרגל העליון נפתחו אבל לא הגיבו לנגיעה. הסרגל (.navbar) יושב בשכבה שמתחת ל-.main-content: ה-z-index שלו מת כי הוא static, וה-transform וה-backdrop-filter שלו כולאים בתוכו את החלוניות. מאז #3535 החלוניות כבר לא נחתכות, ולכן הן יוצאות אל מעל התוכן, והנגיעה הולכת לתוכן.

עכשיו הסרגל עולה מעל התוכן רק בזמן שאחד התפריטים שלו פתוח (.navbar:has(...)), ולא לתמיד: נמדד שהרמה קבועה מסתירה את 🔖, את כותרת פאנל הסימניות ואת החלונות שנפתחים מתוך התוכן. חלונית האפקטים מעוגנת לצד השמאלי של השרביט, ורשימת ההמבורגר הפתוחה כבר לא חותכת אותה. סרגלי החיפוש בתצוגת קובץ וב-Markdown נצמדים רק כשיש טקסט בתיבה, וגם הרווח מעל כותרות Markdown חל רק אז.

בדיקות: tests/test_navbar_menus_browser.py (חדש), עדכון של tests/test_view_file_scroll_browser.py, ושומר טקסטואלי ל-CI ב-tests/test_navbar_and_search_bars_css.py.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013Pzf4XyLpo6NFzLyZVnWxm
amirbiron added a commit that referenced this pull request Oct 6, 2026
…ן חיפוש (#3536)

* fix(webapp): תפריטי הסרגל העליון לחיצים שוב, וסרגל החיפוש נצמד רק בזמן חיפוש

אחרי #3535, חלונית הקיצורים ותפריט האפקטים בסרגל העליון נפתחו אבל לא הגיבו לנגיעה. הסרגל (.navbar) יושב בשכבה שמתחת ל-.main-content: ה-z-index שלו מת כי הוא static, וה-transform וה-backdrop-filter שלו כולאים בתוכו את החלוניות. מאז #3535 החלוניות כבר לא נחתכות, ולכן הן יוצאות אל מעל התוכן, והנגיעה הולכת לתוכן.

עכשיו הסרגל עולה מעל התוכן רק בזמן שאחד התפריטים שלו פתוח (.navbar:has(...)), ולא לתמיד: נמדד שהרמה קבועה מסתירה את 🔖, את כותרת פאנל הסימניות ואת החלונות שנפתחים מתוך התוכן. חלונית האפקטים מעוגנת לצד השמאלי של השרביט, ורשימת ההמבורגר הפתוחה כבר לא חותכת אותה. סרגלי החיפוש בתצוגת קובץ וב-Markdown נצמדים רק כשיש טקסט בתיבה, וגם הרווח מעל כותרות Markdown חל רק אז.

בדיקות: tests/test_navbar_menus_browser.py (חדש), עדכון של tests/test_view_file_scroll_browser.py, ושומר טקסטואלי ל-CI ב-tests/test_navbar_and_search_bars_css.py.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013Pzf4XyLpo6NFzLyZVnWxm

* test: פרסור כללי CSS משותף לשני השומרים הטקסטואליים

השומר החדש tests/test_navbar_and_search_bars_css.py שכפל את הפרסור של כללי CSS מ-tests/test_sticky_notes_touch_action.py. זה עותק שני של אותו כלל (R6). עכשיו שניהם קוראים דרך tests/_css_rules.py. הקובץ מסיר הערות, מפרק רשימת בוררים בפסיקים שמחוץ לסוגריים (:has(a, b) הוא בורר אחד), ושולף את בלוקי ה-<style> מתבנית בלי Jinja. ההתנהגות של שומר הפתקים לא השתנתה: כל הבדיקות שלו, כולל המוטציות, עוברות.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013Pzf4XyLpo6NFzLyZVnWxm

---------

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants