UNPKG

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.

281 lines (242 loc) 8.43 kB
Object.defineProperty(exports, '__esModule', { value: true }); /* * 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 _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; }; })(); exports.activate = activate; exports.consumeBuildSystemRegistry = consumeBuildSystemRegistry; exports.consumeCwdApi = consumeCwdApi; exports.consumeToolBar = consumeToolBar; exports.getDistractionFreeModeProvider = getDistractionFreeModeProvider; exports.consumeOutputService = consumeOutputService; exports.deactivate = deactivate; exports.serialize = serialize; 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 }; } var _atom2; function _atom() { return _atom2 = require('atom'); } var _reactForAtom2; function _reactForAtom() { return _reactForAtom2 = require('react-for-atom'); } var _assert2; function _assert() { return _assert2 = _interopRequireDefault(require('assert')); } var _uiHhvmIcon2; function _uiHhvmIcon() { return _uiHhvmIcon2 = _interopRequireDefault(require('./ui/HhvmIcon')); } var _HhvmBuildSystem2; function _HhvmBuildSystem() { return _HhvmBuildSystem2 = _interopRequireDefault(require('./HhvmBuildSystem')); } var _NuclideToolbar2; function _NuclideToolbar() { return _NuclideToolbar2 = _interopRequireDefault(require('./NuclideToolbar')); } var _ProjectStore2; function _ProjectStore() { return _ProjectStore2 = _interopRequireDefault(require('./ProjectStore')); } var Activation = (function () { function Activation(state) { _classCallCheck(this, Activation); this._state = { panelVisible: state != null && state.panelVisible != null ? state.panelVisible : true }; this._disposables = new (_atom2 || _atom()).CompositeDisposable(); this._projectStore = new (_ProjectStore2 || _ProjectStore()).default(); this._addCommands(); this._createToolbar(); } _createClass(Activation, [{ key: 'setCwdApi', value: function setCwdApi(cwdApi) { this._cwdApi = cwdApi; if (this._buildSystem != null) { this._buildSystem.setCwdApi(cwdApi); } } }, { key: '_addCommands', value: function _addCommands() { var _this = this; this._disposables.add(atom.commands.add('body', 'nuclide-hhvm-toolbar:toggle', function () { _this.togglePanel(); })); } }, { key: 'consumeToolBar', value: function consumeToolBar(getToolBar) { var toolBar = getToolBar('nuclide-buck-toolbar'); var _toolBar$addButton = toolBar.addButton({ callback: 'nuclide-hhvm-toolbar:toggle', tooltip: 'Toggle HHVM Toolbar', priority: 500 }); var element = _toolBar$addButton.element; toolBar.addSpacer({ priority: 501 }); (_reactForAtom2 || _reactForAtom()).ReactDOM.render((_reactForAtom2 || _reactForAtom()).React.createElement( 'div', { className: 'hhvm-toolbar-icon-container' }, (_reactForAtom2 || _reactForAtom()).React.createElement((_uiHhvmIcon2 || _uiHhvmIcon()).default, { width: '37%' }) ), element); var disposable = new (_atom2 || _atom()).Disposable(function () { (_reactForAtom2 || _reactForAtom()).ReactDOM.unmountComponentAtNode(element); toolBar.removeItems(); }); this._disposables.add(disposable); return disposable; } }, { key: 'consumeBuildSystemRegistry', value: function consumeBuildSystemRegistry(registry) { this._disposables.add(registry.register(this._getBuildSystem())); } }, { key: 'consumeOutputService', value: function consumeOutputService(api) { this._disposables.add(api.registerOutputProvider({ id: 'Arc Build', messages: this._getBuildSystem().getOutputMessages() })); } }, { key: '_getBuildSystem', value: function _getBuildSystem() { if (this._buildSystem == null) { var buildSystem = new (_HhvmBuildSystem2 || _HhvmBuildSystem()).default(); if (this._cwdApi != null) { buildSystem.setCwdApi(this._cwdApi); } this._buildSystem = buildSystem; } return this._buildSystem; } }, { key: 'getDistractionFreeModeProvider', value: function getDistractionFreeModeProvider() { var _this2 = this; return { name: 'nuclide-hhvm-toolbar', isVisible: function isVisible() { return _this2._state.panelVisible; }, toggle: function toggle() { return _this2.togglePanel(); } }; } }, { key: '_createToolbar', value: function _createToolbar() { var item = document.createElement('div'); (_reactForAtom2 || _reactForAtom()).ReactDOM.render((_reactForAtom2 || _reactForAtom()).React.createElement((_NuclideToolbar2 || _NuclideToolbar()).default, { projectStore: this._projectStore }), item); var panel = atom.workspace.addTopPanel({ item: item, // Increase priority (default is 100) to ensure this toolbar comes after the 'tool-bar' // package's toolbar. Hierarchically the controlling toolbar should be above, and practically // this ensures the popover in this build toolbar stacks on top of other UI. priority: 200 }); this._disposables.add(new (_atom2 || _atom()).Disposable(function () { (_reactForAtom2 || _reactForAtom()).ReactDOM.unmountComponentAtNode(item); panel.destroy(); })); this._panel = panel; this._updatePanelVisibility(); } /** * Show or hide the panel, if necessary, to match the current state. */ }, { key: '_updatePanelVisibility', value: function _updatePanelVisibility() { if (!this._panel) { return; } if (this._state.panelVisible !== this._panel.visible) { if (this._state.panelVisible) { this._panel.show(); } else { this._panel.hide(); } } } }, { key: 'serialize', value: function serialize() { return { panelVisible: this._state.panelVisible }; } }, { key: 'dispose', value: function dispose() { this._projectStore.dispose(); this._disposables.dispose(); } }, { key: 'togglePanel', value: function togglePanel() { this._state.panelVisible = !this._state.panelVisible; this._updatePanelVisibility(); } }]); return Activation; })(); var activation = null; function activate(state) { if (!activation) { activation = new Activation(state); } } function consumeBuildSystemRegistry(registry) { (0, (_assert2 || _assert()).default)(activation); activation.consumeBuildSystemRegistry(registry); } function consumeCwdApi(api) { (0, (_assert2 || _assert()).default)(activation); activation.setCwdApi(api); return new (_atom2 || _atom()).Disposable(function () { if (activation != null) { activation.setCwdApi(null); } }); } function consumeToolBar(getToolBar) { (0, (_assert2 || _assert()).default)(activation); return activation.consumeToolBar(getToolBar); } function getDistractionFreeModeProvider() { (0, (_assert2 || _assert()).default)(activation != null); return activation.getDistractionFreeModeProvider(); } function consumeOutputService(api) { (0, (_assert2 || _assert()).default)(activation != null); activation.consumeOutputService(api); } function deactivate() { if (activation != null) { activation.dispose(); activation = null; } } function serialize() { if (activation != null) { return activation.serialize(); } else { return {}; } }