mirror of
https://github.com/atom/atom.git
synced 2026-04-28 03:01:47 -04:00
115 lines
3.3 KiB
JavaScript
115 lines
3.3 KiB
JavaScript
const { Emitter } = require('event-kit');
|
|
|
|
const 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) {
|
|
this.gutterContainer = gutterContainer;
|
|
this.name = options && options.name;
|
|
this.priority =
|
|
options && options.priority != null ? options.priority : DefaultPriority;
|
|
this.visible = options && options.visible != null ? options.visible : true;
|
|
this.type = options && options.type != null ? options.type : 'decorated';
|
|
this.labelFn = options && options.labelFn;
|
|
this.className = options && options.class;
|
|
|
|
this.onMouseDown = options && options.onMouseDown;
|
|
this.onMouseMove = options && options.onMouseMove;
|
|
|
|
this.emitter = new Emitter();
|
|
}
|
|
|
|
/*
|
|
Section: Gutter Destruction
|
|
*/
|
|
|
|
// Essential: Destroys the gutter.
|
|
destroy() {
|
|
if (this.name === 'line-number') {
|
|
throw new Error('The line-number gutter cannot be destroyed.');
|
|
} else {
|
|
this.gutterContainer.removeGutter(this);
|
|
this.emitter.emit('did-destroy');
|
|
this.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) {
|
|
return this.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) {
|
|
return this.emitter.once('did-destroy', callback);
|
|
}
|
|
|
|
/*
|
|
Section: Visibility
|
|
*/
|
|
|
|
// Essential: Hide the gutter.
|
|
hide() {
|
|
if (this.visible) {
|
|
this.visible = false;
|
|
this.gutterContainer.scheduleComponentUpdate();
|
|
this.emitter.emit('did-change-visible', this);
|
|
}
|
|
}
|
|
|
|
// Essential: Show the gutter.
|
|
show() {
|
|
if (!this.visible) {
|
|
this.visible = true;
|
|
this.gutterContainer.scheduleComponentUpdate();
|
|
this.emitter.emit('did-change-visible', this);
|
|
}
|
|
}
|
|
|
|
// Essential: Determine whether the gutter is visible.
|
|
//
|
|
// Returns a {Boolean}.
|
|
isVisible() {
|
|
return this.visible;
|
|
}
|
|
|
|
// Essential: Add a decoration that tracks a {DisplayMarker}. When the marker moves,
|
|
// is invalidated, or is destroyed, the decoration will be updated to reflect
|
|
// the marker's state.
|
|
//
|
|
// ## Arguments
|
|
//
|
|
// * `marker` A {DisplayMarker} 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) {
|
|
return this.gutterContainer.addGutterDecoration(this, marker, options);
|
|
}
|
|
|
|
getElement() {
|
|
if (this.element == null) this.element = document.createElement('div');
|
|
return this.element;
|
|
}
|
|
};
|