{Emitter} = require 'event-kit' DefaultPriority = -100 # Extended: Represents a gutter within a {TextEditor}. # # See {TextEditor::addGutter} for information on creating a gutter. module.exports = class Gutter constructor: (gutterContainer, options) -> @gutterContainer = gutterContainer @name = options?.name @priority = options?.priority ? DefaultPriority @visible = options?.visible ? true @emitter = new Emitter ### Section: Gutter Destruction ### # Essential: Destroys the gutter. destroy: -> if @name is 'line-number' throw new Error('The line-number gutter cannot be destroyed.') else @gutterContainer.removeGutter(this) @emitter.emit 'did-destroy' @emitter.dispose() ### Section: Event Subscription ### # Essential: Calls your `callback` when the gutter's visibility changes. # # * `callback` {Function} # * `gutter` The gutter whose visibility changed. # # Returns a {Disposable} on which `.dispose()` can be called to unsubscribe. onDidChangeVisible: (callback) -> @emitter.on 'did-change-visible', callback # Essential: Calls your `callback` when the gutter is destroyed. # # * `callback` {Function} # # Returns a {Disposable} on which `.dispose()` can be called to unsubscribe. onDidDestroy: (callback) -> @emitter.on 'did-destroy', callback ### Section: Visibility ### # Essential: Hide the gutter. hide: -> if @visible @visible = false @emitter.emit 'did-change-visible', this # Essential: Show the gutter. show: -> if not @visible @visible = true @emitter.emit 'did-change-visible', this # Essential: Determine whether the gutter is visible. # # Returns a {Boolean}. isVisible: -> @visible # Essential: Add a decoration that tracks a {TextEditorMarker}. When the marker moves, # is invalidated, or is destroyed, the decoration will be updated to reflect # the marker's state. # # ## Arguments # # * `marker` A {TextEditorMarker} you want this decoration to follow. # * `decorationParams` An {Object} representing the decoration. It is passed # to {TextEditor::decorateMarker} as its `decorationParams` and so supports # all options documented there. # * `type` __Caveat__: set to `'line-number'` if this is the line-number # gutter, `'gutter'` otherwise. This cannot be overridden. # # Returns a {Decoration} object decorateMarker: (marker, options) -> @gutterContainer.addGutterDecoration(this, marker, options)