@atlaskit/editor-plugin-code-block 13.1.12 → 13.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/dist/cjs/codeBlockPlugin.js +1 -1
- package/dist/cjs/editor-commands/index.js +14 -8
- package/dist/cjs/pm-plugins/toolbar.js +8 -5
- package/dist/cjs/utils/format-code/formatter.js +8 -75
- package/dist/es2019/codeBlockPlugin.js +1 -1
- package/dist/es2019/editor-commands/index.js +13 -9
- package/dist/es2019/pm-plugins/toolbar.js +9 -9
- package/dist/es2019/utils/format-code/formatter.js +4 -42
- package/dist/esm/codeBlockPlugin.js +1 -1
- package/dist/esm/editor-commands/index.js +14 -8
- package/dist/esm/pm-plugins/toolbar.js +9 -6
- package/dist/esm/utils/format-code/formatter.js +7 -69
- package/dist/types/editor-commands/index.d.ts +3 -1
- package/dist/types/entry-points/types.d.ts +1 -1
- package/dist/types/pm-plugins/toolbar.d.ts +2 -1
- package/dist/types/types/index.d.ts +18 -0
- package/dist/types/utils/format-code/formatter.d.ts +3 -23
- package/dist/types-ts4.5/editor-commands/index.d.ts +3 -1
- package/dist/types-ts4.5/entry-points/types.d.ts +1 -1
- package/dist/types-ts4.5/pm-plugins/toolbar.d.ts +2 -1
- package/dist/types-ts4.5/types/index.d.ts +18 -0
- package/dist/types-ts4.5/utils/format-code/formatter.d.ts +3 -30
- package/package.json +4 -7
- package/dist/cjs/utils/format-code/formatter-impl.js +0 -15
- package/dist/es2019/utils/format-code/formatter-impl.js +0 -10
- package/dist/esm/utils/format-code/formatter-impl.js +0 -9
- package/dist/types/utils/format-code/formatter-impl.d.ts +0 -5
- package/dist/types-ts4.5/utils/format-code/formatter-impl.d.ts +0 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-code-block
|
|
2
2
|
|
|
3
|
+
## 13.1.14
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies
|
|
8
|
+
|
|
9
|
+
## 13.1.13
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [`ff0d47c808e14`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/ff0d47c808e14) -
|
|
14
|
+
Add provider-based opt-in for the code block formatting button.
|
|
15
|
+
|
|
3
16
|
## 13.1.12
|
|
4
17
|
|
|
5
18
|
### Patch Changes
|
|
@@ -163,7 +163,7 @@ var codeBlockPlugin = function codeBlockPlugin(_ref) {
|
|
|
163
163
|
}
|
|
164
164
|
}];
|
|
165
165
|
},
|
|
166
|
-
floatingToolbar: (0, _toolbar.getToolbarConfig)(options === null || options === void 0 ? void 0 : options.allowCopyToClipboard, api, options === null || options === void 0 ? void 0 : options.overrideLanguageName)
|
|
166
|
+
floatingToolbar: (0, _toolbar.getToolbarConfig)(options === null || options === void 0 ? void 0 : options.allowCopyToClipboard, api, options === null || options === void 0 ? void 0 : options.overrideLanguageName, options === null || options === void 0 ? void 0 : options.formatCodeProvider)
|
|
167
167
|
},
|
|
168
168
|
contentComponent: function contentComponent() {
|
|
169
169
|
return (0, _expValEqualsNoExposure.expValEqualsNoExposure)('platform_editor_code_block_q4_lovability', 'isEnabled', true) ? /*#__PURE__*/_react.default.createElement(_FormatCodeErrorFlag.FormatCodeErrorFlag, {
|
|
@@ -27,7 +27,6 @@ var _codeBlockCopySelectionPlugin = require("../pm-plugins/codeBlockCopySelectio
|
|
|
27
27
|
var _pluginKey = require("../pm-plugins/plugin-key");
|
|
28
28
|
var _transformToCodeBlock = require("../pm-plugins/transform-to-code-block");
|
|
29
29
|
var _autoDetectState2 = require("../utils/auto-detect-state");
|
|
30
|
-
var _formatter = require("../utils/format-code/formatter");
|
|
31
30
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
32
31
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
33
32
|
var removeCodeBlockWithAnalytics = exports.removeCodeBlockWithAnalytics = function removeCodeBlockWithAnalytics(editorAnalyticsAPI) {
|
|
@@ -250,9 +249,13 @@ var createResolveFormatCodeTransaction = function createResolveFormatCodeTransac
|
|
|
250
249
|
};
|
|
251
250
|
var createFormatCodeOnClick = exports.createFormatCodeOnClick = function createFormatCodeOnClick(_ref5) {
|
|
252
251
|
var api = _ref5.api,
|
|
253
|
-
editorAnalyticsAPI = _ref5.editorAnalyticsAPI
|
|
252
|
+
editorAnalyticsAPI = _ref5.editorAnalyticsAPI,
|
|
253
|
+
formatCodeProvider = _ref5.formatCodeProvider;
|
|
254
254
|
return function (state, dispatch) {
|
|
255
|
-
var _autoDetectPluginKey$2, _api$core;
|
|
255
|
+
var _currentNode$attrs$la, _autoDetectPluginKey$2, _api$core;
|
|
256
|
+
if (!formatCodeProvider) {
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
256
259
|
var currentCodeBlockState = _pluginKey.pluginKey.getState(state);
|
|
257
260
|
var currentPos = currentCodeBlockState === null || currentCodeBlockState === void 0 ? void 0 : currentCodeBlockState.pos;
|
|
258
261
|
if (!currentCodeBlockState || typeof currentPos !== 'number') {
|
|
@@ -262,10 +265,7 @@ var createFormatCodeOnClick = exports.createFormatCodeOnClick = function createF
|
|
|
262
265
|
if (!currentNode || currentNode.type !== state.schema.nodes.codeBlock) {
|
|
263
266
|
return false;
|
|
264
267
|
}
|
|
265
|
-
var currentLanguage = currentNode.attrs.language;
|
|
266
|
-
if (!(0, _formatter.isSupportedFormatLanguage)(currentLanguage)) {
|
|
267
|
-
return true;
|
|
268
|
-
}
|
|
268
|
+
var currentLanguage = (_currentNode$attrs$la = currentNode.attrs.language) !== null && _currentNode$attrs$la !== void 0 ? _currentNode$attrs$la : '';
|
|
269
269
|
var currentLocalId = currentNode.attrs.localId;
|
|
270
270
|
if (currentCodeBlockState.pendingFormats[currentLocalId]) {
|
|
271
271
|
return true;
|
|
@@ -286,9 +286,15 @@ var createFormatCodeOnClick = exports.createFormatCodeOnClick = function createF
|
|
|
286
286
|
}
|
|
287
287
|
});
|
|
288
288
|
});
|
|
289
|
-
void
|
|
289
|
+
void formatCodeProvider.formatCode({
|
|
290
290
|
content: content,
|
|
291
291
|
language: currentLanguage
|
|
292
|
+
}).catch(function () {
|
|
293
|
+
return {
|
|
294
|
+
errorType: 'formatter-execution-failed',
|
|
295
|
+
language: currentLanguage,
|
|
296
|
+
status: 'failed'
|
|
297
|
+
};
|
|
292
298
|
}).then(function (result) {
|
|
293
299
|
var _api$codeBlock, _api$core2;
|
|
294
300
|
var pendingFormat = api === null || api === void 0 || (_api$codeBlock = api.codeBlock) === null || _api$codeBlock === void 0 || (_api$codeBlock = _api$codeBlock.sharedState.currentState()) === null || _api$codeBlock === void 0 ? void 0 : _api$codeBlock.pendingFormats[currentLocalId];
|
|
@@ -64,6 +64,7 @@ var getToolbarConfig = exports.getToolbarConfig = function getToolbarConfig() {
|
|
|
64
64
|
var allowCopyToClipboard = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
65
65
|
var api = arguments.length > 1 ? arguments[1] : undefined;
|
|
66
66
|
var overrideLanguageName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
|
|
67
|
+
var formatCodeProvider = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined;
|
|
67
68
|
var languageList = (0, _languageList.createLanguageList)(overrideLanguageName ? _languageList.DEFAULT_LANGUAGES.map(function (languageOption) {
|
|
68
69
|
return _objectSpread(_objectSpread({}, languageOption), {}, {
|
|
69
70
|
name: overrideLanguageName(languageOption.name)
|
|
@@ -248,7 +249,8 @@ var getToolbarConfig = exports.getToolbarConfig = function getToolbarConfig() {
|
|
|
248
249
|
tabIndex: null,
|
|
249
250
|
selected: areLineNumbersVisible
|
|
250
251
|
};
|
|
251
|
-
var
|
|
252
|
+
var formatLanguage = formatCodeProvider !== null && formatCodeProvider !== void 0 && formatCodeProvider.isSupportedLanguage(language) ? language : undefined;
|
|
253
|
+
var canFormatCode = node.textContent.length > 0 && Boolean(formatLanguage);
|
|
252
254
|
var formatCodeButton = {
|
|
253
255
|
id: 'editor.codeBlock.formatCode',
|
|
254
256
|
type: 'button',
|
|
@@ -257,10 +259,11 @@ var getToolbarConfig = exports.getToolbarConfig = function getToolbarConfig() {
|
|
|
257
259
|
icon: _angleBrackets.default,
|
|
258
260
|
onClick: (0, _editorCommands.createFormatCodeOnClick)({
|
|
259
261
|
api: api,
|
|
260
|
-
editorAnalyticsAPI: editorAnalyticsAPI
|
|
262
|
+
editorAnalyticsAPI: editorAnalyticsAPI,
|
|
263
|
+
formatCodeProvider: formatCodeProvider
|
|
261
264
|
}),
|
|
262
|
-
onFocus: (0, _formatter.preloadFormatterOnIntent)(),
|
|
263
|
-
onMouseEnter: (0, _formatter.preloadFormatterOnIntent)(),
|
|
265
|
+
onFocus: (0, _formatter.preloadFormatterOnIntent)(formatCodeProvider, formatLanguage),
|
|
266
|
+
onMouseEnter: (0, _formatter.preloadFormatterOnIntent)(formatCodeProvider, formatLanguage),
|
|
264
267
|
title: formatMessage(canFormatCode ? _messages.codeBlockButtonMessages.formatCode : _messages.codeBlockButtonMessages.formatCodeUnavailable)
|
|
265
268
|
};
|
|
266
269
|
return {
|
|
@@ -271,7 +274,7 @@ var getToolbarConfig = exports.getToolbarConfig = function getToolbarConfig() {
|
|
|
271
274
|
return (0, _utils.findDomRefAtPos)(pos, view.domAtPos.bind(view));
|
|
272
275
|
},
|
|
273
276
|
nodeType: nodeType,
|
|
274
|
-
items: [languagePicker !== null && languagePicker !== void 0 ? languagePicker : languageSelect].concat((0, _toConsumableArray2.default)(areAnyNewToolbarFlagsEnabled ? [] : [separator]), [codeBlockWrapButton], (0, _toConsumableArray2.default)((0, _expValEquals.expValEquals)('platform_editor_code_block_q4_lovability', 'isEnabled', true) && (0, _platformFeatureFlags.fg)('platform_editor_code_block_add_line_number_button') ? [codeBlockLineNumbersButton]
|
|
277
|
+
items: [languagePicker !== null && languagePicker !== void 0 ? languagePicker : languageSelect].concat((0, _toConsumableArray2.default)(areAnyNewToolbarFlagsEnabled ? [] : [separator]), [codeBlockWrapButton], (0, _toConsumableArray2.default)((0, _expValEquals.expValEquals)('platform_editor_code_block_q4_lovability', 'isEnabled', true) && (0, _platformFeatureFlags.fg)('platform_editor_code_block_add_line_number_button') ? [codeBlockLineNumbersButton].concat((0, _toConsumableArray2.default)(formatCodeProvider ? [formatCodeButton] : [])) : []), (0, _toConsumableArray2.default)(copyAndDeleteButtonMenuItems)),
|
|
275
278
|
scrollable: true
|
|
276
279
|
};
|
|
277
280
|
};
|
|
@@ -1,86 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
|
-
exports.preloadFormatterOnIntent =
|
|
8
|
-
var
|
|
9
|
-
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
10
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != (0, _typeof2.default)(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t3 in e) "default" !== _t3 && {}.hasOwnProperty.call(e, _t3) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t3)) && (i.get || i.set) ? o(f, _t3, i) : f[_t3] = e[_t3]); return f; })(e, t); }
|
|
12
|
-
var supportedFormatLanguages = ['json', 'javascript', 'jsx', 'typescript', 'tsx', 'sql'];
|
|
13
|
-
var isSupportedFormatLanguage = exports.isSupportedFormatLanguage = function isSupportedFormatLanguage(language) {
|
|
14
|
-
return supportedFormatLanguages.includes(language);
|
|
15
|
-
};
|
|
16
|
-
var formatterModulePromise;
|
|
17
|
-
var preloadFormatterModule = exports.preloadFormatterModule = function preloadFormatterModule() {
|
|
18
|
-
if (!formatterModulePromise) {
|
|
19
|
-
formatterModulePromise = Promise.resolve().then(function () {
|
|
20
|
-
return _interopRequireWildcard(require( /* webpackChunkName: "@atlaskit-internal_editor-plugin-code-block-formatter" */'./formatter-impl'));
|
|
21
|
-
}).catch(function (error) {
|
|
22
|
-
formatterModulePromise = undefined;
|
|
23
|
-
throw error;
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
return formatterModulePromise;
|
|
27
|
-
};
|
|
28
|
-
var preloadFormatterOnIntent = exports.preloadFormatterOnIntent = function preloadFormatterOnIntent() {
|
|
6
|
+
exports.preloadFormatterOnIntent = void 0;
|
|
7
|
+
var preloadFormatterOnIntent = exports.preloadFormatterOnIntent = function preloadFormatterOnIntent(formatCodeProvider, language) {
|
|
29
8
|
return function (_state, dispatch) {
|
|
30
|
-
|
|
9
|
+
var _formatCodeProvider$p;
|
|
10
|
+
if (!dispatch || !formatCodeProvider || !language) {
|
|
31
11
|
// Hover/focus handlers are command-shaped; keep dry-runs side-effect free.
|
|
32
12
|
return false;
|
|
33
13
|
}
|
|
34
|
-
void
|
|
14
|
+
void ((_formatCodeProvider$p = formatCodeProvider.preload) === null || _formatCodeProvider$p === void 0 || (_formatCodeProvider$p = _formatCodeProvider$p.call(formatCodeProvider, language)) === null || _formatCodeProvider$p === void 0 ? void 0 : _formatCodeProvider$p.catch(function () {
|
|
15
|
+
return undefined;
|
|
16
|
+
}));
|
|
35
17
|
return false;
|
|
36
18
|
};
|
|
37
|
-
};
|
|
38
|
-
var formatCode = exports.formatCode = /*#__PURE__*/function () {
|
|
39
|
-
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(_ref) {
|
|
40
|
-
var content, language, formatterModule, _t, _t2;
|
|
41
|
-
return _regenerator.default.wrap(function (_context) {
|
|
42
|
-
while (1) switch (_context.prev = _context.next) {
|
|
43
|
-
case 0:
|
|
44
|
-
content = _ref.content, language = _ref.language;
|
|
45
|
-
_context.prev = 1;
|
|
46
|
-
_context.next = 2;
|
|
47
|
-
return preloadFormatterModule();
|
|
48
|
-
case 2:
|
|
49
|
-
formatterModule = _context.sent;
|
|
50
|
-
_context.next = 4;
|
|
51
|
-
break;
|
|
52
|
-
case 3:
|
|
53
|
-
_context.prev = 3;
|
|
54
|
-
_t = _context["catch"](1);
|
|
55
|
-
return _context.abrupt("return", {
|
|
56
|
-
errorType: 'formatter-load-failed',
|
|
57
|
-
language: language,
|
|
58
|
-
status: 'failed'
|
|
59
|
-
});
|
|
60
|
-
case 4:
|
|
61
|
-
_context.prev = 4;
|
|
62
|
-
_context.next = 5;
|
|
63
|
-
return formatterModule.formatCode({
|
|
64
|
-
content: content,
|
|
65
|
-
language: language
|
|
66
|
-
});
|
|
67
|
-
case 5:
|
|
68
|
-
return _context.abrupt("return", _context.sent);
|
|
69
|
-
case 6:
|
|
70
|
-
_context.prev = 6;
|
|
71
|
-
_t2 = _context["catch"](4);
|
|
72
|
-
return _context.abrupt("return", {
|
|
73
|
-
errorType: 'formatter-execution-failed',
|
|
74
|
-
language: language,
|
|
75
|
-
status: 'failed'
|
|
76
|
-
});
|
|
77
|
-
case 7:
|
|
78
|
-
case "end":
|
|
79
|
-
return _context.stop();
|
|
80
|
-
}
|
|
81
|
-
}, _callee, null, [[1, 3], [4, 6]]);
|
|
82
|
-
}));
|
|
83
|
-
return function formatCode(_x) {
|
|
84
|
-
return _ref2.apply(this, arguments);
|
|
85
|
-
};
|
|
86
|
-
}();
|
|
19
|
+
};
|
|
@@ -142,7 +142,7 @@ const codeBlockPlugin = ({
|
|
|
142
142
|
return tr;
|
|
143
143
|
}
|
|
144
144
|
}],
|
|
145
|
-
floatingToolbar: getToolbarConfig(options === null || options === void 0 ? void 0 : options.allowCopyToClipboard, api, options === null || options === void 0 ? void 0 : options.overrideLanguageName)
|
|
145
|
+
floatingToolbar: getToolbarConfig(options === null || options === void 0 ? void 0 : options.allowCopyToClipboard, api, options === null || options === void 0 ? void 0 : options.overrideLanguageName, options === null || options === void 0 ? void 0 : options.formatCodeProvider)
|
|
146
146
|
},
|
|
147
147
|
contentComponent: () => expValEqualsNoExposure('platform_editor_code_block_q4_lovability', 'isEnabled', true) ? /*#__PURE__*/React.createElement(FormatCodeErrorFlag, {
|
|
148
148
|
api: api
|
|
@@ -15,7 +15,6 @@ import { copySelectionPluginKey } from '../pm-plugins/codeBlockCopySelectionPlug
|
|
|
15
15
|
import { pluginKey } from '../pm-plugins/plugin-key';
|
|
16
16
|
import { transformToCodeBlockAction } from '../pm-plugins/transform-to-code-block';
|
|
17
17
|
import { createAutoDetectEntry, getLocalId, hasEnoughTextForAutoDetection } from '../utils/auto-detect-state';
|
|
18
|
-
import { formatCode, isSupportedFormatLanguage } from '../utils/format-code/formatter';
|
|
19
18
|
export const removeCodeBlockWithAnalytics = editorAnalyticsAPI => {
|
|
20
19
|
return withAnalytics(editorAnalyticsAPI, {
|
|
21
20
|
action: ACTION.DELETED,
|
|
@@ -243,9 +242,13 @@ const createResolveFormatCodeTransaction = ({
|
|
|
243
242
|
};
|
|
244
243
|
export const createFormatCodeOnClick = ({
|
|
245
244
|
api,
|
|
246
|
-
editorAnalyticsAPI
|
|
245
|
+
editorAnalyticsAPI,
|
|
246
|
+
formatCodeProvider
|
|
247
247
|
}) => (state, dispatch) => {
|
|
248
|
-
var _autoDetectPluginKey$2, _api$core;
|
|
248
|
+
var _currentNode$attrs$la, _autoDetectPluginKey$2, _api$core;
|
|
249
|
+
if (!formatCodeProvider) {
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
249
252
|
const currentCodeBlockState = pluginKey.getState(state);
|
|
250
253
|
const currentPos = currentCodeBlockState === null || currentCodeBlockState === void 0 ? void 0 : currentCodeBlockState.pos;
|
|
251
254
|
if (!currentCodeBlockState || typeof currentPos !== 'number') {
|
|
@@ -255,10 +258,7 @@ export const createFormatCodeOnClick = ({
|
|
|
255
258
|
if (!currentNode || currentNode.type !== state.schema.nodes.codeBlock) {
|
|
256
259
|
return false;
|
|
257
260
|
}
|
|
258
|
-
const currentLanguage = currentNode.attrs.language;
|
|
259
|
-
if (!isSupportedFormatLanguage(currentLanguage)) {
|
|
260
|
-
return true;
|
|
261
|
-
}
|
|
261
|
+
const currentLanguage = (_currentNode$attrs$la = currentNode.attrs.language) !== null && _currentNode$attrs$la !== void 0 ? _currentNode$attrs$la : '';
|
|
262
262
|
const currentLocalId = currentNode.attrs.localId;
|
|
263
263
|
if (currentCodeBlockState.pendingFormats[currentLocalId]) {
|
|
264
264
|
return true;
|
|
@@ -278,10 +278,14 @@ export const createFormatCodeOnClick = ({
|
|
|
278
278
|
requestId
|
|
279
279
|
}
|
|
280
280
|
}));
|
|
281
|
-
void formatCode({
|
|
281
|
+
void formatCodeProvider.formatCode({
|
|
282
282
|
content,
|
|
283
283
|
language: currentLanguage
|
|
284
|
-
}).
|
|
284
|
+
}).catch(() => ({
|
|
285
|
+
errorType: 'formatter-execution-failed',
|
|
286
|
+
language: currentLanguage,
|
|
287
|
+
status: 'failed'
|
|
288
|
+
})).then(result => {
|
|
285
289
|
var _api$codeBlock, _api$codeBlock$shared, _api$core2;
|
|
286
290
|
const pendingFormat = api === null || api === void 0 ? void 0 : (_api$codeBlock = api.codeBlock) === null || _api$codeBlock === void 0 ? void 0 : (_api$codeBlock$shared = _api$codeBlock.sharedState.currentState()) === null || _api$codeBlock$shared === void 0 ? void 0 : _api$codeBlock$shared.pendingFormats[currentLocalId];
|
|
287
291
|
if (!pendingFormat || pendingFormat.requestId !== requestId) {
|
|
@@ -14,7 +14,7 @@ import { changeLanguage, copyContentToClipboardWithAnalytics, createFormatCodeOn
|
|
|
14
14
|
import { CodeBlockLanguagePicker } from '../ui/CodeBlockLanguagePicker';
|
|
15
15
|
import { WrapIcon } from '../ui/icons/WrapIcon';
|
|
16
16
|
import { NONE_LANGUAGE_VALUE, PLAIN_TEXT_LANGUAGE_VALUE } from '../ui/language-picker-options';
|
|
17
|
-
import {
|
|
17
|
+
import { preloadFormatterOnIntent } from '../utils/format-code/formatter';
|
|
18
18
|
import { autoDetectPluginKey } from './auto-detect-state';
|
|
19
19
|
import { provideVisualFeedbackForCopyButton, removeVisualFeedbackForCopyButton } from './codeBlockCopySelectionPlugin';
|
|
20
20
|
import { createLanguageList, DEFAULT_LANGUAGES, getLanguageIdentifier } from './language-list';
|
|
@@ -47,7 +47,7 @@ const getAutoDetectPickerValue = ({
|
|
|
47
47
|
}
|
|
48
48
|
return defaultPickerValue;
|
|
49
49
|
};
|
|
50
|
-
export const getToolbarConfig = (allowCopyToClipboard = false, api, overrideLanguageName = undefined) => {
|
|
50
|
+
export const getToolbarConfig = (allowCopyToClipboard = false, api, overrideLanguageName = undefined, formatCodeProvider = undefined) => {
|
|
51
51
|
const languageList = createLanguageList(overrideLanguageName ? DEFAULT_LANGUAGES.map(languageOption => ({
|
|
52
52
|
...languageOption,
|
|
53
53
|
name: overrideLanguageName(languageOption.name)
|
|
@@ -225,7 +225,8 @@ export const getToolbarConfig = (allowCopyToClipboard = false, api, overrideLang
|
|
|
225
225
|
tabIndex: null,
|
|
226
226
|
selected: areLineNumbersVisible
|
|
227
227
|
};
|
|
228
|
-
const
|
|
228
|
+
const formatLanguage = formatCodeProvider !== null && formatCodeProvider !== void 0 && formatCodeProvider.isSupportedLanguage(language) ? language : undefined;
|
|
229
|
+
const canFormatCode = node.textContent.length > 0 && Boolean(formatLanguage);
|
|
229
230
|
const formatCodeButton = {
|
|
230
231
|
id: 'editor.codeBlock.formatCode',
|
|
231
232
|
type: 'button',
|
|
@@ -234,10 +235,11 @@ export const getToolbarConfig = (allowCopyToClipboard = false, api, overrideLang
|
|
|
234
235
|
icon: AngleBracketsIcon,
|
|
235
236
|
onClick: createFormatCodeOnClick({
|
|
236
237
|
api,
|
|
237
|
-
editorAnalyticsAPI
|
|
238
|
+
editorAnalyticsAPI,
|
|
239
|
+
formatCodeProvider
|
|
238
240
|
}),
|
|
239
|
-
onFocus: preloadFormatterOnIntent(),
|
|
240
|
-
onMouseEnter: preloadFormatterOnIntent(),
|
|
241
|
+
onFocus: preloadFormatterOnIntent(formatCodeProvider, formatLanguage),
|
|
242
|
+
onMouseEnter: preloadFormatterOnIntent(formatCodeProvider, formatLanguage),
|
|
241
243
|
title: formatMessage(canFormatCode ? codeBlockButtonMessages.formatCode : codeBlockButtonMessages.formatCodeUnavailable)
|
|
242
244
|
};
|
|
243
245
|
return {
|
|
@@ -246,9 +248,7 @@ export const getToolbarConfig = (allowCopyToClipboard = false, api, overrideLang
|
|
|
246
248
|
// eslint-disable-next-line @atlaskit/editor/no-as-casting
|
|
247
249
|
getDomRef: view => findDomRefAtPos(pos, view.domAtPos.bind(view)),
|
|
248
250
|
nodeType,
|
|
249
|
-
items: [(_languagePicker = languagePicker) !== null && _languagePicker !== void 0 ? _languagePicker : languageSelect, ...(areAnyNewToolbarFlagsEnabled ? [] : [separator]), codeBlockWrapButton, ...(expValEquals('platform_editor_code_block_q4_lovability', 'isEnabled', true) && fg('platform_editor_code_block_add_line_number_button') ? [codeBlockLineNumbersButton] : []),
|
|
250
|
-
// eslint-disable-next-line @atlaskit/platform/no-preconditioning
|
|
251
|
-
...(expValEquals('platform_editor_code_block_q4_lovability', 'isEnabled', true) && fg('platform_editor_code_block_add_line_number_button') && fg('platform_editor_code_block_formatting') ? [formatCodeButton] : []), ...copyAndDeleteButtonMenuItems],
|
|
251
|
+
items: [(_languagePicker = languagePicker) !== null && _languagePicker !== void 0 ? _languagePicker : languageSelect, ...(areAnyNewToolbarFlagsEnabled ? [] : [separator]), codeBlockWrapButton, ...(expValEquals('platform_editor_code_block_q4_lovability', 'isEnabled', true) && fg('platform_editor_code_block_add_line_number_button') ? [codeBlockLineNumbersButton, ...(formatCodeProvider ? [formatCodeButton] : [])] : []), ...copyAndDeleteButtonMenuItems],
|
|
252
252
|
scrollable: true
|
|
253
253
|
};
|
|
254
254
|
};
|
|
@@ -1,47 +1,9 @@
|
|
|
1
|
-
const
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export const preloadFormatterModule = () => {
|
|
5
|
-
if (!formatterModulePromise) {
|
|
6
|
-
formatterModulePromise = import( /* webpackChunkName: "@atlaskit-internal_editor-plugin-code-block-formatter" */'./formatter-impl').catch(error => {
|
|
7
|
-
formatterModulePromise = undefined;
|
|
8
|
-
throw error;
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
return formatterModulePromise;
|
|
12
|
-
};
|
|
13
|
-
export const preloadFormatterOnIntent = () => (_state, dispatch) => {
|
|
14
|
-
if (!dispatch) {
|
|
1
|
+
export const preloadFormatterOnIntent = (formatCodeProvider, language) => (_state, dispatch) => {
|
|
2
|
+
var _formatCodeProvider$p, _formatCodeProvider$p2;
|
|
3
|
+
if (!dispatch || !formatCodeProvider || !language) {
|
|
15
4
|
// Hover/focus handlers are command-shaped; keep dry-runs side-effect free.
|
|
16
5
|
return false;
|
|
17
6
|
}
|
|
18
|
-
void
|
|
7
|
+
void ((_formatCodeProvider$p = formatCodeProvider.preload) === null || _formatCodeProvider$p === void 0 ? void 0 : (_formatCodeProvider$p2 = _formatCodeProvider$p.call(formatCodeProvider, language)) === null || _formatCodeProvider$p2 === void 0 ? void 0 : _formatCodeProvider$p2.catch(() => undefined));
|
|
19
8
|
return false;
|
|
20
|
-
};
|
|
21
|
-
export const formatCode = async ({
|
|
22
|
-
content,
|
|
23
|
-
language
|
|
24
|
-
}) => {
|
|
25
|
-
let formatterModule;
|
|
26
|
-
try {
|
|
27
|
-
formatterModule = await preloadFormatterModule();
|
|
28
|
-
} catch {
|
|
29
|
-
return {
|
|
30
|
-
errorType: 'formatter-load-failed',
|
|
31
|
-
language,
|
|
32
|
-
status: 'failed'
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
try {
|
|
36
|
-
return await formatterModule.formatCode({
|
|
37
|
-
content,
|
|
38
|
-
language
|
|
39
|
-
});
|
|
40
|
-
} catch {
|
|
41
|
-
return {
|
|
42
|
-
errorType: 'formatter-execution-failed',
|
|
43
|
-
language,
|
|
44
|
-
status: 'failed'
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
9
|
};
|
|
@@ -156,7 +156,7 @@ var codeBlockPlugin = function codeBlockPlugin(_ref) {
|
|
|
156
156
|
}
|
|
157
157
|
}];
|
|
158
158
|
},
|
|
159
|
-
floatingToolbar: getToolbarConfig(options === null || options === void 0 ? void 0 : options.allowCopyToClipboard, api, options === null || options === void 0 ? void 0 : options.overrideLanguageName)
|
|
159
|
+
floatingToolbar: getToolbarConfig(options === null || options === void 0 ? void 0 : options.allowCopyToClipboard, api, options === null || options === void 0 ? void 0 : options.overrideLanguageName, options === null || options === void 0 ? void 0 : options.formatCodeProvider)
|
|
160
160
|
},
|
|
161
161
|
contentComponent: function contentComponent() {
|
|
162
162
|
return expValEqualsNoExposure('platform_editor_code_block_q4_lovability', 'isEnabled', true) ? /*#__PURE__*/React.createElement(FormatCodeErrorFlag, {
|
|
@@ -18,7 +18,6 @@ import { copySelectionPluginKey } from '../pm-plugins/codeBlockCopySelectionPlug
|
|
|
18
18
|
import { pluginKey } from '../pm-plugins/plugin-key';
|
|
19
19
|
import { transformToCodeBlockAction } from '../pm-plugins/transform-to-code-block';
|
|
20
20
|
import { createAutoDetectEntry, getLocalId, hasEnoughTextForAutoDetection } from '../utils/auto-detect-state';
|
|
21
|
-
import { formatCode, isSupportedFormatLanguage } from '../utils/format-code/formatter';
|
|
22
21
|
export var removeCodeBlockWithAnalytics = function removeCodeBlockWithAnalytics(editorAnalyticsAPI) {
|
|
23
22
|
return withAnalytics(editorAnalyticsAPI, {
|
|
24
23
|
action: ACTION.DELETED,
|
|
@@ -239,9 +238,13 @@ var createResolveFormatCodeTransaction = function createResolveFormatCodeTransac
|
|
|
239
238
|
};
|
|
240
239
|
export var createFormatCodeOnClick = function createFormatCodeOnClick(_ref5) {
|
|
241
240
|
var api = _ref5.api,
|
|
242
|
-
editorAnalyticsAPI = _ref5.editorAnalyticsAPI
|
|
241
|
+
editorAnalyticsAPI = _ref5.editorAnalyticsAPI,
|
|
242
|
+
formatCodeProvider = _ref5.formatCodeProvider;
|
|
243
243
|
return function (state, dispatch) {
|
|
244
|
-
var _autoDetectPluginKey$2, _api$core;
|
|
244
|
+
var _currentNode$attrs$la, _autoDetectPluginKey$2, _api$core;
|
|
245
|
+
if (!formatCodeProvider) {
|
|
246
|
+
return false;
|
|
247
|
+
}
|
|
245
248
|
var currentCodeBlockState = pluginKey.getState(state);
|
|
246
249
|
var currentPos = currentCodeBlockState === null || currentCodeBlockState === void 0 ? void 0 : currentCodeBlockState.pos;
|
|
247
250
|
if (!currentCodeBlockState || typeof currentPos !== 'number') {
|
|
@@ -251,10 +254,7 @@ export var createFormatCodeOnClick = function createFormatCodeOnClick(_ref5) {
|
|
|
251
254
|
if (!currentNode || currentNode.type !== state.schema.nodes.codeBlock) {
|
|
252
255
|
return false;
|
|
253
256
|
}
|
|
254
|
-
var currentLanguage = currentNode.attrs.language;
|
|
255
|
-
if (!isSupportedFormatLanguage(currentLanguage)) {
|
|
256
|
-
return true;
|
|
257
|
-
}
|
|
257
|
+
var currentLanguage = (_currentNode$attrs$la = currentNode.attrs.language) !== null && _currentNode$attrs$la !== void 0 ? _currentNode$attrs$la : '';
|
|
258
258
|
var currentLocalId = currentNode.attrs.localId;
|
|
259
259
|
if (currentCodeBlockState.pendingFormats[currentLocalId]) {
|
|
260
260
|
return true;
|
|
@@ -275,9 +275,15 @@ export var createFormatCodeOnClick = function createFormatCodeOnClick(_ref5) {
|
|
|
275
275
|
}
|
|
276
276
|
});
|
|
277
277
|
});
|
|
278
|
-
void formatCode({
|
|
278
|
+
void formatCodeProvider.formatCode({
|
|
279
279
|
content: content,
|
|
280
280
|
language: currentLanguage
|
|
281
|
+
}).catch(function () {
|
|
282
|
+
return {
|
|
283
|
+
errorType: 'formatter-execution-failed',
|
|
284
|
+
language: currentLanguage,
|
|
285
|
+
status: 'failed'
|
|
286
|
+
};
|
|
281
287
|
}).then(function (result) {
|
|
282
288
|
var _api$codeBlock, _api$core2;
|
|
283
289
|
var pendingFormat = api === null || api === void 0 || (_api$codeBlock = api.codeBlock) === null || _api$codeBlock === void 0 || (_api$codeBlock = _api$codeBlock.sharedState.currentState()) === null || _api$codeBlock === void 0 ? void 0 : _api$codeBlock.pendingFormats[currentLocalId];
|
|
@@ -18,7 +18,7 @@ import { changeLanguage, copyContentToClipboardWithAnalytics, createFormatCodeOn
|
|
|
18
18
|
import { CodeBlockLanguagePicker } from '../ui/CodeBlockLanguagePicker';
|
|
19
19
|
import { WrapIcon } from '../ui/icons/WrapIcon';
|
|
20
20
|
import { NONE_LANGUAGE_VALUE, PLAIN_TEXT_LANGUAGE_VALUE } from '../ui/language-picker-options';
|
|
21
|
-
import {
|
|
21
|
+
import { preloadFormatterOnIntent } from '../utils/format-code/formatter';
|
|
22
22
|
import { autoDetectPluginKey } from './auto-detect-state';
|
|
23
23
|
import { provideVisualFeedbackForCopyButton, removeVisualFeedbackForCopyButton } from './codeBlockCopySelectionPlugin';
|
|
24
24
|
import { createLanguageList, DEFAULT_LANGUAGES, getLanguageIdentifier } from './language-list';
|
|
@@ -55,6 +55,7 @@ export var getToolbarConfig = function getToolbarConfig() {
|
|
|
55
55
|
var allowCopyToClipboard = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
56
56
|
var api = arguments.length > 1 ? arguments[1] : undefined;
|
|
57
57
|
var overrideLanguageName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
|
|
58
|
+
var formatCodeProvider = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined;
|
|
58
59
|
var languageList = createLanguageList(overrideLanguageName ? DEFAULT_LANGUAGES.map(function (languageOption) {
|
|
59
60
|
return _objectSpread(_objectSpread({}, languageOption), {}, {
|
|
60
61
|
name: overrideLanguageName(languageOption.name)
|
|
@@ -239,7 +240,8 @@ export var getToolbarConfig = function getToolbarConfig() {
|
|
|
239
240
|
tabIndex: null,
|
|
240
241
|
selected: areLineNumbersVisible
|
|
241
242
|
};
|
|
242
|
-
var
|
|
243
|
+
var formatLanguage = formatCodeProvider !== null && formatCodeProvider !== void 0 && formatCodeProvider.isSupportedLanguage(language) ? language : undefined;
|
|
244
|
+
var canFormatCode = node.textContent.length > 0 && Boolean(formatLanguage);
|
|
243
245
|
var formatCodeButton = {
|
|
244
246
|
id: 'editor.codeBlock.formatCode',
|
|
245
247
|
type: 'button',
|
|
@@ -248,10 +250,11 @@ export var getToolbarConfig = function getToolbarConfig() {
|
|
|
248
250
|
icon: AngleBracketsIcon,
|
|
249
251
|
onClick: createFormatCodeOnClick({
|
|
250
252
|
api: api,
|
|
251
|
-
editorAnalyticsAPI: editorAnalyticsAPI
|
|
253
|
+
editorAnalyticsAPI: editorAnalyticsAPI,
|
|
254
|
+
formatCodeProvider: formatCodeProvider
|
|
252
255
|
}),
|
|
253
|
-
onFocus: preloadFormatterOnIntent(),
|
|
254
|
-
onMouseEnter: preloadFormatterOnIntent(),
|
|
256
|
+
onFocus: preloadFormatterOnIntent(formatCodeProvider, formatLanguage),
|
|
257
|
+
onMouseEnter: preloadFormatterOnIntent(formatCodeProvider, formatLanguage),
|
|
255
258
|
title: formatMessage(canFormatCode ? codeBlockButtonMessages.formatCode : codeBlockButtonMessages.formatCodeUnavailable)
|
|
256
259
|
};
|
|
257
260
|
return {
|
|
@@ -262,7 +265,7 @@ export var getToolbarConfig = function getToolbarConfig() {
|
|
|
262
265
|
return findDomRefAtPos(pos, view.domAtPos.bind(view));
|
|
263
266
|
},
|
|
264
267
|
nodeType: nodeType,
|
|
265
|
-
items: [languagePicker !== null && languagePicker !== void 0 ? languagePicker : languageSelect].concat(_toConsumableArray(areAnyNewToolbarFlagsEnabled ? [] : [separator]), [codeBlockWrapButton], _toConsumableArray(expValEquals('platform_editor_code_block_q4_lovability', 'isEnabled', true) && fg('platform_editor_code_block_add_line_number_button') ? [codeBlockLineNumbersButton]
|
|
268
|
+
items: [languagePicker !== null && languagePicker !== void 0 ? languagePicker : languageSelect].concat(_toConsumableArray(areAnyNewToolbarFlagsEnabled ? [] : [separator]), [codeBlockWrapButton], _toConsumableArray(expValEquals('platform_editor_code_block_q4_lovability', 'isEnabled', true) && fg('platform_editor_code_block_add_line_number_button') ? [codeBlockLineNumbersButton].concat(_toConsumableArray(formatCodeProvider ? [formatCodeButton] : [])) : []), _toConsumableArray(copyAndDeleteButtonMenuItems)),
|
|
266
269
|
scrollable: true
|
|
267
270
|
};
|
|
268
271
|
};
|
|
@@ -1,75 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
3
|
-
var supportedFormatLanguages = ['json', 'javascript', 'jsx', 'typescript', 'tsx', 'sql'];
|
|
4
|
-
export var isSupportedFormatLanguage = function isSupportedFormatLanguage(language) {
|
|
5
|
-
return supportedFormatLanguages.includes(language);
|
|
6
|
-
};
|
|
7
|
-
var formatterModulePromise;
|
|
8
|
-
export var preloadFormatterModule = function preloadFormatterModule() {
|
|
9
|
-
if (!formatterModulePromise) {
|
|
10
|
-
formatterModulePromise = import( /* webpackChunkName: "@atlaskit-internal_editor-plugin-code-block-formatter" */'./formatter-impl').catch(function (error) {
|
|
11
|
-
formatterModulePromise = undefined;
|
|
12
|
-
throw error;
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
return formatterModulePromise;
|
|
16
|
-
};
|
|
17
|
-
export var preloadFormatterOnIntent = function preloadFormatterOnIntent() {
|
|
1
|
+
export var preloadFormatterOnIntent = function preloadFormatterOnIntent(formatCodeProvider, language) {
|
|
18
2
|
return function (_state, dispatch) {
|
|
19
|
-
|
|
3
|
+
var _formatCodeProvider$p;
|
|
4
|
+
if (!dispatch || !formatCodeProvider || !language) {
|
|
20
5
|
// Hover/focus handlers are command-shaped; keep dry-runs side-effect free.
|
|
21
6
|
return false;
|
|
22
7
|
}
|
|
23
|
-
void
|
|
8
|
+
void ((_formatCodeProvider$p = formatCodeProvider.preload) === null || _formatCodeProvider$p === void 0 || (_formatCodeProvider$p = _formatCodeProvider$p.call(formatCodeProvider, language)) === null || _formatCodeProvider$p === void 0 ? void 0 : _formatCodeProvider$p.catch(function () {
|
|
9
|
+
return undefined;
|
|
10
|
+
}));
|
|
24
11
|
return false;
|
|
25
12
|
};
|
|
26
|
-
};
|
|
27
|
-
export var formatCode = /*#__PURE__*/function () {
|
|
28
|
-
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref) {
|
|
29
|
-
var content, language, formatterModule, _t, _t2;
|
|
30
|
-
return _regeneratorRuntime.wrap(function (_context) {
|
|
31
|
-
while (1) switch (_context.prev = _context.next) {
|
|
32
|
-
case 0:
|
|
33
|
-
content = _ref.content, language = _ref.language;
|
|
34
|
-
_context.prev = 1;
|
|
35
|
-
_context.next = 2;
|
|
36
|
-
return preloadFormatterModule();
|
|
37
|
-
case 2:
|
|
38
|
-
formatterModule = _context.sent;
|
|
39
|
-
_context.next = 4;
|
|
40
|
-
break;
|
|
41
|
-
case 3:
|
|
42
|
-
_context.prev = 3;
|
|
43
|
-
_t = _context["catch"](1);
|
|
44
|
-
return _context.abrupt("return", {
|
|
45
|
-
errorType: 'formatter-load-failed',
|
|
46
|
-
language: language,
|
|
47
|
-
status: 'failed'
|
|
48
|
-
});
|
|
49
|
-
case 4:
|
|
50
|
-
_context.prev = 4;
|
|
51
|
-
_context.next = 5;
|
|
52
|
-
return formatterModule.formatCode({
|
|
53
|
-
content: content,
|
|
54
|
-
language: language
|
|
55
|
-
});
|
|
56
|
-
case 5:
|
|
57
|
-
return _context.abrupt("return", _context.sent);
|
|
58
|
-
case 6:
|
|
59
|
-
_context.prev = 6;
|
|
60
|
-
_t2 = _context["catch"](4);
|
|
61
|
-
return _context.abrupt("return", {
|
|
62
|
-
errorType: 'formatter-execution-failed',
|
|
63
|
-
language: language,
|
|
64
|
-
status: 'failed'
|
|
65
|
-
});
|
|
66
|
-
case 7:
|
|
67
|
-
case "end":
|
|
68
|
-
return _context.stop();
|
|
69
|
-
}
|
|
70
|
-
}, _callee, null, [[1, 3], [4, 6]]);
|
|
71
|
-
}));
|
|
72
|
-
return function formatCode(_x) {
|
|
73
|
-
return _ref2.apply(this, arguments);
|
|
74
|
-
};
|
|
75
|
-
}();
|
|
13
|
+
};
|
|
@@ -3,15 +3,17 @@ import type { EditorAnalyticsAPI } from '@atlaskit/editor-common/analytics';
|
|
|
3
3
|
import type { Command, EditorCommand, ExtractInjectionAPI } from '@atlaskit/editor-common/types';
|
|
4
4
|
import type { EditorState, Transaction } from '@atlaskit/editor-prosemirror/state';
|
|
5
5
|
import type { CodeBlockPlugin } from '../codeBlockPluginType';
|
|
6
|
+
import type { CodeBlockFormatProvider } from '../types';
|
|
6
7
|
import type { LanguagePickerSelectionSource } from '../ui/language-picker-options';
|
|
7
8
|
export declare const removeCodeBlockWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => Command;
|
|
8
9
|
export declare const removeCodeBlock: Command;
|
|
9
10
|
export declare const changeLanguage: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => (language: string | null, selectionSource?: LanguagePickerSelectionSource) => Command;
|
|
10
11
|
/** Queue auto-detection for selected code block. */
|
|
11
12
|
export declare const detectLanguage: () => Command;
|
|
12
|
-
export declare const createFormatCodeOnClick: ({ api, editorAnalyticsAPI, }: {
|
|
13
|
+
export declare const createFormatCodeOnClick: ({ api, editorAnalyticsAPI, formatCodeProvider, }: {
|
|
13
14
|
api?: ExtractInjectionAPI<CodeBlockPlugin>;
|
|
14
15
|
editorAnalyticsAPI: EditorAnalyticsAPI | undefined;
|
|
16
|
+
formatCodeProvider: CodeBlockFormatProvider | undefined;
|
|
15
17
|
}) => Command;
|
|
16
18
|
export declare const copyContentToClipboardWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => Command;
|
|
17
19
|
export declare const copyContentToClipboard: Command;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export type { CodeBlockOptions, CodeBlockPluginOptions } from '../types/index';
|
|
1
|
+
export type { CodeBlockFormatProvider, CodeBlockOptions, CodeBlockPluginOptions, FormatResult, } from '../types/index';
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { ExtractInjectionAPI, FloatingToolbarHandler, SelectOption } from '@atlaskit/editor-common/types';
|
|
2
2
|
import type { CodeBlockPlugin } from '../index';
|
|
3
|
+
import type { CodeBlockFormatProvider } from '../types';
|
|
3
4
|
import type { Language } from './language-list';
|
|
4
|
-
export declare const getToolbarConfig: (allowCopyToClipboard: boolean | undefined, api: ExtractInjectionAPI<CodeBlockPlugin> | undefined, overrideLanguageName?: ((name: Language["name"]) => string) | undefined) => FloatingToolbarHandler;
|
|
5
|
+
export declare const getToolbarConfig: (allowCopyToClipboard: boolean | undefined, api: ExtractInjectionAPI<CodeBlockPlugin> | undefined, overrideLanguageName?: ((name: Language["name"]) => string) | undefined, formatCodeProvider?: CodeBlockFormatProvider | undefined) => FloatingToolbarHandler;
|
|
5
6
|
/**
|
|
6
7
|
* Filters language list based on both name and alias properties.
|
|
7
8
|
* @param option
|
|
@@ -1,7 +1,25 @@
|
|
|
1
1
|
import type { LongPressSelectionPluginOptions } from '@atlaskit/editor-common/types';
|
|
2
|
+
export type FormatResult = {
|
|
3
|
+
content: string;
|
|
4
|
+
language: string;
|
|
5
|
+
status: 'formatted' | 'unchanged';
|
|
6
|
+
} | {
|
|
7
|
+
errorType: 'formatter-execution-failed' | 'formatter-load-failed';
|
|
8
|
+
language: string;
|
|
9
|
+
status: 'failed';
|
|
10
|
+
};
|
|
11
|
+
export type CodeBlockFormatProvider = {
|
|
12
|
+
formatCode: (args: {
|
|
13
|
+
content: string;
|
|
14
|
+
language: string;
|
|
15
|
+
}) => Promise<FormatResult>;
|
|
16
|
+
isSupportedLanguage: (language: string | null | undefined) => boolean;
|
|
17
|
+
preload?: (language: string) => Promise<void>;
|
|
18
|
+
};
|
|
2
19
|
export interface CodeBlockPluginOptions extends LongPressSelectionPluginOptions {
|
|
3
20
|
allowCompositionInputOverride?: boolean;
|
|
4
21
|
allowCopyToClipboard?: boolean;
|
|
22
|
+
formatCodeProvider?: CodeBlockFormatProvider;
|
|
5
23
|
overrideLanguageName?: (name: string) => string;
|
|
6
24
|
}
|
|
7
25
|
/**
|
|
@@ -1,25 +1,5 @@
|
|
|
1
1
|
import type { Command } from '@atlaskit/editor-common/types';
|
|
2
|
-
|
|
3
|
-
type FormatCodeLanguage = (typeof supportedFormatLanguages)[number];
|
|
4
|
-
export type FormatCodeResult = {
|
|
5
|
-
content: string;
|
|
6
|
-
language: FormatCodeLanguage;
|
|
7
|
-
status: 'formatted' | 'unchanged';
|
|
8
|
-
} | {
|
|
9
|
-
errorType: 'formatter-execution-failed' | 'formatter-load-failed';
|
|
10
|
-
language: FormatCodeLanguage;
|
|
11
|
-
status: 'failed';
|
|
12
|
-
};
|
|
2
|
+
import type { CodeBlockFormatProvider, FormatResult } from '../../types';
|
|
13
3
|
export type LanguageSource = 'auto-detected' | 'selected';
|
|
14
|
-
type
|
|
15
|
-
|
|
16
|
-
language: FormatCodeLanguage;
|
|
17
|
-
}) => Promise<FormatCodeResult>;
|
|
18
|
-
type FormatterModule = {
|
|
19
|
-
formatCode: FormatCode;
|
|
20
|
-
};
|
|
21
|
-
export declare const isSupportedFormatLanguage: (language: string | null | undefined) => language is FormatCodeLanguage;
|
|
22
|
-
export declare const preloadFormatterModule: () => Promise<FormatterModule>;
|
|
23
|
-
export declare const preloadFormatterOnIntent: () => Command;
|
|
24
|
-
export declare const formatCode: FormatCode;
|
|
25
|
-
export {};
|
|
4
|
+
export type FormatCodeResult = FormatResult;
|
|
5
|
+
export declare const preloadFormatterOnIntent: (formatCodeProvider: CodeBlockFormatProvider | undefined, language: string | undefined) => Command;
|
|
@@ -3,15 +3,17 @@ import type { EditorAnalyticsAPI } from '@atlaskit/editor-common/analytics';
|
|
|
3
3
|
import type { Command, EditorCommand, ExtractInjectionAPI } from '@atlaskit/editor-common/types';
|
|
4
4
|
import type { EditorState, Transaction } from '@atlaskit/editor-prosemirror/state';
|
|
5
5
|
import type { CodeBlockPlugin } from '../codeBlockPluginType';
|
|
6
|
+
import type { CodeBlockFormatProvider } from '../types';
|
|
6
7
|
import type { LanguagePickerSelectionSource } from '../ui/language-picker-options';
|
|
7
8
|
export declare const removeCodeBlockWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => Command;
|
|
8
9
|
export declare const removeCodeBlock: Command;
|
|
9
10
|
export declare const changeLanguage: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => (language: string | null, selectionSource?: LanguagePickerSelectionSource) => Command;
|
|
10
11
|
/** Queue auto-detection for selected code block. */
|
|
11
12
|
export declare const detectLanguage: () => Command;
|
|
12
|
-
export declare const createFormatCodeOnClick: ({ api, editorAnalyticsAPI, }: {
|
|
13
|
+
export declare const createFormatCodeOnClick: ({ api, editorAnalyticsAPI, formatCodeProvider, }: {
|
|
13
14
|
api?: ExtractInjectionAPI<CodeBlockPlugin>;
|
|
14
15
|
editorAnalyticsAPI: EditorAnalyticsAPI | undefined;
|
|
16
|
+
formatCodeProvider: CodeBlockFormatProvider | undefined;
|
|
15
17
|
}) => Command;
|
|
16
18
|
export declare const copyContentToClipboardWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => Command;
|
|
17
19
|
export declare const copyContentToClipboard: Command;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export type { CodeBlockOptions, CodeBlockPluginOptions } from '../types/index';
|
|
1
|
+
export type { CodeBlockFormatProvider, CodeBlockOptions, CodeBlockPluginOptions, FormatResult, } from '../types/index';
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { ExtractInjectionAPI, FloatingToolbarHandler, SelectOption } from '@atlaskit/editor-common/types';
|
|
2
2
|
import type { CodeBlockPlugin } from '../index';
|
|
3
|
+
import type { CodeBlockFormatProvider } from '../types';
|
|
3
4
|
import type { Language } from './language-list';
|
|
4
|
-
export declare const getToolbarConfig: (allowCopyToClipboard: boolean | undefined, api: ExtractInjectionAPI<CodeBlockPlugin> | undefined, overrideLanguageName?: ((name: Language["name"]) => string) | undefined) => FloatingToolbarHandler;
|
|
5
|
+
export declare const getToolbarConfig: (allowCopyToClipboard: boolean | undefined, api: ExtractInjectionAPI<CodeBlockPlugin> | undefined, overrideLanguageName?: ((name: Language["name"]) => string) | undefined, formatCodeProvider?: CodeBlockFormatProvider | undefined) => FloatingToolbarHandler;
|
|
5
6
|
/**
|
|
6
7
|
* Filters language list based on both name and alias properties.
|
|
7
8
|
* @param option
|
|
@@ -1,7 +1,25 @@
|
|
|
1
1
|
import type { LongPressSelectionPluginOptions } from '@atlaskit/editor-common/types';
|
|
2
|
+
export type FormatResult = {
|
|
3
|
+
content: string;
|
|
4
|
+
language: string;
|
|
5
|
+
status: 'formatted' | 'unchanged';
|
|
6
|
+
} | {
|
|
7
|
+
errorType: 'formatter-execution-failed' | 'formatter-load-failed';
|
|
8
|
+
language: string;
|
|
9
|
+
status: 'failed';
|
|
10
|
+
};
|
|
11
|
+
export type CodeBlockFormatProvider = {
|
|
12
|
+
formatCode: (args: {
|
|
13
|
+
content: string;
|
|
14
|
+
language: string;
|
|
15
|
+
}) => Promise<FormatResult>;
|
|
16
|
+
isSupportedLanguage: (language: string | null | undefined) => boolean;
|
|
17
|
+
preload?: (language: string) => Promise<void>;
|
|
18
|
+
};
|
|
2
19
|
export interface CodeBlockPluginOptions extends LongPressSelectionPluginOptions {
|
|
3
20
|
allowCompositionInputOverride?: boolean;
|
|
4
21
|
allowCopyToClipboard?: boolean;
|
|
22
|
+
formatCodeProvider?: CodeBlockFormatProvider;
|
|
5
23
|
overrideLanguageName?: (name: string) => string;
|
|
6
24
|
}
|
|
7
25
|
/**
|
|
@@ -1,32 +1,5 @@
|
|
|
1
1
|
import type { Command } from '@atlaskit/editor-common/types';
|
|
2
|
-
|
|
3
|
-
"json",
|
|
4
|
-
"javascript",
|
|
5
|
-
"jsx",
|
|
6
|
-
"typescript",
|
|
7
|
-
"tsx",
|
|
8
|
-
"sql"
|
|
9
|
-
];
|
|
10
|
-
type FormatCodeLanguage = (typeof supportedFormatLanguages)[number];
|
|
11
|
-
export type FormatCodeResult = {
|
|
12
|
-
content: string;
|
|
13
|
-
language: FormatCodeLanguage;
|
|
14
|
-
status: 'formatted' | 'unchanged';
|
|
15
|
-
} | {
|
|
16
|
-
errorType: 'formatter-execution-failed' | 'formatter-load-failed';
|
|
17
|
-
language: FormatCodeLanguage;
|
|
18
|
-
status: 'failed';
|
|
19
|
-
};
|
|
2
|
+
import type { CodeBlockFormatProvider, FormatResult } from '../../types';
|
|
20
3
|
export type LanguageSource = 'auto-detected' | 'selected';
|
|
21
|
-
type
|
|
22
|
-
|
|
23
|
-
language: FormatCodeLanguage;
|
|
24
|
-
}) => Promise<FormatCodeResult>;
|
|
25
|
-
type FormatterModule = {
|
|
26
|
-
formatCode: FormatCode;
|
|
27
|
-
};
|
|
28
|
-
export declare const isSupportedFormatLanguage: (language: string | null | undefined) => language is FormatCodeLanguage;
|
|
29
|
-
export declare const preloadFormatterModule: () => Promise<FormatterModule>;
|
|
30
|
-
export declare const preloadFormatterOnIntent: () => Command;
|
|
31
|
-
export declare const formatCode: FormatCode;
|
|
32
|
-
export {};
|
|
4
|
+
export type FormatCodeResult = FormatResult;
|
|
5
|
+
export declare const preloadFormatterOnIntent: (formatCodeProvider: CodeBlockFormatProvider | undefined, language: string | undefined) => Command;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/editor-plugin-code-block",
|
|
3
|
-
"version": "13.1.
|
|
3
|
+
"version": "13.1.14",
|
|
4
4
|
"description": "Code block plugin for @atlaskit/editor-core",
|
|
5
5
|
"author": "Atlassian Pty Ltd",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -50,13 +50,13 @@
|
|
|
50
50
|
"@atlaskit/primitives": "^19.0.0",
|
|
51
51
|
"@atlaskit/prosemirror-input-rules": "^3.7.0",
|
|
52
52
|
"@atlaskit/select": "^21.12.0",
|
|
53
|
-
"@atlaskit/tmp-editor-statsig": "^
|
|
54
|
-
"@atlaskit/tokens": "^13.
|
|
53
|
+
"@atlaskit/tmp-editor-statsig": "^100.0.0",
|
|
54
|
+
"@atlaskit/tokens": "^13.4.0",
|
|
55
55
|
"@babel/runtime": "^7.0.0",
|
|
56
56
|
"@compiled/react": "^0.20.0"
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
|
-
"@atlaskit/editor-common": "^115.
|
|
59
|
+
"@atlaskit/editor-common": "^115.15.0",
|
|
60
60
|
"react": "^18.2.0",
|
|
61
61
|
"react-intl": "^5.25.1 || ^6.0.0 || ^7.0.0"
|
|
62
62
|
},
|
|
@@ -111,9 +111,6 @@
|
|
|
111
111
|
"platform_editor_code_block_add_line_number_button": {
|
|
112
112
|
"type": "boolean"
|
|
113
113
|
},
|
|
114
|
-
"platform_editor_code_block_formatting": {
|
|
115
|
-
"type": "boolean"
|
|
116
|
-
},
|
|
117
114
|
"platform_editor_code_block_language_detection_flow": {
|
|
118
115
|
"type": "boolean"
|
|
119
116
|
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.formatCode = void 0;
|
|
7
|
-
var formatCode = exports.formatCode = function formatCode(_ref) {
|
|
8
|
-
var content = _ref.content,
|
|
9
|
-
language = _ref.language;
|
|
10
|
-
return Promise.resolve({
|
|
11
|
-
content: content,
|
|
12
|
-
language: language,
|
|
13
|
-
status: 'unchanged'
|
|
14
|
-
});
|
|
15
|
-
};
|