Skip to content

Commit 201bd9f

Browse files
authored
Merge pull request #653 from basil/ace-editor
Upgrade ACE Editor from 1.2.2 to 1.15.0
2 parents 8c396af + f8d1b81 commit 201bd9f

File tree

5 files changed

+25
-46
lines changed

5 files changed

+25
-46
lines changed

plugin/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
"webpack-fix-style-only-entries": "^0.6.1"
4040
},
4141
"dependencies": {
42-
"jenkins-js-modules": "1.3.0",
42+
"ace-builds": "^1.15.0",
4343
"jquery": "^3.6.1",
4444
"jquery-ui": "^1.13.2",
4545
"raf": "^3.4.1"

plugin/pom.xml

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@
4242
</licenses>
4343
<properties>
4444
<no-test-jar>false</no-test-jar>
45-
<node.version>16.17.0</node.version>
46-
<npm.version>8.18.0</npm.version>
45+
<node.version>18.13.0</node.version>
46+
<npm.version>8.19.3</npm.version>
4747
<yarn.version>1.22.19</yarn.version>
4848
</properties>
4949
<dependencyManagement>
@@ -165,16 +165,6 @@
165165
</exclusion>
166166
</exclusions>
167167
</dependency>
168-
<dependency>
169-
<groupId>org.jenkins-ci.ui</groupId>
170-
<artifactId>ace-editor</artifactId>
171-
<exclusions>
172-
<exclusion> <!-- TODO remove when ace-editor is refreshed -->
173-
<groupId>javax.servlet</groupId>
174-
<artifactId>servlet-api</artifactId>
175-
</exclusion>
176-
</exclusions>
177-
</dependency>
178168
<dependency>
179169
<groupId>com.cloudbees</groupId>
180170
<artifactId>diff4j</artifactId>

plugin/src/main/webapp/snippets/workflow.js renamed to plugin/src/main/js/snippets/workflow.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import ace from "ace-builds/src-noconflict/ace";
12
ace.define("ace/snippets/groovy",["require","exports","module"], function(require, exports, module) {
23
"use strict";
34

plugin/src/main/js/workflow-editor.js

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
import $ from 'jquery';
2-
import jenkinsJSModules from 'jenkins-js-modules';
32
// Polyfill for window.requestAnimationFrame
43
import 'raf/polyfill';
54
// Import the resizable module to allow the textarea to be expanded
65
import 'jquery-ui/ui/widgets/resizable';
76
import { addSamplesWidget } from './samples';
87

8+
// Import ACE
9+
import ace from "ace-builds/src-noconflict/ace";
10+
import "ace-builds/src-noconflict/ext-language_tools";
11+
import "ace-builds/src-noconflict/mode-groovy";
12+
import "ace-builds/src-noconflict/theme-tomorrow";
13+
14+
// Import custom snippets
15+
import "./snippets/workflow";
16+
917
var editorIdCounter = 0;
1018

11-
// The Jenkins 'ace-editor:ace-editor-122' plugin doesn't support a synchronous
12-
// require option. This is because of how the ACE editor is written. So, we need
13-
// to use lower level jenkins-js-modules async 'import' to get a handle on a
14-
// specific version of ACE, from which we create an editor instance for workflow.
15-
jenkinsJSModules.import('ace-editor:ace-editor-122')
16-
.onFulfilled(function (acePack) {
1719
$('.workflow-editor-wrapper').each(function() {
1820
initEditor($(this));
1921
});
@@ -30,24 +32,18 @@ jenkinsJSModules.import('ace-editor:ace-editor-122')
3032
var editorId = 'workflow-editor-' + editorIdCounter;
3133
aceContainer.attr('id', editorId);
3234

33-
// The 'ace-editor:ace-editor-122' plugin supplies an "ACEPack" object.
34-
// ACEPack understands the hardwired async nature of the ACE impl and so
35-
// provides some async ACE script loading functions.
36-
37-
acePack.edit(editorId, function() {
38-
var ace = acePack.ace;
39-
var editor = this.editor;
35+
var editor = ace.edit(editorId);
4036

4137
// Attach the ACE editor instance to the element. Useful for testing.
4238
var $wfEditor = $('#' + editorId);
4339
$wfEditor.get(0).aceEditor = editor;
4440

45-
acePack.addPackOverride('snippets/groovy.js', '../workflow-cps/snippets/workflow.js');
41+
// https://stackoverflow.com/a/66923593
42+
var snippetManager = ace.require('ace/snippets').snippetManager;
43+
var snippetContent = ace.require('ace/snippets/groovy').snippetText;
44+
var snippets = snippetManager.parseSnippetFile(snippetContent);
45+
snippetManager.register(snippets, 'groovy');
4646

47-
acePack.addScript('ext-language_tools.js', function() {
48-
ace.require("ace/ext/language_tools");
49-
50-
editor.$blockScrolling = Infinity;
5147
editor.session.setMode("ace/mode/groovy");
5248
editor.setTheme("ace/theme/tomorrow");
5349
editor.setAutoScrollEditorIntoView(true);
@@ -60,7 +56,7 @@ jenkinsJSModules.import('ace-editor:ace-editor-122')
6056
});
6157

6258
editor.setValue(textarea.val(), 1);
63-
editor.getSession().on('change', function() {
59+
editor.getSession().on('change', function(delta) {
6460
textarea.val(editor.getValue());
6561
showSamplesWidget();
6662
});
@@ -108,7 +104,6 @@ jenkinsJSModules.import('ace-editor:ace-editor-122')
108104
}
109105
}
110106
showSamplesWidget();
111-
});
112107

113108
// Make the editor resizable using jQuery UI resizable (http://api.jqueryui.com/resizable).
114109
// ACE Editor doesn't have this as a config option.
@@ -129,9 +124,7 @@ jenkinsJSModules.import('ace-editor:ace-editor-122')
129124
})
130125
},
131126
});
132-
});
133127

134128
wrapper.show();
135129
textarea.hide();
136130
}
137-
});

plugin/yarn.lock

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1064,6 +1064,11 @@
10641064
version "4.2.2"
10651065
resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
10661066

1067+
ace-builds@^1.15.0:
1068+
version "1.15.0"
1069+
resolved "https://registry.yarnpkg.com/ace-builds/-/ace-builds-1.15.0.tgz#e4e5eee17a1d3d17fc92c1207bbc30f185f260cc"
1070+
integrity sha512-L1RXgqxDvzbJ7H8Y2v9lb4kHaZRn5JNTECG+oZTH2EDewMmpQMLDC4GnFKIh3+xb/gk2nVPO7gGwpTYPw91QzA==
1071+
10671072
acorn-import-assertions@^1.7.6:
10681073
version "1.8.0"
10691074
resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9"
@@ -1872,12 +1877,6 @@ isobject@^3.0.1:
18721877
version "3.0.1"
18731878
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
18741879

1875-
1876-
version "1.3.0"
1877-
resolved "https://registry.yarnpkg.com/jenkins-js-modules/-/jenkins-js-modules-1.3.0.tgz#d1872a0917a7b4bcae216a598ea7076f874c49be"
1878-
dependencies:
1879-
window-handle "0.0.6"
1880-
18811880
jest-worker@^27.4.5:
18821881
version "27.5.1"
18831882
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0"
@@ -2726,10 +2725,6 @@ wildcard@^2.0.0:
27262725
version "2.0.0"
27272726
resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec"
27282727

2729-
2730-
version "0.0.6"
2731-
resolved "https://registry.yarnpkg.com/window-handle/-/window-handle-0.0.6.tgz#f71cc52f8c21f337ae8785b71c8356e08a263c2e"
2732-
27332728
word-wrap@^1.2.3:
27342729
version "1.2.3"
27352730
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"

0 commit comments

Comments
 (0)