diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8f3c8a6ce..85fc1f92a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,6 +5,9 @@ on: release: types: [published] +permissions: + contents: read + jobs: generate: name: 'Update node-red-docker image' diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 0db909da6..b7f54c5f1 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -6,8 +6,14 @@ on: pull_request: branches: [ master, dev ] +permissions: + contents: read + jobs: build: + permissions: + checks: write # for coverallsapp/github-action to create new checks + contents: read # for actions/checkout to fetch code runs-on: ubuntu-latest strategy: matrix: diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c6f52aeb..872c40e7f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,127 @@ +#### 3.1.0-beta.1: Beta Release + +Editor + + - NEW: Locking Flows (#3938) @knolleary + - NEW: Improve UX around hiding flows via context menu (#3930) @knolleary + - NEW: Add support for inline image in markdown editor by drag and drop of an image file (#4006) @HiroyasuNishiyama + - NEW: Add support for mermaid diagram to markdown editor (#4007) @HiroyasuNishiyama + - NEW: Support uri fragments for nodes and groups including edit support (#3870) @knolleary + + - Remember compact/pretty flow export user choice (#3974) @Steve-Mcl + - fix .red-ui-notification class (#4035) @xiaobinqt + - Fix border radius on Modules list header (#4038) @bonanitech + - fix workspace reference error in case of empty tabs (#4029) @HiroyasuNishiyama + - Disable delete tab menu when single tab exists (#4030) @HiroyasuNishiyama + - Disable hide all menu if all tabs hidden (#4031) @HiroyasuNishiyama + - fix hide subflow tooltip (#4033) @HiroyasuNishiyama + - Fix disabled menu items in project feature (#4027) @kazuhitoyokoi + - Let themes change radialMenu text colors (#3995) @bonanitech + - Add Japanese translations for v3.0.3 (#4012) @kazuhitoyokoi + - Add Japanese translation for v3.1.0-beta.0 (#3997) @kazuhitoyokoi + - Add Japanese translation for v3.1.0-beta.0 (#3916) @kazuhitoyokoi + - Hide subflow category after deleting subflow (#3980) @kazuhitoyokoi + - Prevent dbl-click opening node edit dialog with text selected (#3970) @knolleary + - Handle replacing unknown node inside group or subflow (#3921) @knolleary + - Fix #3939, red border red-ui-typedInput-container (#3949) @Steveorevo + - i18n item URL copy notification & add Japanese message (#3946) @HiroyasuNishiyama + - add Japanese message for item url copy actions (#3947) @HiroyasuNishiyama + - Fix autocomplete entry for responseUrl (#3884) @knolleary + - Fix Japanese translation for JSONata editor (#3872) @HiroyasuNishiyama + - Fix search type with spaces (#3841) @Steve-Mcl + - Fix error hanndling of JSONata expression editor for extended functions (#3871) @HiroyasuNishiyama + - Add button type to the adding SSH key button (#3866) @kazuhitoyokoi + - Check radio button as default in project dialog (#3879) @kazuhitoyokoi + - Add $clone as supported function (#3874) @HiroyasuNishiyama + - Env var jsonata (#3807) @HiroyasuNishiyama + - Add Japanese translation for v3.0.2 (#3852) @kazuhitoyokoi + +Runtime + + - NEW: Add global environment variable feature (#3941) @HiroyasuNishiyama + - Force IPv4 name resolution to have priority (#4019) @dceejay + - Fix async loading of modules containing both nodes and plugins (#3999) @knolleary + - Use main branch as default in project feature (#4036) @kazuhitoyokoi + - Rename package var to avoid strict mode error (#4020) @knolleary + - Fix typos in settings.js (#4013) @ypid + - Ensure credentials object is removed before returning node in getFlow request (#3971) @knolleary + - Ignore commit error in project feature (#3987) @kazuhitoyokoi + - Update dependencies (#3969) @knolleary + - Add check that node sends object rather than primitive type (#3909) @knolleary + - Ensure key_path is quoted in GIT_SSH_COMMAND in case of spaces in pathname (#3912) @knolleary + - Fix nodesDir scan when node package has js/html in sub dir to package.json (#3867) @Steve-Mcl + - Fix file permissions (#3917) @kazuhitoyokoi + - ci: add minimum GitHub token permissions for workflows (#3907) @boahc077 + +Nodes + + - Catch: fix typo in catch.html (#3965) @we11adam + - Change: Fix change node overwriting msg with itself (#3899) @dceejay + - Comment node: Clarify where the text will appear (#4004) @dirkjanfaber + - CSV: change replace to replaceAll (#3990) @dceejay + - CSV node: check header properties for ' and " (#3920) @dceejay + - CSV: Fix for CSV undefined property (#3906) @dceejay + - Delay: let delay node handle both flush then reset (#3898) @dceejay + - Function: Limit number of ports in function node (#3886) @kazuhitoyokoi + - Function: Remove dot from variable name for external module in function node (#3880) @kazuhitoyokoi + - Function: add function node monaco types util and promisify (#3868) @Steve-Mcl + - HTTP In: Ensure msg.req.headers is enumerable (#3908) @knolleary + - HTTP Request: Support form-data arrays (#3991) @hardillb + - HTTP Request: Fix httprequest tests to be more lenient on error message (#3922) @knolleary + - HTTP Request: Add missing property to node object HTTPRequest (#3842) @hardillb + - HTTP Request/Response: Support sortable list on property UI of http request and http response nodes (#3857) @kazuhitoyokoi + - HTTP Response: Ensure statusCode is a number (#3894) @hardillb + - Inject: Allow Inject node to work with async context stores (#4021) @knolleary + - Join/Batch: Add count to join and batch node labels (#4028) @dceejay + - MQTT: Fix birth topic handling in MQTT node (#3905) @Steve-Mcl + - MQTT: Fix pull-down menus of MQTT configuration node (#3890) @kazuhitoyokoi + - MQTT: Prevent invalid mqtt birth topic crashing node-red (#3869) @Steve-Mcl + - MQTT: ensure sessionExpiry(Interval) is applied (#3840) @Steve-Mcl + - MQTT: Fix mqtt nodes not reconnecting on modified-flows deploy (#3992) @knolleary + - MQTT: fix single subscription mqtt node status (#3966) @Steve-Mcl + - Range: Add drop mode to range node (#3935) @dceejay + - Remove done from describe (#3873) @HiroyasuNishiyama + - Split node: avoid duplicate done call for buffer split (#4000) @knolleary + - Status: Fix typo in 25-status.html (#3981) @kazuhitoyokoi + - TCP Node: ensure newline substitution applies to whole message (#4009) @dceejay + - Template: Add information about environment variable to template node (#3882) @kazuhitoyokoi + - Trigger: Hide trigger node repeat send option if sending nothing (#4023) @dceejay + - Watch: fix watch node test on MacOS/ARM (#3942) @HiroyasuNishiyama + +#### 3.0.2: Maintenance Release + +Editor + + - Fix workspace chart bottom property (#3812) @bonanitech + - Update german translation (#3802) @Dennis14e + - Support color reset to the default in subflow and group (#3801) @kazuhitoyokoi + - Allow generateNodeNames to handle names containing regex control chars (#3817) @knolleary + - Hide scrollbars until they're needed (#3808) @bonanitech + - Include junctions/groups when exporting subflows plus related fixes (#3816) @knolleary + - remove console.log (#3820) @Steve-Mcl + +Runtime + + - Register subflow module instance node with parent flow (#3818) @knolleary + +Nodes + + - HTTP Request: Allow HTTP Headers not in spec (#3776) @hardillb + +#### 3.0.1: Maintenance Release + +Editor + + - Allow codeEditor theme to be set even if `codeEditor` is not set in settings.js (#3794) @Steve-Mcl + - Sys info (diagnostics report) amendments (#3793) @Steve-Mcl + - Allow `mode` and `title` to be omitted in `options` argument for `createEditor` (#3791) @Steve-Mcl + - Fix focus issues (#3789) @Steve-Mcl + - Ensure all typedInput buttons have button type set (#3788) @knolleary + - Do not flag hasUsers=false nodes as unused in search (#3787) @knolleary + - Properly position quick-add dialog in all cases (#3786) @knolleary + - Ensure quick-add dialog does not obscure ghost node when shifted (#3785) @knolleary + - Remove use of Object.hasOwn (#3784) @knolleary + #### 3.0.0: Milestone Release Editor diff --git a/Gruntfile.js b/Gruntfile.js index 2f81da923..dcb96a2c0 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -151,6 +151,7 @@ module.exports = function(grunt) { "packages/node_modules/@node-red/editor-client/src/js/font-awesome.js", "packages/node_modules/@node-red/editor-client/src/js/history.js", "packages/node_modules/@node-red/editor-client/src/js/validators.js", + "packages/node_modules/@node-red/editor-client/src/js/ui/mermaid.js", "packages/node_modules/@node-red/editor-client/src/js/ui/utils.js", "packages/node_modules/@node-red/editor-client/src/js/ui/common/editableList.js", "packages/node_modules/@node-red/editor-client/src/js/ui/common/treeList.js", @@ -169,6 +170,7 @@ module.exports = function(grunt) { "packages/node_modules/@node-red/editor-client/src/js/ui/diagnostics.js", "packages/node_modules/@node-red/editor-client/src/js/ui/diff.js", "packages/node_modules/@node-red/editor-client/src/js/ui/keyboard.js", + "packages/node_modules/@node-red/editor-client/src/js/ui/env-var.js", "packages/node_modules/@node-red/editor-client/src/js/ui/workspaces.js", "packages/node_modules/@node-red/editor-client/src/js/ui/statusBar.js", "packages/node_modules/@node-red/editor-client/src/js/ui/view.js", @@ -224,7 +226,7 @@ module.exports = function(grunt) { "node_modules/jsonata/jsonata-es5.min.js", "packages/node_modules/@node-red/editor-client/src/vendor/jsonata/formatter.js", "packages/node_modules/@node-red/editor-client/src/vendor/ace/ace.js", - "packages/node_modules/@node-red/editor-client/src/vendor/ace/ext-language_tools.js", + "packages/node_modules/@node-red/editor-client/src/vendor/ace/ext-language_tools.js" ], // "packages/node_modules/@node-red/editor-client/public/vendor/vendor.css": [ // // TODO: resolve relative resource paths in @@ -233,6 +235,9 @@ module.exports = function(grunt) { "packages/node_modules/@node-red/editor-client/public/vendor/ace/worker-jsonata.js": [ "node_modules/jsonata/jsonata-es5.min.js", "packages/node_modules/@node-red/editor-client/src/vendor/jsonata/worker-jsonata.js" + ], + "packages/node_modules/@node-red/editor-client/public/vendor/mermaid/mermaid.min.js": [ + "node_modules/mermaid/dist/mermaid.min.js" ] } } diff --git a/package.json b/package.json index b596e10b6..ad6ccd4db 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-red", - "version": "3.1.0-beta.0", + "version": "3.1.0-beta.1", "description": "Low-code programming for event-driven applications", "homepage": "http://nodered.org", "license": "Apache-2.0", @@ -26,13 +26,13 @@ } ], "dependencies": { - "acorn": "8.7.1", + "acorn": "8.8.1", "acorn-walk": "8.2.0", - "ajv": "8.11.0", - "async-mutex": "0.3.2", + "ajv": "8.11.2", + "async-mutex": "0.4.0", "basic-auth": "2.0.1", "bcryptjs": "2.4.3", - "body-parser": "1.20.0", + "body-parser": "1.20.1", "cheerio": "1.0.0-rc.10", "clone": "2.1.2", "content-type": "1.0.4", @@ -40,16 +40,16 @@ "cookie-parser": "1.4.6", "cors": "2.8.5", "cronosjs": "1.7.1", - "denque": "2.0.1", - "express": "4.18.1", + "denque": "2.1.0", + "express": "4.18.2", "express-session": "1.17.3", "form-data": "4.0.0", "fs-extra": "10.1.0", "got": "11.8.5", "hash-sum": "2.0.0", - "hpagent": "1.0.0", + "hpagent": "1.2.0", "https-proxy-agent": "5.0.1", - "i18next": "21.8.14", + "i18next": "21.10.0", "iconv-lite": "0.6.3", "is-utf8": "0.2.1", "js-yaml": "4.1.0", @@ -60,7 +60,7 @@ "memorystore": "1.6.7", "mime": "3.0.0", "moment": "2.29.4", - "moment-timezone": "0.5.34", + "moment-timezone": "0.5.39", "mqtt": "4.3.7", "multer": "1.4.5-lts.1", "mustache": "4.2.0", @@ -73,19 +73,19 @@ "passport-http-bearer": "1.0.1", "passport-oauth2-client-password": "0.1.2", "raw-body": "2.5.1", - "semver": "7.3.7", - "tar": "6.1.11", - "tough-cookie": "4.0.0", - "uglify-js": "3.16.2", + "semver": "7.3.8", + "tar": "6.1.12", + "tough-cookie": "4.1.2", + "uglify-js": "3.17.4", "uuid": "8.3.2", "ws": "7.5.6", "xml2js": "0.4.23" }, "optionalDependencies": { - "bcrypt": "5.0.1" + "bcrypt": "5.1.0" }, "devDependencies": { - "dompurify": "2.3.9", + "dompurify": "2.4.1", "grunt": "1.5.3", "grunt-chmod": "~1.1.1", "grunt-cli": "~1.4.3", @@ -108,13 +108,14 @@ "i18next-http-backend": "1.4.1", "jquery-i18next": "1.2.1", "jsdoc-nr-template": "github:node-red/jsdoc-nr-template", - "marked": "4.0.18", + "marked": "4.2.3", + "mermaid": "^9.3.0", "minami": "1.2.3", "mocha": "9.2.2", "node-red-node-test-helper": "^0.3.0", - "nodemon": "2.0.19", + "nodemon": "2.0.20", "proxy": "^1.0.2", - "sass": "1.53.0", + "sass": "1.56.1", "should": "13.2.3", "sinon": "11.1.2", "stoppable": "^1.1.0", diff --git a/packages/node_modules/@node-red/editor-api/lib/editor/theme.js b/packages/node_modules/@node-red/editor-api/lib/editor/theme.js index 7be8868d3..c21a7e6e7 100644 --- a/packages/node_modules/@node-red/editor-api/lib/editor/theme.js +++ b/packages/node_modules/@node-red/editor-api/lib/editor/theme.js @@ -327,9 +327,8 @@ module.exports = { themeContext.header.url = themePlugin.header.url || themeContext.header.url } } - if(theme.codeEditor) { - theme.codeEditor.options = Object.assign({}, themePlugin.monacoOptions, theme.codeEditor.options); - } + theme.codeEditor = theme.codeEditor || {} + theme.codeEditor.options = Object.assign({}, themePlugin.monacoOptions, theme.codeEditor.options); } activeThemeInitialised = true; } diff --git a/packages/node_modules/@node-red/editor-api/package.json b/packages/node_modules/@node-red/editor-api/package.json index dd7020e75..920104803 100644 --- a/packages/node_modules/@node-red/editor-api/package.json +++ b/packages/node_modules/@node-red/editor-api/package.json @@ -1,6 +1,6 @@ { "name": "@node-red/editor-api", - "version": "3.1.0-beta.0", + "version": "3.1.0-beta.1", "license": "Apache-2.0", "main": "./lib/index.js", "repository": { @@ -16,14 +16,14 @@ } ], "dependencies": { - "@node-red/util": "3.1.0-beta.0", - "@node-red/editor-client": "3.1.0-beta.0", + "@node-red/util": "3.1.0-beta.1", + "@node-red/editor-client": "3.1.0-beta.1", "bcryptjs": "2.4.3", - "body-parser": "1.20.0", + "body-parser": "1.20.1", "clone": "2.1.2", "cors": "2.8.5", "express-session": "1.17.3", - "express": "4.18.1", + "express": "4.18.2", "memorystore": "1.6.7", "mime": "3.0.0", "multer": "1.4.5-lts.1", @@ -35,6 +35,6 @@ "ws": "7.5.6" }, "optionalDependencies": { - "bcrypt": "5.0.1" + "bcrypt": "5.1.0" } } diff --git a/packages/node_modules/@node-red/editor-client/locales/de/editor.json b/packages/node_modules/@node-red/editor-client/locales/de/editor.json old mode 100755 new mode 100644 index 41fe1459a..93a2f5946 --- a/packages/node_modules/@node-red/editor-client/locales/de/editor.json +++ b/packages/node_modules/@node-red/editor-client/locales/de/editor.json @@ -105,7 +105,7 @@ "search": "Flows durchsuchen", "searchInput": "Flows durchsuchen", "subflows": "Subflow", - "createSubflow": "Subflow", + "createSubflow": "Hinzufügen", "selectionToSubflow": "Auswahl in Subflow umwandeln", "flows": "Flow", "add": "Hinzufügen", @@ -152,7 +152,8 @@ "zoom-in": "Vergrößern", "search-flows": "Flows durchsuchen", "search-prev": "Vorherige", - "search-next": "Nächste" + "search-next": "Nächste", + "search-counter": "\"__term__\" __result__ von __count__" }, "user": { "loggedInAs": "Angemeldet als __name__", @@ -168,7 +169,11 @@ } }, "notification": { - "warning": "Warnung: __message__", + "state": { + "flowsStopped": "Flows gestoppt", + "flowsStarted": "Flows gestartet" + }, + "warning": "Warnung: __message__", "warnings": { "undeployedChanges": "Node hat nicht übernommene (deploy) Änderungen", "nodeActionDisabled": "Node-Aktionen deaktiviert", @@ -177,15 +182,15 @@ "missing-modules": "

Flows angehalten aufgrund fehlender Module

", "safe-mode": "

Flows sind im abgesicherten Modus gestoppt.

Flows können bearbeitet und übernommen (deploy) werden, um sie neu zu starten.

", "restartRequired": "Node-RED muss neu gestartet werden, damit die Module nach Upgrade aktiviert werden", - "credentials_load_failed": "

Flows gestoppt, da die Berechtigungen nicht entschlüsselt werden konnten.

Die Datei mit dem Flow-Berechtigungen ist verschlüsselt, aber der Schlüssel des Projekts fehlt oder ist ungültig.

", - "credentials_load_failed_reset": "

Die Berechtigungen konnten nicht entschlüsselt werden.

Die Datei mit den Flow-Berechtigungen ist verschlüsselt, aber der Schlüssel des Projekts fehlt oder ist ungültig.

Die Datei mit den Flow-Berechtigungen wird bei der nächsten Übernahme (deploy) zurückgesetzt. Alle vorhandenen Flow-Berechtigungen werden gelöscht.

", + "credentials_load_failed": "

Flows gestoppt, da die Credentials nicht entschlüsselt werden konnten.

Die Datei mit den Flow-Credentials ist verschlüsselt, aber der Schlüssel des Projekts fehlt oder ist ungültig.

", + "credentials_load_failed_reset": "

Die Credentials konnten nicht entschlüsselt werden.

Die Datei mit den Flow-Credentials ist verschlüsselt, aber der Schlüssel des Projekts fehlt oder ist ungültig.

Die Datei mit den Flow-Credentials wird bei der nächsten Übernahme (deploy) zurückgesetzt. Alle vorhandenen Flow-Credentials werden gelöscht.

", "missing_flow_file": "

Die Flow-Datei des Projekts wurde nicht gefunden.

Das Projekt ist nicht mit einer Flow-Datei konfiguriert.

", "missing_package_file": "

Die Paket-Datei des Projekts wurde nicht gefunden.

In dem Projekt fehlt die 'package.json'-Datei.

", "project_empty": "

Das Projekt ist leer.

Soll ein Standardsatz an Projektdateien erstellen werden?
Andernfalls müssen die Dateien manuell außerhalb des Editors dem Projekt hinzugefügt werden.

", "project_not_found": "

Das Projekt '__project__' wurde nicht gefunden.

", "git_merge_conflict": "

Der automatische Merge der Änderungen ist fehlgeschlagen.

Die Merge-Konflikte müssen behoben und die Ergebnisse ins Repository übertragen werden (commit).

" }, - "error": "Fehler: __message__", + "error": "Fehler: __message__", "errors": { "lostConnection": "Verbindung zum Server verloren. Verbindung wird erneut hergestellt ...", "lostConnectionReconnect": "Verbindung zum Server verloren. Wiederherstellung der Verbindung in __time__s.", @@ -203,7 +208,7 @@ "pull": "Projekt '__project__' erneut geladen", "revert": "Änderungen im Projekt '__project__' rückgängig gemacht", "merge-complete": "Git-Merge abgeschlossen", - "setupCredentials": "Berechtigungen einrichten", + "setupCredentials": "Credentials einrichten", "setupProjectFiles": "Projektdateien einrichten", "no": "Nein, Danke", "createDefault": "Standardprojektdateien erstellen", @@ -211,7 +216,7 @@ }, "label": { "manage-project-dep": "Projektabhängigkeiten verwalten", - "setup-cred": "Berechtigungen einrichten", + "setup-cred": "Credentials einrichten", "setup-project": "Projektdateien einrichten", "create-default-package": "Standardpaketdatei erstellen", "no-thanks": "Nein, Danke", @@ -295,6 +300,10 @@ "modifiedFlowsDesc": "Übernimmt nur Flows, die geänderte Nodes enthalten", "modifiedNodes": "Geänderte Nodes", "modifiedNodesDesc": "Übernimmt nur Nodes, die sich geändert haben", + "startFlows": "Start", + "startFlowsDesc": "Flows starten", + "stopFlows": "Stop", + "stopFlowsDesc": "Flows stoppen", "restartFlows": "Flows neustarten", "restartFlowsDesc": "Startet die aktuell übernommenen Flows (ohne vorheriges Deploy)", "successfulDeploy": "Erfolgreich übernommen (deploy)", @@ -376,7 +385,7 @@ "confirmDelete": "Sind Sie sicher mit dem Löschen dieses Subflows?", "info": "Beschreibung", "category": "Kategorie", - "module": "Module", + "module": "Modul", "license": "Lizenz", "licenseNone": "Keine", "licenseOther": "Andere", @@ -434,7 +443,7 @@ "icon": "Icon", "inputType": "Eingangstyp", "selectType": "Wähle Typen ...", - "loadCredentials": "Lade Node-Berechtigungen", + "loadCredentials": "Lade Node-Credentials", "inputs": { "input": "Eingang", "select": "Auswahl", @@ -450,7 +459,7 @@ "json": "JSON", "bin": "buffer", "env": "Umgebungsvariable", - "cred": "Berechtigung" + "cred": "Credentials" }, "menu": { "input": "Eingang", @@ -470,7 +479,7 @@ "errors": { "scopeChange": "Wenn Sie den Geltungsbereich (scope) ändern, wird er für Nodes in anderen Flows nicht verfügbar sein", "invalidProperties": "Ungültige Eigenschaften:", - "credentialLoadFailed": "Laden der Node-Berechtigungen fehlgeschlagen" + "credentialLoadFailed": "Laden der Node-Credentials fehlgeschlagen" } }, "keyboard": { @@ -683,7 +692,8 @@ "showHelp": "Hilfe zeigen", "showInOutline": "Zeige im Editor", "showTopics": "Zeige Hilfethemen", - "noHelp": "Kein Hilfethema ausgewählt" + "noHelp": "Kein Hilfethema ausgewählt", + "changeLog": "Änderungsprotokoll" }, "config": { "name": "Konfigurations-Node", @@ -737,7 +747,7 @@ "addToProject": "Zu Projekt hinzufügen", "files": "Dateien", "flow": "Flow", - "credentials": "Berechtigungen", + "credentials": "Credentials", "package": "Paket", "packageCreate": "Datei wird erstellt beim Speichern der Änderungen", "fileNotExist": "Datei existiert nicht", @@ -750,7 +760,7 @@ "changeTheEncryptionKey": "Schlüssel ändern", "currentKey": "Aktueller Schlüssel", "newKey": "Neuer Schlüssel", - "credentialsAlert": "Dadurch werden alle vorhandenen Berechtigungen gelöscht", + "credentialsAlert": "Dadurch werden alle vorhandenen Credentials gelöscht", "versionControl": "Versionsverwaltung (Git)", "branches": "Branches", "noBranches": "Keine Branches", @@ -886,7 +896,7 @@ "date": "timestamp", "jsonata": "JSONata", "env": "Umgebungsvariable", - "cred": "Berechtigung" + "cred": "Credentials" } }, "editableList": { @@ -1026,7 +1036,7 @@ "passphrase": "Passphrase", "ssh-key-desc": "Bevor Sie ein Repository über SSH lokal klonen können, müssen Sie einen SSH-Schlüssel hinzufügen, um auf diesen zugreifen zu können", "ssh-key-add": "SSH-Schlüssel hinzufügen", - "credential-key": "Schlüssel für Berechtigungen", + "credential-key": "Schlüssel für Credentials", "cant-get-ssh-key": "Fehler! Der ausgewählte SSH-Schlüsselpfad kann nicht abgerufen werden", "already-exists2": "bereits vorhanden", "git-error": "Git-Fehler", @@ -1038,27 +1048,27 @@ "create": "Erstellen Sie Ihre Projektdateien", "desc0": "Ein Projekt enthält Ihre Flow-Dateien, eine README-Datei und die 'package.json'-Datei.", "desc1": "Es kann alle anderen Dateien enthalten, die im Git-Repository verwaltet werden sollen.", - "desc2": "Ihre vorhandenen Flow- und Berechtigungs-Dateien werden in das Projekt kopiert.", + "desc2": "Ihre vorhandenen Flow- und Credential-Dateien werden in das Projekt kopiert.", "flow-file": "Flow-Datei", - "credentials-file": "Datei mit Berechtigungen" + "credentials-file": "Datei mit Credentials" }, "encryption-config": { - "setup": "Einrichtung der Verschlüsselung Ihrer Datei mit den Berechtigungen", - "desc0": "Die Datei mit den Flow-Berechtigungen kann verschlüsselt werden, um ihren Inhalt zu schützen.", - "desc1": "Wenn Sie diese Berechtigungen in einem öffentlichen Repository speichern möchten, müssen Sie sie mit einen geheimen Schlüsselausdruck verschlüsseln.", - "desc2": "Die Datei mit den Flow-Berechtigungen ist derzeit nicht verschlüsselt.", + "setup": "Einrichtung der Verschlüsselung Ihrer Datei mit den Credentials", + "desc0": "Die Datei mit den Flow-Credentials kann verschlüsselt werden, um ihren Inhalt zu schützen.", + "desc1": "Wenn Sie diese Credentials in einem öffentlichen Repository speichern möchten, müssen Sie sie mit einen geheimen Schlüsselausdruck verschlüsseln.", + "desc2": "Die Datei mit den Flow-Credentials ist derzeit nicht verschlüsselt.", "desc3": "D.h. ihr Inhalt (z.B. Passwörter und Zugriffs-Tokens) kann von jedem mit Zugriff auf die Datei gelesen werden.", - "desc4": "Wenn Sie diese Berechtigungen in einen öffentlichen Repository speichern möchten, müssen Sie diese verschlüsseln, indem Sie einen geheimen Schlüsselausdruck eingeben.", - "desc5": "Ihre Datei mit den Flow-Berechtigungen wird derzeit mit dem Eintrag 'credentialSecret' Ihrer Einstellungsdatei als Schlüssel verschlüsselt.", - "desc6": "Die Datei mit den Flow-Berechtigungen wird derzeit mit einem vom System generierten Schlüssel verschlüsselt. Sie sollten einen neuen geheimen Schlüssel für dieses Projekt vorgeben.", + "desc4": "Wenn Sie diese Credentials in einen öffentlichen Repository speichern möchten, müssen Sie diese verschlüsseln, indem Sie einen geheimen Schlüsselausdruck eingeben.", + "desc5": "Ihre Datei mit den Flow-Credentials wird derzeit mit dem Eintrag 'credentialSecret' Ihrer Einstellungsdatei als Schlüssel verschlüsselt.", + "desc6": "Die Datei mit den Flow-Credentials wird derzeit mit einem vom System generierten Schlüssel verschlüsselt. Sie sollten einen neuen geheimen Schlüssel für dieses Projekt vorgeben.", "desc7": "Der Schlüssel wird separat von den Projektdateien gespeichert. Sie müssen den Schlüssel angeben, damit dieses Projekt auch in einem anderen Node-RED-System verwendet werden kann.", - "credentials": "Berechtigung", + "credentials": "Credentials", "enable": "Verschlüsselung aktivieren", "disable": "Verschlüsselung deaktivieren", "disabled": "deaktiviert", "copy": "Vorhandenen Schlüssel ersetzen", "use-custom": "Eigenen Schlüssel verwenden", - "desc8": "Die Datei mit den Berechtigungen wird nicht verschlüsselt, und ihr Inhalt kann leicht gelesen werden", + "desc8": "Die Datei mit den Credentials wird nicht verschlüsselt und ihr Inhalt kann leicht gelesen werden", "create-project-files": "Projektdateien erstellen", "create-project": "Projekt erstellen", "already-exists": "bereits vorhanden", @@ -1083,12 +1093,12 @@ "desc": "Beschreibung", "opt": "Optional", "flow-file": "Flow-Datei", - "credentials": "Berechtigungen", + "credentials": "Credentials", "enable-encryption": "Verschlüsselung aktivieren", "disable-encryption": "Verschlüsselung deaktivieren", "encryption-key": "Schlüssel", - "desc0": "Eine Floskel, mit der Sie Ihre Berechtigungen schützen", - "desc1": "Die Datei mit den Berechtigungen wird nicht verschlüsselt, und ihr Inhalt kann leicht gelesen werden", + "desc0": "Eine Ausdruck, mit der Sie Ihre Credentials schützen", + "desc1": "Die Datei mit den Credentials wird nicht verschlüsselt und ihr Inhalt kann leicht gelesen werden", "git-url": "Git-Repository-URL", "protocols": "https://, ssh:// oder file://", "auth-failed": "Authentifizierung fehlgeschlagen", @@ -1098,7 +1108,7 @@ "passphrase": "Passphrase", "desc2": "Bevor Sie ein Repository über SSH klonen können, müssen Sie einen SSH-Schlüssel hinzufügen, um auf diesen zu zugreifen", "add-ssh-key": "Einen SSH-Schlüssel hinzufügen", - "credentials-encryption-key": "Schlüssel für Berechtigungen", + "credentials-encryption-key": "Schlüssel für Credentials", "already-exists-2": "bereits vorhanden", "git-error": "Git-Fehler", "con-failed": "Verbindung fehlgeschlagen", @@ -1156,7 +1166,8 @@ "tourGuide": { "takeATour": "Tour starten", "start": "Start", - "next": "Nächste" + "next": "Nächste", + "welcomeTours": "Welcome Tours" }, "diagnostics": { "title": "System-Informationen" diff --git a/packages/node_modules/@node-red/editor-client/locales/de/infotips.json b/packages/node_modules/@node-red/editor-client/locales/de/infotips.json old mode 100755 new mode 100644 diff --git a/packages/node_modules/@node-red/editor-client/locales/de/jsonata.json b/packages/node_modules/@node-red/editor-client/locales/de/jsonata.json old mode 100755 new mode 100644 diff --git a/packages/node_modules/@node-red/editor-client/locales/en-US/editor.json b/packages/node_modules/@node-red/editor-client/locales/en-US/editor.json old mode 100755 new mode 100644 index 6dcbd1d75..6055c721f --- a/packages/node_modules/@node-red/editor-client/locales/en-US/editor.json +++ b/packages/node_modules/@node-red/editor-client/locales/en-US/editor.json @@ -53,8 +53,10 @@ "confirmDelete": "Confirm delete", "delete": "Are you sure you want to delete '__label__'?", "dropFlowHere": "Drop the flow here", + "dropImageHere": "Drop the image here", "addFlow": "Add flow", "addFlowToRight": "Add flow to the right", + "closeFlow": "Close flow", "hideFlow": "Hide flow", "hideOtherFlows": "Hide other flows", "showAllFlows": "Show all flows (__count__ hidden)", @@ -692,7 +694,8 @@ "globalConfig": "Global Configuration Nodes", "triggerAction": "Trigger action", "find": "Find in workspace", - "copyItemUrl": "Copy item url" + "copyItemUrl": "Copy item url", + "copyURL2Clipboard": "Copied url to clipboard" }, "help": { "name": "Help", @@ -945,6 +948,9 @@ "invalid-expr": "Invalid JSONata expression:\n __message__", "invalid-msg": "Invalid example JSON message:\n __message__", "context-unsupported": "Cannot test context functions\n $flowContext or $globalContext", + "env-unsupported": "Cannot test $env function", + "moment-unsupported": "Cannot test $moment function", + "clone-unsupported": "Cannot test $clone function", "eval": "Error evaluating expression:\n __message__" } }, @@ -990,7 +996,10 @@ "quote": "Quote", "link": "Link", "horizontal-rule": "Horizontal rule", - "toggle-preview": "Toggle preview" + "toggle-preview": "Toggle preview", + "mermaid": { + "summary": "Mermaid Diagram" + } }, "bufferEditor": { "title": "Buffer editor", @@ -1212,5 +1221,10 @@ "node": "Node", "junction": "Junction", "linkNodes": "Link Nodes" + }, + "env-var": { + "environment": "Environment", + "header": "Global Environment Variables", + "revert": "Revert" } } diff --git a/packages/node_modules/@node-red/editor-client/locales/en-US/infotips.json b/packages/node_modules/@node-red/editor-client/locales/en-US/infotips.json old mode 100755 new mode 100644 diff --git a/packages/node_modules/@node-red/editor-client/locales/en-US/jsonata.json b/packages/node_modules/@node-red/editor-client/locales/en-US/jsonata.json old mode 100755 new mode 100644 diff --git a/packages/node_modules/@node-red/editor-client/locales/ja/editor.json b/packages/node_modules/@node-red/editor-client/locales/ja/editor.json index fb3458eed..6e78b195f 100644 --- a/packages/node_modules/@node-red/editor-client/locales/ja/editor.json +++ b/packages/node_modules/@node-red/editor-client/locales/ja/editor.json @@ -53,8 +53,10 @@ "confirmDelete": "削除の確認", "delete": "本当に '__label__' を削除しますか?", "dropFlowHere": "ここにフローをドロップしてください", + "dropImageHere": "ここに画像ファイルをドロップしてください", "addFlow": "フローの追加", "addFlowToRight": "右側にフローを追加", + "closeFlow": "フローを閉じる", "hideFlow": "フローを非表示", "hideOtherFlows": "他のフローを非表示", "showAllFlows": "全てのフローを表示", @@ -68,7 +70,11 @@ "enabled": "有効", "disabled": "無効", "info": "詳細", - "selectNodes": "ノードをクリックして選択" + "selectNodes": "ノードをクリックして選択", + "enableFlow": "フローを有効化", + "disableFlow": "フローを無効化", + "moveToStart": "フローを先頭へ移動", + "moveToEnd": "フローを最後へ移動" }, "menu": { "label": { @@ -683,7 +689,9 @@ "empty": "空", "globalConfig": "グローバル設定ノード", "triggerAction": "アクションを実行", - "find": "ワークスペース内を検索" + "find": "ワークスペース内を検索", + "copyItemUrl": "要素のURLをコピー", + "copyURL2Clipboard": "URLをクリップボードにコピーしました" }, "help": { "name": "ヘルプ", @@ -935,8 +943,11 @@ "errors": { "invalid-expr": "不正なJSONata式:\n __message__", "invalid-msg": "不正なJSONメッセージ例:\n __message__", - "context-unsupported": "$flowContext や $globalContextの\nコンテキスト機能をテストできません", - "eval": "表現評価エラー:\n __message__" + "context-unsupported": "$flowContext や $globalContextの\nコンテキスト関数をテストできません", + "env-unsupported": "$env関数はテストできません", + "moment-unsupported": "$moment関数はテストできません", + "clone-unsupported": "$clone関数はテストできません", + "eval": "式評価エラー:\n __message__" } }, "monaco": { @@ -981,7 +992,10 @@ "quote": "引用", "link": "リンク", "horizontal-rule": "区切り線", - "toggle-preview": "プレビュー表示切替え" + "toggle-preview": "プレビュー表示切替え", + "mermaid": { + "summary": "Mermaid図" + } }, "bufferEditor": { "title": "バッファエディタ", @@ -1168,8 +1182,7 @@ "takeATour": "ツアーを開始", "start": "開始", "next": "次へ", - "welcomeTours": "ウェルカムツアー", - "tours": "ツアー" + "welcomeTours": "ウェルカムツアー" }, "diagnostics": { "title": "システム情報" @@ -1348,6 +1361,15 @@ "show-project-settings": "プロジェクト設定を表示", "show-version-control-tab": "バージョンコントロールタブを表示", "start-flows": "フローを開始", - "stop-flows": "フローを停止" + "stop-flows": "フローを停止", + "copy-item-url": "要素のURLをコピー", + "copy-item-edit-url": "要素の編集URLをコピー", + "move-flow-to-start": "フローを先頭に移動", + "move-flow-to-end": "フローを末尾に移動" + }, + "env-var": { + "environment": "環境変数", + "header": "大域環境変数", + "revert": "破棄" } } diff --git a/packages/node_modules/@node-red/editor-client/locales/ko/editor.json b/packages/node_modules/@node-red/editor-client/locales/ko/editor.json old mode 100755 new mode 100644 diff --git a/packages/node_modules/@node-red/editor-client/locales/ko/infotips.json b/packages/node_modules/@node-red/editor-client/locales/ko/infotips.json old mode 100755 new mode 100644 diff --git a/packages/node_modules/@node-red/editor-client/locales/ko/jsonata.json b/packages/node_modules/@node-red/editor-client/locales/ko/jsonata.json old mode 100755 new mode 100644 diff --git a/packages/node_modules/@node-red/editor-client/locales/ru/editor.json b/packages/node_modules/@node-red/editor-client/locales/ru/editor.json old mode 100755 new mode 100644 diff --git a/packages/node_modules/@node-red/editor-client/locales/ru/infotips.json b/packages/node_modules/@node-red/editor-client/locales/ru/infotips.json old mode 100755 new mode 100644 diff --git a/packages/node_modules/@node-red/editor-client/locales/ru/jsonata.json b/packages/node_modules/@node-red/editor-client/locales/ru/jsonata.json old mode 100755 new mode 100644 diff --git a/packages/node_modules/@node-red/editor-client/package.json b/packages/node_modules/@node-red/editor-client/package.json index dbcdb1ba5..2fcd5950b 100644 --- a/packages/node_modules/@node-red/editor-client/package.json +++ b/packages/node_modules/@node-red/editor-client/package.json @@ -1,6 +1,6 @@ { "name": "@node-red/editor-client", - "version": "3.1.0-beta.0", + "version": "3.1.0-beta.1", "license": "Apache-2.0", "repository": { "type": "git", diff --git a/packages/node_modules/@node-red/editor-client/src/js/nodes.js b/packages/node_modules/@node-red/editor-client/src/js/nodes.js index a7bfc1191..36bc2a7fa 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/nodes.js +++ b/packages/node_modules/@node-red/editor-client/src/js/nodes.js @@ -902,14 +902,7 @@ RED.nodes = (function() { var node; if (allNodes.hasTab(id)) { - removedNodes = allNodes.getNodes(id).filter(n => { - if (n.type === 'junction') { - removedJunctions.push(n) - return false - } else { - return true - } - }) + removedNodes = allNodes.getNodes(id).slice() } for (i in configNodes) { if (configNodes.hasOwnProperty(i)) { @@ -919,6 +912,7 @@ RED.nodes = (function() { } } } + removedJunctions = RED.nodes.junctions(id) for (i=0;i 0) { var reimportList = []; @@ -2824,6 +2823,12 @@ RED.nodes = (function() { } else { allNodes.removeNode(n); } + if (n.g) { + // reimporting a node *without* including its group object + // will cause the g property to be cleared. Cache it + // here so we can restore it + nodeGroupMap[n.id] = n.g + } reimportList.push(convertNode(n)); RED.events.emit('nodes:remove',n); }); @@ -2845,6 +2850,18 @@ RED.nodes = (function() { var newNodeMap = {}; result.nodes.forEach(function(n) { newNodeMap[n.id] = n; + if (nodeGroupMap[n.id]) { + // This node is in a group - need to substitute the + // node reference inside the group + n.g = nodeGroupMap[n.id] + const group = RED.nodes.group(n.g) + if (group) { + var index = group.nodes.findIndex(gn => gn.id === n.id) + if (index > -1) { + group.nodes[index] = n + } + } + } }); RED.nodes.eachLink(function(l) { if (newNodeMap.hasOwnProperty(l.source.id)) { diff --git a/packages/node_modules/@node-red/editor-client/src/js/red.js b/packages/node_modules/@node-red/editor-client/src/js/red.js index 114066d91..ce3b439e4 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/red.js +++ b/packages/node_modules/@node-red/editor-client/src/js/red.js @@ -348,6 +348,8 @@ var RED = (function() { loader.end() RED.notify($("

").text(message)); RED.sidebar.info.refresh() + RED.menu.setDisabled('menu-item-projects-open',false); + RED.menu.setDisabled('menu-item-projects-settings',false); }); }); return; @@ -775,6 +777,7 @@ var RED = (function() { RED.deploy.init(RED.settings.theme("deployButton",null)); RED.keyboard.init(buildMainMenu); + RED.envVar.init(); RED.nodes.init(); RED.runtime.init() @@ -793,7 +796,7 @@ var RED = (function() { $('

').appendTo(header); $('
'+ '
'+ - '
'+ + '
'+ '
'+ '
'+ '
'+ diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/clipboard.js b/packages/node_modules/@node-red/editor-client/src/js/ui/clipboard.js index a8bcf9c4a..f24205be1 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/clipboard.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/clipboard.js @@ -656,7 +656,12 @@ RED.clipboard = (function() { $("#red-ui-clipboard-dialog-tab-library-name").val("flows.json").select(); dialogContainer.i18n(); + var format = RED.settings.flowFilePretty ? "red-ui-clipboard-dialog-export-fmt-full" : "red-ui-clipboard-dialog-export-fmt-mini"; + const userFormat = RED.settings.get("editor.dialog.export.pretty") + if (userFormat === false || userFormat === true) { + format = userFormat ? "red-ui-clipboard-dialog-export-fmt-full" : "red-ui-clipboard-dialog-export-fmt-mini"; + } $("#red-ui-clipboard-dialog-export-fmt-group > a").on("click", function(evt) { evt.preventDefault(); @@ -672,7 +677,8 @@ RED.clipboard = (function() { var nodes = JSON.parse(flow); format = $(this).attr('id'); - if (format === 'red-ui-clipboard-dialog-export-fmt-full') { + const pretty = format === "red-ui-clipboard-dialog-export-fmt-full"; + if (pretty) { flow = JSON.stringify(nodes,null,4); } else { flow = JSON.stringify(nodes); @@ -681,6 +687,7 @@ RED.clipboard = (function() { setTimeout(function() { $("#red-ui-clipboard-dialog-export-text").scrollTop(0); },50); $("#red-ui-clipboard-dialog-export-text").trigger("focus"); + RED.settings.set("editor.dialog.export.pretty", pretty) } }); diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/common/editableList.js b/packages/node_modules/@node-red/editor-client/src/js/ui/common/editableList.js index ea1938e5c..f308614d7 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/common/editableList.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/common/editableList.js @@ -160,7 +160,7 @@ this.element.css("maxHeight",null); } if (this.options.height !== 'auto') { - this.uiContainer.css("overflow-y","scroll"); + this.uiContainer.css("overflow-y","auto"); if (!isNaN(this.options.height)) { this.uiHeight = this.options.height; } diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/common/tabs.js b/packages/node_modules/@node-red/editor-client/src/js/ui/common/tabs.js index a8e7ea727..4aa6ac232 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/common/tabs.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/common/tabs.js @@ -829,7 +829,7 @@ RED.tabs = (function() { event.preventDefault(); removeTab(tab.id); }); - RED.popover.tooltip(closeLink,RED._("workspace.hideFlow")); + RED.popover.tooltip(closeLink,RED._("workspace.closeFlow")); } // if (tab.hideable) { // li.addClass("red-ui-tabs-closeable") diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js b/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js index 549479d85..7440b464e 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js @@ -90,10 +90,10 @@ optEl.append(generateSpans(srcMatch)); optEl.appendTo(element); } - matches.push({ - value: optVal, - label: element, - i: (valMatch.found ? valMatch.index : srcMatch.index) + matches.push({ + value: optVal, + label: element, + i: (valMatch.found ? valMatch.index : srcMatch.index) }); } }) @@ -146,7 +146,7 @@ { value: "reset", source: ["delay","trigger","join","rbe"] }, { value: "responseCookies", source: ["http request"] }, { value: "responseTopic", source: ["mqtt"] }, - { value: "responseURL", source: ["http request"] }, + { value: "responseUrl", source: ["http request"] }, { value: "restartTimeout", source: ["join"] }, { value: "retain", source: ["mqtt"] }, { value: "schema", source: ["json"] }, @@ -501,7 +501,7 @@ this.options.types = this.options.types||Object.keys(allOptions); } - this.selectTrigger = $('').prependTo(this.uiSelect); + this.selectTrigger = $('').prependTo(this.uiSelect); $('').toggle(this.options.types.length > 1).appendTo(this.selectTrigger); this.selectLabel = $('').appendTo(this.selectTrigger); @@ -570,7 +570,7 @@ }) // explicitly set optionSelectTrigger display to inline-block otherwise jQ sets it to 'inline' - this.optionSelectTrigger = $('').appendTo(this.uiSelect); + this.optionSelectTrigger = $('').appendTo(this.uiSelect); this.optionSelectLabel = $('').prependTo(this.optionSelectTrigger); // RED.popover.tooltip(this.optionSelectLabel,function() { // return that.optionValue; @@ -591,7 +591,7 @@ that.uiSelect.addClass('red-ui-typedInput-focus'); }); - this.optionExpandButton = $('').appendTo(this.uiSelect); + this.optionExpandButton = $('').appendTo(this.uiSelect); this.optionExpandButtonIcon = $('').appendTo(this.optionExpandButton); this.type(this.typeField.val() || this.options.default||this.typeList[0].value); diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js b/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js index 29202a0ab..ec02c6281 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js @@ -238,6 +238,7 @@ RED.editor = (function() { var valid = validateNodeProperty(node, defaults, property,value); if (((typeof valid) === "string") || !valid) { input.addClass("input-error"); + input.next(".red-ui-typedInput-container").addClass("input-error"); if ((typeof valid) === "string") { var tooltip = input.data("tooltip"); if (tooltip) { @@ -250,6 +251,7 @@ RED.editor = (function() { } } else { input.removeClass("input-error"); + input.next(".red-ui-typedInput-container").removeClass("input-error"); var tooltip = input.data("tooltip"); if (tooltip) { input.data("tooltip", null); @@ -1105,6 +1107,10 @@ RED.editor = (function() { if (editing_node) { RED.sidebar.info.refresh(editing_node); RED.sidebar.help.show(editing_node.type, false); + //ensure focused element is NOT body (for keyboard scope to operate correctly) + if (document.activeElement.tagName === 'BODY') { + $('#red-ui-editor-stack').trigger('focus') + } } } } diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/editors/code-editor.js b/packages/node_modules/@node-red/editor-client/src/js/ui/editors/code-editor.js index 7cee2026b..b92881764 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/editors/code-editor.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/editors/code-editor.js @@ -45,6 +45,9 @@ selectedCodeEditor = RED.editor.codeEditor[defaultEditor]; initialised = selectedCodeEditor.init(); } + + $('

').appendTo('#red-ui-editor'); + $("#red-ui-image-drop-target").hide(); } function create(options) { @@ -64,6 +67,7 @@ options = {}; } + var editor = null; if (this.editor.type === MONACO) { // compatibility (see above note) if (!options.element && !options.id) { @@ -74,10 +78,14 @@ console.warn("createEditor() options.element or options.id is not valid", options); $("#dialog-form").append('