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.
147 lines (125 loc) • 4.55 kB
JavaScript
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.
*/
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _assert2;
function _assert() {
return _assert2 = _interopRequireDefault(require('assert'));
}
var _reactForAtom2;
function _reactForAtom() {
return _reactForAtom2 = require('react-for-atom');
}
var _Button2;
function _Button() {
return _Button2 = require('./Button');
}
var _ButtonGroup2;
function _ButtonGroup() {
return _ButtonGroup2 = require('./ButtonGroup');
}
var _DiagnosticsMessageText2;
function _DiagnosticsMessageText() {
return _DiagnosticsMessageText2 = require('./DiagnosticsMessageText');
}
var _DiagnosticsTraceItem2;
function _DiagnosticsTraceItem() {
return _DiagnosticsTraceItem2 = require('./DiagnosticsTraceItem');
}
var _commonsNodeNuclideUri2;
function _commonsNodeNuclideUri() {
return _commonsNodeNuclideUri2 = _interopRequireDefault(require('../../commons-node/nuclideUri'));
}
function plainTextForItem(item) {
var mainComponent = undefined;
if (item.html != null) {
// Quick and dirty way to get an approximation for the plain text from HTML.
// This will work in simple cases, anyway.
mainComponent = item.html.replace('<br/>', '\n').replace(/<[^>]*>/g, '');
} else {
(0, (_assert2 || _assert()).default)(item.text != null);
mainComponent = item.text;
}
var pathComponent = undefined;
if (item.filePath == null) {
pathComponent = '';
} else {
var lineComponent = item.range != null ? ':' + (item.range.start.row + 1) : '';
pathComponent = ': ' + (_commonsNodeNuclideUri2 || _commonsNodeNuclideUri()).default.getPath(item.filePath) + lineComponent;
}
return mainComponent + pathComponent;
}
function plainTextForDiagnostic(message) {
var trace = message.trace != null ? message.trace : [];
return [message].concat(_toConsumableArray(trace)).map(plainTextForItem).join('\n');
}
/**
* Visually groups Buttons passed in as children.
*/
var DiagnosticsMessage = function DiagnosticsMessage(props) {
var message = props.message;
var goToLocation = props.goToLocation;
var fixer = props.fixer;
var providerClassName = message.type === 'Error' ? 'highlight-error' : 'highlight-warning';
var copy = function copy() {
var text = plainTextForDiagnostic(message);
atom.clipboard.write(text);
};
var fixButton = null;
if (message.fix != null) {
var applyFix = function applyFix() {
fixer(message);
};
fixButton = (_reactForAtom2 || _reactForAtom()).React.createElement(
(_Button2 || _Button()).Button,
{ className: 'btn-success', size: 'EXTRA_SMALL', onClick: applyFix },
'Fix'
);
}
var header = (_reactForAtom2 || _reactForAtom()).React.createElement(
'div',
{ className: 'nuclide-diagnostics-gutter-ui-popup-header' },
(_reactForAtom2 || _reactForAtom()).React.createElement(
(_ButtonGroup2 || _ButtonGroup()).ButtonGroup,
null,
fixButton,
(_reactForAtom2 || _reactForAtom()).React.createElement(
(_Button2 || _Button()).Button,
{ size: 'EXTRA_SMALL', onClick: copy },
'Copy'
)
),
(_reactForAtom2 || _reactForAtom()).React.createElement(
'span',
{ className: providerClassName },
message.providerName
)
);
var traceElements = message.trace ? message.trace.map(function (traceItem, i) {
return (_reactForAtom2 || _reactForAtom()).React.createElement((_DiagnosticsTraceItem2 || _DiagnosticsTraceItem()).DiagnosticsTraceItem, {
key: i,
trace: traceItem,
goToLocation: goToLocation
});
}) : null;
return (_reactForAtom2 || _reactForAtom()).React.createElement(
'div',
null,
header,
(_reactForAtom2 || _reactForAtom()).React.createElement(
'div',
{ className: 'nuclide-diagnostics-gutter-ui-popup-message' },
(_reactForAtom2 || _reactForAtom()).React.createElement((_DiagnosticsMessageText2 || _DiagnosticsMessageText()).DiagnosticsMessageText, { message: message })
),
traceElements
);
};
exports.DiagnosticsMessage = DiagnosticsMessage;