comparison .cms/lib/codemirror/addon/scroll/scrollpastend.js @ 0:78edf6b517a0 draft

24.10
author Coffee CMS <info@coffee-cms.ru>
date Fri, 11 Oct 2024 22:40:23 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:78edf6b517a0
1 // CodeMirror, copyright (c) by Marijn Haverbeke and others
2 // Distributed under an MIT license: https://codemirror.net/5/LICENSE
3
4 (function(mod) {
5 if (typeof exports == "object" && typeof module == "object") // CommonJS
6 mod(require("../../lib/codemirror"));
7 else if (typeof define == "function" && define.amd) // AMD
8 define(["../../lib/codemirror"], mod);
9 else // Plain browser env
10 mod(CodeMirror);
11 })(function(CodeMirror) {
12 "use strict";
13
14 CodeMirror.defineOption("scrollPastEnd", false, function(cm, val, old) {
15 if (old && old != CodeMirror.Init) {
16 cm.off("change", onChange);
17 cm.off("refresh", updateBottomMargin);
18 cm.display.lineSpace.parentNode.style.paddingBottom = "";
19 cm.state.scrollPastEndPadding = null;
20 }
21 if (val) {
22 cm.on("change", onChange);
23 cm.on("refresh", updateBottomMargin);
24 updateBottomMargin(cm);
25 }
26 });
27
28 function onChange(cm, change) {
29 if (CodeMirror.changeEnd(change).line == cm.lastLine())
30 updateBottomMargin(cm);
31 }
32
33 function updateBottomMargin(cm) {
34 var padding = "";
35 if (cm.lineCount() > 1) {
36 var totalH = cm.display.scroller.clientHeight - 30,
37 lastLineH = cm.getLineHandle(cm.lastLine()).height;
38 padding = (totalH - lastLineH) + "px";
39 }
40 if (cm.state.scrollPastEndPadding != padding) {
41 cm.state.scrollPastEndPadding = padding;
42 cm.display.lineSpace.parentNode.style.paddingBottom = padding;
43 cm.off("refresh", updateBottomMargin);
44 cm.setSize();
45 cm.on("refresh", updateBottomMargin);
46 }
47 }
48 });