Browse Source

Merge branch 'hamsket_rename'

pull/3202/head
TheGoddessInari 6 years ago
parent
commit
48e34c1343
No known key found for this signature in database
GPG Key ID: 1209B1B7632D69A
  1. 2
      .github/CONTRIBUTING.md
  2. 2
      .github/ISSUE_TEMPLATE.md
  3. 2
      .gitignore
  4. 12
      .vscode/launch.json
  5. 38
      CONTRIBUTING.md
  6. 48
      README.md
  7. 24
      app.js
  8. 14
      app.json
  9. 20
      app/Application.js
  10. 4
      app/model/Readme.md
  11. 2
      app/model/Service.js
  12. 2
      app/model/ServiceList.js
  13. 2
      app/package-lock.json
  14. 10
      app/package.json
  15. 6
      app/store/Services.js
  16. 88
      app/store/ServicesList.js
  17. 2
      app/util/Format.js
  18. 2
      app/util/IconLoader.js
  19. 2
      app/util/MD5.js
  20. 2
      app/util/Notifier.js
  21. 4
      app/util/UnreadCounter.js
  22. 6
      app/ux/FileBackup.js
  23. 46
      app/ux/WebView.js
  24. 2
      app/ux/mixin/Badge.js
  25. 6
      app/view/add/Add.js
  26. 8
      app/view/add/AddController.js
  27. 2
      app/view/add/AddModel.js
  28. 8
      app/view/main/About.js
  29. 34
      app/view/main/Main.js
  30. 44
      app/view/main/MainController.js
  31. 4
      app/view/main/MainModel.js
  32. 12
      app/view/preferences/Preferences.js
  33. 6
      app/view/preferences/PreferencesController.js
  34. 2
      app/view/preferences/PreferencesModel.js
  35. 2
      build.xml
  36. 12
      electron/main.js
  37. 6
      electron/menu.js
  38. 2
      electron/tray.js
  39. 2
      electron/updater.js
  40. 2
      index.html
  41. 4
      masterpassword.html
  42. 2
      overrides/grid/column/Action.js
  43. 4
      overrides/layout/container/boxOverflow/Scroller.js
  44. 16
      package.json
  45. 0
      packages/local/hamsket-default-theme/.sencha/package/Boot.js
  46. 0
      packages/local/hamsket-default-theme/.sencha/package/Microloader.js
  47. 0
      packages/local/hamsket-default-theme/.sencha/package/bootstrap-impl.xml
  48. 0
      packages/local/hamsket-default-theme/.sencha/package/build-impl.xml
  49. 0
      packages/local/hamsket-default-theme/.sencha/package/build.properties
  50. 0
      packages/local/hamsket-default-theme/.sencha/package/codegen.json
  51. 0
      packages/local/hamsket-default-theme/.sencha/package/defaults.properties
  52. 0
      packages/local/hamsket-default-theme/.sencha/package/find-cmd-impl.xml
  53. 0
      packages/local/hamsket-default-theme/.sencha/package/init-impl.xml
  54. 0
      packages/local/hamsket-default-theme/.sencha/package/js-impl.xml
  55. 0
      packages/local/hamsket-default-theme/.sencha/package/plugin.xml
  56. 0
      packages/local/hamsket-default-theme/.sencha/package/refresh-impl.xml
  57. 0
      packages/local/hamsket-default-theme/.sencha/package/resources-impl.xml
  58. 0
      packages/local/hamsket-default-theme/.sencha/package/sass-impl.xml
  59. 0
      packages/local/hamsket-default-theme/.sencha/package/sencha.cfg
  60. 0
      packages/local/hamsket-default-theme/.sencha/package/slice-impl.xml
  61. 0
      packages/local/hamsket-default-theme/.sencha/package/sub-builds.xml
  62. 0
      packages/local/hamsket-default-theme/.sencha/package/testing.properties
  63. 2
      packages/local/hamsket-default-theme/Readme.md
  64. 2
      packages/local/hamsket-default-theme/build.xml
  65. 2
      packages/local/hamsket-default-theme/examples/Readme.md
  66. 2
      packages/local/hamsket-default-theme/licenses/Readme.md
  67. 2
      packages/local/hamsket-default-theme/overrides/Readme.md
  68. 2
      packages/local/hamsket-default-theme/overrides/init.js
  69. 2
      packages/local/hamsket-default-theme/package.json
  70. 2
      packages/local/hamsket-default-theme/resources/Readme.md
  71. 0
      packages/local/hamsket-default-theme/resources/fonts/font-awesome/css/font-awesome.css
  72. 0
      packages/local/hamsket-default-theme/resources/fonts/font-awesome/css/font-awesome.min.css
  73. 0
      packages/local/hamsket-default-theme/resources/fonts/font-awesome/fonts/FontAwesome.otf
  74. 0
      packages/local/hamsket-default-theme/resources/fonts/font-awesome/fonts/fontawesome-webfont.eot
  75. 0
      packages/local/hamsket-default-theme/resources/fonts/font-awesome/fonts/fontawesome-webfont.svg
  76. 0
      packages/local/hamsket-default-theme/resources/fonts/font-awesome/fonts/fontawesome-webfont.ttf
  77. 0
      packages/local/hamsket-default-theme/resources/fonts/font-awesome/fonts/fontawesome-webfont.woff
  78. 0
      packages/local/hamsket-default-theme/resources/fonts/font-awesome/fonts/fontawesome-webfont.woff2
  79. 0
      packages/local/hamsket-default-theme/resources/fonts/icomoon/icomoon.eot
  80. 0
      packages/local/hamsket-default-theme/resources/fonts/icomoon/icomoon.svg
  81. 0
      packages/local/hamsket-default-theme/resources/fonts/icomoon/icomoon.ttf
  82. 0
      packages/local/hamsket-default-theme/resources/fonts/icomoon/icomoon.woff
  83. 0
      packages/local/hamsket-default-theme/resources/images/toolbar/main-more.png
  84. 0
      packages/local/hamsket-default-theme/resources/images/toolbar/newversion-more.png
  85. 7
      packages/local/hamsket-default-theme/sass/Readme.md
  86. 0
      packages/local/hamsket-default-theme/sass/config.rb
  87. 4
      packages/local/hamsket-default-theme/sass/etc/Readme.md
  88. 0
      packages/local/hamsket-default-theme/sass/etc/_loadscreen.scss
  89. 0
      packages/local/hamsket-default-theme/sass/etc/all.scss
  90. 0
      packages/local/hamsket-default-theme/sass/example/custom.js
  91. 0
      packages/local/hamsket-default-theme/sass/example/fashion.html
  92. 0
      packages/local/hamsket-default-theme/sass/example/render.js
  93. 0
      packages/local/hamsket-default-theme/sass/example/theme.html
  94. 0
      packages/local/hamsket-default-theme/sass/src/LoadMask.scss
  95. 2
      packages/local/hamsket-default-theme/sass/src/Readme.md
  96. 0
      packages/local/hamsket-default-theme/sass/src/grid/column/Action.scss
  97. 3
      packages/local/hamsket-default-theme/sass/src/grid/column/Check.scss
  98. 0
      packages/local/hamsket-default-theme/sass/src/panel/Tool.scss
  99. 0
      packages/local/hamsket-default-theme/sass/src/tab/Bar.scss
  100. 0
      packages/local/hamsket-default-theme/sass/src/toolbar/Toolbar.scss
  101. Some files were not shown because too many files have changed in this diff Show More

2
.github/CONTRIBUTING.md

@ -14,7 +14,7 @@ Help us to maximize the effort we can spend fixing issues and adding new feature
We have a great community in [Gitter][gitter] that can help you with any doubt or problem.
[gitter]: https://gitter.im/TheGoddessInari/rambox
[gitter]: https://gitter.im/TheGoddessInari/hamsket
## Contributing to Source Code

2
.github/ISSUE_TEMPLATE.md

@ -18,7 +18,7 @@
<!-- Complete your environment -->
> Rambox-OS: v0.X.X
> Hamsket: v0.X.X
> OS: XXXX

2
.gitignore vendored

@ -34,5 +34,5 @@ npm-debug.log
# Vagrant
/.vagrant
env.js
rambox_cfg.json
hamsket_cfg.json
languages.js

12
.vscode/launch.json vendored

@ -5,19 +5,19 @@
"version": "0.2.0",
"configurations": [
{
"name": "Rambox-OS: Main",
"name": "Hamsket: Main",
"type": "node",
"request": "launch",
"protocol": "inspector",
"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron",
"args": [
"--remote-debugging-port=9223",
"build/production/Rambox"
"build/production/Hamsket"
],
"outFiles": [ "${workspaceFolder}/build/production/**/*.js" ]
},
{
"name": "Rambox-OS: Renderer",
"name": "Hamsket: Renderer",
"type": "chrome",
"request": "attach",
"port": 9223,
@ -27,10 +27,10 @@
],
"compounds": [
{
"name": "Rambox-OS: All",
"name": "Hamsket: All",
"configurations": [
"Rambox-OS: Main",
"Rambox-OS: Renderer"
"Hamsket: Main",
"Hamsket: Renderer"
]
}
]

38
CONTRIBUTING.md

@ -23,7 +23,7 @@ Working on your first Pull Request? You can learn how from this *free* series [H
- [Prerequisites](#prerequisites)
- [Forking the Project](#forking-the-project)
- [Create a Branch](#create-a-branch)
- [Set Up Rambox-OS](#set-up-rambox-OS)
- [Set Up Hamsket](#set-up-Hamsket)
### Create
@ -67,35 +67,35 @@ If your versions are lower than the prerequisite versions, you should update.
1. Install [Git](https://git-scm.com/) or your favorite Git client.
2. (Optional) [Setup an SSH Key](https://help.github.com/articles/generating-an-ssh-key/) for GitHub.
#### Forking Rambox-OS
#### Forking Hamsket
1. Go to the top level rambox repository: <https://github.com/TheGoddessInari/rambox>
1. Go to the top level hamsket repository: <https://github.com/TheGoddessInari/hamsket>
2. Click the "Fork" Button in the upper right hand corner of the interface ([More Details Here](https://help.github.com/articles/fork-a-repo/))
3. After the repository (repo) has been forked, you will be taken to your copy of the rambox repo at <https://github.com/yourUsername/rambox>
3. After the repository (repo) has been forked, you will be taken to your copy of the hamsket repo at <https://github.com/yourUsername/hamsket>
#### Cloning Your Fork
1. Open a Terminal / Command Line / Bash Shell in your projects directory (_i.e.: `/yourprojectdirectory/`_)
2. Clone your fork of Rambox-OS
2. Clone your fork of Hamsket
```shell
$ git clone https://github.com/yourUsername/rambox.git
$ git clone https://github.com/yourUsername/hamsket.git
```
**(make sure to replace `yourUsername` with your GitHub username)**
This will download the entire Rambox-OS repo to your projects directory.
This will download the entire Hamsket repo to your projects directory.
#### Setup Your Upstream
1. Change directory to the new Rambox-OS directory (`cd rambox`)
2. Add a remote to the official Rambox-OS repo:
1. Change directory to the new Hamsket directory (`cd hamsket`)
2. Add a remote to the official Hamsket repo:
```shell
$ git remote add upstream https://github.com/TheGoddessInari/rambox.git
$ git remote add upstream https://github.com/TheGoddessInari/hamsket.git
```
Congratulations, you now have a local copy of the Rambox-OS repo!
Congratulations, you now have a local copy of the Hamsket repo!
### Create a Branch
@ -123,9 +123,9 @@ $ git push origin [name_of_your_new_branch]
**If you need more help with branching, take a look at [this](https://github.com/Kunena/Kunena-Forum/wiki/Create-a-new-branch-with-git-and-manage-branches).**
### Set Up Rambox-OS
### Set Up Hamsket
Once you have Rambox-OS cloned, before you start the application, you first need to install all of the dependencies:
Once you have Hamsket cloned, before you start the application, you first need to install all of the dependencies:
```bash
# Install NPM dependencies
@ -140,7 +140,7 @@ $ npm start # in a new terminal
This bit is up to you!
#### How to find the code in the Rambox-OS codebase to fix/edit
#### How to find the code in the Hamsket codebase to fix/edit
The best way to find out any code you wish to change/add or remove is using
the GitHub search bar at the top of the repository page. For example, you could
@ -161,10 +161,10 @@ To see these changes you'll need to stop your `npm start` , and then rerun.
#### What is a Pull Request?
A pull request (PR) is a method of submitting proposed changes to the Rambox-OS
A pull request (PR) is a method of submitting proposed changes to the Hamsket
repo (or any repo, for that matter). You will make changes to copies of the
files which make up Rambox-OS in a personal fork, then apply to have them
accepted by Rambox-OS proper.
files which make up Hamsket in a personal fork, then apply to have them
accepted by Hamsket proper.
#### Important: ALWAYS EDIT ON A BRANCH
@ -179,9 +179,9 @@ fork and re-fork.
1. Once the edits have been committed, you will be prompted to create a pull
request on your fork's GitHub Page.
2. By default, all pull requests should be against the Rambox-OS main repo, `master`
2. By default, all pull requests should be against the Hamsket main repo, `master`
branch.
**Make sure that your Base Fork is set to TheGoddessInari/rambox when raising a Pull Request.**
**Make sure that your Base Fork is set to TheGoddessInari/hamsket when raising a Pull Request.**
3. Submit a pull request.

48
README.md

@ -1,7 +1,7 @@
# Rambox-OS, soon to be renamed to Hamsket. <!-- omit in toc -->
# Hamsket, soon to be renamed to Hamsket. <!-- omit in toc -->
<p align="center">
<a href="https://github.com/TheGoddessInari/rambox"><img src="./resources/Icon.png" width="256px" alt="Rambox-OS"></a>
<a href="https://github.com/TheGoddessInari/hamsket"><img src="./resources/Icon.png" width="256px" alt="Hamsket"></a>
</p>
#### Free, Open Source and Cross Platform messaging and emailing app that combines common web applications into one. <!-- omit in toc -->
@ -24,7 +24,7 @@
[dependencies]: https://img.shields.io/david/TheGoddessInari/hamsket.svg?path=app
[dev-dependencies]: https://img.shields.io/david/dev/TheGoddessInari/hamsket.svg
##### Nightly build artifacts are available in Windows ([Win64](https://github.com/TheGoddessInari/hamsket/releases/download/nightly/Rambox-OS.Setup.0.5.18.exe)), Mac ([DMG](https://github.com/TheGoddessInari/hamsket/releases/download/nightly/Rambox-OS-0.5.18.dmg) / [App](https://github.com/TheGoddessInari/hamsket/releases/download/nightly/Rambox-OS-0.5.18-mac.zip)), and Linux ([AppImage64](https://github.com/TheGoddessInari/hamsket/releases/download/nightly/Rambox-OS.0.5.18.AppImage) / [RPM64](https://github.com/TheGoddessInari/hamsket/releases/download/nightly/Rambox-0.5.18.x86_64.rpm) / [DEB64](https://github.com/TheGoddessInari/hamsket/releases/download/nightly/Rambox_0.5.18_amd64.deb) / [Tarball64](https://github.com/TheGoddessInari/hamsket/releases/download/nightly/Rambox-0.5.18.tar.gz)) packaging flavors. <!-- omit in toc -->
##### Nightly build artifacts are available in Windows ([Win64](https://github.com/TheGoddessInari/hamsket/releases/download/nightly/Hamsket.Setup.0.5.18.exe)), Mac ([DMG](https://github.com/TheGoddessInari/hamsket/releases/download/nightly/Hamsket-0.5.18.dmg) / [App](https://github.com/TheGoddessInari/hamsket/releases/download/nightly/Hamsket-0.5.18-mac.zip)), and Linux ([AppImage64](https://github.com/TheGoddessInari/hamsket/releases/download/nightly/Hamsket.0.5.18.AppImage) / [RPM64](https://github.com/TheGoddessInari/hamsket/releases/download/nightly/Hamsket-0.5.18.x86_64.rpm) / [DEB64](https://github.com/TheGoddessInari/hamsket/releases/download/nightly/Hamsket_0.5.18_amd64.deb) / [Tarball64](https://github.com/TheGoddessInari/hamsket/releases/download/nightly/Hamsket-0.5.18.tar.gz)) packaging flavors. <!-- omit in toc -->
###### Logo designed by [Andriy Yurchenko](http://andyur.com/). <!-- omit in toc -->
@ -34,23 +34,23 @@
## Table of Contents
- [Table of Contents](#Table-of-Contents)
- [Screenshot](#Screenshot)
- [Services available - 95](#Services-available---95)
- [Features](#Features)
- [Privacy](#Privacy)
- [Donations](#Donations)
- [Compiling](#Compiling)
- [Contributing](#Contributing)
- [Quickstart](#Quickstart)
- [Disclosure](#Disclosure)
- [License](#License)
- [Table of Contents](#table-of-contents)
- [Screenshot](#screenshot)
- [Services available - 95](#services-available---95)
- [Features](#features)
- [Privacy](#privacy)
- [Donations](#donations)
- [Compiling](#compiling)
- [Contributing](#contributing)
- [Quickstart](#quickstart)
- [Disclosure](#disclosure)
- [License](#license)
----------
## Screenshot
![Rambox-OS](./resources/screenshots/win1.png)
![Hamsket](./resources/screenshots/win1.png)
----------
@ -167,7 +167,7 @@
- [ ] Multi-language.
- [ ] Sync your configuration between multiple computers.
- [x] Master Password.
- [x] Lock Rambox-OS if you will be away for a period of time.
- [x] Lock Hamsket if you will be away for a period of time.
- [x] Don't disturb mode.
- [x] Reorder applications in the tab bar.
- [x] Notification badge in the tab.
@ -193,7 +193,7 @@
No personal information will be saved or tracked.
Sessions will persist using the [partition:persist](https://electronjs.org/docs/api/webview-tag#partition) attribute for Webviews. So every time you open Rambox, your sessions will keep alive until you remove the service.
Sessions will persist using the [partition:persist](https://electronjs.org/docs/api/webview-tag#partition) attribute for Webviews. So every time you open Hamsket, your sessions will keep alive until you remove the service.
~~Sync feature use [Auth0](https://auth0.com/) for Single Sign On & Token Based Authentication and to store the services that user is using (and the configuration for each service). You are always welcome to check the code! ;)~~
@ -207,7 +207,7 @@ Keep in mind, I'm not pushing this. I'll do my best regardless.
| Type | URL/Wallet |
| ------------ | :----------------------------------------------: |
| GoFundMe | <https://www.gofundme.com/rambox-os> |
| GoFundMe | <https://www.gofundme.com/Hamsket> |
| Bitcoin | ```36SxZeQ5dA7Dn6pSmYWcvvmnkEeh8LdgmJ``` |
| Bitcoin Cash | ```qqslp2vuamhmsp59u49dq89kwky2yj23nqmjr4mdgj``` |
| Ethereum | ```0xa085d5F736f2D7D210261879e183e5bf870Eae5f``` |
@ -227,8 +227,8 @@ To build your own copy, you need:
These **need** to be added to your PATH.
```shell
git clone https://github.com/TheGoddessInari/rambox.git
cd rambox
git clone https://github.com/TheGoddessInari/hamsket.git
cd hamsket
npm install
npm run repack:win64
```
@ -248,15 +248,15 @@ You can place unpacked files over where the installers normally place their file
## [Contributing](./CONTRIBUTING.md)
Want to report a bug, request a feature, contribute to or translate Rambox? We need all the help we can get! Fork and work!
Want to report a bug, request a feature, contribute to or translate Hamsket? We need all the help we can get! Fork and work!
----------
## Quickstart
```shell
git clone https://github.com/TheGoddessInari/rambox.git
cd rambox
git clone https://github.com/TheGoddessInari/hamsket.git
cd hamsket
npm install
npm start
```
@ -267,7 +267,7 @@ See [Contributing.md](./CONTRIBUTING.md) for more detailed information about get
## Disclosure
Rambox-OS is not affiliated with any of the messaging apps offered.
Hamsket is not affiliated with any of the messaging apps offered.
----------

24
app.js

@ -1,11 +1,11 @@
// Sencha App
Ext.setGlyphFontFamily('FontAwesome');
Ext.application({
name: 'Rambox'
name: 'Hamsket'
,extend: 'Rambox.Application'
,extend: 'Hamsket.Application'
,autoCreateViewport: 'Rambox.view.main.Main'
,autoCreateViewport: 'Hamsket.view.main.Main'
});
// auto update logic
@ -13,21 +13,21 @@ const ipc = require('electron').ipcRenderer;
ipc.on('showAbout', function(event, message) {
if(!Ext.cq1('about')) {
Ext.create('Rambox.view.main.About');
Ext.create('Hamsket.view.main.About');
}
});
ipc.on('showPreferences', function(event, message) {
if (!Ext.cq1('preferences')) {
Ext.create('Rambox.view.preferences.Preferences').show();
Ext.create('Hamsket.view.preferences.Preferences').show();
}
});
ipc.on('autoUpdater:check-update', function() {
Rambox.app.checkUpdate();
Hamsket.app.checkUpdate();
});
ipc.on('autoUpdater:update-not-available', function() {
Ext.Msg.show({
title: 'You are up to date!'
,message: 'You have the latest version of Rambox.'
,message: 'You have the latest version of Hamsket.'
,icon: Ext.Msg.INFO
,buttons: Ext.Msg.OK
});
@ -35,7 +35,7 @@ ipc.on('autoUpdater:update-not-available', function() {
ipc.on('autoUpdater:update-available', function() {
Ext.Msg.show({
title: 'New Version available!'
,message: 'Please wait until Rambox download the new version and ask you for install it.'
,message: 'Please wait until Hamsket download the new version and ask you for install it.'
,icon: Ext.Msg.INFO
,buttons: Ext.Msg.OK
});
@ -49,7 +49,7 @@ ipc.on('autoUpdater:update-downloaded', function(e, releaseNotes, releaseName, r
'->'
,{
xtype: 'label'
,html: '<b>New version ready to install ('+releaseName+')!</b> It will be installed the next time Rambox is relaunched.'
,html: '<b>New version ready to install ('+releaseName+')!</b> It will be installed the next time Hamsket is relaunched.'
}
,{
xtype: 'button'
@ -125,7 +125,7 @@ ipc.on('setBadge', function(event, messageCount) {
// Reload Current Service
ipc.on('reloadCurrentService', function(e) {
const tab = Ext.cq1('app-main').getActiveTab();
if ( tab.id !== 'ramboxTab' ) tab.reloadService();
if ( tab.id !== 'hamsketTab' ) tab.reloadService();
});
ipc.on('tabFocusNext', function() {
@ -181,8 +181,8 @@ ipc.on('toggleDoNotDisturb', function(key) {
});
ipc.on('lockWindow', function(key) {
const btn = Ext.getCmp('lockRamboxBtn');
Ext.cq1('app-main').getController().lockRambox(btn);
const btn = Ext.getCmp('lockHamsketBtn');
Ext.cq1('app-main').getController().lockHamsket(btn);
});
ipc.on('goHome', function() {

14
app.json

@ -2,7 +2,7 @@
/**
* The application's namespace.
*/
"name": "Rambox",
"name": "Hamsket",
/**
* The relative path to the appliaction's markup file (html, jsp, asp, etc.)
@ -28,7 +28,7 @@
* The name of the theme for this application.
*/
"theme": "rambox-default-theme",
"theme": "hamsket-default-theme",
/**
* The list of required packages (with optional versions; default is "latest").
@ -56,13 +56,13 @@
"sass": {
/**
* The root namespace to use when mapping *.scss files to classes in the
* sass/src and sass/var directories. For example, "Rambox.view.Foo" would
* map to "sass/src/view/Foo.scss". If we changed this to "Rambox.view" then
* sass/src and sass/var directories. For example, "Hamsket.view.Foo" would
* map to "sass/src/view/Foo.scss". If we changed this to "Hamsket.view" then
* it would map to "sass/src/Foo.scss". To style classes outside the app's
* root namespace, change this to "". Doing so would change the mapping of
* "Rambox.view.Foo" to "sass/src/Rambox/view/Foo.scss".
* "Hamsket.view.Foo" to "sass/src/Hamsket/view/Foo.scss".
*/
"namespace": "Rambox"
"namespace": "Hamsket"
},
/**
@ -277,7 +277,7 @@
"cache": [
"index.html",
"app.js",
"resources/Rambox-all.css",
"resources/Hamsket-all.css",
"resources/Icon.png",
"resources/Icon.ico",
"resources/IconTray.png",

20
app/Application.js

@ -1,11 +1,11 @@
Ext.define('Rambox.Application', {
Ext.define('Hamsket.Application', {
extend: 'Ext.app.Application'
,name: 'Rambox'
,name: 'Hamsket'
,requires: [
'Rambox.ux.FileBackup'
,'Rambox.util.MD5'
'Hamsket.ux.FileBackup'
,'Hamsket.util.MD5'
,'Ext.window.Toast'
,'Ext.util.Cookies'
]
@ -29,7 +29,7 @@ Ext.define('Rambox.Application', {
Ext.util.Cookies.set('version', require('electron').remote.app.getVersion());
// Check for updates
if ( require('electron').remote.process.argv.indexOf('--without-update') === -1 ) Rambox.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) {
@ -52,7 +52,7 @@ Ext.define('Rambox.Application', {
ipc.send('setDontDisturb', localStorage.getItem('dontDisturb')); // We store it in config
if ( localStorage.getItem('locked') ) {
console.info('Lock Rambox:', 'Enabled');
console.info('Lock Hamsket:', 'Enabled');
Ext.cq1('app-main').getController().showLockWindow();
}
@ -64,15 +64,15 @@ Ext.define('Rambox.Application', {
newValue = parseInt(newValue);
if ( newValue > 0 ) {
if ( Ext.cq1('app-main').getActiveTab().record ) {
document.title = 'Rambox-OS (' + Rambox.util.Format.formatNumber(newValue) + ') - '+Ext.cq1('app-main').getActiveTab().record.get('name');
document.title = 'Hamsket (' + Hamsket.util.Format.formatNumber(newValue) + ') - '+Ext.cq1('app-main').getActiveTab().record.get('name');
} else {
document.title = 'Rambox-OS (' + Rambox.util.Format.formatNumber(newValue) + ')';
document.title = 'Hamsket (' + Hamsket.util.Format.formatNumber(newValue) + ')';
}
} else {
if ( Ext.cq1('app-main') && Ext.cq1('app-main').getActiveTab().record ) {
document.title = 'Rambox-OS - '+Ext.cq1('app-main').getActiveTab().record.get('name');
document.title = 'Hamsket - '+Ext.cq1('app-main').getActiveTab().record.get('name');
} else {
document.title = 'Rambox-OS';
document.title = 'Hamsket';
}
}
}

4
app/model/Readme.md

@ -13,7 +13,7 @@ Structure of a service entry:
|type|Defines the type of the service. Must be one of `email` or `messaging`.|yes|
|allow_popups|Set to `true` to allow popup windows for the service.|no|
|note|Additional info to display when adding the service.|no|
|manual_notifications|Set to `true` to let Rambox-OS trigger notifications. Can be used for services that doesn't support browser notifications.|no|
|manual_notifications|Set to `true` to let Hamsket trigger notifications. Can be used for services that doesn't support browser notifications.|no|
|js_unread|JavaScript code for setting the unread count (see below).|no|
### Setting the unread count
@ -22,4 +22,4 @@ While by default the unread count is determined by looking for ` (COUNT)` to the
Code provided by `js_unread` will be injected into the service website.
You can retrieve the unread count in this JavaScript code e.g. by parsing elements.
Set the unread count by calling `rambox.setUnreadCount(COUNT)` or clear it by calling `rambox.clearUnreadCount()`.
Set the unread count by calling `hamsket.setUnreadCount(COUNT)` or clear it by calling `hamsket.clearUnreadCount()`.

2
app/model/Service.js

@ -1,4 +1,4 @@
Ext.define('Rambox.model.Service', {
Ext.define('Hamsket.model.Service', {
extend: 'Ext.data.Model'
,identifier: 'sequential'

2
app/model/ServiceList.js

@ -1,4 +1,4 @@
Ext.define('Rambox.model.ServiceList', {
Ext.define('Hamsket.model.ServiceList', {
extend: 'Ext.data.Model'
,fields: [{

2
app/package-lock.json generated

@ -1,5 +1,5 @@
{
"name": "Rambox",
"name": "Hamsket",
"version": "0.5.18",
"lockfileVersion": 1,
"requires": true,

10
app/package.json

@ -1,8 +1,8 @@
{
"name": "Rambox",
"productName": "Rambox",
"version": "0.5.18",
"description": "Rambox",
"name": "hamsket",
"productName": "Hamsket",
"version": "0.6.0",
"description": "Hamsket",
"main": "electron/main.js",
"private": true,
"engines": {
@ -17,7 +17,7 @@
},
"homepage": "https://github.com/TheGoddessInari/hamsket",
"keywords": [
"Rambox",
"Hamsket",
"messaging",
"app",
"slack",

6
app/store/Services.js

@ -1,4 +1,4 @@
Ext.define('Rambox.store.Services', {
Ext.define('Hamsket.store.Services', {
extend: 'Ext.data.Store'
,alias: 'store.services'
@ -6,7 +6,7 @@ Ext.define('Rambox.store.Services', {
'Ext.data.proxy.LocalStorage'
]
,model: 'Rambox.model.Service'
,model: 'Hamsket.model.Service'
,autoLoad: true
,autoSync: true
@ -65,7 +65,7 @@ Ext.define('Rambox.store.Services', {
case 'last':
Ext.cq1('app-main').setActiveTab(localStorage.getItem('last_active_service'));
break;
case 'ramboxTab':
case 'hamsketTab':
break;
default:
if ( Ext.getCmp('tab_'+config.default_service) ) Ext.cq1('app-main').setActiveTab('tab_'+config.default_service);

88
app/store/ServicesList.js

@ -1,4 +1,4 @@
Ext.define('Rambox.store.ServicesList', {
Ext.define('Hamsket.store.ServicesList', {
extend: 'Ext.data.Store'
,alias: 'store.serviceslist'
@ -6,7 +6,7 @@ Ext.define('Rambox.store.ServicesList', {
'Ext.data.proxy.LocalStorage'
]
,model: 'Rambox.model.ServiceList'
,model: 'Hamsket.model.ServiceList'
,proxy: {
type: 'memory'
@ -28,7 +28,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: locale['services[0]']
,url: 'https://web.whatsapp.com/'
,type: 'messaging'
,js_unread: `let checkUnread=()=>{const elements=document.querySelectorAll(".P6z4j, .unread");let count=0;for(let i of elements)0===i.querySelectorAll('*[data-icon="muted"]').length&&count++;rambox.updateBadge(count)};setInterval(checkUnread,1e3);let unregister_queue=[];navigator.serviceWorker.getRegistrations().then(registrations=>{for(const registration of registrations)unregister_queue.push(registration.unregister());return unregister_queue}).then(queue=>{}).catch(err=>{});`
,js_unread: `let checkUnread=()=>{const elements=document.querySelectorAll(".P6z4j, .unread");let count=0;for(let i of elements)0===i.querySelectorAll('*[data-icon="muted"]').length&&count++;hamsket.updateBadge(count)};setInterval(checkUnread,1e3);let unregister_queue=[];navigator.serviceWorker.getRegistrations().then(registrations=>{for(const registration of registrations)unregister_queue.push(registration.unregister());return unregister_queue}).then(queue=>{}).catch(err=>{});`
},
{
id: 'slack'
@ -37,7 +37,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: locale['services[1]']
,url: 'https://___.slack.com/'
,type: 'messaging'
,js_unread: `let checkUnread=()=>{const indirect=document.querySelectorAll(".p-channel_sidebar__channel--unread:not(.p-channel_sidebar__channel--muted)").length;let direct=0,badges=document.getElementsByClassName("p-channel_sidebar__badge");for(const badge of badges){const i=parseInt(badge.innerHTML);direct+=isNaN(i)?0:i}rambox.updateBadge(direct,indirect)};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{const indirect=document.querySelectorAll(".p-channel_sidebar__channel--unread:not(.p-channel_sidebar__channel--muted)").length;let direct=0,badges=document.getElementsByClassName("p-channel_sidebar__badge");for(const badge of badges){const i=parseInt(badge.innerHTML);direct+=isNaN(i)?0:i}hamsket.updateBadge(direct,indirect)};setInterval(checkUnread,3e3);`
},
{
id: 'noysi'
@ -75,7 +75,7 @@ Ext.define('Rambox.store.ServicesList', {
,type: 'messaging'
,titleBlink: true
,manual_notifications: true
,js_unread: `let checkUnread=()=>{let myframe=document.getElementById("hangout-landing-chat").lastChild,mydocument=myframe.contentDocument||myframe.contentWindow.document;rambox.updateBadge(mydocument.body.getElementsByClassName("ee").length)};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{let myframe=document.getElementById("hangout-landing-chat").lastChild,mydocument=myframe.contentDocument||myframe.contentWindow.document;hamsket.updateBadge(mydocument.body.getElementsByClassName("ee").length)};setInterval(checkUnread,3e3);`
},
{
id: 'hipchat'
@ -84,7 +84,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: locale['services[6]']
,url: 'https://___.hipchat.com/chat'
,type: 'messaging'
,js_unread: `let checkUnread=()=>{const e=document.getElementsByClassName("hc-badge");let t=0;for(let i of e)t+=parseInt(i.innerHTML.trim());rambox.updateBadge(t)};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{const e=document.getElementsByClassName("hc-badge");let t=0;for(let i of e)t+=parseInt(i.innerHTML.trim());hamsket.updateBadge(t)};setInterval(checkUnread,3e3);`
,custom_domain: true
},
{
@ -94,7 +94,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: locale['services[7]']
,url: 'https://web.telegram.org/'
,type: 'messaging'
,js_unread: `let checkUnread=()=>{const e=document.getElementsByClassName("im_dialog_badge badge");let t=0;for(let i of e)i.classList.contains("im_dialog_badge_muted")||(t+=parseInt(i.innerHTML.trim()));rambox.updateBadge(t)};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{const e=document.getElementsByClassName("im_dialog_badge badge");let t=0;for(let i of e)i.classList.contains("im_dialog_badge_muted")||(t+=parseInt(i.innerHTML.trim()));hamsket.updateBadge(t)};setInterval(checkUnread,3e3);`
},
{
id: 'wechat'
@ -112,7 +112,7 @@ Ext.define('Rambox.store.ServicesList', {
,url: 'https://mail.google.com/mail/?labs=0'
,type: 'email'
,allow_popups: true
,js_unread: `let checkUnread=()=>{const a=document.getElementsByClassName("aim")[0].textContent.split(":");rambox.updateBadge(parseInt(a[a.length-1].replace(/[^0-9]/g,"")))};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{const a=document.getElementsByClassName("aim")[0].textContent.split(":");hamsket.updateBadge(parseInt(a[a.length-1].replace(/[^0-9]/g,"")))};setInterval(checkUnread,3e3);`
,note: 'To enable desktop notifications, you have to go to Settings inside Gmail. <a href="https://support.google.com/mail/answer/1075549?ref_topic=3394466" target="_blank">Read more...</a>'
},
{
@ -123,7 +123,7 @@ Ext.define('Rambox.store.ServicesList', {
,url: 'https://inbox.google.com/?cid=imp'
,type: 'email'
,manual_notifications: true
,js_unread: `let checkUnread=()=>{if(getComputedStyle(document.getElementsByClassName("sM")[0])["font-weight"] == "bold"){rambox.updateBadge(document.getElementsByClassName("ss").length)}};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{if(getComputedStyle(document.getElementsByClassName("sM")[0])["font-weight"] == "bold"){hamsket.updateBadge(document.getElementsByClassName("ss").length)}};setInterval(checkUnread,3e3);`
,note: 'Please be sure to sign out of Hangouts inside Inbox, as it causes problems. <a href="https://github.com/TheGoddessInari/hamsket/wiki/Inbox" target="_blank">Read more...</a>'
},
{
@ -143,7 +143,7 @@ Ext.define('Rambox.store.ServicesList', {
,url: 'https://web.groupme.com/signin'
,type: 'messaging'
,note: 'To enable desktop notifications, you have to go to Options inside GroupMe. To count unread messages, be sure to be in Chats.'
,js_unread: `let checkUnread=()=>{const a=document.querySelectorAll(".badge-count:not(.ng-hide)");let b=0;for(let i of a)b+=parseInt(i.innerHTML.trim());rambox.updateBadge(b)};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{const a=document.querySelectorAll(".badge-count:not(.ng-hide)");let b=0;for(let i of a)b+=parseInt(i.innerHTML.trim());hamsket.updateBadge(b)};setInterval(checkUnread,3e3);`
},
{
id: 'grape'
@ -160,7 +160,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: locale['services[14]']
,url: 'https://gitter.im/'
,type: 'messaging'
,js_unread: `let checkUnread=()=>{const e=document.getElementsByClassName("room-item__unread-indicator");let t=0;for(let i of e){const iTrim=parseInt(i.innerHTML.trim());t+=isNaN(iTrim)?0:parseInt(iTrim)}rambox.updateBadge(t)};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{const e=document.getElementsByClassName("room-item__unread-indicator");let t=0;for(let i of e){const iTrim=parseInt(i.innerHTML.trim());t+=isNaN(iTrim)?0:parseInt(iTrim)}hamsket.updateBadge(t)};setInterval(checkUnread,3e3);`
},
{
id: 'steam'
@ -170,7 +170,7 @@ Ext.define('Rambox.store.ServicesList', {
,url: 'https://steamcommunity.com/chat'
,type: 'messaging'
,note: 'To enable desktop notifications, you have to go to Options inside Steam Chat.'
,js_unread: `let checkUnread=()=>{const e=document.getElementsByClassName("FriendMessageCount");let t=0;for(let i of e){const iTrim=parseInt(i.innerHTML.trim());t+=isNaN(iTrim)||"none"===i.parentNode.style.display?0:iTrim}rambox.updateBadge(t)};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{const e=document.getElementsByClassName("FriendMessageCount");let t=0;for(let i of e){const iTrim=parseInt(i.innerHTML.trim());t+=isNaN(iTrim)||"none"===i.parentNode.style.display?0:iTrim}hamsket.updateBadge(t)};setInterval(checkUnread,3e3);`
},
{
id: 'discord'
@ -180,7 +180,7 @@ Ext.define('Rambox.store.ServicesList', {
,url: 'https://discordapp.com/login'
,type: 'messaging'
,titleBlink: true
,js_unread: `let getMentionCount=badges=>{let alerts=0;for(const badge of badges){const count=parseInt(badge.innerText,10);alerts+=count.isNaN?1:count}return alerts},getServerUnread=badges=>{let alerts=0;for(const badge of badges)alerts+="0.7"===badge.style.opacity?1:0;return alerts},checkUnread=()=>{const mentions=document.querySelectorAll(".lowerBadge-29hYVK > .numberBadge-2s8kKX");unread=document.getElementsByClassName("item-2hkk8m");const direct=getMentionCount(mentions);let indirect=getServerUnread(unread);indirect+=document.getElementsByClassName("unread-3zKkbm").length,rambox.updateBadge(direct,indirect)};setInterval(checkUnread,3e3);`
,js_unread: `let getMentionCount=badges=>{let alerts=0;for(const badge of badges){const count=parseInt(badge.innerText,10);alerts+=count.isNaN?1:count}return alerts},getServerUnread=badges=>{let alerts=0;for(const badge of badges)alerts+="0.7"===badge.style.opacity?1:0;return alerts},checkUnread=()=>{const mentions=document.querySelectorAll(".lowerBadge-29hYVK > .numberBadge-2s8kKX");unread=document.getElementsByClassName("item-2hkk8m");const direct=getMentionCount(mentions);let indirect=getServerUnread(unread);indirect+=document.getElementsByClassName("unread-3zKkbm").length,hamsket.updateBadge(direct,indirect)};setInterval(checkUnread,3e3);`
,note: 'To enable desktop notifications, you have to go to Options inside Discord.'
},
{
@ -191,7 +191,7 @@ Ext.define('Rambox.store.ServicesList', {
,url: 'https://mail.live.com/'
,type: 'email'
,manual_notifications: true
,js_unread: `let checkUnread=()=>{const a=$(".subfolders [role=treeitem]:first .treeNodeRowElement").siblings().last().text();rambox.updateBadge(""===a?0:parseInt(a))};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{const a=$(".subfolders [role=treeitem]:first .treeNodeRowElement").siblings().last().text();hamsket.updateBadge(""===a?0:parseInt(a))};setInterval(checkUnread,3e3);`
},
{
id: 'outlook365'
@ -201,7 +201,7 @@ Ext.define('Rambox.store.ServicesList', {
,url: 'https://outlook.office.com/owa/'
,type: 'email'
,manual_notifications: true
,js_unread: `let checkUnread=()=>{const a=$(".subfolders [role=treeitem]:first .treeNodeRowElement").siblings().last().text();rambox.updateBadge(""===a?0:parseInt(a))};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{const a=$(".subfolders [role=treeitem]:first .treeNodeRowElement").siblings().last().text();hamsket.updateBadge(""===a?0:parseInt(a))};setInterval(checkUnread,3e3);`
},
{
id: 'yahoo'
@ -252,7 +252,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: locale['services[23]']
,url: 'https://mail.missiveapp.com/login'
,type: 'messaging'
,js_unread: `let checkUnread=()=>{const e=document.getElementsByClassName("unseen-count");let t=0;for(let i of e)t+=parseInt(i.innerHTML.trim());rambox.updateBadge(t)};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{const e=document.getElementsByClassName("unseen-count");let t=0;for(let i of e)t+=parseInt(i.innerHTML.trim());hamsket.updateBadge(t)};setInterval(checkUnread,3e3);`
},
{
id: 'rocketchat'
@ -334,7 +334,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: locale['services[34]']
,url: 'https://app.mysms.com/'
,type: 'messaging'
,js_unread: `let checkUnread=()=>{const e=document.getElementsByClassName("unread");let t=0;for(let i of e)t+=parseInt(i.firstChild.innerHTML.trim());rambox.updateBadge(t)};"https://app.mysms.com/#login"===document.baseURI&&(document.getElementsByClassName("innerPanel")[0].rows[0].style.display="none",document.getElementsByClassName("innerPanel")[0].rows[1].cells[0].firstElementChild.style.display="none",document.getElementsByClassName("msisdnLoginPanel")[0].style.display="inline"),setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{const e=document.getElementsByClassName("unread");let t=0;for(let i of e)t+=parseInt(i.firstChild.innerHTML.trim());hamsket.updateBadge(t)};"https://app.mysms.com/#login"===document.baseURI&&(document.getElementsByClassName("innerPanel")[0].rows[0].style.display="none",document.getElementsByClassName("innerPanel")[0].rows[1].cells[0].firstElementChild.style.display="none",document.getElementsByClassName("msisdnLoginPanel")[0].style.display="inline"),setInterval(checkUnread,3e3);`
,note: 'You have to use this service by signing in with your mobile number.'
},
{
@ -344,7 +344,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: locale['services[35]']
,url: 'https://web.icq.com/'
,type: 'messaging'
,js_unread: `let checkUnread=()=>{let total=0;const counters=document.getElementsByClassName("icq-msg-counter");for(let counter of counters)total+=parseInt("block"===counter.style.display?counter.innerHTML.trim():0);rambox.updateBadge(total)};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{let total=0;const counters=document.getElementsByClassName("icq-msg-counter");for(let counter of counters)total+=parseInt("block"===counter.style.display?counter.innerHTML.trim():0);hamsket.updateBadge(total)};setInterval(checkUnread,3e3);`
,titleBlink: true
},
{
@ -403,7 +403,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: locale['services[43]']
,url: '___'
,type: 'email'
,js_unread: `let checkUnread=()=>{const e=document.getElementsByClassName("count");let t=0;for(let i of e)t+=parseInt(i.innerHTML.match(/[0-9]+/g));rambox.updateBadge(t)};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{const e=document.getElementsByClassName("count");let t=0;for(let i of e)t+=parseInt(i.innerHTML.match(/[0-9]+/g));hamsket.updateBadge(t)};setInterval(checkUnread,3e3);`
,note: 'To enable desktop notifications and automatic mail check, you have to go to Options inside Horde.'
},
{
@ -413,7 +413,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: locale['services[44]']
,url: '___'
,type: 'email'
,js_unread: `let checkUnread=()=>{const e=document.getElementsByClassName("leftunseen");let t=0;for(let i of e)t+=parseInt(i.innerHTML);rambox.updateBadge(t)};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{const e=document.getElementsByClassName("leftunseen");let t=0;for(let i of e)t+=parseInt(i.innerHTML);hamsket.updateBadge(t)};setInterval(checkUnread,3e3);`
},
{
id: 'zohoemail'
@ -432,7 +432,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: locale['services[46]']
,url: 'https://chat.zoho.___/'
,type: 'messaging'
,js_unread: `NotifyByTitle.show=function(){},NotifyByTitle.start=function(){},NotifyByTitle.stop=function(){};let checkUnread=()=>{let t=0;$(".msgnotify").each(function(){let i=parseInt($(this).html());t+=isNaN(i)?0:i}),rambox.updateBadge(t)};setInterval(checkUnread,3e3);`
,js_unread: `NotifyByTitle.show=function(){},NotifyByTitle.start=function(){},NotifyByTitle.stop=function(){};let checkUnread=()=>{let t=0;$(".msgnotify").each(function(){let i=parseInt($(this).html());t+=isNaN(i)?0:i}),hamsket.updateBadge(t)};setInterval(checkUnread,3e3);`
,note: 'Add .com the other relevant TLD into the URL field depending on your location.'
},
{
@ -459,7 +459,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: 'Yandex is a free webmail service with unlimited mail storage, protection from viruses and spam, access from web interface, etc.'
,url: 'https://mail.yandex.com/'
,type: 'email'
,js_unread: `let checkUnread=()=>{const t=parseInt($(".mail-MessagesFilters-Item_unread .mail-LabelList-Item_count").html());rambox.updateBadge(isNaN(t)?0:t)};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{const t=parseInt($(".mail-MessagesFilters-Item_unread .mail-LabelList-Item_count").html());hamsket.updateBadge(isNaN(t)?0:t)};setInterval(checkUnread,3e3);`
},
{
id: 'irccloud'
@ -468,7 +468,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: 'IRCCloud is a modern IRC client that keeps you connected, with none of the baggage.'
,url: 'https://www.irccloud.com/'
,type: 'messaging'
,js_unread: `let checkUnread=()=>{let t=0;const badges=document.querySelectorAll(".bufferBadges > .badge");for(let n of badges)t+=n.textContent?parseInt(n.textContent,10):0;rambox.updateBadge(t)};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{let t=0;const badges=document.querySelectorAll(".bufferBadges > .badge");for(let n of badges)t+=n.textContent?parseInt(n.textContent,10):0;hamsket.updateBadge(t)};setInterval(checkUnread,3e3);`
,custom_domain: true
},
{
@ -478,7 +478,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: 'Ryver is a team communication tool that organizes team collaboration, chats, files, and even emails into a single location, for any size team, for FREE.'
,url: 'https://___.ryver.com/'
,type: 'messaging'
,js_unread: `let checkUnread=()=>{rambox.updateBadge(parseInt(document.getElementsByClassName("scene-space-tab-button--flash").length))};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{hamsket.updateBadge(parseInt(document.getElementsByClassName("scene-space-tab-button--flash").length))};setInterval(checkUnread,3e3);`
},
{
id: 'kiwi'
@ -487,7 +487,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: 'KiwiIRC makes Web IRC easy. A hand-crafted IRC client that you can enjoy. Designed to be used easily and freely.'
,url: 'https://kiwiirc.com/client'
,type: 'messaging'
,js_unread: `let checkUnread=()=>{let a=0,b=!1;$(".activity").each(function(){a+=parseInt($(this).html())});const msgs=$(".panel[style*='display:block'] .msg");for(let msg of msgs)b?a++:$(this).hasClass("last_seen")&&(b=!0);rambox.updateBadge(a)};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{let a=0,b=!1;$(".activity").each(function(){a+=parseInt($(this).html())});const msgs=$(".panel[style*='display:block'] .msg");for(let msg of msgs)b?a++:$(this).hasClass("last_seen")&&(b=!0);hamsket.updateBadge(a)};setInterval(checkUnread,3e3);`
,custom_domain: true
},
/* TODO: fix kiwi */
@ -498,7 +498,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: 'iCloud makes sure you always have the latest versions of your most important things — documents, photos, notes, contacts, and more — on all your devices. It can even help you locate a missing iPhone, iPad, iPod touch or Mac.'
,url: 'https://www.icloud.com/#mail'
,type: 'email'
,js_unread: `let checkUnread=()=>{rambox.updateBadge("none"===document.querySelector(".current-app").querySelector(".sb-badge").style.display?0:parseInt(document.querySelector(".current-app").querySelector(".text").innerHTML.trim()))};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{hamsket.updateBadge("none"===document.querySelector(".current-app").querySelector(".sb-badge").style.display?0:parseInt(document.querySelector(".current-app").querySelector(".text").innerHTML.trim()))};setInterval(checkUnread,3e3);`
},
{
id: 'rainloop'
@ -507,7 +507,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: 'RainLoop Webmail - Simple, modern & fast web-based email client.'
,url: '___'
,type: 'email'
,js_unread: `let checkUnread=()=>{const t=document.querySelectorAll(".e-item .e-link:not(.hidden) .badge.pull-right.count");let e=0;for(let i of t){let iTrim=parseInt(i.textContent.trim());iTrim%1==0&&"block"===window.getComputedStyle(i).display&&(e+=parseInt(iTrim))}rambox.updateBadge(e)};setInterval(checkUnread,1e3);`
,js_unread: `let checkUnread=()=>{const t=document.querySelectorAll(".e-item .e-link:not(.hidden) .badge.pull-right.count");let e=0;for(let i of t){let iTrim=parseInt(i.textContent.trim());iTrim%1==0&&"block"===window.getComputedStyle(i).display&&(e+=parseInt(iTrim))}hamsket.updateBadge(e)};setInterval(checkUnread,1e3);`
},
{
id: 'amium'
@ -532,7 +532,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: 'Over 500 million people rely on Zimbra and enjoy enterprise-class open source email collaboration at the lowest TCO in the industry. Discover the benefits!'
,url: '___'
,type: 'email'
,js_unread: `let checkUnread=()=>{rambox.updateBadge(appCtxt.getById(ZmFolder.ID_INBOX).numUnread)};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{hamsket.updateBadge(appCtxt.getById(ZmFolder.ID_INBOX).numUnread)};setInterval(checkUnread,3e3);`
},
{
id: 'kaiwa'
@ -541,7 +541,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: 'A modern and Open Source Web client for XMPP.'
,url: '___'
,type: 'messaging'
,js_unread: `let checkUnread=()=>{let count=0;for(let node of document.getElementsByClassName("unread"))node.innerHTML&&(count+=parseInt(node.innerHTML));rambox.updateBadge(count)};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{let count=0;for(let node of document.getElementsByClassName("unread"))node.innerHTML&&(count+=parseInt(node.innerHTML));hamsket.updateBadge(count)};setInterval(checkUnread,3e3);`
},
{
id: 'movim'
@ -550,7 +550,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: 'Movim is a decentralized social network, written in PHP and HTML5 and based on the XMPP standard protocol.'
,url: 'https://___.movim.eu/'
,type: 'messaging'
,js_unread: `let checkUnread=()=>{const a=document.getElementsByClassName("color dark");let b=0;for(let i of a){const c=i.getElementsByClassName("counter");for(let ii of c){const iiTrim=parseInt(ii.textContent.trim());iiTrim%1==0&&(b+=iiTrim)}}rambox.updateBadge(b)};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{const a=document.getElementsByClassName("color dark");let b=0;for(let i of a){const c=i.getElementsByClassName("counter");for(let ii of c){const iiTrim=parseInt(ii.textContent.trim());iiTrim%1==0&&(b+=iiTrim)}}hamsket.updateBadge(b)};setInterval(checkUnread,3e3);`
,custom_domain: true
},
{
@ -568,7 +568,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: 'Riot is a simple and elegant collaboration environment that gathers all of your different conversations and app integrations into one single app.'
,url: 'https://riot.im/app/'
,type: 'messaging'
,js_unread: `let checkUnread=()=>{const a=document.getElementsByClassName("mx_RoomTile_nameContainer");let b=0;for(let i of a){const c=i.getElementsByClassName("mx_RoomTile_badge");for(let ii of c){const iiTrim=parseInt(ii.textContent.trim());iiTrim%1==0&&(b+=iiTrim)}}rambox.updateBadge(b)};setInterval(checkUnread,1e3);`
,js_unread: `let checkUnread=()=>{const a=document.getElementsByClassName("mx_RoomTile_nameContainer");let b=0;for(let i of a){const c=i.getElementsByClassName("mx_RoomTile_badge");for(let ii of c){const iiTrim=parseInt(ii.textContent.trim());iiTrim%1==0&&(b+=iiTrim)}}hamsket.updateBadge(b)};setInterval(checkUnread,1e3);`
,custom_domain: true
},
{
@ -627,7 +627,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: 'Flock is a free enterprise tool for business communication. Packed with tons of productivity features, Flock drives efficiency and boosts speed of execution.'
,url: 'https://web.flock.co/'
,type: 'messaging'
,js_unread: `let checkUnread=()=>{const a=document.getElementsByClassName("unreadMessages no-unread-mentions has-unread");let b=0;for(const i of a)b+=parseInt(i.innerHTML.trim());rambox.updateBadge(b)};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{const a=document.getElementsByClassName("unreadMessages no-unread-mentions has-unread");let b=0;for(const i of a)b+=parseInt(i.innerHTML.trim());hamsket.updateBadge(b)};setInterval(checkUnread,3e3);`
},
{
@ -653,7 +653,7 @@ Ext.define('Rambox.store.ServicesList', {
description: 'Career-oriented social networking',
url: 'https://www.xing.com/messages/conversations',
type: 'messaging',
js_unread: `let checkUnread=()=>{let count=null;const notificationElement=document.querySelector('[data-update="unread_conversations"]');notificationElement&&"none"!==notificationElement.style.display&&(count=parseInt(notificationElement.textContent.trim(),10)),rambox.updateBadge(count)};setInterval(checkUnread,3e3);`
js_unread: `let checkUnread=()=>{let count=null;const notificationElement=document.querySelector('[data-update="unread_conversations"]');notificationElement&&"none"!==notificationElement.style.display&&(count=parseInt(notificationElement.textContent.trim(),10)),hamsket.updateBadge(count)};setInterval(checkUnread,3e3);`
},
{
id: 'threema',
@ -662,7 +662,7 @@ Ext.define('Rambox.store.ServicesList', {
description: 'Seriously secure messaging',
url: 'https://web.threema.ch/',
type: 'messaging',
js_unread: `!function(){let unreadCount=0;function checkUnread(){let newUnread=0;try{const webClientService=angular.element(document.documentElement).injector().get("WebClientService"),conversations=webClientService.conversations.conversations;conversations.forEach(function(conversation){newUnread+=conversation.unreadCount})}catch(e){}newUnread!==unreadCount&&(unreadCount=newUnread,rambox.updateBadge(unreadCount))}setInterval(checkUnread,3e3),checkUnread()}();`
js_unread: `!function(){let unreadCount=0;function checkUnread(){let newUnread=0;try{const webClientService=angular.element(document.documentElement).injector().get("WebClientService"),conversations=webClientService.conversations.conversations;conversations.forEach(function(conversation){newUnread+=conversation.unreadCount})}catch(e){}newUnread!==unreadCount&&(unreadCount=newUnread,hamsket.updateBadge(unreadCount))}setInterval(checkUnread,3e3),checkUnread()}();`
},
{
id: 'workplace'
@ -695,7 +695,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: 'Self-hosted web IRC client.'
,url: '___'
,type: 'messaging'
,js_unread: `let checkUnread=()=>{const a=document.getElementsByClassName("badge highlight");let b=0;for(let i of a){const iTrim=parseInt(i.textContent.trim());iTrim%1==0&&(b+=iTrim)}rambox.updateBadge(b)};setInterval(checkUnread,1e3);`
,js_unread: `let checkUnread=()=>{const a=document.getElementsByClassName("badge highlight");let b=0;for(let i of a){const iTrim=parseInt(i.textContent.trim());iTrim%1==0&&(b+=iTrim)}hamsket.updateBadge(b)};setInterval(checkUnread,1e3);`
},
{
id: 'linkedin'
@ -712,7 +712,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: 'Zyptonite is the ultimate cyber secure communication tool for enterprise customers designed to address the need to securely communicate via voice, video, and chat, and transfer files and information across a global mobile workforce.'
,url: 'https://app.zyptonite.com/'
,type: 'messaging'
,js_unread: `let checkUnread=()=>{const a=document.getElementsByClassName("z-messages");let b=0;for(let i of a)b+=parseInt(i.innerHTML.trim());rambox.updateBadge(b)};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{const a=document.getElementsByClassName("z-messages");let b=0;for(let i of a)b+=parseInt(i.innerHTML.trim());hamsket.updateBadge(b)};setInterval(checkUnread,3e3);`
},
{
id: 'fastmail'
@ -721,7 +721,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: 'Secure, reliable email hosting for businesses, families and professionals. Premium email with no ads, excellent spam protection and rapid personal support.'
,url: 'https://www.fastmail.com/mail/'
,type: 'email'
,js_unread: `let checkUnread=()=>{const e=document.getElementsByClassName("v-FolderSource-badge");let t=0;for(const i of e){const iTrim=parseInt(i.innerHTML.trim());t+=isNaN(iTrim)?0:iTrim}rambox.updateBadge(t)};setInterval(checkUnread,3e3),setTimeout(function(){O.WindowController.openExternal=function(a){let b=document.createElement("a");b.href=a,b.setAttribute("target","_blank"),b.click()}},3e3);`
,js_unread: `let checkUnread=()=>{const e=document.getElementsByClassName("v-FolderSource-badge");let t=0;for(const i of e){const iTrim=parseInt(i.innerHTML.trim());t+=isNaN(iTrim)?0:iTrim}hamsket.updateBadge(t)};setInterval(checkUnread,3e3),setTimeout(function(){O.WindowController.openExternal=function(a){let b=document.createElement("a");b.href=a,b.setAttribute("target","_blank"),b.click()}},3e3);`
,note: 'To enable desktop notifications, you have to go to Settings inside FastMail.'
},
{
@ -765,7 +765,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: 'Simple and Easy App for Messaging on VK.'
,url: 'https://m.vk.com/im'
,type: 'messaging'
,js_unread: `let checkUnread=()=>{rambox.updateBadge(parseInt(document.getElementById("l_msg").innerText.replace(/[^0-9]+/g,"")))};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{hamsket.updateBadge(parseInt(document.getElementById("l_msg").innerText.replace(/[^0-9]+/g,"")))};setInterval(checkUnread,3e3);`
},
{
id: 'mastodon'
@ -784,7 +784,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: 'Say goodbye to email. Take your online collaboration to the next level with Teamwork Chat and keep all team discussions in one place. Chat to your team in a fun and informal way with Teamwork Chat.'
,url: 'https://___/chat'
,type: 'messaging'
,js_unread: `let checkUnread=()=>{rambox.updateBadge(parseInt(document.getElementsByClassName("sidebar-notification-indicator").length>0?document.getElementsByClassName("sidebar-notification-indicator")[0].innerHTML:0))};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{hamsket.updateBadge(parseInt(document.getElementsByClassName("sidebar-notification-indicator").length>0?document.getElementsByClassName("sidebar-notification-indicator")[0].innerHTML:0))};setInterval(checkUnread,3e3);`
},
{
id: 'clocktweets'
@ -801,7 +801,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: 'Intercom makes it easy to communicate with your customers personally, at scale. Designed to feel like the messaging apps you use every day, Intercom lets you talk to consumers almost anywhere: inside your app, on your website, across social media and via email.'
,url: 'https://app.intercom.io'
,type: 'messaging'
,js_unread: `let checkUnread=()=>{const a=document.getElementsByClassName("unread")[0];rambox.updateBadge(t=void 0===a?0:parseInt(a.textContent.replace(/[^0-9]/g,"")))};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{const a=document.getElementsByClassName("unread")[0];hamsket.updateBadge(t=void 0===a?0:parseInt(a.textContent.replace(/[^0-9]/g,"")))};setInterval(checkUnread,3e3);`
},
{
id: 'allo'
@ -810,7 +810,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: 'Google Allo is a smart messaging app that helps you say more and do more. Express yourself better with stickers, doodles, and HUGE emojis & text. Allo also brings you the Google Assistant.'
,url: 'https://allo.google.com/web'
,type: 'messaging'
,js_unread: `let checkUnread=()=>{const e=document.querySelectorAll(".hasUnread.conversation_item");let n=0;for(const i of e){const m=i.querySelector("#muted"),u=i.querySelector(".unreadCount"),c=parseInt(u.innerHTML.trim()),r=null===m||"none"===m.style.display?c:0;n+=isNaN(r)?0:r}rambox.updateBadge(n)};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{const e=document.querySelectorAll(".hasUnread.conversation_item");let n=0;for(const i of e){const m=i.querySelector("#muted"),u=i.querySelector(".unreadCount"),c=parseInt(u.innerHTML.trim()),r=null===m||"none"===m.style.display?c:0;n+=isNaN(r)?0:r}hamsket.updateBadge(n)};setInterval(checkUnread,3e3);`
},
{
id: 'Kune'
@ -827,7 +827,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: 'A free phone number for life. Stay in touch from any screen. Use your free number to text, call, and check voicemail all from one app. Plus, Google Voice works on all of your devices so you can connect and communicate how you want.'
,url: 'https://voice.google.com'
,type: 'messaging'
,js_unread: `let parseIntOrZero=e=>isNaN(parseInt(e))?0:parseInt(e),checkUnread=()=>{const e=document.querySelector(".msgCount");let n=0;e?n=parseIntOrZero(e.innerHTML.replace(/[() ]/gi,"")):["Messages","Calls","Voicemail"].forEach(function(e){const r=document.querySelector('gv-nav-tab[tooltip="+e+"] div[aria-label="Unread count"]');r&&(n+=parseIntOrZero(r.innerHTML))}),rambox.updateBadge(n)};setInterval(checkUnread,3e3);;`
,js_unread: `let parseIntOrZero=e=>isNaN(parseInt(e))?0:parseInt(e),checkUnread=()=>{const e=document.querySelector(".msgCount");let n=0;e?n=parseIntOrZero(e.innerHTML.replace(/[() ]/gi,"")):["Messages","Calls","Voicemail"].forEach(function(e){const r=document.querySelector('gv-nav-tab[tooltip="+e+"] div[aria-label="Unread count"]');r&&(n+=parseIntOrZero(r.innerHTML))}),hamsket.updateBadge(n)};setInterval(checkUnread,3e3);;`
},
{
id: 'sandstorm'
@ -871,7 +871,7 @@ Ext.define('Rambox.store.ServicesList', {
,description: 'Stride is the complete team communication solution with group messaging, video meetings, and built-in collaboration tools.'
,url: 'https://app.stride.com/___'
,type: 'messaging'
,js_unread: `let checkUnread=()=>{let direct=0,indirect=0;const conversations=document.querySelectorAll(".conversations-nav .nav-item .activity-indicator");for(let n of conversations)n.classList.contains("has-count")?direct+=parseInt(n.innerHTML):indirect++;rambox.updateBadge(direct,indirect)};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{let direct=0,indirect=0;const conversations=document.querySelectorAll(".conversations-nav .nav-item .activity-indicator");for(let n of conversations)n.classList.contains("has-count")?direct+=parseInt(n.innerHTML):indirect++;hamsket.updateBadge(direct,indirect)};setInterval(checkUnread,3e3);`
},
{
id: 'hangoutschat'
@ -882,7 +882,7 @@ Ext.define('Rambox.store.ServicesList', {
,type: 'messaging'
,titleBlink: true
,manual_notifications: true
,js_unread: `let checkUnread=()=>{rambox.updateBadge(document.querySelectorAll(".SSPGKf.EyyDtb.Q6oXP:not(.oCHqfe) .eM5l9e.FVKzAb").length)};setInterval(checkUnread,3e3);`
,js_unread: `let checkUnread=()=>{hamsket.updateBadge(document.querySelectorAll(".SSPGKf.EyyDtb.Q6oXP:not(.oCHqfe) .eM5l9e.FVKzAb").length)};setInterval(checkUnread,3e3);`
}
]
});

2
app/util/Format.js

@ -1,7 +1,7 @@
/**
* Created by vsxed on 7/11/2016.
*/
Ext.define('Rambox.util.Format', {
Ext.define('Hamsket.util.Format', {
singleton: true
,formatNumber(n) {

2
app/util/IconLoader.js

@ -1,7 +1,7 @@
/**
* Singleton class to handle the custom icons for special services.
*/
Ext.define('Rambox.util.IconLoader', {
Ext.define('Hamsket.util.IconLoader', {
singleton: true,

2
app/util/MD5.js

@ -1,4 +1,4 @@
Ext.define('Rambox.util.MD5', {
Ext.define('Hamsket.util.MD5', {
singleton: true
,encypt(s, raw, hexcase, chrsz) {

2
app/util/Notifier.js

@ -2,7 +2,7 @@
/**
* Singleton class for notification dispatching.
*/
Ext.define('Rambox.util.Notifier', {
Ext.define('Hamsket.util.Notifier', {
singleton: true,

4
app/util/UnreadCounter.js

@ -1,7 +1,7 @@
/**
* Singleton class to handle the global unread counter.
*/
Ext.define('Rambox.util.UnreadCounter', {
Ext.define('Hamsket.util.UnreadCounter', {
singleton: true,
@ -28,7 +28,7 @@ Ext.define('Rambox.util.UnreadCounter', {
* Sets the application's unread count to tracked unread count.
*/
function updateAppUnreadCounter() {
Rambox.app.setTotalNotifications(totalUnreadCount);
Hamsket.app.setTotalNotifications(totalUnreadCount);
}
/**

6
app/ux/FileBackup.js

@ -1,4 +1,4 @@
Ext.define('Rambox.ux.FileBackup', {
Ext.define('Hamsket.ux.FileBackup', {
singleton: true,
constructor() {
const me = this;
@ -7,7 +7,7 @@ Ext.define('Rambox.ux.FileBackup', {
me.path = me.remote.require('path');
me.fs = me.remote.require('fs');
me.userPath = me.remote.app.getPath('userData');
me.defaultFileName = 'rambox-backup.json';
me.defaultFileName = 'hamsket-backup.json';
me.myDefaultPath = me.userPath + me.path.sep + me.defaultFileName;
},
backupConfiguration(callback) {
@ -49,7 +49,7 @@ Ext.define('Rambox.ux.FileBackup', {
if (services) {
Ext.cq1('app-main').getController().removeAllServices(true, function() {
Ext.each(services, function(s) {
const service = Ext.create('Rambox.model.Service', s);
const service = Ext.create('Hamsket.model.Service', s);
service.save();
Ext.getStore('Services').add(service);
});

46
app/ux/WebView.js

@ -1,15 +1,15 @@
/**
* Default config for all webviews created
*/
Ext.define('Rambox.ux.WebView',{
Ext.define('Hamsket.ux.WebView',{
extend: 'Ext.panel.Panel'
,xtype: 'webview'
,requires: [
'Rambox.util.Format'
,'Rambox.util.Notifier'
,'Rambox.util.UnreadCounter'
,'Rambox.util.IconLoader'
'Hamsket.util.Format'
,'Hamsket.util.Notifier'
,'Hamsket.util.UnreadCounter'
,'Hamsket.util.IconLoader'
]
// private
@ -170,7 +170,7 @@ Ext.define('Rambox.ux.WebView',{
,webpreferences: 'sandbox: true' //,nativeWindowOpen=true
//,disablewebsecurity: 'on' // Disabled because some services (Like Google Drive) dont work with this enabled
,userAgent: me.getUserAgent()
,preload: './resources/js/rambox-service-api.js'
,preload: './resources/js/hamsket-service-api.js'
}
}];
@ -238,13 +238,13 @@ Ext.define('Rambox.ux.WebView',{
});
webview.addEventListener("did-finish-load", function(e) {
Rambox.app.setTotalServicesLoaded( Rambox.app.getTotalServicesLoaded() + 1 );
Hamsket.app.setTotalServicesLoaded( Hamsket.app.getTotalServicesLoaded() + 1 );
// Apply saved zoom level
me.setZoomLevel(me.record.get('zoomLevel'));
// Set special icon for some service (like Slack)
Rambox.util.IconLoader.loadServiceIconUrl(me, webview);
Hamsket.util.IconLoader.loadServiceIconUrl(me, webview);
});
// Open links in default browser
@ -345,7 +345,7 @@ Ext.define('Rambox.ux.WebView',{
,style: 'width:100%;height:100%;'
,partition: me.getWebView().partition
,useragent: me.getUserAgent()
,preload: './resources/js/rambox-modal-api.js'
,preload: './resources/js/hamsket-modal-api.js'
}
}
,listeners: {
@ -402,7 +402,7 @@ Ext.define('Rambox.ux.WebView',{
console.log(custom_css);
console.groupEnd();
let js_before = '{let mystyle=`';
let js_after = '`,mycss=document.createElement("style");mycss.type="text/css",mycss.styleSheet?mycss.styleSheet.cssText=mystyle:mycss.appendChild(document.createTextNode(mystyle));let myDocHead=document.head;null===myDocHead||myDocHead.ramboxStyled||(myDocHead.appendChild(mycss),myDocHead.ramboxStyled=!0);let myframes=document.getElementsByTagName("iframe");for(let myframe of myframes){let mydocument,mydochead=(myframe.contentDocument||myframe.contentWindow.document).head;if(null!==mydochead&&!mydochead.ramboxStyled){let myclonedcss=mycss.cloneNode(deep=!0);mydochead.appendChild(myclonedcss),mydochead.ramboxStyled=!0}}}';
let js_after = '`,mycss=document.createElement("style");mycss.type="text/css",mycss.styleSheet?mycss.styleSheet.cssText=mystyle:mycss.appendChild(document.createTextNode(mystyle));let myDocHead=document.head;null===myDocHead||myDocHead.hamsketStyled||(myDocHead.appendChild(mycss),myDocHead.hamsketStyled=!0);let myframes=document.getElementsByTagName("iframe");for(let myframe of myframes){let mydocument,mydochead=(myframe.contentDocument||myframe.contentWindow.document).head;if(null!==mydochead&&!mydochead.hamsketStyled){let myclonedcss=mycss.cloneNode(deep=!0);mydochead.appendChild(myclonedcss),mydochead.hamsketStyled=!0}}}';
webview.executeJavaScript(js_before + custom_css + js_after);
}
}
@ -513,22 +513,22 @@ Ext.define('Rambox.ux.WebView',{
webview.addEventListener('ipc-message', function(event) {
const channel = event.channel;
switch (channel) {
case 'rambox.setUnreadCount':
case 'hamsket.setUnreadCount':
handleSetUnreadCount(event);
break;
case 'rambox.clearUnreadCount':
case 'hamsket.clearUnreadCount':
handleClearUnreadCount(event);
break;
case 'rambox.updateBadge':
case 'hamsket.updateBadge':
handleUpdateBadge(event);
break;
case 'rambox.showWindowAndActivateTab':
case 'hamsket.showWindowAndActivateTab':
showWindowAndActivateTab(event);
break;
}
/**
* Handles 'rambox.clearUnreadCount' messages.
* Handles 'hamsket.clearUnreadCount' messages.
* Clears the unread count.
*/
function handleClearUnreadCount() {
@ -538,7 +538,7 @@ Ext.define('Rambox.ux.WebView',{
}
/**
* Handles 'rambox.setUnreadCount' messages.
* Handles 'hamsket.setUnreadCount' messages.
* Sets the badge text if the event contains an integer
* or a '•' (indicating non-zero but unknown number of unreads) as first argument.
*
@ -606,12 +606,12 @@ Ext.define('Rambox.ux.WebView',{
const me = this;
if ( !isNaN(newUnreadCount) && (function(x) { return (x | 0) === x; })(parseFloat(newUnreadCount)) && me.record.get('includeInGlobalUnreadCounter') === true) {
Rambox.util.UnreadCounter.setUnreadCountForService(me.record.get('id'), newUnreadCount);
Hamsket.util.UnreadCounter.setUnreadCountForService(me.record.get('id'), newUnreadCount);
} else {
Rambox.util.UnreadCounter.clearUnreadCountForService(me.record.get('id'));
Hamsket.util.UnreadCounter.clearUnreadCountForService(me.record.get('id'));
}
me.setTabBadgeText(Rambox.util.Format.formatNumber(newUnreadCount));
me.setTabBadgeText(Hamsket.util.Format.formatNumber(newUnreadCount));
me.doManualNotification(parseInt(newUnreadCount));
}
@ -622,7 +622,7 @@ Ext.define('Rambox.ux.WebView',{
/**
* Dispatch manual notification if
* service doesn't have notifications, so Rambox does them
* service doesn't have notifications, so Hamsket does them
* count increased
* not in dnd mode
* notifications enabled
@ -636,7 +636,7 @@ Ext.define('Rambox.ux.WebView',{
me.currentUnreadCount < count &&
me.record.get('notifications') &&
!JSON.parse(localStorage.getItem('dontDisturb'))) {
Rambox.util.Notifier.dispatchNotification(me, count);
Hamsket.util.Notifier.dispatchNotification(me, count);
}
me.currentUnreadCount = count;
@ -664,7 +664,7 @@ Ext.define('Rambox.ux.WebView',{
,clearUnreadCounter() {
const me = this;
me.tab.setBadgeText('');
Rambox.util.UnreadCounter.clearUnreadCountForService(me.record.get('id'));
Hamsket.util.UnreadCounter.clearUnreadCountForService(me.record.get('id'));
}
,reloadService(btn) {
@ -831,7 +831,7 @@ Ext.define('Rambox.ux.WebView',{
// ` Chrome/${me.getChromeVersion()} Safari/537.36`;
const default_ua = window.navigator.userAgent
.replace(`Electron/${me.getElectronVersion()} `,'')
.replace(`Rambox/${me.getAppVersion()} `, '');
.replace(`Hamsket/${me.getAppVersion()} `, '');
const service_ua = Ext.getStore('ServicesList').getById(me.record.get('type')).get('userAgent');
const ua = service_ua ? service_ua : default_ua;
return ua;

2
app/ux/mixin/Badge.js

@ -1,7 +1,7 @@
/**
* Created by whiskeredwonder on 7/30/2015.
*/
Ext.define('Rambox.ux.mixin.Badge', {
Ext.define('Hamsket.ux.mixin.Badge', {
extend: 'Ext.Mixin',
requires: [

6
app/view/add/Add.js

@ -1,9 +1,9 @@
Ext.define('Rambox.view.add.Add',{
Ext.define('Hamsket.view.add.Add',{
extend: 'Ext.window.Window'
,requires: [
'Rambox.view.add.AddController'
,'Rambox.view.add.AddModel'
'Hamsket.view.add.AddController'
,'Hamsket.view.add.AddModel'
]
,controller: 'add-add'

8
app/view/add/AddController.js

@ -1,9 +1,9 @@
Ext.define('Rambox.view.add.AddController', {
Ext.define('Hamsket.view.add.AddController', {
extend: 'Ext.app.ViewController',
alias: 'controller.add-add',
requires: [
'Rambox.util.UnreadCounter'
'Hamsket.util.UnreadCounter'
],
doCancel( btn ) {
@ -68,7 +68,7 @@ Ext.define('Rambox.view.add.AddController', {
}
// Apply the JS Code of the Tab
if ( win.down('textarea').isDirty() ) {
Ext.Msg.confirm(locale['app.window[8]'].toUpperCase(), 'Rambox-OS needs to reload the service to execute the new JavaScript code. Do you want to do it now?', function( btnId ) {
Ext.Msg.confirm(locale['app.window[8]'].toUpperCase(), 'Hamsket needs to reload the service to execute the new JavaScript code. Do you want to do it now?', function( btnId ) {
if ( btnId === 'yes' ) view.reloadService();
});
}
@ -83,7 +83,7 @@ Ext.define('Rambox.view.add.AddController', {
formValues.url = formValues.cycleValue === '1' ? win.record.get('url').replace('___', formValues.url) : formValues.url;
}
const service = Ext.create('Rambox.model.Service', {
const service = Ext.create('Hamsket.model.Service', {
type: win.record.get('id')
,logo: formValues.logo
,name: formValues.serviceName

2
app/view/add/AddModel.js

@ -1,4 +1,4 @@
Ext.define('Rambox.view.add.AddModel', {
Ext.define('Hamsket.view.add.AddModel', {
extend: 'Ext.app.ViewModel'
,alias: 'viewmodel.add-add'
});

8
app/view/main/About.js

@ -1,4 +1,4 @@
Ext.define('Rambox.view.main.About', {
Ext.define('Hamsket.view.main.About', {
extend: 'Ext.window.Window'
,xtype: 'about'
,title: locale['app.about[0]']
@ -32,8 +32,10 @@ Ext.define('Rambox.view.main.About', {
,'<div><b>Node:</b> {node}</div>'
,'<div><b>BuildVersion:</b> {buildversion}</div>'
,'<br />'
,'<div style="text-align:center;"><a href="https://github.com/TheGoddessInari/rambox" target="_blank">GitHub</a></div>'
,'<div style="text-align:center;"><a href="https://github.com/TheGoddessInari/hamsket" target="_blank">GitHub</a></div>'
,'<br />'
,'<div style="text-align:center;"><i>'+locale['app.about[4]']+' TheGoddessInari. Original version by Ramiro Saenz.</i></div>'
,'<div style="text-align:center;"><i>'+locale['app.about[4]']+' TheGoddessInari.'
,'<br />'
, 'Original version by Ramiro Saenz.</i></div>'
]
});

34
app/view/main/Main.js

@ -1,11 +1,11 @@
Ext.define('Rambox.view.main.Main', {
Ext.define('Hamsket.view.main.Main', {
extend: 'Ext.tab.Panel'
,requires: [
'Rambox.view.main.MainController'
,'Rambox.view.main.MainModel'
,'Rambox.ux.WebView'
,'Rambox.ux.mixin.Badge'
,'Rambox.view.add.Add'
'Hamsket.view.main.MainController'
,'Hamsket.view.main.MainModel'
,'Hamsket.ux.WebView'
,'Hamsket.ux.mixin.Badge'
,'Hamsket.view.add.Add'
,'Ext.ux.TabReorderer'
]
@ -31,13 +31,13 @@ Ext.define('Rambox.view.main.Main', {
,html: '<span class="fa fa-heart" style="color:red;font-size:16px;cursor:pointer;padding:0 5px;"></span>'
,baseCls: ''
,tooltip: locale['app.main[25]']
,href: 'https://www.gofundme.com/rambox-os'
,href: 'https://www.gofundme.com/Hamsket'
}]
}
,items: [
{
icon: 'resources/IconTray@2x.png'
,id: 'ramboxTab'
,id: 'hamsketTab'
,closable: false
,reorderable: false
,autoScroll: true
@ -249,8 +249,8 @@ Ext.define('Rambox.view.main.Main', {
glyph: 'XF023@FontAwesome'
,text: locale['app.main[19]']
,tooltip: locale['app.main[20]']+'<br/><b>'+locale['app.main[18]']+': Alt+F2</b>'
,handler: 'lockRambox'
,id: 'lockRamboxBtn'
,handler: 'lockHamsket'
,id: 'lockHamsketBtn'
}
,'->'
,{
@ -258,16 +258,16 @@ Ext.define('Rambox.view.main.Main', {
,glyph: 'XF0C7@FontAwesome'
,id: 'backupBtn'
,tooltip: 'Backup services to disk'
,scope: Rambox.ux.FileBackup
,handler: Rambox.ux.FileBackup.backupConfiguration
,scope: Hamsket.ux.FileBackup
,handler: Hamsket.ux.FileBackup.backupConfiguration
}
,{
text: 'Restore'
,glyph: 'XF115@FontAwesome'
,id: 'restoreBtn'
,tooltip: 'Restore services from disk'
,scope: Rambox.ux.FileBackup
,handler: Rambox.ux.FileBackup.restoreConfiguration
,scope: Hamsket.ux.FileBackup
,handler: Hamsket.ux.FileBackup.restoreConfiguration
}
,{
tooltip: locale['preferences[0]']
@ -288,14 +288,14 @@ Ext.define('Rambox.view.main.Main', {
,{
text: locale['app.main[25]']
,glyph: 'XF21E@FontAwesome'
,href: 'https://www.gofundme.com/rambox-os'
,href: 'https://www.gofundme.com/Hamsket'
}
]
/* TODO: Translation
,{
text: 'Translation'
,glyph: 'XF0AC@FontAwesome'
,href: 'https://crowdin.com/project/rambox/invite'
,href: 'https://crowdin.com/project/hamsket/invite'
}
]*/
}
@ -323,7 +323,7 @@ Ext.define('Rambox.view.main.Main', {
}
,{
glyph: 'XF09B@FontAwesome'
,href: 'https://www.github.com/TheGoddessInari/rambox'
,href: 'https://www.github.com/TheGoddessInari/hamsket'
}
]
}

44
app/view/main/MainController.js

@ -1,4 +1,4 @@
Ext.define('Rambox.view.main.MainController', {
Ext.define('Hamsket.view.main.MainController', {
extend: 'Ext.app.ViewController'
,alias: 'controller.main'
@ -27,11 +27,11 @@ Ext.define('Rambox.view.main.MainController', {
localStorage.setItem('last_active_service', newTab.id);
if ( newTab.id === 'ramboxTab' ) {
if ( Rambox.app.getTotalNotifications() > 0 ) {
document.title = 'Rambox-OS ('+ Rambox.app.getTotalNotifications() +')';
if ( newTab.id === 'hamsketTab' ) {
if ( Hamsket.app.getTotalNotifications() > 0 ) {
document.title = 'Hamsket ('+ Hamsket.app.getTotalNotifications() +')';
} else {
document.title = 'Rambox-OS';
document.title = 'Hamsket';
}
return;
}
@ -44,15 +44,15 @@ Ext.define('Rambox.view.main.MainController', {
if ( webview ) webview.focus();
// Update the main window so it includes the active tab title.
if ( Rambox.app.getTotalNotifications() > 0 ) {
document.title = 'Rambox-OS ('+ Rambox.app.getTotalNotifications() +') - ' + newTab.record.get('name');
if ( Hamsket.app.getTotalNotifications() > 0 ) {
document.title = 'Hamsket ('+ Hamsket.app.getTotalNotifications() +') - ' + newTab.record.get('name');
} else {
document.title = 'Rambox-OS - ' + newTab.record.get('name');
document.title = 'Hamsket - ' + newTab.record.get('name');
}
}
,updatePositions(tabPanel, tab) {
if ( tab.id === 'ramboxTab' || tab.id === 'tbfill' ) return true;
if ( tab.id === 'hamsketTab' || tab.id === 'tbfill' ) return true;
console.log('Updating Tabs positions...');
@ -60,7 +60,7 @@ Ext.define('Rambox.view.main.MainController', {
let align = 'left';
store.suspendEvent('childmove');
Ext.each(tabPanel.items.items, function(t, i) {
if ( t.id !== 'ramboxTab' && t.id !== 'tbfill' && t.record.get('enabled') ) {
if ( t.id !== 'hamsketTab' && t.id !== 'tbfill' && t.record.get('enabled') ) {
const rec = store.getById(t.record.get('id'));
if ( align === 'right' ) i--;
rec.set('align', align);
@ -122,7 +122,7 @@ Ext.define('Rambox.view.main.MainController', {
}
,onNewServiceSelect( view, record, item, index, e ) {
Ext.create('Rambox.view.add.Add', {
Ext.create('Hamsket.view.add.Add', {
record: record
});
}
@ -152,7 +152,7 @@ Ext.define('Rambox.view.main.MainController', {
}
const config = ipc.sendSync('getConfig');
if ( config.default_service === rec.get('id') ) ipc.send('setConfig', Ext.apply(config, { default_service: 'ramboxTab' }));
if ( config.default_service === rec.get('id') ) ipc.send('setConfig', Ext.apply(config, { default_service: 'hamsketTab' }));
function clearData(webview, tab, resolve) {
webview.getWebContents().clearHistory();
@ -188,7 +188,7 @@ Ext.define('Rambox.view.main.MainController', {
const me = this;
// Clear counter for unread messaging
document.title = 'Rambox-OS';
document.title = 'Hamsket';
const store = Ext.getStore('Services');
@ -226,14 +226,14 @@ Ext.define('Rambox.view.main.MainController', {
.finally(function() {
store.resumeEvent('childmove');
store.resumeEvent('remove');
document.title = 'Rambox-OS';
document.title = 'Hamsket';
});
});
}
}
,configureService( gridView, rowIndex, colIndex, col, e, rec, rowEl ) {
Ext.create('Rambox.view.add.Add', {
Ext.create('Hamsket.view.add.Add', {
record: rec
,service: Ext.getStore('ServicesList').getById(rec.get('type'))
,edit: true
@ -331,7 +331,7 @@ Ext.define('Rambox.view.main.MainController', {
});
}
,lockRambox(btn) {
,lockHamsket(btn) {
const me = this;
if ( ipc.sendSync('getConfig').master_password ) {
@ -357,12 +357,12 @@ Ext.define('Rambox.view.main.MainController', {
,message: locale['app.window[25]']
,icon: Ext.Msg.WARNING
,buttons: Ext.Msg.OK
,fn: me.lockRambox
,fn: me.lockHamsket
});
return false;
}
setLock(Rambox.util.MD5.encypt(text));
setLock(Hamsket.util.MD5.encypt(text));
}
});
msgbox2.textField.inputEl.dom.type = 'password';
@ -372,7 +372,7 @@ Ext.define('Rambox.view.main.MainController', {
}
function setLock(text) {
console.info('Lock Rambox:', 'Enabled');
console.info('Lock Hamsket:', 'Enabled');
// Save encrypted password in localStorage to show locked when app is reopen
localStorage.setItem('locked', text);
@ -388,8 +388,8 @@ Ext.define('Rambox.view.main.MainController', {
const me = this;
const validateFn = function() {
if ( localStorage.getItem('locked') === Rambox.util.MD5.encypt(winLock.down('textfield').getValue()) ) {
console.info('Lock Rambox:', 'Disabled');
if ( localStorage.getItem('locked') === Hamsket.util.MD5.encypt(winLock.down('textfield').getValue()) ) {
console.info('Lock Hamsket:', 'Disabled');
localStorage.removeItem('locked');
winLock.close();
me.lookupReference('disturbBtn').setPressed(false);
@ -466,7 +466,7 @@ Ext.define('Rambox.view.main.MainController', {
,openPreferences( btn ) {
const me = this;
Ext.create('Rambox.view.preferences.Preferences').show();
Ext.create('Hamsket.view.preferences.Preferences').show();
}
});

4
app/view/main/MainModel.js

@ -1,10 +1,10 @@
Ext.define('Rambox.view.main.MainModel', {
Ext.define('Hamsket.view.main.MainModel', {
extend: 'Ext.app.ViewModel'
,alias: 'viewmodel.main'
,data: {
name: 'Rambox'
name: 'Hamsket'
}
});

12
app/view/preferences/Preferences.js

@ -1,10 +1,10 @@
Ext.define('Rambox.view.preferences.Preferences',{
Ext.define('Hamsket.view.preferences.Preferences',{
extend: 'Ext.window.Window'
,xtype: 'preferences'
,requires: [
'Rambox.view.preferences.PreferencesController'
,'Rambox.view.preferences.PreferencesModel'
'Hamsket.view.preferences.PreferencesController'
,'Hamsket.view.preferences.PreferencesModel'
,'Ext.form.field.ComboBox'
,'Ext.form.field.Checkbox'
]
@ -39,7 +39,7 @@ Ext.define('Rambox.view.preferences.Preferences',{
const config = ipc.sendSync('getConfig');
let defaultServiceOptions = [];
defaultServiceOptions.push({ value: 'ramboxTab', label: 'Rambox-OS Tab' });
defaultServiceOptions.push({ value: 'hamsketTab', label: 'Hamsket Tab' });
defaultServiceOptions.push({ value: 'last', label: 'Last Active Service' });
Ext.getStore('Services').each(function(rec) {
defaultServiceOptions.push({
@ -117,7 +117,7 @@ Ext.define('Rambox.view.preferences.Preferences',{
xtype: 'button'
,text: 'Help us Translate'
,style: 'border-top-left-radius:0;border-bottom-left-radius:0;'
,href: 'https://crowdin.com/project/rambox/invite'
,href: 'https://crowdin.com/project/hamsket/invite'
}
]
}
@ -170,7 +170,7 @@ Ext.define('Rambox.view.preferences.Preferences',{
,{
xtype: 'combo'
,name: 'default_service'
,fieldLabel: 'Default service to display when Rambox-OS starts'
,fieldLabel: 'Default service to display when Hamsket starts'
,labelAlign: 'top'
//,width: 380
//,labelWidth: 105

6
app/view/preferences/PreferencesController.js

@ -1,4 +1,4 @@
Ext.define('Rambox.view.preferences.PreferencesController', {
Ext.define('Hamsket.view.preferences.PreferencesController', {
extend: 'Ext.app.ViewController'
,alias: 'controller.preferences-preferences'
@ -26,7 +26,7 @@ Ext.define('Rambox.view.preferences.PreferencesController', {
Ext.isEmpty(values.master_password1) === false &&
Ext.isEmpty(values.master_password2) === false) {
values.master_password = Rambox.util.MD5.encypt(values.master_password1);
values.master_password = Hamsket.util.MD5.encypt(values.master_password1);
delete values.master_password1;
delete values.master_password2;
}
@ -48,7 +48,7 @@ Ext.define('Rambox.view.preferences.PreferencesController', {
// Locale
if ( values.locale !== ipc.sendSync('getConfig').locale ) {
localStorage.setItem('locale', values.locale);
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) {
Ext.Msg.confirm('Action required', 'To change the language of Hamsket, you need to reload the app. Do you want to do it now?', function(btnId) {
if ( btnId === 'yes' ) ipc.send('relaunchApp');
});
}

2
app/view/preferences/PreferencesModel.js

@ -1,4 +1,4 @@
Ext.define('Rambox.view.preferences.PreferencesModel', {
Ext.define('Hamsket.view.preferences.PreferencesModel', {
extend: 'Ext.app.ViewModel'
,alias: 'viewmodel.preferences-preferences'

2
build.xml

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<project name="Rambox" default=".help">
<project name="Hamsket" default=".help">
<!--
The build-impl.xml file imported here contains the guts of the build process. It is
a great idea to read that file to understand how the process works, but it is best to

12
electron/main.js

@ -37,7 +37,7 @@ const config = new Config({
,proxyPassword: ''
,locale: 'en'
,enable_hidpi_support: false
,default_service: 'ramboxTab'
,default_service: 'hamsketTab'
,x: undefined
,y: undefined
@ -56,14 +56,14 @@ if (config.get('enable_hidpi_support') && (process.platform === 'win32')) {
}
// This must match the package name in package.json
app.setAppUserModelId('com.thegoddessinari.rambox');
app.setAppUserModelId('com.thegoddessinari.hamsket');
// Menu
const appMenu = require('./menu')(config);
// Configure AutoLaunch
const appLauncher = new AutoLaunch({
name: 'Rambox-OS'
name: 'Hamsket'
,isHidden: config.get('start_minimized')
});
if (config.get('auto_launch') && !isDev) {
@ -81,7 +81,7 @@ let isQuitting = false;
function createWindow () {
// Create the browser window using the state information
mainWindow = new BrowserWindow({
title: 'Rambox-OS'
title: 'Hamsket'
,icon: nativeImage.createFromPath(path.join(app.getAppPath(), '/resources/Icon.' + (process.platform === 'linux' ? 'png' : 'ico')))
,backgroundColor: '#FFF'
,x: config.get('x')
@ -94,7 +94,7 @@ function createWindow () {
,show: !config.get('start_minimized')
,acceptFirstMouse: true
,webPreferences: {
partition: 'persist:rambox',
partition: 'persist:hamsket',
nodeIntegration: true,
webviewTag: true
}
@ -442,7 +442,7 @@ if ( config.get('proxy') ) {
// Disable GPU Acceleration for Linux
// to prevent White Page bug
// https://github.com/electron/electron/issues/6139
// https://github.com/saenzramiro/rambox/issues/181
// https://github.com/saenzramiro/hamsket/issues/181
if ( config.get('disable_gpu') ) app.disableHardwareAcceleration();
// This method will be called when Electron has finished

6
electron/menu.js

@ -32,7 +32,7 @@ module.exports = function(config) {
{
label: `&GitHub`,
click() {
shell.openExternal('https://www.github.com/TheGoddessInari/rambox');
shell.openExternal('https://www.github.com/TheGoddessInari/hamsket');
}
},
{
@ -60,7 +60,7 @@ module.exports = function(config) {
{
label: `&`+locale['menu.help[2]'],
click() {
shell.openExternal('https://gitter.im/TheGoddessInari/rambox');
shell.openExternal('https://gitter.im/TheGoddessInari/hamsket');
}
},
{
@ -243,7 +243,7 @@ module.exports = function(config) {
}
},
{
label: `Lock Rambox`,
label: `Lock Hamsket`,
accelerator: 'Alt+F2',
click() {
sendAction('lockWindow');

2
electron/tray.js

@ -31,7 +31,7 @@ exports.create = function(win, config) {
]);
appIcon = new Tray(icon);
appIcon.setToolTip('Rambox-OS');
appIcon.setToolTip('Hamsket');
appIcon.setContextMenu(contextMenu);
switch (process.platform) {

2
electron/updater.js

@ -1,7 +1,7 @@
const {app, autoUpdater, ipcMain} = require('electron');
const version = app.getVersion();
const platform = process.platform === 'darwin' ? 'osx' : process.platform;
const url = `https://getrambox.herokuapp.com/update/${platform}/${version}`;
const url = `https://gethamsket.herokuapp.com/update/${platform}/${version}`;
const initialize = (window) => {
const webContents = window.webContents;

2
index.html

@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src 'self' data: https://*; frame-src 'none'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' https://fonts.googleapis.com 'unsafe-inline'; font-src 'self' https://fonts.gstatic.com; connect-src https://api.github.com">
<title>Rambox-OS</title>
<title>Hamsket</title>
<!-- The line below must be kept intact for Sencha Cmd to build your application -->
<script id="microloader" type="text/javascript" src="bootstrap.js"></script>

4
masterpassword.html

@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>Rambox-OS</title>
<title>Hamsket</title>
</head>
<body>
@ -24,7 +24,7 @@
</div>
<div style="text-align:center;margin-top:60px;">
<a href="#" onclick="exit()" style="text-decoration:none;color:#4e9dbb;font-family:Arial;">
Exit Rambox-OS
Exit Hamsket
</a>
</div>
<script>

2
overrides/grid/column/Action.js

@ -1,4 +1,4 @@
Ext.define('Rambox.overrides.grid.column.Action', {
Ext.define('Hamsket.overrides.grid.column.Action', {
override: 'Ext.grid.column.Action',
// overridden to implement

4
overrides/layout/container/boxOverflow/Scroller.js

@ -1,9 +1,9 @@
/**
* Per default scrolling the tab bar moves the tabs 20 pixels.
* To improve the usability of the tab bar this value is increased for Rambox-OS.
* To improve the usability of the tab bar this value is increased for Hamsket.
* Also animations are enabled, so the user understands what's going on.
*/
Ext.define('Rambox.overrides.layout.container.boxOverflow.Scroller', {
Ext.define('Hamsket.overrides.layout.container.boxOverflow.Scroller', {
override: 'Ext.layout.container.boxOverflow.Scroller',
scrollIncrement: 250,

16
package.json

@ -1,12 +1,12 @@
{
"private": true,
"scripts": {
"start": "npm run compile && electron build/production/Rambox",
"debug": "electron --inspect build/production/Rambox",
"start": "npm run compile && electron build/production/Hamsket",
"debug": "electron --inspect build/production/Hamsket",
"test": "mocha test/tests/**/*.spec.js",
"buildversion": "git show --pretty=\"%h %d %cD\" -s > build/production/Rambox/BUILDVERSION || node -p -e \"require('./build/production/Rambox/package.json').version\" > build/production/Rambox/BUILDVERSION",
"buildversion": "git show --pretty=\"%h %d %cD\" -s > build/production/Hamsket/BUILDVERSION || node -p -e \"require('./build/production/Hamsket/package.json').version\" > build/production/Hamsket/BUILDVERSION",
"clean": "shx rm -rf ./build/production",
"compile": "sencha app build && shx cp app/package.json app/package-lock.json build/production/Rambox/ && npm run buildversion && electron-builder install-app-deps",
"compile": "sencha app build && shx cp app/package.json app/package-lock.json build/production/Hamsket/ && npm run buildversion && electron-builder install-app-deps",
"recompile": "npm run distclean && npm run compile",
"distclean": "shx rm -rf ./dist",
"distclean:win": "shx rm -rf ./dist/win-{ia32-,}unpacked",
@ -49,8 +49,8 @@
"dist": "npm run repack"
},
"build": {
"productName": "Rambox-OS",
"appId": "com.thegoddessinari.rambox",
"productName": "Hamsket",
"appId": "com.thegoddessinari.hamsket",
"asar": true,
"publish": null,
"mac": {
@ -60,7 +60,7 @@
]
},
"dmg": {
"title": "Rambox-OS",
"title": "Hamsket",
"iconSize": 128,
"contents": [
{
@ -98,7 +98,7 @@
"directories": {
"buildResources": "resources/installer/",
"output": "dist/",
"app": "build/production/Rambox/"
"app": "build/production/Hamsket/"
}
},
"devDependencies": {

0
packages/local/rambox-default-theme/.sencha/package/Boot.js → packages/local/hamsket-default-theme/.sencha/package/Boot.js

0
packages/local/rambox-default-theme/.sencha/package/Microloader.js → packages/local/hamsket-default-theme/.sencha/package/Microloader.js

0
packages/local/rambox-default-theme/.sencha/package/bootstrap-impl.xml → packages/local/hamsket-default-theme/.sencha/package/bootstrap-impl.xml

0
packages/local/rambox-default-theme/.sencha/package/build-impl.xml → packages/local/hamsket-default-theme/.sencha/package/build-impl.xml

0
packages/local/rambox-default-theme/.sencha/package/build.properties → packages/local/hamsket-default-theme/.sencha/package/build.properties

0
packages/local/rambox-default-theme/.sencha/package/codegen.json → packages/local/hamsket-default-theme/.sencha/package/codegen.json

0
packages/local/rambox-default-theme/.sencha/package/defaults.properties → packages/local/hamsket-default-theme/.sencha/package/defaults.properties

0
packages/local/rambox-default-theme/.sencha/package/find-cmd-impl.xml → packages/local/hamsket-default-theme/.sencha/package/find-cmd-impl.xml

0
packages/local/rambox-default-theme/.sencha/package/init-impl.xml → packages/local/hamsket-default-theme/.sencha/package/init-impl.xml

0
packages/local/rambox-default-theme/.sencha/package/js-impl.xml → packages/local/hamsket-default-theme/.sencha/package/js-impl.xml

0
packages/local/rambox-default-theme/.sencha/package/plugin.xml → packages/local/hamsket-default-theme/.sencha/package/plugin.xml

0
packages/local/rambox-default-theme/.sencha/package/refresh-impl.xml → packages/local/hamsket-default-theme/.sencha/package/refresh-impl.xml

0
packages/local/rambox-default-theme/.sencha/package/resources-impl.xml → packages/local/hamsket-default-theme/.sencha/package/resources-impl.xml

0
packages/local/rambox-default-theme/.sencha/package/sass-impl.xml → packages/local/hamsket-default-theme/.sencha/package/sass-impl.xml

0
packages/local/rambox-default-theme/.sencha/package/sencha.cfg → packages/local/hamsket-default-theme/.sencha/package/sencha.cfg

0
packages/local/rambox-default-theme/.sencha/package/slice-impl.xml → packages/local/hamsket-default-theme/.sencha/package/slice-impl.xml

0
packages/local/rambox-default-theme/.sencha/package/sub-builds.xml → packages/local/hamsket-default-theme/.sencha/package/sub-builds.xml

0
packages/local/rambox-default-theme/.sencha/package/testing.properties → packages/local/hamsket-default-theme/.sencha/package/testing.properties

2
packages/local/hamsket-default-theme/Readme.md

@ -0,0 +1,2 @@
# hamsket-default-theme - Read Me

2
packages/local/rambox-default-theme/build.xml → packages/local/hamsket-default-theme/build.xml

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<project name="rambox-default-theme" default=".help">
<project name="hamsket-default-theme" default=".help">
<!--
The build-impl.xml file imported here contains the guts of the build process. It is
a great idea to read that file to understand how the process works, but it is best to

2
packages/local/rambox-default-theme/examples/Readme.md → packages/local/hamsket-default-theme/examples/Readme.md

@ -1,4 +1,4 @@
# rambox-default-theme/examples
# hamsket-default-theme/examples
This folder contains example applications demonstrating this package. Each of
these applications will be built as part of the package build:

2
packages/local/rambox-default-theme/licenses/Readme.md → packages/local/hamsket-default-theme/licenses/Readme.md

@ -1,3 +1,3 @@
# rambox-default-theme/licenses
# hamsket-default-theme/licenses
This folder contains the supported licenses for third-party use.

2
packages/local/rambox-default-theme/overrides/Readme.md → packages/local/hamsket-default-theme/overrides/Readme.md

@ -1,3 +1,3 @@
# rambox-default-theme/overrides
# hamsket-default-theme/overrides
This folder contains overrides which will automatically be required by package users.

2
packages/local/hamsket-default-theme/overrides/init.js

@ -0,0 +1,2 @@
Ext.namespace('Ext.theme.is')['hamsket-default-theme'] = true;
Ext.theme.name = 'hamsket-default-theme';

2
packages/local/rambox-default-theme/package.json → packages/local/hamsket-default-theme/package.json

@ -2,7 +2,7 @@
/**
* The name of the package.
*/
"name": "rambox-default-theme",
"name": "hamsket-default-theme",
/**
* Alternate names for this package.

2
packages/local/rambox-default-theme/resources/Readme.md → packages/local/hamsket-default-theme/resources/Readme.md

@ -1,3 +1,3 @@
# rambox-default-theme/resources
# hamsket-default-theme/resources
This folder contains static resources (typically an `"images"` folder as well).

0
packages/local/rambox-default-theme/resources/fonts/font-awesome/css/font-awesome.css → packages/local/hamsket-default-theme/resources/fonts/font-awesome/css/font-awesome.css vendored

0
packages/local/rambox-default-theme/resources/fonts/font-awesome/css/font-awesome.min.css → packages/local/hamsket-default-theme/resources/fonts/font-awesome/css/font-awesome.min.css vendored

0
packages/local/rambox-default-theme/resources/fonts/font-awesome/fonts/FontAwesome.otf → packages/local/hamsket-default-theme/resources/fonts/font-awesome/fonts/FontAwesome.otf

0
packages/local/rambox-default-theme/resources/fonts/font-awesome/fonts/fontawesome-webfont.eot → packages/local/hamsket-default-theme/resources/fonts/font-awesome/fonts/fontawesome-webfont.eot

0
packages/local/rambox-default-theme/resources/fonts/font-awesome/fonts/fontawesome-webfont.svg → packages/local/hamsket-default-theme/resources/fonts/font-awesome/fonts/fontawesome-webfont.svg

Before

Width:  |  Height:  |  Size: 382 KiB

After

Width:  |  Height:  |  Size: 382 KiB

0
packages/local/rambox-default-theme/resources/fonts/font-awesome/fonts/fontawesome-webfont.ttf → packages/local/hamsket-default-theme/resources/fonts/font-awesome/fonts/fontawesome-webfont.ttf

0
packages/local/rambox-default-theme/resources/fonts/font-awesome/fonts/fontawesome-webfont.woff → packages/local/hamsket-default-theme/resources/fonts/font-awesome/fonts/fontawesome-webfont.woff

0
packages/local/rambox-default-theme/resources/fonts/font-awesome/fonts/fontawesome-webfont.woff2 → packages/local/hamsket-default-theme/resources/fonts/font-awesome/fonts/fontawesome-webfont.woff2

0
packages/local/rambox-default-theme/resources/fonts/icomoon/icomoon.eot → packages/local/hamsket-default-theme/resources/fonts/icomoon/icomoon.eot

0
packages/local/rambox-default-theme/resources/fonts/icomoon/icomoon.svg → packages/local/hamsket-default-theme/resources/fonts/icomoon/icomoon.svg

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

0
packages/local/rambox-default-theme/resources/fonts/icomoon/icomoon.ttf → packages/local/hamsket-default-theme/resources/fonts/icomoon/icomoon.ttf

0
packages/local/rambox-default-theme/resources/fonts/icomoon/icomoon.woff → packages/local/hamsket-default-theme/resources/fonts/icomoon/icomoon.woff

0
packages/local/rambox-default-theme/resources/images/toolbar/main-more.png → packages/local/hamsket-default-theme/resources/images/toolbar/main-more.png

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

0
packages/local/rambox-default-theme/resources/images/toolbar/newversion-more.png → packages/local/hamsket-default-theme/resources/images/toolbar/newversion-more.png

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

7
packages/local/hamsket-default-theme/sass/Readme.md

@ -0,0 +1,7 @@
# hamsket-default-theme/sass
This folder contains SASS files of various kinds, organized in sub-folders:
hamsket-default-theme/sass/etc
hamsket-default-theme/sass/src
hamsket-default-theme/sass/var

0
packages/local/rambox-default-theme/sass/config.rb → packages/local/hamsket-default-theme/sass/config.rb

4
packages/local/hamsket-default-theme/sass/etc/Readme.md

@ -0,0 +1,4 @@
# hamsket-default-theme/sass/etc
This folder contains miscellaneous SASS files. Unlike `"hamsket-default-theme/sass/etc"`, these files
need to be used explicitly.

0
packages/local/rambox-default-theme/sass/etc/_loadscreen.scss → packages/local/hamsket-default-theme/sass/etc/_loadscreen.scss

0
packages/local/rambox-default-theme/sass/etc/all.scss → packages/local/hamsket-default-theme/sass/etc/all.scss

0
packages/local/rambox-default-theme/sass/example/custom.js → packages/local/hamsket-default-theme/sass/example/custom.js

0
packages/local/rambox-default-theme/sass/example/fashion.html → packages/local/hamsket-default-theme/sass/example/fashion.html

0
packages/local/rambox-default-theme/sass/example/render.js → packages/local/hamsket-default-theme/sass/example/render.js

0
packages/local/rambox-default-theme/sass/example/theme.html → packages/local/hamsket-default-theme/sass/example/theme.html

0
packages/local/rambox-default-theme/sass/src/LoadMask.scss → packages/local/hamsket-default-theme/sass/src/LoadMask.scss

2
packages/local/rambox-default-theme/sass/src/Readme.md → packages/local/hamsket-default-theme/sass/src/Readme.md

@ -1,4 +1,4 @@
# rambox-default-theme/sass/src
# hamsket-default-theme/sass/src
This folder contains SASS sources that mimic the component-class hierarchy. These files
are gathered in to a build of the CSS based on classes that are used by the build.

0
packages/local/rambox-default-theme/sass/src/grid/column/Action.scss → packages/local/hamsket-default-theme/sass/src/grid/column/Action.scss

3
packages/local/hamsket-default-theme/sass/src/grid/column/Check.scss

@ -0,0 +1,3 @@
#hamsketTab .x-grid-cell-inner-checkcolumn {
padding: 13px 10px 14px 10px !important;
}

0
packages/local/rambox-default-theme/sass/src/panel/Tool.scss → packages/local/hamsket-default-theme/sass/src/panel/Tool.scss

0
packages/local/rambox-default-theme/sass/src/tab/Bar.scss → packages/local/hamsket-default-theme/sass/src/tab/Bar.scss

0
packages/local/rambox-default-theme/sass/src/toolbar/Toolbar.scss → packages/local/hamsket-default-theme/sass/src/toolbar/Toolbar.scss

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save