Repository navigation
fix(webapp): גלילה וחיפוש בתצוגת קובץ — סרגל החיפוש נשאר על המסך, ▼ במתקדם מגיע לתוצאה, ומסך מלא נגלל עד הסוף - #3535
Conversation
…מתקדם מגיע לתוצאה, ומסך מלא נגלל עד הסוף ארבע תקלות שנמצאו בטאבלט (כרום לאנדרואיד, מגע), משלושה שורשים: - סרגל החיפוש לא נצמד במסך רגיל, וכך גם הסרגל של תצוגת ה-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
|
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 |
|
ⓘ Qodo reviews are paused because your trial has ended. Ask your workspace admin to add credits to resume reviews. Manage billing |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
Reviewer's GuidePR זה מתקן ארבע תקלות גלילה וחיפוש בתצוגת קובץ, לצד אתחול דומה בסרגל Markdown, באמצעות תיקוני CSS לפריסת הגלילה וה-sticky, התאמת גלילת CodeMirror, פריסת flex במסך מלא ובדיקות Chromium מבוססות מגע שמכסות את התרחישים המרכזיים. Sequence diagram for advanced CodeMirror search navigationsequenceDiagram
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
Flow diagram for responsive Markdown anchor scrollingflowchart 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"]
File-Level Changes
Possibly linked issues
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
|
Warning Review limit reachedYou'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. View limit detailsLimit details: You’ve used the included review currently available. Review configuration: ⚙️ Run configuration
📒 Files selected for processing (1)
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configuration
📒 Files selected for processing (11)
Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthroughהשינויים מעדכנים גלילה והצמדה בתצוגת קובץ, בתצוגת Markdown ובבונה הערכות. נוספו כלי עזר משותפים ובדיקות דפדפן לתרחישי חיפוש, מסך מלא, מגע ועוגנים. Changesגלילה והצמדה ב-WebApp
Priority: ➖ Normal Estimated code review effort: 3 (Moderate) | ~20 minutes Change: Bug fix Merge Risk: ⚪ Minimal · up to No actionable issue remains that would prevent merging after normal checks. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Full details: Docstring CoverageExplanation 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 💡
⚔️ Resolve merge conflicts 💡
🧪 Generate unit tests (beta)
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. גלילה נעה, העוגן נוחת במקום Comment |
Code Review SummaryStatus: 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)
Reviewed by nemotron-3-ultra-550b-a55b:free · Input: 264.1K · Output: 6.4K · Cached: 229K |
There was a problem hiding this comment.
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; |
There was a problem hiding this comment.
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 { |
There was a problem hiding this comment.
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>
| #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; |
There was a problem hiding this comment.
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 }); |
There was a problem hiding this comment.
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>
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
🧯 Dangerous deletes guard reportPolicy: see .cursorrules — dangerous deletions are blocked unless wrapped safely. Summary:
Flagged findings (file:line:snippet): Excluded matches (by path pattern) |
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. OptionsAuto-apply is off → Gitar will not commit updates to this branch. Comment with these commands to change the behavior for this request:
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 |
⏱️ Performance report(No performance test durations collected. Mark tests with |
📖 Documentation PreviewThe documentation has been built successfully!
To view locally:
|
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
…ן חיפוש אחרי #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
…ן חיפוש (#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>
✨ תיאור קצר
ארבע תקלות גלילה וחיפוש בתצוגת קובץ, שנמצאו בטאבלט (כרום לאנדרואיד, מגע), מתוקנות:
לתקלות יש שלושה שורשים שונים, ולכן יש כאן שלושה תיקונים ולא אחד. לכל תקלה יש בדיקת דפדפן, שנכשלה על הקוד הקודם.
📦 שינויים עיקריים
פירוט:
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/view6.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של המסך המלא, כי הספציפיות שלהם שווה והוא כתוב אחריו.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) ונכשלה. אחר כך היא רצה על התיקון ועברה, פעמיים ברצף:שני דברים שכדאי לדעת על הבדיקות:
</&/ביטוי של כמה מילים לא נמצאים #3477, שנשאר מחוץ ל-PR הזה. הבדיקה מוודאת שהנגיעה הגיעה לכפתור, ושההתאמה הפעילה אחריה על המסך ולא מתחת לסרגל.#mdToc) מכסה את החלק העליון.בדיקות קיימות: 808 בדיקות שנוגעות בתבניות ובסגנונות ששונו — עברו. בדיקות הפתקים בדפדפן הריפו ובדיקת-העל של השער (
test_browser_suite_is_gated_once.py), יחד עם הבדיקות החדשות — 22, עברו. בדיקות שקוראות את עמודי התיעוד ששונו — 147, עברו. flake8 (הבחירה שחוסמת ב-CI) ו-mypy עברו על קבצי הבדיקות.מה ה-CI לא יראה: בדיקות הדפדפן מדולגות ב-CI, כי אין שם שלב שמתקין דפדפן (
docs/testing.rst). הן רצו כאן, מקומית.בדיקת כל האלמנטים הצמודים באתר
אחרי השינוי ב-
base.html, כל אלמנט עםposition: stickyשיושב בתוך.main-contentאו.containerמתחיל להיצמד. לפני השינוי אף אחד מהם לא נצמד (נמדד). מיפיתי את כולם, כולל אלה ש-CodeMirror יוצר בזמן ריצה. כל אחד נבדק בכרומיום ב-1280×800, ב-800×1280 וב-390×844: שהוא נצמד במקום הנכון, שהוא לא יוצא מההורה שלו באף אחד מ-21 מיקומי גלילה, ושהוא לא מכסה תוכן.#code-search(סרגל החיפוש)/share/<id>הציבורי#md-search.theme-builder-sidebar,.theme-builder-controls.cm-gutters(CodeMirror)topו-bottomהםauto), ולכן לא מושפע.cm-panels-bottom(פאנל החיפוש של CodeMirror)/editהוא נצמד ל-.codemirror-container, וב-/tools/codeל-.panel.input-panel. לא מושפע. בתצוגת קובץ העורך לקריאה בלבד ולא מקבל פוקוס, ולכן הפאנל לא נפתח שם.diff-file-headerbody, מחוץ למיכלים. לא מושפעלא נבדק:
/tools/json— עורך ה-CodeMirror לא עלה בסביבת הבדיקה.🧪 בדיקות נדרשות ב‑PR
📝 סוג שינוי
✅ צ'קליסט
docs/webapp/theming_and_css.rst,docs/whats-new.rst--md-toolbar-hהוא מדידה פנימית של העמוד ולא טוקן של ערכה; הוא מוזכר בכלל החדש ב-theming_and_css.rstdocs/whats-new.rstdocs/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.🔗 קישורים
body— נפתח מהעבודה הזו), חיפוש בקוד ב-view_file: Enter/▼ מדלגים על התאמות, מספרי שורות נספרים, ו-</&/ביטוי של כמה מילים לא נמצאים #3477 (ממצא 1 שם, ▼ שקופץ פעמיים בתצוגה הבסיסית, נשאר בחוץ בכוונה)html, body), Fix button and scroll layout issues #846 (.main-content, .container), perf(search): האינדקס בזיכרון נבנה רק בחיפושים שקוראים ממנו #3351 (clipב-global_search.css), fix(notes): ניווט לפתק מגיע אליו — נגלל, נפתח, ועולה מעל השכנים #3409 (אותו שורש כמו ב-העמוד נגלל בתוך body ולא בחלון — וקוד שמניח שהחלון גולל שבור בשקט #3534, בלוח הפתקים)סטיות מהתוכנית שאושרה
scroll-margin-top"כמו ה-80 פיקסלים שכבר קיימים". נמדד שבטלפון הסרגל גבוה מ-80, ולכן המרווח נגזר מהגובה שנמדד בפועל.console.errorבחיפוש של CodeMirror. בחירת ההתאמה הייתה עטופה ב-catchשבולע בשקט. עכשיו כישלון נרשם לקונסול.🧯 סיכון / החזרה לאחור (Rollback)
🤖 Generated with Claude Code
https://claude.ai/code/session_013Pzf4XyLpo6NFzLyZVnWxm
Generated by Claude Code
Summary by Sourcery
Fix scrolling and search navigation across file, Markdown, and fullscreen views on touch-oriented layouts.
Bug Fixes:
Enhancements:
Documentation:
Tests: