mirror of
				https://github.com/node-red/node-red.git
				synced 2025-03-01 10:36:34 +00:00 
			
		
		
		
	Merge branch 'dev' of github.com:node-red/node-red into dev
This commit is contained in:
		| @@ -253,6 +253,9 @@ module.exports = { | ||||
|                     theme.page = theme.page || {_:{}} | ||||
|                     theme.page._.scripts = scriptFiles.concat(theme.page._.scripts || []) | ||||
|                 } | ||||
|                 if(theme.codeEditor) { | ||||
|                     theme.codeEditor.options = Object.assign({}, themePlugin.monacoOptions, theme.codeEditor.options); | ||||
|                 } | ||||
|             } | ||||
|             activeThemeInitialised = true; | ||||
|         } | ||||
|   | ||||
| @@ -54,6 +54,7 @@ RED.editor.codeEditor.monaco = (function() { | ||||
|     var initialised = false; | ||||
|     const type = "monaco"; | ||||
|     const monacoThemes = ["vs","vs-dark","hc-black"]; //TODO: consider setting hc-black autmatically based on acessability? | ||||
|     let userSelectedTheme; | ||||
|  | ||||
|     //TODO: get from externalModules.js  For now this is enough for feature parity with ACE (and then some). | ||||
|     const knownModules = { | ||||
| @@ -181,19 +182,35 @@ RED.editor.codeEditor.monaco = (function() { | ||||
|         var editorSettings = RED.editor.codeEditor.settings || {}; | ||||
|         var editorOptions = editorSettings.options || {}; | ||||
|  | ||||
|         if (editorOptions.theme) { | ||||
|             if (!monacoThemes.includes(editorOptions.theme)) { | ||||
|                 var customTheme = 'vendor/monaco/dist/theme/' + editorOptions.theme + '.json'; | ||||
|                 $.get(customTheme, function (theme) { | ||||
|                     monacoThemes.push(editorOptions.theme);//add to list of loaded themes | ||||
|                     if ((theme.rules && Array.isArray(theme.rules)) || theme.colors) { | ||||
|                         monaco.editor.defineTheme(editorOptions.theme, theme); | ||||
|                         monaco.editor.setTheme(editorOptions.theme); | ||||
|         //if editorOptions.theme is an object (set in theme.js context()), use the plugin theme name as the monaco theme name | ||||
|         //if editorOptions.theme is a string, it should be the name of a pre-set theme, load that | ||||
|         try { | ||||
|             const addTheme = function (themeThemeName, theme) { | ||||
|                 if ((theme.rules && Array.isArray(theme.rules)) || theme.colors) { | ||||
|                     monacoThemes.push(themeThemeName); //add to list of loaded themes | ||||
|                     monaco.editor.defineTheme(themeThemeName, theme); | ||||
|                     monaco.editor.setTheme(themeThemeName); | ||||
|                     userSelectedTheme = themeThemeName; | ||||
|                 } | ||||
|             }; | ||||
|             if (editorOptions.theme) { | ||||
|                 if (typeof editorOptions.theme == "object" && RED.settings.editorTheme.theme) { | ||||
|                     let themeThemeName = editorOptions.theme.name || RED.settings.editorTheme.theme; | ||||
|                     addTheme(themeThemeName, editorOptions.theme); | ||||
|                 } else if (typeof editorOptions.theme == "string") { | ||||
|                     let themeThemeName = editorOptions.theme; | ||||
|                     if (!monacoThemes.includes(themeThemeName)) { | ||||
|                         $.get('vendor/monaco/dist/theme/' + themeThemeName + '.json', function (theme) { | ||||
|                             addTheme(themeThemeName, theme); | ||||
|                         }); | ||||
|                     } | ||||
|                 }); | ||||
|                 } | ||||
|             } | ||||
|         } catch (error) { | ||||
|             console.warn(error); | ||||
|         } | ||||
|  | ||||
|  | ||||
|         //Helper function to simplify snippet setup | ||||
|         function createMonacoCompletionItem(label, insertText, documentation, range, kind) { | ||||
|             if (Array.isArray(documentation)) { documentation = documentation.join("\n"); } | ||||
| @@ -744,6 +761,10 @@ RED.editor.codeEditor.monaco = (function() { | ||||
|         var editorOptions = $.extend({}, editorSettings.options, options); | ||||
|         editorOptions.language = convertAceModeToMonacoLang(options.mode); | ||||
|  | ||||
|         if(userSelectedTheme) { | ||||
|             editorOptions.theme = userSelectedTheme;//use user selected theme for this session | ||||
|         } | ||||
|  | ||||
|         //by default, set javascript editors to text mode. | ||||
|         //when element becomes visible, it will be (re) set to javascript mode | ||||
|         //this is to ensure multiple editors sharing the model dont present its | ||||
| @@ -1169,7 +1190,10 @@ RED.editor.codeEditor.monaco = (function() { | ||||
|             return { row: p.lineNumber-1, column: p.column-1 }; | ||||
|         } | ||||
|  | ||||
|         ed.setTheme = monaco.editor.setTheme; | ||||
|         ed.setTheme = function(theme) { | ||||
|             monaco.editor.setTheme(theme); | ||||
|             userSelectedTheme = theme;//remember users choice for this session | ||||
|         } | ||||
|  | ||||
|         ed.on = function (name, cb) { | ||||
|             switch (name) { | ||||
|   | ||||
| @@ -86,6 +86,12 @@ | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     <div class="form-row"> | ||||
|         <input type="checkbox" id="node-input-senderr" style="display: inline-block; width: auto; vertical-align: top;"> | ||||
|         <label for="node-input-senderr" style="width: auto" data-i18n="httpin.senderr"></label> | ||||
|     </div> | ||||
|  | ||||
|  | ||||
|     <div class="form-row"> | ||||
|         <label for="node-input-ret"><i class="fa fa-arrow-left"></i> <span data-i18n="httpin.label.return"></span></label> | ||||
|         <select type="text" id="node-input-ret" style="width:70%;"> | ||||
| @@ -114,7 +120,8 @@ | ||||
|             tls: {type:"tls-config",required: false}, | ||||
|             persist: {value:false}, | ||||
|             proxy: {type:"http proxy",required: false}, | ||||
|             authType: {value: ""} | ||||
|             authType: {value: ""}, | ||||
|             senderr: {value: false} | ||||
|         }, | ||||
|         credentials: { | ||||
|             user: {type:"text"}, | ||||
|   | ||||
| @@ -72,6 +72,7 @@ in your Node-RED user directory (${RED.settings.userDir}). | ||||
|         var paytoqs = false; | ||||
|         var paytobody = false; | ||||
|         var redirectList = []; | ||||
|         var sendErrorsToCatch = n.senderr; | ||||
|  | ||||
|         var nodeHTTPPersistent = n["persist"]; | ||||
|         if (n.tls) { | ||||
| @@ -537,10 +538,16 @@ in your Node-RED user directory (${RED.settings.userDir}). | ||||
|                 nodeSend(msg); | ||||
|                 nodeDone(); | ||||
|             }).catch(err => { | ||||
|                 if(err.code === 'ETIMEDOUT' || err.code === 'ESOCKETTIMEDOUT') { | ||||
|                 // Pre 2.1, any errors would be sent to both Catch node and sent on as normal. | ||||
|                 // This is not ideal but is the legacy behaviour of the node. | ||||
|                 // 2.1 adds the 'senderr' option, if set to true, will *only* send errors | ||||
|                 // to Catch nodes. If false, it still does both behaviours. | ||||
|                 // TODO: 3.0 - make it one or the other. | ||||
|  | ||||
|                 if (err.code === 'ETIMEDOUT' || err.code === 'ESOCKETTIMEDOUT') { | ||||
|                     node.error(RED._("common.notification.errors.no-response"), msg); | ||||
|                     node.status({fill:"red", shape:"ring", text:"common.notification.errors.no-response"}); | ||||
|                 }else{ | ||||
|                 } else { | ||||
|                     node.error(err,msg); | ||||
|                     node.status({fill:"red", shape:"ring", text:err.code}); | ||||
|                 } | ||||
| @@ -549,7 +556,9 @@ in your Node-RED user directory (${RED.settings.userDir}). | ||||
|                 if (node.metric() && timingLog) { | ||||
|                     emitTimingMetricLog(err.timings, msg); | ||||
|                 } | ||||
|                 nodeSend(msg); | ||||
|                 if (!sendErrorsToCatch) { | ||||
|                     nodeSend(msg); | ||||
|                 } | ||||
|                 nodeDone(); | ||||
|             }); | ||||
|         }); | ||||
|   | ||||
| @@ -486,6 +486,7 @@ | ||||
|         "proxy-config": "Proxy Configuration", | ||||
|         "use-proxyauth": "Use proxy authentication", | ||||
|         "noproxy-hosts": "Ignore hosts", | ||||
|         "senderr": "Only send non-2xx responses to Catch node", | ||||
|         "utf8": "a UTF-8 string", | ||||
|         "binary": "a binary buffer", | ||||
|         "json": "a parsed JSON object", | ||||
|   | ||||
		Reference in New Issue
	
	Block a user