| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 | // CodeMirror, copyright (c) by Marijn Haverbeke and others// Distributed under an MIT license: https://codemirror.net/LICENSE(function(mod) {  if (typeof exports == "object" && typeof module == "object") // CommonJS    mod(require("../../lib/codemirror"));  else if (typeof define == "function" && define.amd) // AMD    define(["../../lib/codemirror"], mod);  else // Plain browser env    mod(CodeMirror);})(function(CodeMirror) {  "use strict";  CodeMirror.defineOption("scrollPastEnd", false, function(cm, val, old) {    if (old && old != CodeMirror.Init) {      cm.off("change", onChange);      cm.off("refresh", updateBottomMargin);      cm.display.lineSpace.parentNode.style.paddingBottom = "";      cm.state.scrollPastEndPadding = null;    }    if (val) {      cm.on("change", onChange);      cm.on("refresh", updateBottomMargin);      updateBottomMargin(cm);    }  });  function onChange(cm, change) {    if (CodeMirror.changeEnd(change).line == cm.lastLine())      updateBottomMargin(cm);  }  function updateBottomMargin(cm) {    var padding = "";    if (cm.lineCount() > 1) {      var totalH = cm.display.scroller.clientHeight - 30,          lastLineH = cm.getLineHandle(cm.lastLine()).height;      padding = (totalH - lastLineH) + "px";    }    if (cm.state.scrollPastEndPadding != padding) {      cm.state.scrollPastEndPadding = padding;      cm.display.lineSpace.parentNode.style.paddingBottom = padding;      cm.off("refresh", updateBottomMargin);      cm.setSize();      cm.on("refresh", updateBottomMargin);    }  }});
 |