12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- // 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)
- // Plain browser env
- else 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)
- }
- }
- })
|