lib/adapters/stable-adapter.js
- 'use babel'
-
- /**
- * @access private
- */
- export default class StableAdapter {
- constructor (textEditor) {
- this.textEditor = textEditor
- this.textEditorElement = atom.views.getView(this.textEditor)
- }
-
- enableCache () { this.useCache = true }
-
- clearCache () {
- this.useCache = false
- delete this.heightCache
- delete this.scrollTopCache
- delete this.scrollLeftCache
- delete this.maxScrollTopCache
- }
-
- onDidChangeScrollTop (callback) {
- return this.textEditorElement.onDidChangeScrollTop(callback)
- }
-
- onDidChangeScrollLeft (callback) {
- return this.textEditorElement.onDidChangeScrollLeft(callback)
- }
-
- getHeight () {
- if (this.useCache) {
- if (!this.heightCache) {
- this.heightCache = this.textEditorElement.getHeight()
- }
- return this.heightCache
- }
- return this.textEditorElement.getHeight()
- }
-
- getScrollTop () {
- if (this.useCache) {
- if (!this.scrollTopCache) {
- this.scrollTopCache = this.textEditorElement.getScrollTop()
- }
- return this.scrollTopCache
- }
- return this.textEditorElement.getScrollTop()
- }
-
- setScrollTop (scrollTop) {
- this.textEditorElement.setScrollTop(scrollTop)
- }
-
- getScrollLeft () {
- if (this.useCache) {
- if (!this.scrollLeftCache) {
- this.scrollLeftCache = this.textEditorElement.getScrollLeft()
- }
- return this.scrollLeftCache
- }
- return this.textEditorElement.getScrollLeft()
- }
-
- getMaxScrollTop () {
- if (this.maxScrollTopCache != null && this.useCache) {
- return this.maxScrollTopCache
- }
-
- let maxScrollTop = this.textEditorElement.getScrollHeight() - this.getHeight()
- let lineHeight = this.textEditor.getLineHeightInPixels()
-
- if (this.scrollPastEnd) {
- maxScrollTop -= this.getHeight() - 3 * lineHeight
- }
-
- if (this.useCache) {
- this.maxScrollTopCache = maxScrollTop
- }
-
- return maxScrollTop
- }
- }