mbeditor 0.5.2 → 0.5.3
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.
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 31199cd73e4e3321d8851a62ab20decd6e9c8d9ab328b50d9f987f85da1333b2
|
|
4
|
+
data.tar.gz: 27de9f3e0641c41e693023b3fcbedbe0d89d35d8d1fd7f3606aaa8095ceeb5b2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5f86f17e33bfd43248d7dc1a122f6ed3d85a0fcf3e745ca805561d7d490c3497e1bfaa53339ed28ed068a401ed91447888eb5f92a89654d89fe3b8ae0fd7c5b1
|
|
7
|
+
data.tar.gz: fea980a035f785508e1bc5444fce65c7a8c0824307c48e4db7ea73fcf7218f23889c1c687d999fc252f3ffb97fc732b1aae8292ec65938f40d97c48b95a470c7
|
|
@@ -35,7 +35,7 @@ var EditorPanel = function EditorPanel(_ref) {
|
|
|
35
35
|
var editorRef = useRef(null);
|
|
36
36
|
var monacoRef = useRef(null);
|
|
37
37
|
var latestContentRef = useRef('');
|
|
38
|
-
var lastAppliedExternalVersionRef = useRef(
|
|
38
|
+
var lastAppliedExternalVersionRef = useRef(0);
|
|
39
39
|
var aviBaseRef = useRef(0);
|
|
40
40
|
var aviMaxRef = useRef(0);
|
|
41
41
|
|
|
@@ -832,12 +832,19 @@ var EditorPanel = function EditorPanel(_ref) {
|
|
|
832
832
|
EditorStore.setState({ canUndo: false, canRedo: false });
|
|
833
833
|
} else {
|
|
834
834
|
// Keep undo stack for formats or replaces by using executeEdits
|
|
835
|
+
var _extEntry = window.__mbeditorModels && window.__mbeditorModels[tab.path];
|
|
836
|
+
if (_extEntry) _extEntry.cleanVersionId = null;
|
|
835
837
|
editor.pushUndoStop();
|
|
836
838
|
editor.executeEdits("external", [{
|
|
837
839
|
range: model.getFullModelRange(),
|
|
838
840
|
text: tab.content
|
|
839
841
|
}]);
|
|
840
842
|
editor.pushUndoStop();
|
|
843
|
+
// Re-anchor the clean baseline so onDidChangeContent doesn't mark this
|
|
844
|
+
// externally-applied content as a dirty edit.
|
|
845
|
+
var _newExtAvi = model.getAlternativeVersionId();
|
|
846
|
+
if (_extEntry) _extEntry.cleanVersionId = _newExtAvi;
|
|
847
|
+
aviBaseRef.current = _newExtAvi;
|
|
841
848
|
}
|
|
842
849
|
}, [tab.content, tab.externalContentVersion]);
|
|
843
850
|
|
|
@@ -68,9 +68,6 @@
|
|
|
68
68
|
var key = keys[i];
|
|
69
69
|
if (alreadyDeclared[key]) continue;
|
|
70
70
|
if (!/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key)) continue;
|
|
71
|
-
var desc;
|
|
72
|
-
try { desc = Object.getOwnPropertyDescriptor(window, key); } catch (e) { continue; }
|
|
73
|
-
if (!desc || !desc.configurable || !desc.writable || desc.get) continue;
|
|
74
71
|
var value;
|
|
75
72
|
try { value = window[key]; } catch (e) { continue; }
|
|
76
73
|
if (value === null || value === undefined) continue;
|
|
@@ -488,11 +485,11 @@
|
|
|
488
485
|
});
|
|
489
486
|
}
|
|
490
487
|
|
|
491
|
-
// Declare globals that
|
|
492
|
-
//
|
|
493
|
-
//
|
|
494
|
-
//
|
|
495
|
-
//
|
|
488
|
+
// Declare globals that are injected at runtime so checkJs doesn't flag them
|
|
489
|
+
// as undefined. The buildWindowGlobalsShim() function automatically detects
|
|
490
|
+
// window globals from the host application. Common Sprockets globals
|
|
491
|
+
// (React, ReactDOM, etc.) are declared explicitly. For additional globals
|
|
492
|
+
// not auto-detected, add `/* global MyComponent */` at the top of the file.
|
|
496
493
|
if (monaco.languages.typescript && monaco.languages.typescript.javascriptDefaults) {
|
|
497
494
|
monaco.languages.typescript.javascriptDefaults.addExtraLib(
|
|
498
495
|
[
|
|
@@ -515,12 +512,18 @@
|
|
|
515
512
|
);
|
|
516
513
|
}
|
|
517
514
|
|
|
518
|
-
// Downgrade
|
|
519
|
-
// TypeScript has no built-in way to emit
|
|
515
|
+
// Downgrade certain TypeScript diagnostic codes from Error to Warning.
|
|
516
|
+
// TypeScript has no built-in way to emit these as warnings, so we intercept
|
|
520
517
|
// the marker set after the worker fires and re-apply with lower severity.
|
|
521
|
-
//
|
|
522
|
-
|
|
523
|
-
|
|
518
|
+
//
|
|
519
|
+
// Patch markers after the TypeScript worker fires:
|
|
520
|
+
// - Both: downgrade TS6133 ("declared but never read") from Error to Warning.
|
|
521
|
+
// Host-app globals are handled by the dynamic window shim and explicit
|
|
522
|
+
// addExtraLib declarations above — we do not suppress TS2304 globally so
|
|
523
|
+
// that genuinely undefined names are still flagged as errors.
|
|
524
|
+
var JS_SUPPRESS_CODES = {};
|
|
525
|
+
var JS_WARN_CODES = { '6133': true };
|
|
526
|
+
var TS_WARN_CODES = { '6133': true };
|
|
524
527
|
var _severityPatchActive = false;
|
|
525
528
|
monaco.editor.onDidChangeMarkers(function(uris) {
|
|
526
529
|
if (_severityPatchActive) return;
|
|
@@ -529,14 +532,20 @@
|
|
|
529
532
|
uris.forEach(function(uri) {
|
|
530
533
|
var model = monaco.editor.getModel(uri);
|
|
531
534
|
if (!model) return;
|
|
532
|
-
|
|
533
|
-
|
|
535
|
+
[
|
|
536
|
+
{ owner: 'javascript', suppress: JS_SUPPRESS_CODES, warn: JS_WARN_CODES },
|
|
537
|
+
{ owner: 'typescript', suppress: {}, warn: TS_WARN_CODES }
|
|
538
|
+
].forEach(function(entry) {
|
|
539
|
+
var markers = monaco.editor.getModelMarkers({ resource: uri, owner: entry.owner });
|
|
534
540
|
var needsPatch = markers.some(function(m) {
|
|
535
|
-
|
|
541
|
+
var code = String(m.code);
|
|
542
|
+
return (m.severity === monaco.MarkerSeverity.Error && (entry.suppress[code] || entry.warn[code]));
|
|
536
543
|
});
|
|
537
544
|
if (!needsPatch) return;
|
|
538
|
-
monaco.editor.setModelMarkers(model, owner, markers.
|
|
539
|
-
return
|
|
545
|
+
monaco.editor.setModelMarkers(model, entry.owner, markers.filter(function(m) {
|
|
546
|
+
return !entry.suppress[String(m.code)];
|
|
547
|
+
}).map(function(m) {
|
|
548
|
+
return (m.severity === monaco.MarkerSeverity.Error && entry.warn[String(m.code)])
|
|
540
549
|
? Object.assign({}, m, { severity: monaco.MarkerSeverity.Warning })
|
|
541
550
|
: m;
|
|
542
551
|
}));
|
|
@@ -548,7 +557,7 @@
|
|
|
548
557
|
});
|
|
549
558
|
}
|
|
550
559
|
|
|
551
|
-
// TypeScript: enable JSX for .tsx files
|
|
560
|
+
// TypeScript: enable JSX for .tsx files.
|
|
552
561
|
if (monaco.languages.typescript && monaco.languages.typescript.typescriptDefaults) {
|
|
553
562
|
monaco.languages.typescript.typescriptDefaults.setCompilerOptions({
|
|
554
563
|
target: monaco.languages.typescript.ScriptTarget.ES2020,
|
|
@@ -36,6 +36,15 @@ module Mbeditor
|
|
|
36
36
|
private
|
|
37
37
|
|
|
38
38
|
def editor_shell_html(base)
|
|
39
|
+
prettier_scripts = %w[
|
|
40
|
+
prettier-standalone.js
|
|
41
|
+
prettier-plugin-babel.js
|
|
42
|
+
prettier-plugin-estree.js
|
|
43
|
+
prettier-plugin-html.js
|
|
44
|
+
prettier-plugin-postcss.js
|
|
45
|
+
prettier-plugin-markdown.js
|
|
46
|
+
].map { |f| "#{base}/assets/#{f}" }.to_json
|
|
47
|
+
|
|
39
48
|
<<~HTML
|
|
40
49
|
<!DOCTYPE html>
|
|
41
50
|
<html lang="en">
|
|
@@ -45,6 +54,16 @@ module Mbeditor
|
|
|
45
54
|
<title>Mbeditor</title>
|
|
46
55
|
<link rel="stylesheet" href="#{base}/assets/fontawesome.min.css" />
|
|
47
56
|
<link rel="stylesheet" href="#{base}/assets/mbeditor/application.css" />
|
|
57
|
+
<script defer src="#{base}/assets/react.min.js"></script>
|
|
58
|
+
<script defer src="#{base}/assets/react-dom.min.js"></script>
|
|
59
|
+
<script defer src="#{base}/assets/axios.min.js"></script>
|
|
60
|
+
<script defer src="#{base}/assets/lodash.min.js"></script>
|
|
61
|
+
<script defer src="#{base}/assets/minisearch.min.js"></script>
|
|
62
|
+
<script defer src="#{base}/assets/marked.min.js"></script>
|
|
63
|
+
<script defer src="#{base}/assets/emmet.js"></script>
|
|
64
|
+
<script defer src="#{base}/assets/monaco-themes-bundle.js"></script>
|
|
65
|
+
<script>var require = { paths: { vs: '#{base}/monaco-editor/vs', 'monaco-editor/esm/vs': '#{base}/monaco-editor/vs', 'monaco-vim': '#{base}/assets/monaco-vim' } };</script>
|
|
66
|
+
<script src="#{base}/monaco-editor/vs/loader.js"></script>
|
|
48
67
|
</head>
|
|
49
68
|
<body>
|
|
50
69
|
<script>
|
|
@@ -60,68 +79,70 @@ module Mbeditor
|
|
|
60
79
|
<div class="mbeditor-loading-text">Loading editor…</div>
|
|
61
80
|
</div>
|
|
62
81
|
</div>
|
|
63
|
-
<script defer src="#{base}/assets/react.min.js"></script>
|
|
64
|
-
<script defer src="#{base}/assets/react-dom.min.js"></script>
|
|
65
|
-
<script defer src="#{base}/assets/axios.min.js"></script>
|
|
66
|
-
<script defer src="#{base}/assets/lodash.min.js"></script>
|
|
67
|
-
<script defer src="#{base}/assets/minisearch.min.js"></script>
|
|
68
|
-
<script defer src="#{base}/assets/marked.min.js"></script>
|
|
69
|
-
<script defer src="#{base}/assets/emmet.js"></script>
|
|
70
|
-
<script defer src="#{base}/assets/monaco-themes-bundle.js"></script>
|
|
71
82
|
<script>
|
|
72
83
|
window.MonacoEnvironment = {
|
|
73
84
|
getWorkerUrl: function(workerId, label) {
|
|
74
|
-
|
|
75
|
-
return '
|
|
85
|
+
var b = window.MBEDITOR_BASE_PATH || '';
|
|
86
|
+
if (label === 'typescript' || label === 'javascript') return b + '/ts_worker.js';
|
|
87
|
+
return b + '/monaco_worker.js';
|
|
76
88
|
}
|
|
77
89
|
};
|
|
78
|
-
var require = { paths: { vs: '#{base}/monaco-editor/vs', 'monaco-editor/esm/vs': '#{base}/monaco-editor/vs', 'monaco-vim': '#{base}/assets/monaco-vim' } };
|
|
79
|
-
</script>
|
|
80
|
-
<script src="#{base}/monaco-editor/vs/loader.js"></script>
|
|
81
|
-
<script>
|
|
82
90
|
(function() {
|
|
83
|
-
var prettierScripts = [
|
|
84
|
-
'#{base}/assets/prettier-standalone.js',
|
|
85
|
-
'#{base}/assets/prettier-plugin-babel.js',
|
|
86
|
-
'#{base}/assets/prettier-plugin-estree.js',
|
|
87
|
-
'#{base}/assets/prettier-plugin-html.js',
|
|
88
|
-
'#{base}/assets/prettier-plugin-postcss.js',
|
|
89
|
-
'#{base}/assets/prettier-plugin-markdown.js'
|
|
90
|
-
];
|
|
91
91
|
var _define = window.define;
|
|
92
92
|
window.define = undefined;
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
window.define =
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
Object.keys(window.MBEDITOR_CUSTOM_THEMES).forEach(function(id) {
|
|
103
|
-
window.monaco.editor.defineTheme(id, window.MBEDITOR_CUSTOM_THEMES[id]);
|
|
104
|
-
});
|
|
105
|
-
}
|
|
93
|
+
|
|
94
|
+
var prettierScripts = #{prettier_scripts};
|
|
95
|
+
window.loadPrettierPlugins = function() {
|
|
96
|
+
if (window._prettierLoadPromise) return window._prettierLoadPromise;
|
|
97
|
+
window._prettierLoadPromise = new Promise(function(resolve, reject) {
|
|
98
|
+
var savedDefine = window.define;
|
|
99
|
+
window.define = undefined;
|
|
100
|
+
var pending = prettierScripts.length;
|
|
101
|
+
prettierScripts.forEach(function(src) {
|
|
106
102
|
var s = document.createElement('script');
|
|
107
|
-
s.src =
|
|
108
|
-
s.onload = function() {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
if (window.MbeditorApp && _R && _RD) _RD.render(_R.createElement(window.MbeditorApp), root);
|
|
112
|
-
};
|
|
113
|
-
document.body.appendChild(s);
|
|
103
|
+
s.src = src;
|
|
104
|
+
s.onload = function() { if (--pending === 0) { window.define = savedDefine; resolve(); } };
|
|
105
|
+
s.onerror = function() { window.define = savedDefine; reject(new Error('Failed to load Prettier: ' + src)); };
|
|
106
|
+
document.head.appendChild(s);
|
|
114
107
|
});
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
|
|
108
|
+
});
|
|
109
|
+
return window._prettierLoadPromise;
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
function proceed() {
|
|
113
|
+
window.MbeditorRuntime = { React: window.React, ReactDOM: window.ReactDOM };
|
|
114
|
+
window.React = window._mbeditorHostReact;
|
|
115
|
+
window.ReactDOM = window._mbeditorHostReactDOM;
|
|
116
|
+
window.define = _define;
|
|
117
|
+
|
|
118
|
+
var _monacoResolve;
|
|
119
|
+
window.__monacoReady = new Promise(function(resolve) { _monacoResolve = resolve; });
|
|
120
|
+
|
|
121
|
+
var appScript = document.createElement('script');
|
|
122
|
+
appScript.src = '#{base}/assets/mbeditor/application.js';
|
|
123
|
+
appScript.onload = function() {
|
|
124
|
+
var root = document.getElementById('mbeditor-root');
|
|
125
|
+
var _R = window.MbeditorRuntime.React, _RD = window.MbeditorRuntime.ReactDOM;
|
|
126
|
+
if (window.MbeditorApp && _R && _RD) _RD.render(_R.createElement(window.MbeditorApp), root);
|
|
127
|
+
};
|
|
128
|
+
appScript.onerror = function() {
|
|
129
|
+
document.getElementById('mbeditor-root').innerHTML =
|
|
130
|
+
'<div style="padding:2rem;font-family:sans-serif;color:#c00">Editor failed to load. Please refresh the page.</div>';
|
|
131
|
+
};
|
|
132
|
+
document.body.appendChild(appScript);
|
|
133
|
+
|
|
134
|
+
require(['vs/editor/editor.main'], function() {
|
|
135
|
+
if (window.MBEDITOR_CUSTOM_THEMES && window.monaco) {
|
|
136
|
+
Object.keys(window.MBEDITOR_CUSTOM_THEMES).forEach(function(id) {
|
|
137
|
+
window.monaco.editor.defineTheme(id, window.MBEDITOR_CUSTOM_THEMES[id]);
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
_monacoResolve();
|
|
141
|
+
});
|
|
118
142
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
s.onload = function() { if (--pending === 0) onAllPrettierLoaded(); };
|
|
123
|
-
document.head.appendChild(s);
|
|
124
|
-
});
|
|
143
|
+
|
|
144
|
+
if (window._mbeditorDOMReady) proceed();
|
|
145
|
+
else document.addEventListener('DOMContentLoaded', proceed, { once: true });
|
|
125
146
|
})();
|
|
126
147
|
</script>
|
|
127
148
|
</body>
|
data/lib/mbeditor/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mbeditor
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.5.
|
|
4
|
+
version: 0.5.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Oliver Noonan
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-04
|
|
11
|
+
date: 2026-05-04 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|