atom-nuclide
Version:
A unified developer experience for web and mobile development, built as a suite of features on top of Atom to provide hackability and the support of an active community.
172 lines (138 loc) • 6.1 kB
JavaScript
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
/*
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the license found in the LICENSE file in
* the root directory of this source tree.
*/
var _assert2;
function _assert() {
return _assert2 = _interopRequireDefault(require('assert'));
}
var _nuclideRemoteConnection2;
function _nuclideRemoteConnection() {
return _nuclideRemoteConnection2 = require('../../nuclide-remote-connection');
}
var _reactForAtom2;
function _reactForAtom() {
return _reactForAtom2 = require('react-for-atom');
}
var _atom2;
function _atom() {
return _atom2 = require('atom');
}
var _StatusBarTile2;
function _StatusBarTile() {
return _StatusBarTile2 = _interopRequireDefault(require('./StatusBarTile'));
}
var _commonsNodeNuclideUri2;
function _commonsNodeNuclideUri() {
return _commonsNodeNuclideUri2 = _interopRequireDefault(require('../../commons-node/nuclideUri'));
}
var _ConnectionState2;
function _ConnectionState() {
return _ConnectionState2 = _interopRequireDefault(require('./ConnectionState'));
}
var RemoteProjectsController = (function () {
function RemoteProjectsController() {
_classCallCheck(this, RemoteProjectsController);
this._statusBarTile = null;
this._disposables = new (_atom2 || _atom()).CompositeDisposable();
this._statusSubscription = null;
this._disposables.add(atom.workspace.onDidChangeActivePaneItem(this._disposeSubscription.bind(this)), atom.workspace.onDidStopChangingActivePaneItem(this._updateConnectionStatus.bind(this)));
}
_createClass(RemoteProjectsController, [{
key: '_disposeSubscription',
value: function _disposeSubscription() {
var subscription = this._statusSubscription;
if (subscription) {
this._disposables.remove(subscription);
subscription.dispose();
this._statusSubscription = null;
}
}
}, {
key: '_updateConnectionStatus',
value: function _updateConnectionStatus(paneItem) {
var _this = this;
this._disposeSubscription();
if (!atom.workspace.isTextEditor(paneItem)) {
this._renderStatusBar((_ConnectionState2 || _ConnectionState()).default.NONE);
return;
}
// Flow does not understand that isTextEditor refines the type to atom$TextEditor
var textEditor = paneItem;
var fileUri = textEditor.getPath();
if (!fileUri) {
return;
}
if ((_commonsNodeNuclideUri2 || _commonsNodeNuclideUri()).default.isLocal(fileUri)) {
this._renderStatusBar((_ConnectionState2 || _ConnectionState()).default.LOCAL, fileUri);
return;
}
var updateStatus = function updateStatus(isConnected) {
_this._renderStatusBar(isConnected ? (_ConnectionState2 || _ConnectionState()).default.CONNECTED : (_ConnectionState2 || _ConnectionState()).default.DISCONNECTED, fileUri);
};
var connection = (_nuclideRemoteConnection2 || _nuclideRemoteConnection()).ServerConnection.getForUri(fileUri);
if (connection == null) {
updateStatus(false);
return;
}
var socket = connection.getSocket();
updateStatus(socket.isConnected());
this._statusSubscription = socket.onStatus(updateStatus);
this._disposables.add(this._statusSubscription);
}
}, {
key: 'consumeStatusBar',
value: function consumeStatusBar(statusBar) {
var _this2 = this;
this._statusBarDiv = document.createElement('div');
this._statusBarDiv.className = 'nuclide-remote-projects inline-block';
var tooltip = atom.tooltips.add(this._statusBarDiv, { title: 'Click to show details of connection.' });
(0, (_assert2 || _assert()).default)(this._statusBarDiv);
var rightTile = statusBar.addLeftTile({
item: this._statusBarDiv,
priority: -99
});
this._disposables.add(new (_atom2 || _atom()).Disposable(function () {
(0, (_assert2 || _assert()).default)(_this2._statusBarDiv);
var parentNode = _this2._statusBarDiv.parentNode;
if (parentNode) {
parentNode.removeChild(_this2._statusBarDiv);
}
(_reactForAtom2 || _reactForAtom()).ReactDOM.unmountComponentAtNode(_this2._statusBarDiv);
_this2._statusBarDiv = null;
rightTile.destroy();
tooltip.dispose();
}));
var textEditor = atom.workspace.getActiveTextEditor();
if (textEditor != null) {
this._updateConnectionStatus(textEditor);
}
}
}, {
key: '_renderStatusBar',
value: function _renderStatusBar(connectionState, fileUri) {
if (!this._statusBarDiv) {
return;
}
var component = (_reactForAtom2 || _reactForAtom()).ReactDOM.render((_reactForAtom2 || _reactForAtom()).React.createElement((_StatusBarTile2 || _StatusBarTile()).default, {
connectionState: connectionState,
fileUri: fileUri
}), this._statusBarDiv);
(0, (_assert2 || _assert()).default)(component instanceof (_StatusBarTile2 || _StatusBarTile()).default);
this._statusBarTile = component;
}
}, {
key: 'destroy',
value: function destroy() {
this._disposables.dispose();
}
}]);
return RemoteProjectsController;
})();
module.exports = RemoteProjectsController;