From 4d73ccbf9b63b3b5dc84e3447eefd9c1da9acd6a Mon Sep 17 00:00:00 2001 From: Tim Jacomb Date: Sat, 19 Aug 2023 20:58:41 +0100 Subject: [PATCH] Support system themes for Pipeline editor --- plugin/package.json | 2 +- plugin/pom.xml | 11 -------- .../workflow/cps/CpsFlowDefinition.java | 11 -------- .../workflow/cps/replay/ReplayAction.java | 7 ------ .../plugins/workflow/cps/view/ThemeUtil.java | 25 ------------------- plugin/src/main/js/workflow-editor.js | 18 ++++++++++--- .../cps/CpsFlowDefinition/config.jelly | 2 +- .../workflow/editor/workflow-editor.jelly | 5 +--- 8 files changed, 18 insertions(+), 63 deletions(-) delete mode 100644 plugin/src/main/java/org/jenkinsci/plugins/workflow/cps/view/ThemeUtil.java diff --git a/plugin/package.json b/plugin/package.json index 9c42ada0c..958571c82 100644 --- a/plugin/package.json +++ b/plugin/package.json @@ -8,7 +8,7 @@ "scripts": { "dev": "webpack --config webpack.dev.js", "prod": "webpack --config webpack.prod.js", - "start": "yarn dev -- --watch", + "start": "yarn dev --watch", "lint:js": "eslint src/main/js --ext js", "mvnbuild": "yarn prod", "mvntest": "yarn lint:js" diff --git a/plugin/pom.xml b/plugin/pom.xml index 4c79749ee..e3d9cf973 100644 --- a/plugin/pom.xml +++ b/plugin/pom.xml @@ -191,17 +191,6 @@ - - io.jenkins.plugins - theme-manager - true - - - io.jenkins.blueocean - blueocean-web - - - org.jenkins-ci.plugins scm-api diff --git a/plugin/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsFlowDefinition.java b/plugin/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsFlowDefinition.java index 88b787089..eea31e59e 100644 --- a/plugin/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsFlowDefinition.java +++ b/plugin/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsFlowDefinition.java @@ -37,21 +37,16 @@ import net.sf.json.JSONObject; import org.apache.commons.lang.StringUtils; import org.jenkinsci.plugins.workflow.cps.persistence.PersistIn; -import org.jenkinsci.plugins.workflow.cps.replay.ReplayAction; -import org.jenkinsci.plugins.workflow.cps.view.ThemeUtil; import org.jenkinsci.plugins.workflow.flow.DurabilityHintProvider; import org.jenkinsci.plugins.workflow.flow.FlowDefinition; import org.jenkinsci.plugins.workflow.flow.FlowDefinitionDescriptor; import org.jenkinsci.plugins.workflow.flow.FlowDurabilityHint; import org.jenkinsci.plugins.workflow.flow.FlowExecutionOwner; import org.jenkinsci.plugins.workflow.flow.GlobalDefaultFlowDurabilityLevel; -import org.kohsuke.accmod.Restricted; -import org.kohsuke.accmod.restrictions.DoNotUse; import org.kohsuke.stapler.AncestorInPath; import org.kohsuke.stapler.DataBoundConstructor; import java.io.IOException; -import java.util.Arrays; import java.util.List; import net.sf.json.JSON; @@ -184,10 +179,4 @@ public JSON doCheckScriptCompile(@AncestorInPath Item job, @QueryParameter Strin } } - - /** @see ReplayAction#getTheme */ - @Restricted(DoNotUse.class) - /* accessible to Jelly */ public String getTheme() { - return ThemeUtil.getTheme(); - } } diff --git a/plugin/src/main/java/org/jenkinsci/plugins/workflow/cps/replay/ReplayAction.java b/plugin/src/main/java/org/jenkinsci/plugins/workflow/cps/replay/ReplayAction.java index ce718728a..a92696abe 100644 --- a/plugin/src/main/java/org/jenkinsci/plugins/workflow/cps/replay/ReplayAction.java +++ b/plugin/src/main/java/org/jenkinsci/plugins/workflow/cps/replay/ReplayAction.java @@ -70,7 +70,6 @@ import org.acegisecurity.AccessDeniedException; import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition; import org.jenkinsci.plugins.workflow.cps.CpsFlowExecution; -import org.jenkinsci.plugins.workflow.cps.view.ThemeUtil; import org.jenkinsci.plugins.workflow.flow.FlowExecution; import org.jenkinsci.plugins.workflow.flow.FlowExecutionOwner; import org.kohsuke.accmod.Restricted; @@ -200,12 +199,6 @@ private ReplayAction(Run run) { return run; } - /** @see CpsFlowDefinition#getTheme */ - @Restricted(DoNotUse.class) - /* accessible to Jelly */ public String getTheme() { - return ThemeUtil.getTheme(); - } - @Restricted(DoNotUse.class) @RequirePOST public void doRun(StaplerRequest req, StaplerResponse rsp) throws ServletException, IOException { diff --git a/plugin/src/main/java/org/jenkinsci/plugins/workflow/cps/view/ThemeUtil.java b/plugin/src/main/java/org/jenkinsci/plugins/workflow/cps/view/ThemeUtil.java deleted file mode 100644 index eaf91e77c..000000000 --- a/plugin/src/main/java/org/jenkinsci/plugins/workflow/cps/view/ThemeUtil.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.jenkinsci.plugins.workflow.cps.view; - -import io.jenkins.plugins.thememanager.Theme; -import io.jenkins.plugins.thememanager.ThemeManagerPageDecorator; -import org.kohsuke.accmod.Restricted; -import org.kohsuke.accmod.restrictions.NoExternalUse; - -@Restricted(NoExternalUse.class) -public final class ThemeUtil { - - private ThemeUtil() { - // Suppress default constructor for noninstantiability - throw new AssertionError(); - } - - public static String getTheme() { - try { - Theme theme = ThemeManagerPageDecorator.get().findTheme(); - return theme.getProperty("ace-editor", "theme").orElse("tomorrow"); - } catch (LinkageError e) { - // Optional plugin not installed - return "tomorrow"; - } - } -} diff --git a/plugin/src/main/js/workflow-editor.js b/plugin/src/main/js/workflow-editor.js index 7a8f5842f..81da7098c 100644 --- a/plugin/src/main/js/workflow-editor.js +++ b/plugin/src/main/js/workflow-editor.js @@ -16,6 +16,11 @@ import "./snippets/workflow"; var editorIdCounter = 0; +function setTheme(editor) { + const theme = window.getThemeManagerProperty('ace-editor', 'theme') || 'tomorrow' + editor.setTheme("ace/theme/" + theme); +} + $(function() { $('.workflow-editor-wrapper').each(function() { initEditor($(this)); @@ -44,10 +49,17 @@ $(function() { var snippetContent = ace.require('ace/snippets/groovy').snippetText; var snippets = snippetManager.parseSnippetFile(snippetContent); snippetManager.register(snippets, 'groovy'); - editor.session.setMode("ace/mode/groovy"); - var theme = aceContainer.attr("theme") === "tomorrow_night" ? "tomorrow_night" : "tomorrow"; - editor.setTheme("ace/theme/" + theme); + if (window.getThemeManagerProperty) { + setTheme(editor); + + if (window.isSystemRespectingTheme) { + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => { + setTheme(editor) + }); + } + + } editor.setAutoScrollEditorIntoView(true); editor.setOption("minLines", 20); // enable autocompletion and snippets diff --git a/plugin/src/main/resources/org/jenkinsci/plugins/workflow/cps/CpsFlowDefinition/config.jelly b/plugin/src/main/resources/org/jenkinsci/plugins/workflow/cps/CpsFlowDefinition/config.jelly index 6be9df79c..c075a1fd2 100644 --- a/plugin/src/main/resources/org/jenkinsci/plugins/workflow/cps/CpsFlowDefinition/config.jelly +++ b/plugin/src/main/resources/org/jenkinsci/plugins/workflow/cps/CpsFlowDefinition/config.jelly @@ -26,7 +26,7 @@ - + diff --git a/plugin/src/main/resources/org/jenkinsci/plugins/workflow/editor/workflow-editor.jelly b/plugin/src/main/resources/org/jenkinsci/plugins/workflow/editor/workflow-editor.jelly index 62f424ff6..ff266c184 100644 --- a/plugin/src/main/resources/org/jenkinsci/plugins/workflow/editor/workflow-editor.jelly +++ b/plugin/src/main/resources/org/jenkinsci/plugins/workflow/editor/workflow-editor.jelly @@ -5,9 +5,6 @@ The script. - - The ACE editor theme. - @@ -17,7 +14,7 @@