github.com/jancarloviray/community@v0.41.1-0.20170124221257-33a66c87cf2f/app/public/codemirror/addon/scroll/scrollpastend.js (about)

     1  // CodeMirror, copyright (c) by Marijn Haverbeke and others
     2  // Distributed under an MIT license: http://codemirror.net/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.setSize();
    44      }
    45    }
    46  });