diff --git a/app/Application.js b/app/Application.js index 5f5b0b04..56197ef9 100644 --- a/app/Application.js +++ b/app/Application.js @@ -27,10 +27,10 @@ Ext.define('Hamsket.Application', { // Set cookies to help Tooltip.io messages segmentation - Ext.util.Cookies.set('version', require('electron').remote.app.getVersion()); + Ext.util.Cookies.set('version', require('@electron/remote').app.getVersion()); // Check for updates - if ( require('electron').remote.process.argv.indexOf('--without-update') === -1 ) Hamsket.app.checkUpdate(true); + if ( require('@electron/remote').process.argv.indexOf('--without-update') === -1 ) Hamsket.app.checkUpdate(true); // Mouse Wheel zooming document.addEventListener('mousewheel', function(e) { @@ -85,7 +85,7 @@ Ext.define('Hamsket.Application', { ,method: 'GET' ,success(response) { const json = JSON.parse(response.responseText); - const appVersion = new Ext.Version(require('electron').remote.app.getVersion()); + const appVersion = new Ext.Version(require('@electron/remote').app.getVersion()); const updateVersion = new Ext.Version(json.tag_name); if ( appVersion.isLessThan(updateVersion) ) { console.info('New version is available', updateVersion); diff --git a/app/ux/FileBackup.js b/app/ux/FileBackup.js index 9533b242..a2072412 100644 --- a/app/ux/FileBackup.js +++ b/app/ux/FileBackup.js @@ -3,7 +3,7 @@ Ext.define('Hamsket.ux.FileBackup', { constructor() { const me = this; me.callParent(arguments); - me.remote = require('electron').remote; + me.remote = require('@electron/remote'); me.path = me.remote.require('path'); me.fs = me.remote.require('fs'); me.userPath = me.remote.app.getPath('userData'); diff --git a/app/ux/WebView.js b/app/ux/WebView.js index 48d4c7b2..78a44063 100644 --- a/app/ux/WebView.js +++ b/app/ux/WebView.js @@ -164,7 +164,7 @@ Ext.define('Hamsket.ux.WebView',{ ,partition: 'persist:' + me.record.get('type') + '_' + me.id.replace('tab_', '') ,allowtransparency: 'on' ,autosize: 'on' - ,webpreferences: 'nativeWindowOpen=yes,enableRemoteModule=yes,spellcheck=yes,contextIsolation=no' //,nativeWindowOpen=true + ,webpreferences: 'nativeWindowOpen=yes,spellcheck=yes,contextIsolation=no' //,nativeWindowOpen=true ,allowpopups: 'on' //,disablewebsecurity: 'on' // Disabled because some services (Like Google Drive) dont work with this enabled ,userAgent: me.getUserAgent() @@ -265,7 +265,7 @@ Ext.define('Hamsket.ux.WebView',{ // Block some Deep links to prevent that open its app (Ex: Slack) if (['slack:'].includes(protocol)) return; // Allow Deep links - if (!['http:', 'https:', 'about:'].includes(protocol)) return require('electron').shell.openExternal(url.href); + if (!['http:', 'https:', 'about:'].includes(protocol)) return require('@electron/remote').shell.openExternal(url.href); }); webview.addEventListener('will-navigate', function(e, url) { @@ -437,7 +437,7 @@ Ext.define('Hamsket.ux.WebView',{ } function showWindowAndActivateTab(event) { - const currentWindow = require('electron').remote.getCurrentWindow(); + const currentWindow = require('@electron/remote').getCurrentWindow(); currentWindow.show(); currentWindow.focus(); const tabPanel = Ext.cq1('app-main'); @@ -700,10 +700,11 @@ Ext.define('Hamsket.ux.WebView',{ } ,getWebContents() { if ( this.record.get('enabled') ) { - const remote = require('electron').remote; + const remote = require('@electron/remote'); const webview = this.getWebView(); const id = webview.getWebContentsId(); - return remote.webContents.fromId(id); + const webContents = remote.webContents.fromId(id); + return webContents; } else { return false; } @@ -743,7 +744,7 @@ Ext.define('Hamsket.ux.WebView',{ } ,getOSArch(platform) { const me = this; - const remote = require('electron').remote; + const remote = require('@electron/remote'); platform = platform ? platform : remote.require('os').platform(); let arch = remote.require('os').arch(); @@ -765,7 +766,7 @@ Ext.define('Hamsket.ux.WebView',{ return arch; } ,getOSArchType() { - let arch = require('electron').remote.require('os').arch(); + let arch = require('@electron/remote').require('os').arch(); switch(arch) { case 'x64': @@ -797,7 +798,7 @@ Ext.define('Hamsket.ux.WebView',{ } ,getOSPlatform(platform) { const me = this; - platform = platform ? platform : require('electron').remote.require('os').platform(); + platform = platform ? platform : require('@electron/remote').require('os').platform(); switch (platform) { case 'win32': platform = `${me.getOSRelease(platform)}; ${me.getOSArch(platform)}`; @@ -820,15 +821,15 @@ Ext.define('Hamsket.ux.WebView',{ return platform; } ,isWindows(platform) { - platform = platform ? platform : require('electron').remote.require('os').platform(); + platform = platform ? platform : require('@electron/remote').require('os').platform(); return platform === 'win32'; } ,isMac(platform) { - platform = platform ? platform : require('electron').remote.require('os').platform(); + platform = platform ? platform : require('@electron/remote').require('os').platform(); return platform === 'darwin'; } ,is32bit() { - const arch = require('electron').remote.require('os').arch(); + const arch = require('@electron/remote').require('os').arch(); if (arch === 'ia32' || arch === 'x32') return true; else @@ -836,7 +837,7 @@ Ext.define('Hamsket.ux.WebView',{ } ,getOSRelease(platform) { const me = this; - const remote = require('electron').remote; + const remote = require('@electron/remote'); if (me.isWindows(platform)) { if (platform) { @@ -852,13 +853,13 @@ Ext.define('Hamsket.ux.WebView',{ } } ,getChromeVersion(version) { - return version || require('electron').remote.require('process').versions['chrome']; + return version || require('@electron/remote').process.versions['chrome']; } ,getElectronVersion() { - return require('electron').require('process').versions['electron']; + return require('@electron/remote').process.versions['electron']; } ,getAppVersion() { - return require('electron').remote.app.getVersion(); + return require('@electron/remote').app.getVersion(); } ,blur() { this.getWebView().blur(); diff --git a/app/view/main/About.js b/app/view/main/About.js index 76da8bc0..22fb3463 100644 --- a/app/view/main/About.js +++ b/app/view/main/About.js @@ -15,7 +15,7 @@ Ext.define('Hamsket.view.main.About', { me.data.buildversion = require('fs').readFileSync( __dirname + '/BUILDVERSION', 'utf8'); } ,data: { - version: require('electron').remote.app.getVersion() + version: require('@electron/remote').app.getVersion() ,platform: process.platform ,arch: process.arch ,electron: process.versions.electron diff --git a/app/view/main/MainController.js b/app/view/main/MainController.js index d93b9603..943c310c 100644 --- a/app/view/main/MainController.js +++ b/app/view/main/MainController.js @@ -137,7 +137,7 @@ Ext.define('Hamsket.view.main.MainController', { // Get Record const rec = Ext.getStore('Services').getById(serviceId); - const {session: rsession} = require('electron').remote; + const {session: rsession} = require('@electron/remote'); if ( !rec.get('enabled') ) { const session = rsession.fromPartition(`persist:${rec.get('type')}_${serviceId}`); diff --git a/electron/main.js b/electron/main.js index 659623a7..c3b01fc8 100644 --- a/electron/main.js +++ b/electron/main.js @@ -12,6 +12,7 @@ const updater = require('./updater'); // File System const fs = require("fs"); const path = require('path'); +const contextMenu = require('electron-context-menu'); // If 'data' folder exists in Hamsket's folder, set userdata, logs, and usercache path to there var basepath = app.getAppPath(); @@ -117,11 +118,12 @@ function createWindow () { partition: 'persist:hamsket', nodeIntegration: true, webviewTag: true, - enableRemoteModule: true, - contextIsolation: false + contextIsolation: false, } }); + require("@electron/remote/main").enable(mainWindow.webContents); + if ( !config.get('start_minimized') && config.get('maximized') ) mainWindow.maximize(); if (config.get('start_minimized')){ if (config.get('window_display_behavior') == 'show_taskbar') { @@ -235,11 +237,11 @@ function createMasterPasswordWindow() { ,frame: false ,webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false } }); + require("@electron/remote/main").enable(mainMasterPasswordWindow.webContents); mainMasterPasswordWindow.loadURL('file://' + __dirname + '/../masterpassword.html'); mainMasterPasswordWindow.on('close', function() { mainMasterPasswordWindow = null; }); @@ -585,6 +587,7 @@ if ( config.get('disable_gpu') ) app.disableHardwareAcceleration(); // This method will be called when Electron has finished // initialization and is ready to create browser windows. app.on('ready', function() { + require('@electron/remote/main').initialize(); if (config.get('master_password')) { createMasterPasswordWindow(); } else { @@ -621,8 +624,18 @@ app.on('before-quit', function () { // Prevent the ability to create webview with nodeIntegration. app.on('web-contents-created', (event, contents) => { + const contextMenuWebContentsDispose = contextMenu({ + window: contents, + showCopyImageAddress: true, + showSaveImage: false, + showSaveImageAs: true, + }); contents.on('will-attach-webview', (event, webPreferences, params) => { // Always prevent node integration webPreferences.nodeIntegration = false; + }); + contents.on('destroyed', function() { + contextMenuWebContentsDispose(); + }) }); diff --git a/masterpassword.html b/masterpassword.html index 302a4159..18014ec2 100644 --- a/masterpassword.html +++ b/masterpassword.html @@ -48,7 +48,7 @@ } function exit() { - require('electron').remote.app.quit(); + require('@electron/remote').app.quit(); } diff --git a/package-lock.json b/package-lock.json index f97535cd..493dd95d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@electron/remote": "^2.0.1", "auto-launch": "^5.0.5", - "electron-contextmenu-wrapper": "5.0.0", + "electron-context-menu": "^3.1.1", "electron-store": "^8.0.1", "mime": "^3.0.0", "tmp": "^0.2.1" @@ -521,7 +521,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -530,7 +529,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -781,6 +779,14 @@ "node": "*" } }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/async": { "version": "0.9.2", "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", @@ -1386,6 +1392,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -1418,7 +1439,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -1429,8 +1449,7 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/colors": { "version": "1.0.3", @@ -2196,12 +2215,38 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/electron-contextmenu-wrapper": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/electron-contextmenu-wrapper/-/electron-contextmenu-wrapper-5.0.0.tgz", - "integrity": "sha512-1XdHmQWQn87xEnFBWIfYCvKfifqpsWfJBhO+v9pXWsDvtaksOs04gDV5HfOnGYSFLMJb5sYh9wA6ZPusebp8QA==", + "node_modules/electron-context-menu": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/electron-context-menu/-/electron-context-menu-3.1.1.tgz", + "integrity": "sha512-LJhwaKf6XHwk2LQ5SdwoGNODoA8lRwks9bbEeAqqMf4e3hsrT7pZtX6MaHKYNFZKxF14JjI/VR+VRjGvxmaQoA==", + "dependencies": { + "cli-truncate": "^2.1.0", + "electron-dl": "^3.2.1", + "electron-is-dev": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/electron-dl": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/electron-dl/-/electron-dl-3.3.0.tgz", + "integrity": "sha512-Zwaz/OMGPIfBLV2SQH4sTsdDOs/U4y5AOHfremMBXEpjIxX+SiTx845DZAvJJwgb5hfowyWOBLiJhd/emBNLLQ==", "dependencies": { - "debug": "^4.3.2" + "ext-name": "^5.0.0", + "pupa": "^2.0.1", + "unused-filename": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/electron-is-dev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-2.0.0.tgz", + "integrity": "sha512-3X99K852Yoqu9AcW50qz3ibYBWY79/pBhlMCab8ToEWS48R0T9tyxRiQhwylE7zQdXrMnx2JKqUJyMPmt5FBqA==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/electron-osx-sign": { @@ -2334,8 +2379,7 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -2381,7 +2425,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true, "engines": { "node": ">=8" } @@ -2420,6 +2463,29 @@ "node": ">=0.8" } }, + "node_modules/ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "dependencies": { + "mime-db": "^1.28.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "dependencies": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/extract-zip": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", @@ -3023,7 +3089,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -3642,7 +3707,6 @@ "version": "1.51.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -3851,6 +3915,14 @@ "node": ">=10" } }, + "node_modules/modify-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/modify-filename/-/modify-filename-1.1.0.tgz", + "integrity": "sha1-mi3sg4Bvuy2XXyK+7IWcoms5OqE=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -4051,7 +4123,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, "engines": { "node": ">=8" } @@ -4345,7 +4416,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, "dependencies": { "escape-goat": "^2.0.0" }, @@ -4821,6 +4891,19 @@ "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", "dev": true }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/snake-case": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", @@ -4830,6 +4913,36 @@ "no-case": "^2.2.0" } }, + "node_modules/sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "dependencies": { + "sort-keys": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-keys/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5087,7 +5200,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -5101,7 +5213,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -5418,6 +5529,18 @@ "node": ">=4" } }, + "node_modules/unused-filename": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unused-filename/-/unused-filename-2.1.0.tgz", + "integrity": "sha512-BMiNwJbuWmqCpAM1FqxCTD7lXF97AvfQC8Kr/DIeA6VtvhJaMDupZ82+inbjl5yVP44PcxOuCSxye1QMS0wZyg==", + "dependencies": { + "modify-filename": "^1.1.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/update-notifier": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", @@ -6459,14 +6582,12 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -6669,6 +6790,11 @@ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" + }, "async": { "version": "0.9.2", "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", @@ -7143,6 +7269,15 @@ "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "dev": true }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -7172,7 +7307,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -7180,8 +7314,7 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "colors": { "version": "1.0.3", @@ -7785,14 +7918,31 @@ } } }, - "electron-contextmenu-wrapper": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/electron-contextmenu-wrapper/-/electron-contextmenu-wrapper-5.0.0.tgz", - "integrity": "sha512-1XdHmQWQn87xEnFBWIfYCvKfifqpsWfJBhO+v9pXWsDvtaksOs04gDV5HfOnGYSFLMJb5sYh9wA6ZPusebp8QA==", + "electron-context-menu": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/electron-context-menu/-/electron-context-menu-3.1.1.tgz", + "integrity": "sha512-LJhwaKf6XHwk2LQ5SdwoGNODoA8lRwks9bbEeAqqMf4e3hsrT7pZtX6MaHKYNFZKxF14JjI/VR+VRjGvxmaQoA==", + "requires": { + "cli-truncate": "^2.1.0", + "electron-dl": "^3.2.1", + "electron-is-dev": "^2.0.0" + } + }, + "electron-dl": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/electron-dl/-/electron-dl-3.3.0.tgz", + "integrity": "sha512-Zwaz/OMGPIfBLV2SQH4sTsdDOs/U4y5AOHfremMBXEpjIxX+SiTx845DZAvJJwgb5hfowyWOBLiJhd/emBNLLQ==", "requires": { - "debug": "^4.3.2" + "ext-name": "^5.0.0", + "pupa": "^2.0.1", + "unused-filename": "^2.1.0" } }, + "electron-is-dev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-2.0.0.tgz", + "integrity": "sha512-3X99K852Yoqu9AcW50qz3ibYBWY79/pBhlMCab8ToEWS48R0T9tyxRiQhwylE7zQdXrMnx2JKqUJyMPmt5FBqA==" + }, "electron-osx-sign": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.5.0.tgz", @@ -7895,8 +8045,7 @@ "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "encodeurl": { "version": "1.0.2", @@ -7932,8 +8081,7 @@ "escape-goat": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" }, "escape-string-regexp": { "version": "4.0.0", @@ -7953,6 +8101,23 @@ "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", "dev": true }, + "ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "requires": { + "mime-db": "^1.28.0" + } + }, + "ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "requires": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + } + }, "extract-zip": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", @@ -8411,8 +8576,7 @@ "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-glob": { "version": "2.0.1", @@ -8904,8 +9068,7 @@ "mime-db": { "version": "1.51.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" }, "mime-types": { "version": "2.1.34", @@ -9063,6 +9226,11 @@ } } }, + "modify-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/modify-filename/-/modify-filename-1.1.0.tgz", + "integrity": "sha1-mi3sg4Bvuy2XXyK+7IWcoms5OqE=" + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -9213,8 +9381,7 @@ "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "path-is-absolute": { "version": "1.0.1", @@ -9427,7 +9594,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, "requires": { "escape-goat": "^2.0.0" } @@ -9811,6 +9977,16 @@ "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", "dev": true }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, "snake-case": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", @@ -9820,6 +9996,29 @@ "no-case": "^2.2.0" } }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "requires": { + "is-plain-obj": "^1.0.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + } + } + }, + "sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "requires": { + "sort-keys": "^1.0.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -10013,7 +10212,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -10024,7 +10222,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -10273,6 +10470,15 @@ "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.3.tgz", "integrity": "sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==" }, + "unused-filename": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unused-filename/-/unused-filename-2.1.0.tgz", + "integrity": "sha512-BMiNwJbuWmqCpAM1FqxCTD7lXF97AvfQC8Kr/DIeA6VtvhJaMDupZ82+inbjl5yVP44PcxOuCSxye1QMS0wZyg==", + "requires": { + "modify-filename": "^1.1.0", + "path-exists": "^4.0.0" + } + }, "update-notifier": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", diff --git a/package.json b/package.json index 6ac38706..cbcd0678 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "dependencies": { "@electron/remote": "^2.0.1", "auto-launch": "^5.0.5", - "electron-contextmenu-wrapper": "5.0.0", + "electron-context-menu": "^3.1.1", "electron-store": "^8.0.1", "mime": "^3.0.0", "tmp": "^0.2.1" diff --git a/resources/js/hamsket-service-api.js b/resources/js/hamsket-service-api.js index 0838134a..fea54be6 100644 --- a/resources/js/hamsket-service-api.js +++ b/resources/js/hamsket-service-api.js @@ -2,8 +2,7 @@ * This file is loaded in the service web views to provide a Hamsket API. */ -const { ipcRenderer, remote } = require('electron'); -const { ContextMenuBuilder, ContextMenuListener } = require('electron-contextmenu-wrapper'); +const { ipcRenderer } = require('electron'); /** * Make the Hamsket API available via a global "hamsket" variable. @@ -40,8 +39,8 @@ window.hamsket.clearUnreadCount = function() { }; window.hamsket.parseIntOrZero = function (n) { - const result = parseInt(n, 10); - return isNaN(result) ? 0 : result; + const result = Number.parseInt(n, 10); + return Number.isNaN(result) ? 0 : result; }; window.hamsket.isInViewport = function(node) { @@ -53,11 +52,6 @@ window.hamsket.isInViewport = function(node) { rect.top < (window.innerHeight || document.documentElement.clientHeight); }; -window.hamsket.contextMenuBuilder = new ContextMenuBuilder(); -window.hamsket.contextMenuListener = new ContextMenuListener(function(event, info) { - window.hamsket.contextMenuBuilder.showPopupMenu(info); -}); - /** * Override to add notification click event to display Hamsket window and activate service tab