diff --git a/.gitignore b/.gitignore
index efae82615..6e15fc122 100644
--- a/.gitignore
+++ b/.gitignore
@@ -34,7 +34,5 @@ npm-debug.log
# Vagrant
.vagrant/
-env.js
-rambox_cfg.json
languages.js
electron/dev-app-update.yml
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index a0b271063..f6161b8c2 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -122,22 +122,6 @@ Once you have rambox cloned, before you start the application, you first need to
npm install
```
-Then you need to add the private environment variables (API Keys):
-
-```bash
-# Copy `env-sample.js` with a name of env.js
-# Populate it with Auth0 clientid and domain e.g. test.auth0.com
-# You can get these details from one of your "apps" here https://manage.auth0.com/#/clients/
-
-# macOS / Linux
-cp env-sample.js env.js
-
-# Windows
-copy env-sample.js env.js
-```
-
-Then edit the `env.js` file and modify the API keys only for services that you will use.
-
```bash
# Compile the files...
sencha app watch
diff --git a/README.md b/README.md
index b9b603255..c71503049 100644
--- a/README.md
+++ b/README.md
@@ -110,8 +110,6 @@ Fork and work!
```shell
git clone https://github.com/saenzramiro/rambox.git
cd rambox
-cp env-sample.js env.js
-# update env.js with your auth0 details.
npm install
sencha app watch
npm start
diff --git a/app.js b/app.js
index c7a3f9cbe..4db0e030e 100644
--- a/app.js
+++ b/app.js
@@ -61,18 +61,18 @@ ipc.on('autoUpdater:update-downloaded', function(e, info) {
'->'
,{
xtype: 'label'
- ,html: 'New version ready to install ('+info.version+')! It will be installed the next time Rambox is relaunched.'
+ ,html: 'New version is ready to be installed ('+info.version+')! Click the following button to install it now.'
}
,{
xtype: 'button'
- ,text: 'Relaunch Now'
+ ,text: 'Install now'
,handler: function(btn) { ipc.send('autoUpdater:quit-and-install'); }
}
,{
xtype: 'button'
,text: 'Changelog'
,ui: 'decline'
- ,href: 'https://github.com/ramboxapp/community-edition/releases/tag/'+info.version
+ ,href: 'https://github.com/ramboxapp/download/releases/latest'
}
,'->'
,{
diff --git a/app.json b/app.json
index 62f9a8f89..a1edb1ea9 100644
--- a/app.json
+++ b/app.json
@@ -109,10 +109,6 @@
{
"path": "resources/js/loadscreen.js"
},
- {
- "path": "env.js",
- "remote": true
- },
{
"path": "app.js",
"bundle": true
@@ -291,10 +287,10 @@
*/
"resources": [
"electron",
- "env.js",
"package.json",
"package-lock.json",
- "masterpassword.html"
+ "masterpassword.html",
+ "screenselector.html"
],
/**
diff --git a/app/Application.js b/app/Application.js
index dbe779346..9195754a6 100644
--- a/app/Application.js
+++ b/app/Application.js
@@ -4,8 +4,7 @@ Ext.define('Rambox.Application', {
,name: 'Rambox'
,requires: [
- 'Rambox.ux.Auth0'
- ,'Rambox.util.MD5'
+ 'Rambox.util.MD5'
,'Ext.window.Toast'
,'Ext.util.Cookies'
]
@@ -134,47 +133,20 @@ Ext.define('Rambox.Application', {
]
});
}
- // Prevent track if the user have disabled this option (default: false)
- if ( !ipc.sendSync('sendStatistics') ) {
- ga_storage = {
- _enableSSL: Ext.emptyFn
- ,_disableSSL: Ext.emptyFn
- ,_setAccount: Ext.emptyFn
- ,_setDomain: Ext.emptyFn
- ,_setLocale: Ext.emptyFn
- ,_setCustomVar: Ext.emptyFn
- ,_deleteCustomVar: Ext.emptyFn
- ,_trackPageview: Ext.emptyFn
- ,_trackEvent: Ext.emptyFn
- }
- }
-
- // Set Google Analytics events
- ga_storage._setAccount('UA-80680424-1');
- ga_storage._trackPageview('/index.html', 'main');
- ga_storage._trackEvent('Versions', require('electron').remote.app.getVersion());
// Load language for Ext JS library
- Ext.Loader.loadScript({url: Ext.util.Format.format("ext/packages/ext-locale/build/ext-locale-{0}.js", localStorage.getItem('locale-auth0') || 'en')});
-
- // Initialize Auth0
- if ( auth0Cfg.clientID !== '' && auth0Cfg.domain !== '' ) Rambox.ux.Auth0.init();
-
- // Set cookies to help Tooltip.io messages segmentation
- Ext.util.Cookies.set('version', require('electron').remote.app.getVersion());
- if ( Ext.util.Cookies.get('auth0') === null ) Ext.util.Cookies.set('auth0', false);
-
- // Check for updates
- if ( require('electron').remote.process.argv.indexOf('--without-update') === -1 ) Rambox.app.checkUpdate(true);
-
- // Get Google URLs
- Ext.Ajax.request({
- url: 'https://raw.githubusercontent.com/ramboxapp/community-edition/gh-pages/api/google.json'
- ,method: 'GET'
- ,success: function(response) {
- Rambox.app.config.googleURLs = Ext.decode(response.responseText);
- }
- });
+ Ext.Loader.loadScript({url: Ext.util.Format.format("ext/packages/ext-locale/build/ext-locale-{0}.js", localStorage.getItem('locale-extjs') || 'en')});
+
+ // Set Google URLs
+ Rambox.app.config.googleURLs = [
+ "accounts.google.com/ServiceLogin",
+ "accounts.google.com/signin",
+ "accounts.google.com/_/lookup/accountlookup",
+ "accounts.google.com/o/oauth2",
+ "accounts.google.com/_/signin",
+ "accounts.google.com/AddSession?",
+ "accounts.google.com/_/"
+ ];
// Shortcuts
const platform = require('electron').remote.process.platform;
@@ -275,60 +247,6 @@ Ext.define('Rambox.Application', {
}
,checkUpdate: function(silence) {
- console.info('Checking for updates...');
- Ext.Ajax.request({
- url: 'https://api.github.com/repos/ramboxapp/community-edition/releases/latest'
- ,method: 'GET'
- ,success: function(response) {
- var json = Ext.decode(response.responseText);
- var appVersion = new Ext.Version(require('electron').remote.app.getVersion());
- if ( appVersion.isLessThan(json.name) && !json.draft && !json.prerelease ) {
- console.info('New version is available', json.version);
- Ext.cq1('app-main').addDocked({
- xtype: 'toolbar'
- ,dock: 'top'
- ,ui: 'newversion'
- ,items: [
- '->'
- ,{
- xtype: 'label'
- ,html: ''+locale['app.update[0]']+' ('+json.version+')' + ( process.platform === 'win32' ? ' is downloading in the background and you will be notified when it is ready to be installed.' : '' )
- }
- ,{
- xtype: 'button'
- ,text: locale['app.update[1]']
- ,href: process.platform === 'darwin' ? 'https://getrambox.herokuapp.com/download/'+process.platform+'_'+process.arch : 'https://github.com/ramboxapp/community-edition/releases/latest'
- ,hidden: process.platform === 'win32'
- }
- ,{
- xtype: 'button'
- ,text: locale['app.update[2]']
- ,ui: 'decline'
- ,tooltip: 'Click here to see more information about the new version.'
- ,href: 'https://github.com/ramboxapp/community-edition/releases/tag/'+json.version
- }
- ,'->'
- ,{
- glyph: 'xf00d@FontAwesome'
- ,baseCls: ''
- ,style: 'cursor:pointer;'
- ,handler: function(btn) { Ext.cq1('app-main').removeDocked(btn.up('toolbar'), true); }
- }
- ]
- });
- ipc.send('autoUpdater:check-for-updates');
- return;
- } else if ( !silence ) {
- Ext.Msg.show({
- title: locale['app.update[3]']
- ,message: locale['app.update[4]']
- ,icon: Ext.Msg.INFO
- ,buttons: Ext.Msg.OK
- });
- }
-
- console.info('Your version is the latest. No need to update.');
- }
- });
+ ipc.send('autoUpdater:check-for-updates');
}
});
diff --git a/app/store/ServicesList.js b/app/store/ServicesList.js
index a2172525d..d3d150506 100644
--- a/app/store/ServicesList.js
+++ b/app/store/ServicesList.js
@@ -10,7 +10,7 @@ Ext.define('Rambox.store.ServicesList', {
,proxy: {
type: 'ajax',
- url: 'https://raw.githubusercontent.com/ramboxapp/community-edition/gh-pages/api/services.json',
+ url: 'resources/services.json',
reader: {
type: 'json',
rootProperty: 'responseText'
diff --git a/app/ux/Auth0.js b/app/ux/Auth0.js
deleted file mode 100644
index 8f3b6afee..000000000
--- a/app/ux/Auth0.js
+++ /dev/null
@@ -1,298 +0,0 @@
-Ext.define('Rambox.ux.Auth0', {
- singleton: true
-
- // private
- ,lock: null
- ,auth0: null
- ,authService: null
- ,backupCurrent: false
-
- ,init: function() {
- var me = this;
-
- var Auth0 = require('auth0-js');
- var _AuthService = require('./resources/js/AuthService');
-
- me.authService = new _AuthService.default({
- clientId: auth0Cfg.clientID,
- authorizeEndpoint: 'https://'+auth0Cfg.domain+'/authorize',
- audience: 'https://'+auth0Cfg.domain+'/userinfo',
- scope: 'openid profile offline_access',
- redirectUri: 'https://'+auth0Cfg.domain+'/mobile',
- tokenEndpoint: 'https://'+auth0Cfg.domain+'/oauth/token'
- });
-
- me.auth0 = new Auth0.WebAuth({ clientID: auth0Cfg.clientID, domain : auth0Cfg.domain });
-
- //me.defineEvents();
- }
-
- ,onLogin: function(token, authWindow) {
- var me = this;
-
- authWindow.close();
-
- me.auth0.client.userInfo(token.access_token, function(err, profile) {
- if ( err ) {
- if ( err.error === 401 || err.error === 'Unauthorized' ) return me.renewToken(me.checkConfiguration);
- Ext.Msg.hide();
- return Ext.Msg.show({
- title: 'Error'
- ,message: 'There was an error getting the profile: ' + err.error_description
- ,icon: Ext.Msg.ERROR
- ,buttons: Ext.Msg.OK
- });
- }
-
- profile.user_metadata = profile['https://rambox.pro/user_metadata'];
- delete profile['https://rambox.pro/user_metadata'];
-
- // Display a spinner while waiting
- Ext.Msg.wait(locale['app.window[29]'], locale['app.window[28]']);
-
- // Google Analytics Event
- ga_storage._trackEvent('Users', 'loggedIn');
-
- // Set cookies to help Tooltip.io messages segmentation
- Ext.util.Cookies.set('auth0', true);
-
- // User is logged in
- // Save the profile and JWT.
- localStorage.setItem('profile', JSON.stringify(profile));
- localStorage.setItem('access_token', token.access_token);
- localStorage.setItem('id_token', token.id_token);
- localStorage.setItem('refresh_token', token.refresh_token);
-
- if ( !Ext.isEmpty(profile.user_metadata) && !Ext.isEmpty(profile.user_metadata.services) && !me.backupCurrent ) {
- Ext.each(profile.user_metadata.services, function(s) {
- var service = Ext.create('Rambox.model.Service', s);
- service.save();
- Ext.getStore('Services').add(service);
- });
-
- require('electron').remote.app.relaunch();
- require('electron').remote.app.exit();
- }
-
- Ext.Msg.hide();
- Ext.cq1('app-main').getViewModel().set('username', profile.name);
- Ext.cq1('app-main').getViewModel().set('avatar', profile.picture);
- });
- }
-
- ,backupConfiguration: function(callback) {
- var me = this;
-
- Ext.Msg.wait('Saving backup...', 'Please wait...');
-
- // Getting all services
- var lastupdate = (new Date()).toJSON();
- var services = [];
- Ext.getStore('Services').each(function(service) {
- var s = Ext.clone(service);
- delete s.data.id;
- delete s.data.zoomLevel;
- services.push(s.data);
- });
-
- Ext.Ajax.request({
- url: 'https://rambox.auth0.com/api/v2/users/'+Ext.decode(localStorage.getItem('profile')).sub
- ,method: 'PATCH'
- ,headers: { authorization: "Bearer " + localStorage.getItem('id_token') }
- ,jsonData: { user_metadata: { services: services, services_lastupdate: lastupdate } }
- ,success: function(response) {
- Ext.Msg.hide();
- // Save the last update in localStorage
- var profile = Ext.decode(localStorage.getItem('profile'));
- if ( !profile.user_metadata ) profile.user_metadata = {};
- profile.user_metadata.services_lastupdate = lastupdate;
- localStorage.setItem('profile', Ext.encode(profile));
- Ext.cq1('app-main').getViewModel().set('last_sync', new Date(lastupdate).toUTCString());
-
- Ext.toast({
- html: ' Your configuration were successfully backed up.'
- ,title: 'Synchronize Configuration'
- ,width: 300
- ,align: 't'
- ,closable: false
- });
-
- if ( Ext.isFunction(callback) ) callback.bind(me)();
- }
- ,failure: function(response) {
- if ( response.status === 401 ) return me.renewToken(me.backupConfiguration);
-
- Ext.Msg.hide();
- Ext.toast({
- html: ' Error occurred when trying to backup your configuration.'
- ,title: 'Synchronize Configuration'
- ,width: 300
- ,align: 't'
- ,closable: false
- });
-
- if ( Ext.isFunction(callback) ) callback.bind(me)();
-
- console.error(response);
- }
- });
- }
-
- ,restoreConfiguration: function() {
- var me = this;
-
- me.auth0.client.userInfo(localStorage.getItem('access_token'), function(err, profile) {
- if ( err ) {
- if ( err.code === 401 ) return me.renewToken(me.restoreConfiguration);
- return Ext.Msg.show({
- title: 'Error'
- ,message: 'There was an error getting the profile: ' + err.description
- ,icon: Ext.Msg.ERROR
- ,buttons: Ext.Msg.OK
- });
- }
-
- profile.user_metadata = profile['https://rambox.pro/user_metadata'];
- delete profile['https://rambox.pro/user_metadata'];
-
- // First we remove all current services
- Ext.cq1('app-main').getController().removeAllServices(false, function() {
- if ( !profile.user_metadata || !profile.user_metadata.services ) return;
- Ext.each(profile.user_metadata.services, function(s) {
- var service = Ext.create('Rambox.model.Service', s);
- service.save();
- Ext.getStore('Services').add(service);
- });
-
- require('electron').remote.getCurrentWindow().reload();
- });
- });
- }
-
- ,checkConfiguration: function() {
- var me = this;
-
- me.auth0.client.userInfo(localStorage.getItem('access_token'), function(err, profile) {
- if ( err ) {
- if ( err.code === 401 ) return me.renewToken(me.checkConfiguration);
- return Ext.Msg.show({
- title: 'Error'
- ,message: 'There was an error getting the profile: ' + err.description
- ,icon: Ext.Msg.ERROR
- ,buttons: Ext.Msg.OK
- });
- }
-
- profile.user_metadata = profile['https://rambox.pro/user_metadata'];
- delete profile['https://rambox.pro/user_metadata'];
-
- if ( !profile.user_metadata ) {
- Ext.toast({
- html: 'You don\'t have any backup yet.'
- ,title: 'Synchronize Configuration'
- ,width: 300
- ,align: 't'
- ,closable: false
- });
- return;
- }
-
- if ( Math.floor(new Date(profile.user_metadata.services_lastupdate) / 1000) > Math.floor(new Date(Ext.decode(localStorage.getItem('profile')).user_metadata.services_lastupdate) / 1000) ) {
- Ext.toast({
- html: 'Your settings are out of date.'
- ,title: 'Synchronize Configuration'
- ,width: 300
- ,align: 't'
- ,closable: false
- });
- } else {
- Ext.toast({
- html: ' Latest backup is already applied.'
- ,title: 'Synchronize Configuration'
- ,width: 300
- ,align: 't'
- ,closable: false
- });
- }
- });
- }
-
- ,renewToken: function(callback) {
- var me = this;
-
- Ext.Ajax.request({
- url: 'https://rambox.auth0.com/oauth/token'
- ,method: 'POST'
- ,jsonData: {
- grant_type: 'refresh_token'
- ,client_id: auth0Cfg.clientID
- ,client_secret: auth0Cfg.clientSecret
- ,refresh_token: localStorage.getItem('refresh_token')
- ,api_type: 'app'
- }
- ,success: function(response) {
- var json = Ext.decode(response.responseText);
- localStorage.setItem('access_token', json.access_token);
- localStorage.setItem('id_token', json.id_token);
-
- if ( Ext.isFunction(callback) ) callback.bind(me)();
- }
- ,failure: function(response) {
- console.error(response);
- }
- });
- }
-
- ,login: function() {
- var me = this;
-
- var electron = require('electron').remote;
- var authWindow = new electron.BrowserWindow({
- title: 'Rambox - Login'
- ,width: 400
- ,height: 600
- ,maximizable: false
- ,minimizable: false
- ,resizable: true
- ,closable: true
- ,center: true
- ,autoHideMenuBar: true
- ,skipTaskbar: true
- ,fullscreenable: false
- ,parent: require('electron').remote.getCurrentWindow()
- ,webPreferences: {
- partition: 'persist:rambox'
- }
- });
-
- authWindow.on('closed', function() {
- authWindow = null;
- });
-
- authWindow.loadURL(me.authService.requestAuthCode());
-
- authWindow.webContents.on('did-start-loading', function(e) {
- authWindow.webContents.session.webRequest.onBeforeSendHeaders((details, callback) => {
- Rambox.app.config.googleURLs.forEach((loginURL) => {
- if ( details.url.indexOf(loginURL) > -1 ) details.requestHeaders['User-Agent'] = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0' })
- callback({ cancel: false, requestHeaders: details.requestHeaders });
- });
- });
-
- authWindow.webContents.on('did-navigate', function(e, url) {
- me.authService.requestAccessCode(url, me.onLogin.bind(me), authWindow);
- });
- }
-
- ,logout: function() {
- var me = this;
-
- localStorage.removeItem('profile');
- localStorage.removeItem('id_token');
- localStorage.removeItem('refresh_token');
- localStorage.removeItem('access_token');
-
- // Set cookies to help Tooltip.io messages segmentation
- Ext.util.Cookies.set('auth0', false);
- }
-});
diff --git a/app/ux/WebView.js b/app/ux/WebView.js
index db92fbe91..5ac2b4a9f 100644
--- a/app/ux/WebView.js
+++ b/app/ux/WebView.js
@@ -39,7 +39,7 @@ Ext.define('Rambox.ux.WebView',{
Ext.apply(me, {
items: me.webViewConstructor()
,title: prefConfig.hide_tabbar_labels ? '' : (me.record.get('tabname') ? me.record.get('name') : '')
- ,icon: me.record.get('type') === 'custom' ? (me.record.get('logo') === '' ? 'resources/icons/custom.png' : me.record.get('logo')) : 'https://firebasestorage.googleapis.com/v0/b/rambox-d1326.appspot.com/o/services%2F'+me.record.get('logo')+'?alt=media'
+ ,icon: me.record.get('type') === 'custom' ? (me.record.get('logo') === '' ? 'resources/icons/custom.png' : me.record.get('logo')) : 'resources/icons/'+me.record.get('logo')
,src: me.record.get('url')
,type: me.record.get('type')
,align: me.record.get('align')
@@ -274,24 +274,23 @@ Ext.define('Rambox.ux.WebView',{
var webview = me.getWebView();
me.errorCodeLog = []
- // Google Analytics Event
- ga_storage._trackEvent('Services', 'load', me.type, 1, true);
-
// Notifications in Webview
me.setNotifications(localStorage.getItem('locked') || JSON.parse(localStorage.getItem('dontDisturb')) ? false : me.record.get('notifications'));
+ require('electron').remote.session.fromPartition('persist:' + me.record.get('type') + '_' + me.id.replace('tab_', '') + (localStorage.getItem('id_token') ? '_' + Ext.decode(localStorage.getItem('profile')).sub : '')).webRequest.onBeforeSendHeaders((details, callback) => {
+ const change = details.url.match(/^https:\/\/accounts\.google\.com(\/|$)/);
+ if ( change ) details.requestHeaders['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0';
+ callback({ cancel: false, requestHeaders: details.requestHeaders });
+ });
+
// Show and hide spinner when is loading
webview.addEventListener("did-start-loading", function() {
console.info('Start loading...', me.src);
- require('electron').remote.webContents.fromId(webview.getWebContentsId()).session.webRequest.onBeforeSendHeaders((details, callback) => {
- Rambox.app.config.googleURLs.forEach((loginURL) => { if ( details.url.indexOf(loginURL) > -1 ) details.requestHeaders['User-Agent'] = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0'});
- callback({ cancel: false, requestHeaders: details.requestHeaders });
- });
-
if ( !me.down('statusbar').closed || !me.down('statusbar').keep ) me.down('statusbar').show();
me.down('statusbar').showBusy();
});
+
webview.addEventListener("did-stop-loading", function() {
me.down('statusbar').clearStatus({useDefaults: true});
if ( !me.down('statusbar').keep ) me.down('statusbar').hide();
@@ -377,11 +376,13 @@ Ext.define('Rambox.ux.WebView',{
// Open links in default browser
webview.addEventListener('new-window', function(e) {
e.preventDefault();
- const protocol = require('url').parse(e.url).protocol;
+ const { URL } = require('url');
+ const url = new URL(e.url);
+ const protocol = url.protocol;
// 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(e.url);
+ if ( !['http:', 'https:', 'about:'].includes(protocol) ) return require('electron').shell.openExternal(url.href);
});
webview.addEventListener('will-navigate', function(e, url) {
diff --git a/app/view/add/Add.js b/app/view/add/Add.js
index 3f1112dd7..9ddb15999 100644
--- a/app/view/add/Add.js
+++ b/app/view/add/Add.js
@@ -28,7 +28,7 @@ Ext.define('Rambox.view.add.Add',{
var me = this;
me.title = (!me.edit ? locale['app.window[0]'] : locale['app.window[1]']) + ' ' + me.record.get('name');
- me.icon = me.record.get('type') === 'custom' ? (!me.edit ? 'resources/icons/custom.png' : (me.record.get('logo') === '' ? 'resources/icons/custom.png' : me.record.get('logo'))) : 'https://firebasestorage.googleapis.com/v0/b/rambox-d1326.appspot.com/o/services%2F'+me.record.get('logo')+'?alt=media';
+ me.icon = me.record.get('type') === 'custom' ? (!me.edit ? 'resources/icons/custom.png' : (me.record.get('logo') === '' ? 'resources/icons/custom.png' : me.record.get('logo'))) : 'resources/icons/'+me.record.get('logo');
me.items = [
{
xtype: 'form'
diff --git a/app/view/main/Main.js b/app/view/main/Main.js
index 209bc1e92..852ca7d5f 100644
--- a/app/view/main/Main.js
+++ b/app/view/main/Main.js
@@ -28,13 +28,6 @@ Ext.define('Rambox.view.main.Main', {
,tabBar: {
id: 'mainTabBar'
,cls: JSON.parse(localStorage.getItem('dontDisturb')) ? 'dontdisturb' : ''
- ,items: [{
- xtype: 'button'
- ,html: ''
- ,baseCls: ''
- ,tooltip: locale['app.main[25]']
- ,href: 'https://rambox.app/donate.html'
- }]
}
,items: [
{
@@ -110,7 +103,7 @@ Ext.define('Rambox.view.main.Main', {
,tpl: [
'
'+locale['app.main[18]']+(require('electron').remote.process.platform === 'darwin' ? ': Cmd + Alt + L' : ': Alt + Shift + L')
,handler: 'lockRambox'
,id: 'lockRamboxBtn'
- },'-'
- ,{
- html: ' Try Rambox Pro'
- ,href: 'https://rambox.pro/api/download'
- ,baseCls: ''
}
,'->'
- ,{
- xtype: 'image'
- ,id: 'avatar'
- ,bind: {
- src: '{avatar}'
- ,hidden: '{!avatar}'
- }
- ,width: 30
- ,height: 30
- ,style: 'border-radius: 50%;border:2px solid #d8d8d8;'
- }
- ,{
- id: 'usernameBtn'
- ,bind: {
- text: '{username}'
- ,hidden: '{!username}'
- }
- ,menu: [
- {
- text: 'Synchronize Configuration'
- ,glyph: 'xf0c2@FontAwesome'
- ,menu: [
- {
- xtype: 'label'
- ,bind: {
- html: 'Last Sync: {last_sync}'
- }
- }
- ,{
- text: 'Backup'
- ,glyph: 'xf0ee@FontAwesome'
- ,scope: Rambox.ux.Auth0
- ,handler: Rambox.ux.Auth0.backupConfiguration
- }
- ,{
- text: 'Restore'
- ,glyph: 'xf0ed@FontAwesome'
- ,scope: Rambox.ux.Auth0
- ,handler: Rambox.ux.Auth0.restoreConfiguration
- }
- ,{
- text: 'Check for updated backup'
- ,glyph: 'xf021@FontAwesome'
- ,scope: Rambox.ux.Auth0
- ,handler: Rambox.ux.Auth0.checkConfiguration
- }
- ]
- }
- ,'-'
- ,{
- text: locale['app.main[21]']
- ,glyph: 'xf08b@FontAwesome'
- ,handler: 'logout'
- }
- ]
- }
- ,{
- text: locale['app.main[22]']
- ,icon: 'resources/auth0.png'
- ,id: 'loginBtn'
- ,tooltip: locale['app.main[23]']+'
'+locale['app.main[24]']+' Auth0 (https://auth0.com)'
- ,bind: {
- hidden: '{username}'
- }
- ,handler: 'login'
- }
,{
tooltip: locale['preferences[0]']
,glyph: 'xf013@FontAwesome'
@@ -336,56 +258,23 @@ Ext.define('Rambox.view.main.Main', {
}
]
}
- ,bbar: [
- {
- xtype: 'segmentedbutton'
- ,allowToggle: false
- ,items: [
- {
- text: 'Help us with'
- ,pressed: true
- }
- ,{
- text: locale['app.main[25]']
- ,glyph: 'xf21e@FontAwesome'
- ,href: 'https://rambox.app/donate.html'
- }
- ,{
- text: 'Translation'
- ,glyph: 'xf0ac@FontAwesome'
- ,href: 'https://crowdin.com/project/rambox/invite'
- }
- ]
- }
- ,'->'
- ,{
- xtype: 'label'
- ,html: ' '+locale['app.main[26]']+' '+locale['app.main[27]'].replace('Argentina', '')
- }
- ,'->'
- ,{
- xtype: 'segmentedbutton'
- ,allowToggle: false
- ,items: [
- {
- text: 'Follow us'
- ,pressed: true
- }
- ,{
- glyph: 'xf082@FontAwesome'
- ,href: 'https://www.facebook.com/ramboxapp'
- }
- ,{
- glyph: 'xf099@FontAwesome'
- ,href: 'https://www.twitter.com/ramboxapp'
- }
- ,{
- glyph: 'xf09b@FontAwesome'
- ,href: 'https://github.com/ramboxapp/community-edition'
+ ,bbar: {
+ xtype: 'toolbar'
+ ,cls: 'deprecation'
+ ,items: [
+ ' This version of Rambox is no longer supported. We highly recommend that you update to the new version of Rambox which has a free plan with all the features you already use and much more!'
+ ,'->'
+ ,{
+ xtype: 'button'
+ ,text: 'Migrate now'
+ ,handler: function(btn) {
+ btn.setText('Downloading...');
+ btn.setDisabled(true);
+ Rambox.app.checkUpdate();
}
- ]
- }
- ]
+ }
+ ]
+ }
}
,{ id: 'tbfill', tabConfig : { xtype : 'tbfill' } }
]
diff --git a/app/view/main/MainController.js b/app/view/main/MainController.js
index c7a411067..7c369a54e 100644
--- a/app/view/main/MainController.js
+++ b/app/view/main/MainController.js
@@ -23,9 +23,6 @@ Ext.define('Rambox.view.main.MainController', {
,onTabChange: function( tabPanel, newTab, oldTab ) {
var me = this;
- // Set Google Analytics event
- ga_storage._trackPageview('/index.html', 'main');
-
localStorage.setItem('last_active_service', newTab.id);
if ( newTab.id === 'ramboxTab' ) {
@@ -300,9 +297,6 @@ Ext.define('Rambox.view.main.MainController', {
,dontDisturb: function(btn, e, called) {
console.info('Dont Disturb:', btn.pressed ? 'Enabled' : 'Disabled');
- // Google Analytics Event
- if ( !called ) ga_storage._trackEvent('Usability', 'dontDisturb', ( btn.pressed ? 'on' : 'off' ));
-
Ext.Array.each(Ext.getStore('Services').collect('id'), function(serviceId) {
// Get Tab
var tab = Ext.getCmp('tab_'+serviceId);
@@ -397,9 +391,6 @@ Ext.define('Rambox.view.main.MainController', {
// Save encrypted password in localStorage to show locked when app is reopen
localStorage.setItem('locked', text);
- // Google Analytics Event
- ga_storage._trackEvent('Usability', 'locked');
-
me.lookupReference('disturbBtn').setPressed(true);
me.dontDisturb(me.lookupReference('disturbBtn'), false, true);
@@ -487,53 +478,6 @@ Ext.define('Rambox.view.main.MainController', {
}
,openPreferences: function( btn ) {
- var me = this;
-
Ext.create('Rambox.view.preferences.Preferences').show();
}
-
- ,login: function(btn) {
- var me = this;
-
- Rambox.ux.Auth0.login();
- }
-
- ,logout: function(btn) {
- var me = this;
-
- var logoutFn = function(callback) {
- Ext.Msg.wait(locale['app.window[37]'], locale['app.main[21]']);
-
- // Google Analytics Event
- ga_storage._trackEvent('Users', 'loggedOut');
-
- // Logout from Auth0
- Rambox.ux.Auth0.logout();
-
- Ext.cq1('app-main').getViewModel().set('username', '');
- Ext.cq1('app-main').getViewModel().set('avatar', '');
-
- if ( Ext.isFunction(callback) ) {
- callback(false, function() {
- Ext.Msg.hide();
- });
- } else {
- Ext.Msg.hide();
- }
- }
-
- if ( btn ) {
- Ext.Msg.confirm(locale['app.main[21]'], locale['app.window[38]'], function(btnId) {
- if ( btnId === 'yes' ) {
- logoutFn(me.removeAllServices.bind(me));
- }
- });
- } else {
- logoutFn();
- }
- }
-
- ,showDonate: function( btn ) {
- Signalayer.API.show('tChaoq3PwSG9wswhn');
- }
});
diff --git a/app/view/preferences/Preferences.js b/app/view/preferences/Preferences.js
index 38c08e96d..82f2caebc 100644
--- a/app/view/preferences/Preferences.js
+++ b/app/view/preferences/Preferences.js
@@ -74,50 +74,50 @@ Ext.define('Rambox.view.preferences.Preferences',{
,store: Ext.create('Ext.data.Store', {
fields: ['value', 'label']
,data: [
- { 'value': 'af', 'auth0': 'af', 'label': 'Afrikaans' }
- ,{ 'value': 'ar', 'auth0': 'en', 'label': 'Arabic' }
- ,{ 'value': 'bs2', 'auth0': 'en', 'label': 'Barndutsch, Switzerland' }
- ,{ 'value': 'bn', 'auth0': 'en', 'label': 'Bengali' }
- ,{ 'value': 'bg', 'auth0': 'en', 'label': 'Bulgarian' }
- ,{ 'value': 'ca', 'auth0': 'ca', 'label': 'Catalan' }
- ,{ 'value': 'ceb', 'auth0': 'en', 'label': 'Cebuano' }
- ,{ 'value': 'zh-CN', 'auth0': 'zh', 'label': 'Chinese Simplified' }
- ,{ 'value': 'zh-TW', 'auth0': 'zh-tw', 'label': 'Chinese Traditional' }
- ,{ 'value': 'hr', 'auth0': 'en', 'label': 'Croatian' }
- ,{ 'value': 'cs', 'auth0': 'cs', 'label': 'Czech' }
- ,{ 'value': 'da', 'auth0': 'da', 'label': 'Danish' }
- ,{ 'value': 'nl', 'auth0': 'nl', 'label': 'Dutch' }
- ,{ 'value': 'en', 'auth0': 'en', 'label': 'English' }
- ,{ 'value': 'fi', 'auth0': 'fi', 'label': 'Finnish' }
- ,{ 'value': 'fil', 'auth0': 'en', 'label': 'Filipino' }
- ,{ 'value': 'fr', 'auth0': 'fr', 'label': 'French' }
- ,{ 'value': 'de', 'auth0': 'de', 'label': 'German' }
- ,{ 'value': 'de-CH', 'auth0': 'de', 'label': 'German, Switzerland' }
- ,{ 'value': 'el', 'auth0': 'el', 'label': 'Greek' }
- ,{ 'value': 'he', 'auth0': 'en', 'label': 'Hebrew' }
- ,{ 'value': 'hi', 'auth0': 'en', 'label': 'Hindi' }
- ,{ 'value': 'hu', 'auth0': 'hu', 'label': 'Hungarian' }
- ,{ 'value': 'id', 'auth0': 'en', 'label': 'Indonesian' }
- ,{ 'value': 'it', 'auth0': 'it', 'label': 'Italian' }
- ,{ 'value': 'ja', 'auth0': 'ja', 'label': 'Japanese' }
- ,{ 'value': 'ko', 'auth0': 'ko', 'label': 'Korean' }
- ,{ 'value': 'no', 'auth0': 'no', 'label': 'Norwegian' }
- ,{ 'value': 'fa', 'auth0': 'fa', 'label': 'Persian' }
- ,{ 'value': 'pl', 'auth0': 'pl', 'label': 'Polish' }
- ,{ 'value': 'pt-PT', 'auth0': 'pt-br', 'label': 'Portuguese' }
- ,{ 'value': 'pt-BR', 'auth0': 'pt-br', 'label': 'Portuguese (Brazilian)' }
- ,{ 'value': 'ro', 'auth0': 'ro', 'label': 'Romanian' }
- ,{ 'value': 'ru', 'auth0': 'ru', 'label': 'Russian' }
- ,{ 'value': 'sr', 'auth0': 'en', 'label': 'Serbian (Cyrillic)' }
- ,{ 'value': 'sk', 'auth0': 'sk', 'label': 'Slovak' }
- ,{ 'value': 'es-ES', 'auth0': 'es', 'label': 'Spanish' }
- ,{ 'value': 'sv-SE', 'auth0': 'sv', 'label': 'Swedish' }
- ,{ 'value': 'tl', 'auth0': 'en', 'label': 'Tagalog' }
- ,{ 'value': 'th', 'auth0': 'en', 'label': 'Thai' }
- ,{ 'value': 'tr', 'auth0': 'tr', 'label': 'Turkish' }
- ,{ 'value': 'uk', 'auth0': 'en', 'label': 'Ukrainian' }
- ,{ 'value': 'ur-PK', 'auth0': 'en', 'label': 'Urdu (Pakistan)' }
- ,{ 'value': 'vi', 'auth0': 'en', 'label': 'Vietnamese' }
+ { 'value': 'af', 'extjs': 'af', 'label': 'Afrikaans' }
+ ,{ 'value': 'ar', 'extjs': 'en', 'label': 'Arabic' }
+ ,{ 'value': 'bs2', 'extjs': 'en', 'label': 'Barndutsch, Switzerland' }
+ ,{ 'value': 'bn', 'extjs': 'en', 'label': 'Bengali' }
+ ,{ 'value': 'bg', 'extjs': 'en', 'label': 'Bulgarian' }
+ ,{ 'value': 'ca', 'extjs': 'ca', 'label': 'Catalan' }
+ ,{ 'value': 'ceb', 'extjs': 'en', 'label': 'Cebuano' }
+ ,{ 'value': 'zh-CN', 'extjs': 'zh', 'label': 'Chinese Simplified' }
+ ,{ 'value': 'zh-TW', 'extjs': 'zh-tw', 'label': 'Chinese Traditional' }
+ ,{ 'value': 'hr', 'extjs': 'en', 'label': 'Croatian' }
+ ,{ 'value': 'cs', 'extjs': 'cs', 'label': 'Czech' }
+ ,{ 'value': 'da', 'extjs': 'da', 'label': 'Danish' }
+ ,{ 'value': 'nl', 'extjs': 'nl', 'label': 'Dutch' }
+ ,{ 'value': 'en', 'extjs': 'en', 'label': 'English' }
+ ,{ 'value': 'fi', 'extjs': 'fi', 'label': 'Finnish' }
+ ,{ 'value': 'fil', 'extjs': 'en', 'label': 'Filipino' }
+ ,{ 'value': 'fr', 'extjs': 'fr', 'label': 'French' }
+ ,{ 'value': 'de', 'extjs': 'de', 'label': 'German' }
+ ,{ 'value': 'de-CH', 'extjs': 'de', 'label': 'German, Switzerland' }
+ ,{ 'value': 'el', 'extjs': 'el', 'label': 'Greek' }
+ ,{ 'value': 'he', 'extjs': 'en', 'label': 'Hebrew' }
+ ,{ 'value': 'hi', 'extjs': 'en', 'label': 'Hindi' }
+ ,{ 'value': 'hu', 'extjs': 'hu', 'label': 'Hungarian' }
+ ,{ 'value': 'id', 'extjs': 'en', 'label': 'Indonesian' }
+ ,{ 'value': 'it', 'extjs': 'it', 'label': 'Italian' }
+ ,{ 'value': 'ja', 'extjs': 'ja', 'label': 'Japanese' }
+ ,{ 'value': 'ko', 'extjs': 'ko', 'label': 'Korean' }
+ ,{ 'value': 'no', 'extjs': 'no', 'label': 'Norwegian' }
+ ,{ 'value': 'fa', 'extjs': 'fa', 'label': 'Persian' }
+ ,{ 'value': 'pl', 'extjs': 'pl', 'label': 'Polish' }
+ ,{ 'value': 'pt-PT', 'extjs': 'pt-br', 'label': 'Portuguese' }
+ ,{ 'value': 'pt-BR', 'extjs': 'pt-br', 'label': 'Portuguese (Brazilian)' }
+ ,{ 'value': 'ro', 'extjs': 'ro', 'label': 'Romanian' }
+ ,{ 'value': 'ru', 'extjs': 'ru', 'label': 'Russian' }
+ ,{ 'value': 'sr', 'extjs': 'en', 'label': 'Serbian (Cyrillic)' }
+ ,{ 'value': 'sk', 'extjs': 'sk', 'label': 'Slovak' }
+ ,{ 'value': 'es-ES', 'extjs': 'es', 'label': 'Spanish' }
+ ,{ 'value': 'sv-SE', 'extjs': 'sv', 'label': 'Swedish' }
+ ,{ 'value': 'tl', 'extjs': 'en', 'label': 'Tagalog' }
+ ,{ 'value': 'th', 'extjs': 'en', 'label': 'Thai' }
+ ,{ 'value': 'tr', 'extjs': 'tr', 'label': 'Turkish' }
+ ,{ 'value': 'uk', 'extjs': 'en', 'label': 'Ukrainian' }
+ ,{ 'value': 'ur-PK', 'extjs': 'en', 'label': 'Urdu (Pakistan)' }
+ ,{ 'value': 'vi', 'extjs': 'en', 'label': 'Vietnamese' }
]
})
}
@@ -361,12 +361,6 @@ Ext.define('Rambox.view.preferences.Preferences',{
}
]
}
- ,{
- xtype: 'checkbox'
- ,name: 'sendStatistics'
- ,boxLabel: locale['preferences[27]']
- ,value: config.sendStatistics
- }
]
}
];
diff --git a/app/view/preferences/PreferencesController.js b/app/view/preferences/PreferencesController.js
index 2cbe3853a..9f2749410 100644
--- a/app/view/preferences/PreferencesController.js
+++ b/app/view/preferences/PreferencesController.js
@@ -55,7 +55,7 @@ Ext.define('Rambox.view.preferences.PreferencesController', {
// Locale
if ( values.locale !== ipc.sendSync('getConfig').locale ) {
localStorage.setItem('locale', values.locale);
- localStorage.setItem('locale-auth0', me.getView().down('form').down('combo[name="locale"]').getSelection().get('auth0'));
+ localStorage.setItem('locale-extjs', me.getView().down('form').down('combo[name="locale"]').getSelection().get('extjs'));
Ext.Msg.confirm('Action required', 'To change the language of Rambox, you need to reload the app. Do you want to do it now?', function(btnId) {
if ( btnId === 'yes' ) ipc.send('relaunchApp');
});
diff --git a/electron/main.js b/electron/main.js
index fb68150f2..2b73c41d3 100644
--- a/electron/main.js
+++ b/electron/main.js
@@ -143,7 +143,7 @@ function createWindow () {
tray.create(mainWindow, config);
- if ( process.argv.indexOf('--without-update') === -1 ) updater.initialize(mainWindow);
+ updater.initialize(mainWindow);
// Open links in default browser
mainWindow.webContents.on('new-window', function(e, url, frameName, disposition, options) {
@@ -579,6 +579,7 @@ ipcMain.on('toggleWin', function(event, allwaysShow) {
// ScreenShare
ipcMain.on('screenShare:show', (event, screenList) => {
let tmpWindow = new BrowserWindow({
+ title: 'Rambox - Select screen',
width: 600,
height: 500,
icon: __dirname + '/../resources/Icon.ico',
@@ -589,6 +590,7 @@ ipcMain.on('screenShare:show', (event, screenList) => {
hasShadow: true,
webPreferences: {
nodeIntegration: true,
+ contextIsolation: false,
},
});
diff --git a/electron/menu.js b/electron/menu.js
index ee1b8596a..c90947438 100644
--- a/electron/menu.js
+++ b/electron/menu.js
@@ -23,7 +23,7 @@ module.exports = function(config) {
{
label: `&`+locale['menu.help[0]'],
click() {
- shell.openExternal('https://rambox.pro');
+ shell.openExternal('https://rambox.app');
}
},
{
@@ -47,23 +47,6 @@ module.exports = function(config) {
{
type: 'separator'
},
- {
- label: '&'+locale['menu.help[1]'],
- click() {
- const body = `
-
-
-
-
-
- -
- > ${app.getName()} ${app.getVersion()}
- > Electron ${process.versions.electron}
- > ${process.platform} ${process.arch} ${os.release()}`;
-
- shell.openExternal(`https://github.com/ramboxapp/community-edition/issues/new?body=${encodeURIComponent(body)}`);
- }
- },
{
label: `&Tools`,
submenu: [
@@ -92,15 +75,6 @@ module.exports = function(config) {
}
]
},
- {
- type: 'separator'
- },
- {
- label: `&`+locale['menu.help[3]'],
- click() {
- shell.openExternal('https://rambox.app/donate.html');
- }
- }
];
let tpl = [
diff --git a/electron/tray.js b/electron/tray.js
index ade4cb71f..c2e16761a 100644
--- a/electron/tray.js
+++ b/electron/tray.js
@@ -44,12 +44,12 @@ exports.create = function(win, config) {
// Double click is not supported and Click its only supported when app indicator is not used.
// Read more here (Platform limitations): https://github.com/electron/electron/blob/master/docs/api/tray.md
appIcon.on('click', function() {
- win.webContents.executeJavaScript('ipc.send("toggleWin", true);');
+ win.webContents.executeJavaScript('ipc.send("toggleWin", false);');
});
break;
case 'win32':
appIcon.on('double-click', function() {
- win.webContents.executeJavaScript('ipc.send("toggleWin", true);');
+ win.webContents.executeJavaScript('ipc.send("toggleWin", false);');
});
break;
default:
diff --git a/electron/updater.js b/electron/updater.js
index 18b587606..8b6062863 100644
--- a/electron/updater.js
+++ b/electron/updater.js
@@ -1,12 +1,18 @@
const { app, ipcMain, BrowserWindow } = require('electron');
const { autoUpdater } = require("electron-updater");
-const path = require('path');
// autoUpdater.logger = require("electron-log");
// autoUpdater.logger.transports.file.level = "debug";
-// autoUpdater.currentVersion = '0.6.0';
+// autoUpdater.currentVersion = '0.8.0';
// autoUpdater.updateConfigPath = path.join(__dirname, 'dev-app-update.yml');
+autoUpdater.setFeedURL({
+ "provider": "github",
+ "owner": "ramboxapp",
+ "repo": "download",
+ "vPrefixedTagName": true
+});
+
const initialize = (window) => {
const webContents = window.webContents;
const send = webContents.send.bind(window.webContents);
@@ -15,7 +21,7 @@ const initialize = (window) => {
ipcMain.on('autoUpdater:quit-and-install', (event) => {
app.removeAllListeners('window-all-closed');
BrowserWindow.getAllWindows().forEach((browserWindow) => browserWindow.removeAllListeners('close'));
- autoUpdater.quitAndInstall()
+ autoUpdater.quitAndInstall(true, true);
});
ipcMain.on('autoUpdater:check-for-updates', (event) => autoUpdater.checkForUpdates());
};
diff --git a/env-sample.js b/env-sample.js
deleted file mode 100644
index 702922226..000000000
--- a/env-sample.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var auth0Cfg = {
- clientID: ''
- ,clientSecret: ''
- ,domain: ''
-};
diff --git a/package.json b/package.json
index 4f2ebbd4b..12281124c 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "Rambox",
"productName": "Rambox",
- "version": "0.7.9",
+ "version": "0.8.0",
"description": "Free and Open Source messaging and emailing app that combines common web applications into one.",
"main": "electron/main.js",
"repository": {
@@ -78,7 +78,12 @@
"category": "public.app-category.productivity",
"artifactName": "Rambox-${version}-mac-${arch}.${ext}",
"target": [
- "default"
+ {
+ "target": "default",
+ "arch": [
+ "universal"
+ ]
+ }
],
"hardenedRuntime": true,
"gatekeeperAssess": false,
@@ -213,7 +218,7 @@
"crowdin": "1.0.0",
"csvjson": "4.3.3",
"electron": "13.6.3",
- "electron-builder": "22.14.5",
+ "electron-builder": "22.14.13",
"electron-notarize": "1.0.0",
"electron-packager": "15.1.0",
"mocha": "5.2.0",
@@ -221,14 +226,13 @@
},
"dependencies": {
"@exponent/electron-cookies": "2.0.0",
- "auth0-js": "9.13.2",
"auto-launch-patched": "5.0.2",
"crypto": "1.0.1",
"electron-contextmenu-wrapper": "git+https://github.com/ramboxapp/electron-contextmenu-wrapper.git",
"electron-is-dev": "1.2.0",
"electron-log": "4.3.0",
"electron-store": "6.0.1",
- "electron-updater": "4.3.5",
+ "electron-updater": "4.5.2",
"is-online": "8.2.0",
"mime": "2.3.1",
"mousetrap": "1.6.3",
diff --git a/packages/local/rambox-default-theme/sass/etc/all.scss b/packages/local/rambox-default-theme/sass/etc/all.scss
index 7258b77a9..e6651efa8 100644
--- a/packages/local/rambox-default-theme/sass/etc/all.scss
+++ b/packages/local/rambox-default-theme/sass/etc/all.scss
@@ -279,3 +279,8 @@ body {
background-color: #c3c3c3;
}
}
+
+.deprecation {
+ background-color: #E6A23C !important;
+ color: #FFF;
+}
diff --git a/resources/css/screenselector.css b/resources/css/screenselector.css
deleted file mode 100644
index c3f5314be..000000000
--- a/resources/css/screenselector.css
+++ /dev/null
@@ -1,146 +0,0 @@
-html, body {
- width: 100%;
- height: 100%;
- margin: 0;
- overflow: hidden;
-}
-
-.screen-selector {
- background-color: #fff;
- width: 100%;
- height: 100%;
- border-radius: 5px;
- border: solid 1px #cdcdcd;
- box-sizing: border-box;
-}
-
-.screen-selector ul.type {
- display: inline-block;
- padding: 0;
- margin: 0;
- border-bottom: solid 1px #cdcdcd;
- width: 100%;
- -webkit-app-region: drag;
-}
-
-.screen-selector ul.type li {
- display: inline-block;
- height: 40px;
- line-height: 40px;
- color: #65696c;
- border-bottom: 2px solid transparent;
- font-family: sans-serif;
- font-weight: bold;
- padding: 0 15px;
- cursor: pointer;
- -webkit-app-region: no-drag;
-}
-
-.screen-selector ul.type li.active, .screen-selector ul.type li:hover {
- color: #426ba3;
- border-color: #426ba3;
-}
-
-.screen-selector > .content {
- height: calc(100% - 92px);
-}
-
-.screen-selector ul.preview {
- display: flex;
- margin: 0;
- padding: 0;
- width: 100%;
- max-height: calc(100% - 45px);
- box-sizing: border-box;
- padding: 10px;
- overflow-y: auto;
- flex-wrap: wrap;
- list-style-type: none;
-}
-
-.screen-selector ul.preview li {
- display: inline-block;
- box-sizing: border-box;
- width: calc(33% - 1px);
- cursor: pointer;
- padding: 5px;
-}
-
-.screen-selector ul.preview li .content {
- display: flex;
- box-sizing: border-box;
- padding: 10px;
- border: solid 2px transparent;
- border-radius: 5px;
- height: 100%;
- flex-direction: column;
-}
-
-.screen-selector ul.preview li.active .content,
-.screen-selector ul.preview li:hover .content {
- border-color: #88abdb;
-}
-
-.screen-selector ul.preview li.active .content {
- color: #000;
- height: 100%;
-}
-
-.screen-selector ul.preview li .content .img-wrapper {
- display: flex;
- height: 100%;
- align-items: center;
- background: #f0f0f0;
-}
-
-.screen-selector ul.preview li .content img {
- display: inline-block;
- width: 100%;
-}
-
-.screen-selector ul.preview li .content span {
- display: inline-block;
- width: 100%;
- font-family: sans-serif;
- text-align: center;
- font-size: 14px;
- margin-top: 10px;
- color: #333;
- box-sizing: border-box;
-}
-
-.screen-selector .footer {
- display: inline-block;
- width: 100%;
- border-top: solid 1px #cdcdcd;
-
-}
-
-.screen-selector .footer button {
- float: right;
- margin-top: 10px;
- margin-right: 10px;
- border: none;
- border-radius: 5px;
- padding: 5px 10px;
- font-size: 14px;
- cursor: pointer;
- font-weight: bold;
-}
-
-.screen-selector .footer button#cancel {
- border: solid 1px #cdcdcd;
- background: #fff;
- color: #1c73e4;
-}
-
-.screen-selector .footer button#share {
- border: solid 1px #186ddd;
- background: #1c73e4;
- color: #fff;
-}
-
-.screen-selector .footer button#share[disabled] {
- background: #666;
- cursor: default;
-}
diff --git a/resources/icons/airdroid.png b/resources/icons/airdroid.png
new file mode 100644
index 000000000..9a975cd03
Binary files /dev/null and b/resources/icons/airdroid.png differ
diff --git a/resources/icons/androidmessages.png b/resources/icons/androidmessages.png
new file mode 100644
index 000000000..c3cb48693
Binary files /dev/null and b/resources/icons/androidmessages.png differ
diff --git a/resources/icons/aol.png b/resources/icons/aol.png
new file mode 100644
index 000000000..d5eb6741d
Binary files /dev/null and b/resources/icons/aol.png differ
diff --git a/resources/icons/awsworkmail.png b/resources/icons/awsworkmail.png
new file mode 100644
index 000000000..0ee0b0032
Binary files /dev/null and b/resources/icons/awsworkmail.png differ
diff --git a/resources/icons/bearychat.png b/resources/icons/bearychat.png
new file mode 100644
index 000000000..0fee9b4d6
Binary files /dev/null and b/resources/icons/bearychat.png differ
diff --git a/resources/icons/bip.png b/resources/icons/bip.png
new file mode 100644
index 000000000..3254bdc09
Binary files /dev/null and b/resources/icons/bip.png differ
diff --git a/resources/icons/calendar.png b/resources/icons/calendar.png
new file mode 100644
index 000000000..9ed6830f1
Binary files /dev/null and b/resources/icons/calendar.png differ
diff --git a/resources/icons/chatwork.png b/resources/icons/chatwork.png
new file mode 100644
index 000000000..110e9fb6b
Binary files /dev/null and b/resources/icons/chatwork.png differ
diff --git a/resources/icons/cliq.png b/resources/icons/cliq.png
new file mode 100644
index 000000000..1dbf0f616
Binary files /dev/null and b/resources/icons/cliq.png differ
diff --git a/resources/icons/converse.png b/resources/icons/converse.png
new file mode 100644
index 000000000..bc38badaa
Binary files /dev/null and b/resources/icons/converse.png differ
diff --git a/resources/icons/crisp.png b/resources/icons/crisp.png
new file mode 100644
index 000000000..121d39e3e
Binary files /dev/null and b/resources/icons/crisp.png differ
diff --git a/resources/icons/devrant.png b/resources/icons/devrant.png
new file mode 100644
index 000000000..81033d472
Binary files /dev/null and b/resources/icons/devrant.png differ
diff --git a/resources/icons/dingtalk.png b/resources/icons/dingtalk.png
new file mode 100644
index 000000000..3d36882d0
Binary files /dev/null and b/resources/icons/dingtalk.png differ
diff --git a/resources/icons/discord.png b/resources/icons/discord.png
new file mode 100644
index 000000000..cc8ca736b
Binary files /dev/null and b/resources/icons/discord.png differ
diff --git a/resources/icons/drift.png b/resources/icons/drift.png
new file mode 100644
index 000000000..13dfe4c4a
Binary files /dev/null and b/resources/icons/drift.png differ
diff --git a/resources/icons/duo.png b/resources/icons/duo.png
new file mode 100644
index 000000000..9ed711a50
Binary files /dev/null and b/resources/icons/duo.png differ
diff --git a/resources/icons/element.png b/resources/icons/element.png
new file mode 100644
index 000000000..4daab1261
Binary files /dev/null and b/resources/icons/element.png differ
diff --git a/resources/icons/facebook.png b/resources/icons/facebook.png
new file mode 100644
index 000000000..67e540ce7
Binary files /dev/null and b/resources/icons/facebook.png differ
diff --git a/resources/icons/fastmail.png b/resources/icons/fastmail.png
new file mode 100644
index 000000000..5587a42ca
Binary files /dev/null and b/resources/icons/fastmail.png differ
diff --git a/resources/icons/fleep.png b/resources/icons/fleep.png
new file mode 100644
index 000000000..72f1d282b
Binary files /dev/null and b/resources/icons/fleep.png differ
diff --git a/resources/icons/flock.png b/resources/icons/flock.png
new file mode 100644
index 000000000..b24106c65
Binary files /dev/null and b/resources/icons/flock.png differ
diff --git a/resources/icons/flowdock.png b/resources/icons/flowdock.png
new file mode 100644
index 000000000..b1b6390e3
Binary files /dev/null and b/resources/icons/flowdock.png differ
diff --git a/resources/icons/freenode.png b/resources/icons/freenode.png
new file mode 100644
index 000000000..d6e8c433d
Binary files /dev/null and b/resources/icons/freenode.png differ
diff --git a/resources/icons/gadugadu.png b/resources/icons/gadugadu.png
new file mode 100644
index 000000000..0c4602c5f
Binary files /dev/null and b/resources/icons/gadugadu.png differ
diff --git a/resources/icons/gitter.png b/resources/icons/gitter.png
new file mode 100644
index 000000000..caea49ecf
Binary files /dev/null and b/resources/icons/gitter.png differ
diff --git a/resources/icons/glip.png b/resources/icons/glip.png
new file mode 100644
index 000000000..afa34f3d0
Binary files /dev/null and b/resources/icons/glip.png differ
diff --git a/resources/icons/glowingbear.png b/resources/icons/glowingbear.png
new file mode 100644
index 000000000..c1814be32
Binary files /dev/null and b/resources/icons/glowingbear.png differ
diff --git a/resources/icons/gmail.png b/resources/icons/gmail.png
new file mode 100644
index 000000000..75a217e2e
Binary files /dev/null and b/resources/icons/gmail.png differ
diff --git a/resources/icons/googledrive.png b/resources/icons/googledrive.png
new file mode 100644
index 000000000..fb0655e8a
Binary files /dev/null and b/resources/icons/googledrive.png differ
diff --git a/resources/icons/googlevoice.png b/resources/icons/googlevoice.png
new file mode 100644
index 000000000..20753e87e
Binary files /dev/null and b/resources/icons/googlevoice.png differ
diff --git a/resources/icons/grape.png b/resources/icons/grape.png
new file mode 100644
index 000000000..790ca2118
Binary files /dev/null and b/resources/icons/grape.png differ
diff --git a/resources/icons/groupme.png b/resources/icons/groupme.png
new file mode 100644
index 000000000..5a1f65e8a
Binary files /dev/null and b/resources/icons/groupme.png differ
diff --git a/resources/icons/guilded.png b/resources/icons/guilded.png
new file mode 100644
index 000000000..8dddfe98c
Binary files /dev/null and b/resources/icons/guilded.png differ
diff --git a/resources/icons/hangouts.png b/resources/icons/hangouts.png
new file mode 100644
index 000000000..0bf6e1049
Binary files /dev/null and b/resources/icons/hangouts.png differ
diff --git a/resources/icons/hangoutschat.png b/resources/icons/hangoutschat.png
new file mode 100644
index 000000000..3e8f48f4b
Binary files /dev/null and b/resources/icons/hangoutschat.png differ
diff --git a/resources/icons/hibox.png b/resources/icons/hibox.png
new file mode 100644
index 000000000..bf5f24434
Binary files /dev/null and b/resources/icons/hibox.png differ
diff --git a/resources/icons/honeypot.png b/resources/icons/honeypot.png
new file mode 100644
index 000000000..5da545a97
Binary files /dev/null and b/resources/icons/honeypot.png differ
diff --git a/resources/icons/hootsuite.png b/resources/icons/hootsuite.png
new file mode 100644
index 000000000..b832b4282
Binary files /dev/null and b/resources/icons/hootsuite.png differ
diff --git a/resources/icons/horde.png b/resources/icons/horde.png
new file mode 100644
index 000000000..e1534fc63
Binary files /dev/null and b/resources/icons/horde.png differ
diff --git a/resources/icons/hushmail.png b/resources/icons/hushmail.png
new file mode 100644
index 000000000..a07575ba6
Binary files /dev/null and b/resources/icons/hushmail.png differ
diff --git a/resources/icons/icloudmail.png b/resources/icons/icloudmail.png
new file mode 100644
index 000000000..79548e940
Binary files /dev/null and b/resources/icons/icloudmail.png differ
diff --git a/resources/icons/icq.png b/resources/icons/icq.png
new file mode 100644
index 000000000..db0eb0e27
Binary files /dev/null and b/resources/icons/icq.png differ
diff --git a/resources/icons/inbox.png b/resources/icons/inbox.png
new file mode 100644
index 000000000..6f7a2f859
Binary files /dev/null and b/resources/icons/inbox.png differ
diff --git a/resources/icons/instagramdirect.png b/resources/icons/instagramdirect.png
new file mode 100644
index 000000000..84584f594
Binary files /dev/null and b/resources/icons/instagramdirect.png differ
diff --git a/resources/icons/intercom.png b/resources/icons/intercom.png
new file mode 100644
index 000000000..eced6396a
Binary files /dev/null and b/resources/icons/intercom.png differ
diff --git a/resources/icons/irccloud.png b/resources/icons/irccloud.png
new file mode 100644
index 000000000..e245492cf
Binary files /dev/null and b/resources/icons/irccloud.png differ
diff --git a/resources/icons/jandi.png b/resources/icons/jandi.png
new file mode 100644
index 000000000..0293ae969
Binary files /dev/null and b/resources/icons/jandi.png differ
diff --git a/resources/icons/kaiwa.png b/resources/icons/kaiwa.png
new file mode 100644
index 000000000..c13a522c4
Binary files /dev/null and b/resources/icons/kaiwa.png differ
diff --git a/resources/icons/kezmo.png b/resources/icons/kezmo.png
new file mode 100644
index 000000000..0b68e62ee
Binary files /dev/null and b/resources/icons/kezmo.png differ
diff --git a/resources/icons/kiwi.png b/resources/icons/kiwi.png
new file mode 100644
index 000000000..f1207f244
Binary files /dev/null and b/resources/icons/kiwi.png differ
diff --git a/resources/icons/kune.png b/resources/icons/kune.png
new file mode 100644
index 000000000..e2bfbbe2d
Binary files /dev/null and b/resources/icons/kune.png differ
diff --git a/resources/icons/linkedin.png b/resources/icons/linkedin.png
new file mode 100644
index 000000000..df92f5770
Binary files /dev/null and b/resources/icons/linkedin.png differ
diff --git a/resources/icons/lounge.png b/resources/icons/lounge.png
new file mode 100644
index 000000000..de3566142
Binary files /dev/null and b/resources/icons/lounge.png differ
diff --git a/resources/icons/mailru.png b/resources/icons/mailru.png
new file mode 100644
index 000000000..5fc2579af
Binary files /dev/null and b/resources/icons/mailru.png differ
diff --git a/resources/icons/mastodon.png b/resources/icons/mastodon.png
new file mode 100644
index 000000000..1d81ec02e
Binary files /dev/null and b/resources/icons/mastodon.png differ
diff --git a/resources/icons/mattermost.png b/resources/icons/mattermost.png
new file mode 100644
index 000000000..7e0d5e5f0
Binary files /dev/null and b/resources/icons/mattermost.png differ
diff --git a/resources/icons/messenger.png b/resources/icons/messenger.png
new file mode 100644
index 000000000..45b2bee8d
Binary files /dev/null and b/resources/icons/messenger.png differ
diff --git a/resources/icons/messengerpages.png b/resources/icons/messengerpages.png
new file mode 100644
index 000000000..f30486c4c
Binary files /dev/null and b/resources/icons/messengerpages.png differ
diff --git a/resources/icons/mightytext.png b/resources/icons/mightytext.png
new file mode 100644
index 000000000..ac072806e
Binary files /dev/null and b/resources/icons/mightytext.png differ
diff --git a/resources/icons/missive.png b/resources/icons/missive.png
new file mode 100644
index 000000000..c3d76c41c
Binary files /dev/null and b/resources/icons/missive.png differ
diff --git a/resources/icons/movim.png b/resources/icons/movim.png
new file mode 100644
index 000000000..a792bb5e2
Binary files /dev/null and b/resources/icons/movim.png differ
diff --git a/resources/icons/mysms.png b/resources/icons/mysms.png
new file mode 100644
index 000000000..a99ae87e8
Binary files /dev/null and b/resources/icons/mysms.png differ
diff --git a/resources/icons/noysi.png b/resources/icons/noysi.png
new file mode 100644
index 000000000..f27a29c22
Binary files /dev/null and b/resources/icons/noysi.png differ
diff --git a/resources/icons/okru.png b/resources/icons/okru.png
new file mode 100644
index 000000000..5de47cccf
Binary files /dev/null and b/resources/icons/okru.png differ
diff --git a/resources/icons/openmailbox.png b/resources/icons/openmailbox.png
new file mode 100644
index 000000000..371a84ecd
Binary files /dev/null and b/resources/icons/openmailbox.png differ
diff --git a/resources/icons/outlook.png b/resources/icons/outlook.png
new file mode 100644
index 000000000..1cb65976f
Binary files /dev/null and b/resources/icons/outlook.png differ
diff --git a/resources/icons/outlook365.png b/resources/icons/outlook365.png
new file mode 100644
index 000000000..1cb65976f
Binary files /dev/null and b/resources/icons/outlook365.png differ
diff --git a/resources/icons/protonmail.png b/resources/icons/protonmail.png
new file mode 100644
index 000000000..1724f40dd
Binary files /dev/null and b/resources/icons/protonmail.png differ
diff --git a/resources/icons/protonmailch.png b/resources/icons/protonmailch.png
new file mode 100644
index 000000000..19fb052b4
Binary files /dev/null and b/resources/icons/protonmailch.png differ
diff --git a/resources/icons/pushbullet.png b/resources/icons/pushbullet.png
new file mode 100644
index 000000000..c5f8e63c9
Binary files /dev/null and b/resources/icons/pushbullet.png differ
diff --git a/resources/icons/rainloop.png b/resources/icons/rainloop.png
new file mode 100644
index 000000000..bb639dcea
Binary files /dev/null and b/resources/icons/rainloop.png differ
diff --git a/resources/icons/reddit.png b/resources/icons/reddit.png
new file mode 100644
index 000000000..2cd630528
Binary files /dev/null and b/resources/icons/reddit.png differ
diff --git a/resources/icons/riot.png b/resources/icons/riot.png
new file mode 100644
index 000000000..ffac56a38
Binary files /dev/null and b/resources/icons/riot.png differ
diff --git a/resources/icons/rocketchat.png b/resources/icons/rocketchat.png
new file mode 100644
index 000000000..a3a6aea57
Binary files /dev/null and b/resources/icons/rocketchat.png differ
diff --git a/resources/icons/roundcube.png b/resources/icons/roundcube.png
new file mode 100644
index 000000000..3abda5905
Binary files /dev/null and b/resources/icons/roundcube.png differ
diff --git a/resources/icons/ryver.png b/resources/icons/ryver.png
new file mode 100644
index 000000000..7f67ac0df
Binary files /dev/null and b/resources/icons/ryver.png differ
diff --git a/resources/icons/sandstorm.png b/resources/icons/sandstorm.png
new file mode 100644
index 000000000..e41f5580d
Binary files /dev/null and b/resources/icons/sandstorm.png differ
diff --git a/resources/icons/simplenote.png b/resources/icons/simplenote.png
new file mode 100644
index 000000000..fc9a7d8d3
Binary files /dev/null and b/resources/icons/simplenote.png differ
diff --git a/resources/icons/skype.png b/resources/icons/skype.png
new file mode 100644
index 000000000..e561b79b8
Binary files /dev/null and b/resources/icons/skype.png differ
diff --git a/resources/icons/slack.png b/resources/icons/slack.png
new file mode 100644
index 000000000..e99caad1d
Binary files /dev/null and b/resources/icons/slack.png differ
diff --git a/resources/icons/smooch.png b/resources/icons/smooch.png
new file mode 100644
index 000000000..90959572f
Binary files /dev/null and b/resources/icons/smooch.png differ
diff --git a/resources/icons/socialcast.png b/resources/icons/socialcast.png
new file mode 100644
index 000000000..4487bc6e2
Binary files /dev/null and b/resources/icons/socialcast.png differ
diff --git a/resources/auth0.png b/resources/icons/sococo.png
similarity index 51%
rename from resources/auth0.png
rename to resources/icons/sococo.png
index 9b9c69cb9..4c4a2f16d 100644
Binary files a/resources/auth0.png and b/resources/icons/sococo.png differ
diff --git a/resources/icons/spark.png b/resources/icons/spark.png
new file mode 100644
index 000000000..c134c25a2
Binary files /dev/null and b/resources/icons/spark.png differ
diff --git a/resources/icons/spike.png b/resources/icons/spike.png
new file mode 100644
index 000000000..7c1b02205
Binary files /dev/null and b/resources/icons/spike.png differ
diff --git a/resources/icons/squirrelmail.png b/resources/icons/squirrelmail.png
new file mode 100644
index 000000000..b177add09
Binary files /dev/null and b/resources/icons/squirrelmail.png differ
diff --git a/resources/icons/steam.png b/resources/icons/steam.png
new file mode 100644
index 000000000..0bfdb4829
Binary files /dev/null and b/resources/icons/steam.png differ
diff --git a/resources/icons/swello.png b/resources/icons/swello.png
new file mode 100644
index 000000000..313de158e
Binary files /dev/null and b/resources/icons/swello.png differ
diff --git a/resources/icons/sync.png b/resources/icons/sync.png
new file mode 100644
index 000000000..d0abb2cd1
Binary files /dev/null and b/resources/icons/sync.png differ
diff --git a/resources/icons/tawkto.png b/resources/icons/tawkto.png
new file mode 100644
index 000000000..6df3cb24a
Binary files /dev/null and b/resources/icons/tawkto.png differ
diff --git a/resources/icons/teams.png b/resources/icons/teams.png
new file mode 100644
index 000000000..540bebde6
Binary files /dev/null and b/resources/icons/teams.png differ
diff --git a/resources/icons/teamworkchat.png b/resources/icons/teamworkchat.png
new file mode 100644
index 000000000..74facf22e
Binary files /dev/null and b/resources/icons/teamworkchat.png differ
diff --git a/resources/icons/telegram.png b/resources/icons/telegram.png
new file mode 100644
index 000000000..d83df2e8e
Binary files /dev/null and b/resources/icons/telegram.png differ
diff --git a/resources/icons/threema.png b/resources/icons/threema.png
new file mode 100644
index 000000000..2185f466e
Binary files /dev/null and b/resources/icons/threema.png differ
diff --git a/resources/icons/tutanota.png b/resources/icons/tutanota.png
new file mode 100644
index 000000000..e4d64b744
Binary files /dev/null and b/resources/icons/tutanota.png differ
diff --git a/resources/icons/tweetdeck.png b/resources/icons/tweetdeck.png
new file mode 100644
index 000000000..f9a28ace2
Binary files /dev/null and b/resources/icons/tweetdeck.png differ
diff --git a/resources/icons/typetalk.png b/resources/icons/typetalk.png
new file mode 100644
index 000000000..9a8ea3176
Binary files /dev/null and b/resources/icons/typetalk.png differ
diff --git a/resources/icons/vk.png b/resources/icons/vk.png
new file mode 100644
index 000000000..dbe073004
Binary files /dev/null and b/resources/icons/vk.png differ
diff --git a/resources/icons/voxer.png b/resources/icons/voxer.png
new file mode 100644
index 000000000..dbcf5860f
Binary files /dev/null and b/resources/icons/voxer.png differ
diff --git a/resources/icons/wechat.png b/resources/icons/wechat.png
new file mode 100644
index 000000000..908b3e114
Binary files /dev/null and b/resources/icons/wechat.png differ
diff --git a/resources/icons/whatsapp.png b/resources/icons/whatsapp.png
new file mode 100644
index 000000000..7c028543f
Binary files /dev/null and b/resources/icons/whatsapp.png differ
diff --git a/resources/icons/whatsappbusiness.png b/resources/icons/whatsappbusiness.png
new file mode 100644
index 000000000..3a27eef09
Binary files /dev/null and b/resources/icons/whatsappbusiness.png differ
diff --git a/resources/icons/wire.png b/resources/icons/wire.png
new file mode 100644
index 000000000..dd5c82eeb
Binary files /dev/null and b/resources/icons/wire.png differ
diff --git a/resources/icons/workplace.png b/resources/icons/workplace.png
new file mode 100644
index 000000000..5af90dd24
Binary files /dev/null and b/resources/icons/workplace.png differ
diff --git a/resources/icons/xender.png b/resources/icons/xender.png
new file mode 100644
index 000000000..87be0612b
Binary files /dev/null and b/resources/icons/xender.png differ
diff --git a/resources/icons/xing.png b/resources/icons/xing.png
new file mode 100644
index 000000000..f29912575
Binary files /dev/null and b/resources/icons/xing.png differ
diff --git a/resources/icons/yahoo.png b/resources/icons/yahoo.png
new file mode 100644
index 000000000..ba7c241fc
Binary files /dev/null and b/resources/icons/yahoo.png differ
diff --git a/resources/icons/yandex.png b/resources/icons/yandex.png
new file mode 100644
index 000000000..8bfbc7f39
Binary files /dev/null and b/resources/icons/yandex.png differ
diff --git a/resources/icons/zimbra.png b/resources/icons/zimbra.png
new file mode 100644
index 000000000..c8da41711
Binary files /dev/null and b/resources/icons/zimbra.png differ
diff --git a/resources/icons/zinc.png b/resources/icons/zinc.png
new file mode 100644
index 000000000..aa6c13727
Binary files /dev/null and b/resources/icons/zinc.png differ
diff --git a/resources/icons/zohocliq.png b/resources/icons/zohocliq.png
new file mode 100644
index 000000000..48bd448d5
Binary files /dev/null and b/resources/icons/zohocliq.png differ
diff --git a/resources/icons/zohoemail.png b/resources/icons/zohoemail.png
new file mode 100644
index 000000000..12865c447
Binary files /dev/null and b/resources/icons/zohoemail.png differ
diff --git a/resources/icons/zulip.png b/resources/icons/zulip.png
new file mode 100644
index 000000000..d38b5e804
Binary files /dev/null and b/resources/icons/zulip.png differ
diff --git a/resources/icons/zyptonite.png b/resources/icons/zyptonite.png
new file mode 100644
index 000000000..733696796
Binary files /dev/null and b/resources/icons/zyptonite.png differ
diff --git a/resources/js/screenselector.js b/resources/js/screenselector.js
deleted file mode 100644
index 9f5b7a1a3..000000000
--- a/resources/js/screenselector.js
+++ /dev/null
@@ -1,77 +0,0 @@
-const { ipcRenderer } = require('electron');
-
-let sourceList, contentList, typeButtons, shareButton, cancelButton, activeItem, activeTab = 'screen';
-
-const getItemDOM = item => {
- const li = document.createElement('li');
- li.setAttribute('data-id', item.id);
- li.innerHTML = `