annotate .cms/lib/codemirror/test/scroll_test.js @ 0:78edf6b517a0 draft

24.10
author Coffee CMS <info@coffee-cms.ru>
date Fri, 11 Oct 2024 22:40:23 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1 (function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
2 "use strict";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
3
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
4 namespace = "scroll_";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
5
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
6 testCM("bars_hidden", function(cm) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
7 for (var i = 0;; i++) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
8 var wrapBox = cm.getWrapperElement().getBoundingClientRect();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
9 var scrollBox = cm.getScrollerElement().getBoundingClientRect();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
10 is(wrapBox.bottom < scrollBox.bottom - 10);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
11 is(wrapBox.right < scrollBox.right - 10);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
12 if (i == 1) break;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
13 cm.getWrapperElement().style.height = "auto";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
14 cm.refresh();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
15 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
16 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
17
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
18 function barH(cm) { return byClassName(cm.getWrapperElement(), "CodeMirror-hscrollbar")[0]; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
19 function barV(cm) { return byClassName(cm.getWrapperElement(), "CodeMirror-vscrollbar")[0]; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
20
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
21 function displayBottom(cm, scrollbar) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
22 if (scrollbar && cm.display.scroller.offsetHeight > cm.display.scroller.clientHeight)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
23 return barH(cm).getBoundingClientRect().top;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
24 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
25 return cm.getWrapperElement().getBoundingClientRect().bottom - 1;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
26 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
27
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
28 function displayRight(cm, scrollbar) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
29 if (scrollbar && cm.display.scroller.offsetWidth > cm.display.scroller.clientWidth)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
30 return barV(cm).getBoundingClientRect().left;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
31 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
32 return cm.getWrapperElement().getBoundingClientRect().right - 1;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
33 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
34
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
35 function testMovedownFixed(cm, hScroll) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
36 cm.setSize("100px", "100px");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
37 if (hScroll) cm.setValue(new Array(100).join("x"));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
38 var bottom = displayBottom(cm, hScroll);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
39 for (var i = 0; i < 30; i++) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
40 cm.replaceSelection("x\n");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
41 var cursorBottom = cm.cursorCoords(null, "window").bottom;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
42 is(cursorBottom <= bottom);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
43 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
44 is(cursorBottom >= bottom - 5);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
45 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
46
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
47 testCM("movedown_fixed", function(cm) {testMovedownFixed(cm, false);});
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
48 testCM("movedown_hscroll_fixed", function(cm) {testMovedownFixed(cm, true);});
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
49
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
50 function testMovedownResize(cm, hScroll) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
51 cm.getWrapperElement().style.height = "auto";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
52 if (hScroll) cm.setValue(new Array(100).join("x"));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
53 cm.refresh();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
54 for (var i = 0; i < 30; i++) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
55 cm.replaceSelection("x\n");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
56 var bottom = displayBottom(cm, hScroll);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
57 var cursorBottom = cm.cursorCoords(null, "window").bottom;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
58 is(cursorBottom <= bottom);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
59 is(cursorBottom >= bottom - 5);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
60 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
61 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
62
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
63 testCM("movedown_resize", function(cm) {testMovedownResize(cm, false);});
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
64 testCM("movedown_hscroll_resize", function(cm) {testMovedownResize(cm, true);});
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
65
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
66 function testMoveright(cm, wrap, scroll) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
67 cm.setSize("100px", "100px");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
68 if (wrap) cm.setOption("lineWrapping", true);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
69 if (scroll) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
70 cm.setValue("\n" + new Array(100).join("x\n"));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
71 cm.setCursor(Pos(0, 0));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
72 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
73 var right = displayRight(cm, scroll);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
74 for (var i = 0; i < 10; i++) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
75 cm.replaceSelection("xxxxxxxxxx");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
76 var cursorRight = cm.cursorCoords(null, "window").right;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
77 is(cursorRight < right);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
78 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
79 if (!wrap) is(cursorRight > right - 20);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
80 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
81
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
82 testCM("moveright", function(cm) {testMoveright(cm, false, false);});
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
83 testCM("moveright_wrap", function(cm) {testMoveright(cm, true, false);});
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
84 testCM("moveright_scroll", function(cm) {testMoveright(cm, false, true);});
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
85 testCM("moveright_scroll_wrap", function(cm) {testMoveright(cm, true, true);});
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
86
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
87 testCM("suddenly_wide", function(cm) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
88 addDoc(cm, 100, 100);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
89 cm.replaceSelection(new Array(600).join("l ") + "\n");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
90 cm.execCommand("goLineUp");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
91 cm.execCommand("goLineEnd");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
92 is(barH(cm).scrollLeft > cm.getScrollerElement().scrollLeft - 1);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
93 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
94
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
95 testCM("wrap_changes_height", function(cm) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
96 var line = new Array(20).join("a ") + "\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
97 cm.setValue(new Array(20).join(line));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
98 var box = cm.getWrapperElement().getBoundingClientRect();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
99 cm.setSize(cm.cursorCoords(Pos(0), "window").right - box.left + 2,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
100 cm.cursorCoords(Pos(19, 0), "window").bottom - box.top + 2);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
101 cm.setCursor(Pos(19, 0));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
102 cm.replaceSelection("\n");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
103 is(cm.cursorCoords(null, "window").bottom < displayBottom(cm, false));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
104 }, {lineWrapping: true});
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
105
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
106 testCM("height_auto_with_gutter_expect_no_scroll_after_line_delete", function(cm) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
107 cm.setSize(null, "auto");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
108 cm.setValue("x\n");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
109 cm.execCommand("goDocEnd");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
110 cm.execCommand("delCharBefore");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
111 eq(cm.getScrollInfo().top, 0);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
112 cm.scrollTo(null, 10);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
113 is(cm.getScrollInfo().top < 5);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
114 }, {lineNumbers: true});
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
115
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
116 testCM("bidi_ensureCursorVisible", function(cm) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
117 cm.setValue("<dd>وضع الاستخدام. عندما لا تعطى، وهذا الافتراضي إلى الطريقة الاولى\n");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
118 cm.execCommand("goLineStart");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
119 eq(cm.getScrollInfo().left, 0);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
120 cm.execCommand("goCharRight");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
121 cm.execCommand("goCharRight");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
122 cm.execCommand("goCharRight");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
123 eqCursorPos(cm.getCursor(), Pos(0, 3, "before"));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
124 eq(cm.getScrollInfo().left, 0);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
125 }, {lineWrapping: false});
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
126 })();