├── app ├── src │ ├── auth │ │ ├── login.html │ │ ├── auth.html │ │ ├── register.controller.js │ │ ├── forgotpassword.controller.js │ │ ├── login.controller.js │ │ ├── forgotpassword.html │ │ ├── loginform.html │ │ └── register.html │ ├── services │ │ ├── preloaders │ │ │ ├── css │ │ │ │ └── slack.css │ │ │ ├── zendesk.js │ │ │ ├── utils │ │ │ │ ├── spellcheck.js │ │ │ │ └── zoom.js │ │ │ ├── asana.js │ │ │ ├── custom_app.js │ │ │ ├── google_calendar.js │ │ │ ├── jira.js │ │ │ ├── hipchat.js │ │ │ ├── freshdesk.js │ │ │ ├── whatsapp.js │ │ │ ├── closedotio.js │ │ │ ├── hangouts.js │ │ │ ├── gitter.js │ │ │ ├── salesforce.js │ │ │ ├── evernote.js │ │ │ ├── pura.js │ │ │ ├── confluence.js │ │ │ ├── google_drive.js │ │ │ └── bitbucket.js │ │ ├── dynamicModal.html │ │ ├── deleteProfile.html │ │ ├── subscription.html │ │ ├── testPreload.js │ │ ├── myModalContent.html │ │ ├── upgradeModal.html │ │ ├── shareModal.html │ │ ├── registerModal.html │ │ └── referModal.html │ ├── index │ │ └── index.html │ ├── home │ │ ├── home.html │ │ └── home.controller.js │ ├── components │ │ └── APIInterceptor.service.js │ ├── app.js │ ├── servicesList │ │ └── servicesList.html │ ├── notificationcenter │ │ ├── notificationCenter.controller.js │ │ └── notificationCenter.html │ └── enabledServices │ │ └── enabledServices.html ├── images │ ├── logo.png │ ├── cross.png │ ├── 512x512.png │ ├── loading.gif │ ├── manageyum.png │ ├── rolling.gif │ ├── services │ │ ├── vk.png │ │ ├── asana.png │ │ ├── grape.png │ │ ├── hibox.png │ │ ├── icq.png │ │ ├── jira.png │ │ ├── mysms.png │ │ ├── pura.png │ │ ├── skype.png │ │ ├── slack.png │ │ ├── wire.png │ │ ├── discord.png │ │ ├── github.png │ │ ├── gitter.png │ │ ├── groupme.png │ │ ├── hipchat.png │ │ ├── outlook.png │ │ ├── todoist.png │ │ ├── wechat.png │ │ ├── zendesk.png │ │ ├── basecamp.png │ │ ├── chatwork.png │ │ ├── ciscospark.png │ │ ├── confluence.png │ │ ├── coupleme.png │ │ ├── dingtalk.png │ │ ├── evernote.png │ │ ├── flowdock.png │ │ ├── freshdesk.png │ │ ├── hangouts.png │ │ ├── intercom.png │ │ ├── irccloud.png │ │ ├── linkedin.png │ │ ├── mattermost.png │ │ ├── messenger.png │ │ ├── rocketchat.png │ │ ├── salesforce.png │ │ ├── steamchat.png │ │ ├── teamwork.png │ │ ├── telegram.png │ │ ├── tweetdeck.png │ │ ├── whatsapp.png │ │ ├── wunderlist.png │ │ ├── google_drive.png │ │ ├── googlegmail.png │ │ ├── googleinbox.png │ │ ├── producthunt.png │ │ ├── facebookpages.png │ │ ├── google_calendar.png │ │ ├── yahoomessenger.png │ │ ├── defaultIntegration.png │ │ ├── zendesk.svg │ │ ├── helpscout.svg │ │ ├── custom_app.svg │ │ ├── twitter.svg │ │ ├── asana.svg │ │ ├── bitbucket.svg │ │ ├── messenger.svg │ │ ├── wire.svg │ │ ├── gitter.svg │ │ ├── outlook.svg │ │ ├── trello.svg │ │ ├── tweetdeck.svg │ │ ├── mattermost.svg │ │ ├── vk.svg │ │ ├── linkedin.svg │ │ ├── telegram.svg │ │ ├── intercom.svg │ │ ├── flowdock.svg │ │ ├── wechat.svg │ │ ├── groupme.svg │ │ ├── whatsapp.svg │ │ ├── hipchat.svg │ │ ├── discord.svg │ │ └── coupleme.svg │ ├── windock │ │ ├── win-dock-alert-1.png │ │ ├── win-dock-alert-2.png │ │ ├── win-dock-alert-3.png │ │ ├── win-dock-alert-4.png │ │ ├── win-dock-alert-5.png │ │ ├── win-dock-alert-6.png │ │ ├── win-dock-alert-7.png │ │ ├── win-dock-alert-8.png │ │ ├── win-dock-alert-9.png │ │ ├── win-dock-alert.png │ │ └── win-dock-alert-10.png │ ├── facebook.svg │ ├── close.svg │ ├── add.svg │ ├── edit.svg │ ├── envelope.svg │ ├── twitter.svg │ ├── heart.svg │ ├── notification_on.svg │ ├── notification_off.svg │ ├── applogo.svg │ ├── clearcache.svg │ ├── right-chevron.svg │ └── cog.svg ├── fonts │ ├── 1YwB1sO8YE1Lyjf12WNiUA.woff2 │ └── UyBMtLsHKBKXelqf4x7VRQ.woff2 ├── package.json ├── helpers │ ├── external_links.js │ └── context_menu.js └── app.html ├── .jshintrc ├── resources ├── osx │ ├── _DS_Store │ ├── icon.icns │ ├── 256x256.png │ ├── dmg-icon.icns │ ├── dmg-background.png │ ├── dmg-background@2x.png │ └── dmg-background@2x.png.png ├── windows │ ├── icon.ico │ ├── _DS_Store │ └── setup-icon.ico └── icons │ └── 512x512.png ├── config ├── env_test.json ├── env_production.json └── env_development.json ├── gulpfile.js ├── src ├── menu │ ├── file_menu_template.js │ ├── window_menu_template.js │ ├── dev_menu_template.js │ ├── help_menu_template.js │ ├── edit_menu_template.js │ └── view_menu_template.js ├── hello_world │ ├── hello_world.js │ └── hello_world.spec.js ├── env.js ├── stylesheets │ └── main.less ├── src │ └── servicesList │ │ ├── servicesList.html │ │ └── servicesList.controller.js ├── app.js └── helpers │ └── window.js ├── tasks ├── utils.js ├── start.js ├── build_app.js ├── build_tests.js └── bundle.js ├── .gitignore ├── .editorconfig ├── .travis.yml ├── scripts ├── travis-build.sh └── istanbul-reporter.js ├── e2e ├── hello_world.e2e.js └── utils.js ├── appveyor.yml ├── LICENSE ├── README.md └── package.json /app/src/auth/login.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "esversion": 6 3 | } 4 | -------------------------------------------------------------------------------- /app/src/auth/auth.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/services/preloaders/css/slack.css: -------------------------------------------------------------------------------- 1 | #banner { 2 | display: none !important; 3 | } -------------------------------------------------------------------------------- /app/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/logo.png -------------------------------------------------------------------------------- /app/images/cross.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/cross.png -------------------------------------------------------------------------------- /app/src/index/index.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | -------------------------------------------------------------------------------- /app/images/512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/512x512.png -------------------------------------------------------------------------------- /app/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/loading.gif -------------------------------------------------------------------------------- /app/images/manageyum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/manageyum.png -------------------------------------------------------------------------------- /app/images/rolling.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/rolling.gif -------------------------------------------------------------------------------- /resources/osx/_DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/resources/osx/_DS_Store -------------------------------------------------------------------------------- /resources/osx/icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/resources/osx/icon.icns -------------------------------------------------------------------------------- /app/images/services/vk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/vk.png -------------------------------------------------------------------------------- /resources/osx/ 256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/resources/osx/ 256x256.png -------------------------------------------------------------------------------- /resources/windows/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/resources/windows/icon.ico -------------------------------------------------------------------------------- /app/images/services/asana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/asana.png -------------------------------------------------------------------------------- /app/images/services/grape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/grape.png -------------------------------------------------------------------------------- /app/images/services/hibox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/hibox.png -------------------------------------------------------------------------------- /app/images/services/icq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/icq.png -------------------------------------------------------------------------------- /app/images/services/jira.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/jira.png -------------------------------------------------------------------------------- /app/images/services/mysms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/mysms.png -------------------------------------------------------------------------------- /app/images/services/pura.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/pura.png -------------------------------------------------------------------------------- /app/images/services/skype.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/skype.png -------------------------------------------------------------------------------- /app/images/services/slack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/slack.png -------------------------------------------------------------------------------- /app/images/services/wire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/wire.png -------------------------------------------------------------------------------- /resources/icons/512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/resources/icons/512x512.png -------------------------------------------------------------------------------- /resources/osx/dmg-icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/resources/osx/dmg-icon.icns -------------------------------------------------------------------------------- /resources/windows/_DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/resources/windows/_DS_Store -------------------------------------------------------------------------------- /app/images/services/discord.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/discord.png -------------------------------------------------------------------------------- /app/images/services/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/github.png -------------------------------------------------------------------------------- /app/images/services/gitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/gitter.png -------------------------------------------------------------------------------- /app/images/services/groupme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/groupme.png -------------------------------------------------------------------------------- /app/images/services/hipchat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/hipchat.png -------------------------------------------------------------------------------- /app/images/services/outlook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/outlook.png -------------------------------------------------------------------------------- /app/images/services/todoist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/todoist.png -------------------------------------------------------------------------------- /app/images/services/wechat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/wechat.png -------------------------------------------------------------------------------- /app/images/services/zendesk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/zendesk.png -------------------------------------------------------------------------------- /app/images/services/basecamp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/basecamp.png -------------------------------------------------------------------------------- /app/images/services/chatwork.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/chatwork.png -------------------------------------------------------------------------------- /app/images/services/ciscospark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/ciscospark.png -------------------------------------------------------------------------------- /app/images/services/confluence.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/confluence.png -------------------------------------------------------------------------------- /app/images/services/coupleme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/coupleme.png -------------------------------------------------------------------------------- /app/images/services/dingtalk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/dingtalk.png -------------------------------------------------------------------------------- /app/images/services/evernote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/evernote.png -------------------------------------------------------------------------------- /app/images/services/flowdock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/flowdock.png -------------------------------------------------------------------------------- /app/images/services/freshdesk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/freshdesk.png -------------------------------------------------------------------------------- /app/images/services/hangouts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/hangouts.png -------------------------------------------------------------------------------- /app/images/services/intercom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/intercom.png -------------------------------------------------------------------------------- /app/images/services/irccloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/irccloud.png -------------------------------------------------------------------------------- /app/images/services/linkedin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/linkedin.png -------------------------------------------------------------------------------- /app/images/services/mattermost.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/mattermost.png -------------------------------------------------------------------------------- /app/images/services/messenger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/messenger.png -------------------------------------------------------------------------------- /app/images/services/rocketchat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/rocketchat.png -------------------------------------------------------------------------------- /app/images/services/salesforce.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/salesforce.png -------------------------------------------------------------------------------- /app/images/services/steamchat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/steamchat.png -------------------------------------------------------------------------------- /app/images/services/teamwork.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/teamwork.png -------------------------------------------------------------------------------- /app/images/services/telegram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/telegram.png -------------------------------------------------------------------------------- /app/images/services/tweetdeck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/tweetdeck.png -------------------------------------------------------------------------------- /app/images/services/whatsapp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/whatsapp.png -------------------------------------------------------------------------------- /app/images/services/wunderlist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/wunderlist.png -------------------------------------------------------------------------------- /resources/osx/dmg-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/resources/osx/dmg-background.png -------------------------------------------------------------------------------- /resources/windows/setup-icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/resources/windows/setup-icon.ico -------------------------------------------------------------------------------- /app/images/services/google_drive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/google_drive.png -------------------------------------------------------------------------------- /app/images/services/googlegmail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/googlegmail.png -------------------------------------------------------------------------------- /app/images/services/googleinbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/googleinbox.png -------------------------------------------------------------------------------- /app/images/services/producthunt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/producthunt.png -------------------------------------------------------------------------------- /resources/osx/dmg-background@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/resources/osx/dmg-background@2x.png -------------------------------------------------------------------------------- /app/fonts/1YwB1sO8YE1Lyjf12WNiUA.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/fonts/1YwB1sO8YE1Lyjf12WNiUA.woff2 -------------------------------------------------------------------------------- /app/fonts/UyBMtLsHKBKXelqf4x7VRQ.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/fonts/UyBMtLsHKBKXelqf4x7VRQ.woff2 -------------------------------------------------------------------------------- /app/images/services/facebookpages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/facebookpages.png -------------------------------------------------------------------------------- /app/images/services/google_calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/google_calendar.png -------------------------------------------------------------------------------- /app/images/services/yahoomessenger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/yahoomessenger.png -------------------------------------------------------------------------------- /app/images/windock/win-dock-alert-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/windock/win-dock-alert-1.png -------------------------------------------------------------------------------- /app/images/windock/win-dock-alert-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/windock/win-dock-alert-2.png -------------------------------------------------------------------------------- /app/images/windock/win-dock-alert-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/windock/win-dock-alert-3.png -------------------------------------------------------------------------------- /app/images/windock/win-dock-alert-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/windock/win-dock-alert-4.png -------------------------------------------------------------------------------- /app/images/windock/win-dock-alert-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/windock/win-dock-alert-5.png -------------------------------------------------------------------------------- /app/images/windock/win-dock-alert-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/windock/win-dock-alert-6.png -------------------------------------------------------------------------------- /app/images/windock/win-dock-alert-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/windock/win-dock-alert-7.png -------------------------------------------------------------------------------- /app/images/windock/win-dock-alert-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/windock/win-dock-alert-8.png -------------------------------------------------------------------------------- /app/images/windock/win-dock-alert-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/windock/win-dock-alert-9.png -------------------------------------------------------------------------------- /app/images/windock/win-dock-alert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/windock/win-dock-alert.png -------------------------------------------------------------------------------- /config/env_test.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test", 3 | "description": "Add here any environment specific stuff you like." 4 | } 5 | -------------------------------------------------------------------------------- /resources/osx/dmg-background@2x.png.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/resources/osx/dmg-background@2x.png.png -------------------------------------------------------------------------------- /app/images/windock/win-dock-alert-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/windock/win-dock-alert-10.png -------------------------------------------------------------------------------- /app/images/services/defaultIntegration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sivaramsi/manageyum/HEAD/app/images/services/defaultIntegration.png -------------------------------------------------------------------------------- /config/env_production.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "production", 3 | "description": "Add here any environment specific stuff you like." 4 | } 5 | -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | require('./tasks/build_app'); 4 | require('./tasks/build_tests'); 5 | require('./tasks/start'); 6 | -------------------------------------------------------------------------------- /src/menu/file_menu_template.js: -------------------------------------------------------------------------------- 1 | import { app, BrowserWindow, ipcRenderer, remote, autoUpdater, shell } from 'electron'; 2 | 3 | export var 4 | -------------------------------------------------------------------------------- /config/env_development.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mwm_development", 3 | "description": "Add here any environment specific stuff you like." 4 | } 5 | -------------------------------------------------------------------------------- /src/hello_world/hello_world.js: -------------------------------------------------------------------------------- 1 | export var greet = function () { 2 | return 'Hello World!'; 3 | }; 4 | 5 | export var bye = function () { 6 | return 'See ya!'; 7 | }; 8 | -------------------------------------------------------------------------------- /tasks/utils.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var argv = require('yargs').argv; 4 | 5 | exports.getEnvName = function () { 6 | return argv.env || 'development'; 7 | }; 8 | 9 | exports.beepSound = function () { 10 | process.stdout.write('\u0007'); 11 | }; 12 | -------------------------------------------------------------------------------- /src/env.js: -------------------------------------------------------------------------------- 1 | // Simple wrapper exposing environment variables to rest of the code. 2 | 3 | import jetpack from 'fs-jetpack'; 4 | 5 | // The variables have been written to `env.json` by the build process. 6 | var env = jetpack.cwd(__dirname).read('env.json', 'json'); 7 | 8 | export default env; 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | Thumbs.db 4 | *.log 5 | *.autogenerated 6 | 7 | # ignore everything in 'app' folder what had been generated from 'src' folder 8 | /app/stylesheets 9 | /app/app.js 10 | /app/background.js 11 | /app/env.json 12 | /app/**/*.map 13 | 14 | /dist 15 | 16 | /coverage 17 | -------------------------------------------------------------------------------- /app/src/services/dynamicModal.html: -------------------------------------------------------------------------------- 1 | 4 |
5 | 7 | 9 |
10 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 4 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.json] 13 | indent_size = 2 14 | 15 | [*.md] 16 | trim_trailing_whitespace = false 17 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | os: 2 | - linux 3 | - osx 4 | 5 | branches: 6 | only: 7 | - master 8 | 9 | env: 10 | - NODE_VERSION="6.3.0" 11 | 12 | script: ./scripts/travis-build.sh 13 | 14 | cache: 15 | directories: 16 | - node_modules 17 | 18 | notifications: 19 | email: 20 | on_success: never 21 | on_failure: change 22 | -------------------------------------------------------------------------------- /app/images/facebook.svg: -------------------------------------------------------------------------------- 1 | Asset 25 -------------------------------------------------------------------------------- /src/menu/window_menu_template.js: -------------------------------------------------------------------------------- 1 | import { app, BrowserWindow } from 'electron'; 2 | 3 | export var windowMenuTemplate = { 4 | label: 'Window', 5 | submenu: [{ 6 | label: 'Minimize', 7 | accelerator: 'CmdOrCtrl+M', 8 | role: 'minimize' 9 | }, { 10 | label: 'Close', 11 | accelerator: 'CmdOrCtrl+W', 12 | role: 'close' 13 | }] 14 | }; 15 | -------------------------------------------------------------------------------- /app/images/close.svg: -------------------------------------------------------------------------------- 1 | close icon -------------------------------------------------------------------------------- /app/images/add.svg: -------------------------------------------------------------------------------- 1 | add service icon -------------------------------------------------------------------------------- /app/images/services/zendesk.svg: -------------------------------------------------------------------------------- 1 | Zendesk -------------------------------------------------------------------------------- /src/stylesheets/main.less: -------------------------------------------------------------------------------- 1 | html, body { 2 | width: 100%; 3 | height: 100%; 4 | margin: 0; 5 | padding: 0; 6 | } 7 | 8 | body { 9 | display: flex; 10 | justify-content: center; 11 | align-items: center; 12 | font-family: sans-serif; 13 | } 14 | 15 | a { 16 | text-decoration: none; 17 | } 18 | 19 | .container { 20 | text-align: center; 21 | } 22 | 23 | .subtitle { 24 | color: gray; 25 | } 26 | -------------------------------------------------------------------------------- /scripts/travis-build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | git clone https://github.com/creationix/nvm.git /tmp/.nvm 4 | source /tmp/.nvm/nvm.sh 5 | nvm install "$NODE_VERSION" 6 | nvm use --delete-prefix "$NODE_VERSION" 7 | 8 | if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then 9 | export DISPLAY=:99.0 10 | sh -e /etc/init.d/xvfb start 11 | sleep 3 12 | fi 13 | 14 | node --version 15 | npm --version 16 | 17 | npm install 18 | npm test & npm run e2e 19 | -------------------------------------------------------------------------------- /tasks/start.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var childProcess = require('child_process'); 4 | var electron = require('electron'); 5 | var gulp = require('gulp'); 6 | 7 | gulp.task('start', ['build', 'watch'], function () { 8 | childProcess.spawn(electron, ['./app'], { 9 | stdio: 'inherit' 10 | }) 11 | .on('close', function () { 12 | // User closed the app. Kill the host process. 13 | process.exit(); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /e2e/hello_world.e2e.js: -------------------------------------------------------------------------------- 1 | import { expect } from 'chai'; 2 | import testUtils from './utils'; 3 | 4 | describe('application launch', function () { 5 | 6 | beforeEach(testUtils.beforeEach); 7 | afterEach(testUtils.afterEach); 8 | 9 | it('shows hello world text on screen after launch', function () { 10 | return this.app.client.getText('#greet').then(function (text) { 11 | expect(text).to.equal('Hello World!'); 12 | }); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /app/images/services/helpscout.svg: -------------------------------------------------------------------------------- 1 | Helpscout -------------------------------------------------------------------------------- /app/images/services/custom_app.svg: -------------------------------------------------------------------------------- 1 | cube icon -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | build: off 2 | 3 | os: unstable 4 | 5 | branches: 6 | only: 7 | - master 8 | 9 | skip_tags: true 10 | 11 | environment: 12 | nodejs_version: "6.3.0" 13 | 14 | cache: 15 | - node_modules -> package.json 16 | 17 | install: 18 | - ps: Install-Product node $env:nodejs_version 19 | - npm install npm 20 | - .\node_modules\.bin\npm install 21 | 22 | test_script: 23 | - node --version 24 | - .\node_modules\.bin\npm --version 25 | - .\node_modules\.bin\npm test 26 | - .\node_modules\.bin\npm run e2e 27 | -------------------------------------------------------------------------------- /app/src/services/preloaders/zendesk.js: -------------------------------------------------------------------------------- 1 | require('./utils/spellcheck.js'); 2 | require('./utils/zoom.js'); 3 | 4 | const { ipcRenderer } = require('electron'); 5 | function getMessages() { 6 | var e = 0, 7 | r = document['querySelector']('.dashboard-top-panel .indicators .stats-group .cell-value'); 8 | r && (e = r['innerHTML']), ipcRenderer['sendToHost']('message-zendesk', { 9 | count: e 10 | }) 11 | } 12 | 13 | zendesk = { 14 | init: function() { 15 | setInterval(getMessages, 1000); 16 | console.log("zendesk preloader initialized"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/home/home.html: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | -------------------------------------------------------------------------------- /app/images/edit.svg: -------------------------------------------------------------------------------- 1 | edit icon -------------------------------------------------------------------------------- /src/src/servicesList/servicesList.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 11 |
12 |
13 | -------------------------------------------------------------------------------- /e2e/utils.js: -------------------------------------------------------------------------------- 1 | import electron from 'electron'; 2 | import { Application } from 'spectron'; 3 | 4 | var beforeEach = function () { 5 | this.timeout(10000); 6 | this.app = new Application({ 7 | path: electron, 8 | args: ['app'], 9 | startTimeout: 10000, 10 | waitTimeout: 10000, 11 | }); 12 | return this.app.start(); 13 | }; 14 | 15 | var afterEach = function () { 16 | this.timeout(10000); 17 | if (this.app && this.app.isRunning()) { 18 | return this.app.stop(); 19 | } 20 | }; 21 | 22 | export default { 23 | beforeEach: beforeEach, 24 | afterEach: afterEach, 25 | }; 26 | -------------------------------------------------------------------------------- /src/hello_world/hello_world.spec.js: -------------------------------------------------------------------------------- 1 | import { expect } from 'chai'; 2 | import { greet, bye } from './hello_world'; 3 | import env from '../env'; 4 | 5 | describe("hello world", function () { 6 | 7 | it("greets", function () { 8 | expect(greet()).to.equal('Hello World!'); 9 | }); 10 | 11 | it("says goodbye", function () { 12 | expect(bye()).to.equal('See ya!'); 13 | }); 14 | 15 | it("should load test environment variables", function () { 16 | expect(env.name).to.equal('test'); 17 | expect(env.description).to.equal('Add here any environment specific stuff you like.'); 18 | }); 19 | 20 | }); 21 | -------------------------------------------------------------------------------- /app/images/envelope.svg: -------------------------------------------------------------------------------- 1 | Asset 26 -------------------------------------------------------------------------------- /app/images/twitter.svg: -------------------------------------------------------------------------------- 1 | Asset 27 -------------------------------------------------------------------------------- /src/menu/dev_menu_template.js: -------------------------------------------------------------------------------- 1 | import { app, BrowserWindow } from 'electron'; 2 | 3 | export var devMenuTemplate = { 4 | label: 'Development', 5 | submenu: [{ 6 | label: 'Reload', 7 | click: function () { 8 | BrowserWindow.getFocusedWindow().webContents.reloadIgnoringCache(); 9 | } 10 | },{ 11 | label: 'Toggle DevTools', 12 | accelerator: 'Alt+CmdOrCtrl+I', 13 | click: function () { 14 | BrowserWindow.getFocusedWindow().toggleDevTools(); 15 | } 16 | },{ 17 | label: 'Quit', 18 | accelerator: 'CmdOrCtrl+Q', 19 | click: function () { 20 | app.quit(); 21 | } 22 | }] 23 | }; 24 | -------------------------------------------------------------------------------- /app/images/services/twitter.svg: -------------------------------------------------------------------------------- 1 | Twitter -------------------------------------------------------------------------------- /app/src/home/home.controller.js: -------------------------------------------------------------------------------- 1 | angular 2 | .module('puraApp') 3 | .component('home', { 4 | templateUrl: './src/home/home.html', 5 | controller: homeController, 6 | bindings: { navindex: "=" } 7 | }); 8 | 9 | 10 | function homeController($sce, $uibModal, User, $log, $rootScope) { 11 | 12 | 13 | this.userServices = User.getServices(); 14 | 15 | this.activePill = 1; 16 | 17 | this.refreshNotificationCenter = function() { 18 | $rootScope.$broadcast('refreshNotificationCenter', { test: 'test' }); 19 | } 20 | 21 | $rootScope.$on('homeNavIndexChanged', (event, data) => { 22 | console.log("home navindex changed" + data.index); 23 | this.activePill = data.index; 24 | // need to add webview listener 25 | }); 26 | } 27 | -------------------------------------------------------------------------------- /app/images/services/asana.svg: -------------------------------------------------------------------------------- 1 | Asana -------------------------------------------------------------------------------- /app/src/components/APIInterceptor.service.js: -------------------------------------------------------------------------------- 1 | angular.module('puraApp') 2 | .service('APIInterceptor', function($rootScope, $injector) { 3 | var service = this; 4 | 5 | service.request = function(config) { 6 | var Auth =$injector.get('Auth'); 7 | var authData = Auth.$getAuth(); 8 | 9 | var access_token = authData ? authData.token : null; 10 | 11 | if (access_token) { 12 | config.headers.authorization = access_token; 13 | } 14 | return config; 15 | }; 16 | 17 | service.responseError = function(response) { 18 | if (response.status === 401) { 19 | //$rootScope.$broadcast('unauthorized'); 20 | } 21 | return response; 22 | }; 23 | }) 24 | -------------------------------------------------------------------------------- /app/src/services/deleteProfile.html: -------------------------------------------------------------------------------- 1 | 4 |
5 | 10 | 14 |
15 | -------------------------------------------------------------------------------- /app/src/services/preloaders/utils/spellcheck.js: -------------------------------------------------------------------------------- 1 | setTimeout(()=>{ 2 | // import {SpellCheckHandler, ContextMenuListener, ContextMenuBuilder} from 'electron-spellchecker'; 3 | const SpellCheckHandler = require('electron-spellchecker').SpellCheckHandler; 4 | const ContextMenuListener = require('electron-spellchecker').ContextMenuListener; 5 | const ContextMenuBuilder = require('electron-spellchecker').ContextMenuBuilder; 6 | window.spellCheckHandler = new SpellCheckHandler(); 7 | window.spellCheckHandler.attachToInput(); 8 | 9 | // Start off as US English, America #1 (lol) 10 | window.spellCheckHandler.switchLanguage('en-US'); 11 | 12 | let contextMenuBuilder = new ContextMenuBuilder(window.spellCheckHandler); 13 | let contextMenuListener = new ContextMenuListener((info) => { 14 | contextMenuBuilder.showPopupMenu(info); 15 | }); 16 | 17 | 18 | },1000); 19 | -------------------------------------------------------------------------------- /app/images/heart.svg: -------------------------------------------------------------------------------- 1 | Asset 28 -------------------------------------------------------------------------------- /app/images/services/bitbucket.svg: -------------------------------------------------------------------------------- 1 | Bitbucket -------------------------------------------------------------------------------- /app/images/notification_on.svg: -------------------------------------------------------------------------------- 1 | notification on -------------------------------------------------------------------------------- /app/src/auth/register.controller.js: -------------------------------------------------------------------------------- 1 | angular.module('puraApp').component('register', { 2 | templateUrl: './src/auth/register.html', 3 | controller: registerController, 4 | bindings: {} 5 | }); 6 | 7 | 8 | function registerController($state, $scope) { 9 | var self = this; 10 | 11 | 12 | 13 | this.register = function() { 14 | firebase.auth() 15 | .createUserWithEmailAndPassword(self.email, self.password) 16 | .then(function(authData) { 17 | console.log("authData" + authData); 18 | $state.go('index'); 19 | }) 20 | .catch(function(error) { 21 | var errorCode = error.code; 22 | var errorMessage = error.message; 23 | self.errorMessage = errorMessage; 24 | $scope.$apply(); 25 | console.log("error" + error); 26 | }); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /app/images/notification_off.svg: -------------------------------------------------------------------------------- 1 | notification off -------------------------------------------------------------------------------- /app/src/auth/forgotpassword.controller.js: -------------------------------------------------------------------------------- 1 | angular.module('puraApp').component('forgotpassword', { 2 | templateUrl: './src/auth/forgotpassword.html', 3 | controller: forgotpasswordController, 4 | bindings: {} 5 | }); 6 | 7 | 8 | function forgotpasswordController($state, $scope, firebase) { 9 | var self = this; 10 | 11 | 12 | this.forgotpassword = function() { 13 | 14 | firebase 15 | .auth() 16 | .sendPasswordResetEmail(self.email) 17 | .then(function(data) { 18 | console.log("passwrod reset mail sent"); 19 | self.sucessMessage = "password reset mail sent, please check your mailbox."; 20 | $scope.$apply(); 21 | }) 22 | .catch(function(error) { 23 | console.log("passwrod reset mail error" + error); 24 | self.errorMessage = error.message; 25 | $scope.$apply(); 26 | }); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /app/images/applogo.svg: -------------------------------------------------------------------------------- 1 | manageyum logo -------------------------------------------------------------------------------- /app/src/auth/login.controller.js: -------------------------------------------------------------------------------- 1 | angular.module('puraApp').component('login', { 2 | templateUrl: './src/auth/loginform.html', 3 | controller: loginController, 4 | bindings: {} 5 | }); 6 | 7 | 8 | function loginController($state, $scope) { 9 | var self = this; 10 | 11 | 12 | this.login = function() { 13 | self.loading = true; 14 | firebase.auth() 15 | .signInWithEmailAndPassword(self.email, self.password) 16 | .then(function(authData) { 17 | console.log("authData" + authData); 18 | self.loading = false; 19 | $state.go('index'); 20 | }) 21 | .catch(function(error) { 22 | self.loading = false; 23 | var errorCode = error.code; 24 | var errorMessage = error.message; 25 | self.errorMessage = errorMessage; 26 | $scope.$apply(); 27 | console.log("error" + error); 28 | }); 29 | 30 | 31 | 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /scripts/istanbul-reporter.js: -------------------------------------------------------------------------------- 1 | var istanbul = require('istanbul'); 2 | 3 | module.exports = function (runner, options) { 4 | mocha.reporters.Base.call(this, runner); 5 | 6 | var reporterOpts = { dir: 'coverage' }, 7 | reporters = ['text-summary', 'html']; 8 | 9 | options = options || {}; 10 | if (options.reporters) reporters = options.reporters.split(','); 11 | if (process.env.ISTANBUL_REPORTERS) reporters = process.env.ISTANBUL_REPORTERS.split(','); 12 | if (options.reportDir) reporterOpts.dir = options.reportDir; 13 | if (process.env.ISTANBUL_REPORT_DIR) reporterOpts.dir = process.env.ISTANBUL_REPORT_DIR; 14 | 15 | runner.on('end', function(){ 16 | var cov = global.__coverage__ || {}, 17 | collector = new istanbul.Collector(); 18 | 19 | collector.add(cov); 20 | 21 | reporters.forEach(function(reporter) { 22 | istanbul.Report.create(reporter, reporterOpts).writeReport(collector, true); 23 | }); 24 | 25 | }); 26 | }; 27 | -------------------------------------------------------------------------------- /app/images/clearcache.svg: -------------------------------------------------------------------------------- 1 | clear catch icon -------------------------------------------------------------------------------- /app/images/right-chevron.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/menu/help_menu_template.js: -------------------------------------------------------------------------------- 1 | import { app, BrowserWindow, ipcRenderer, remote, autoUpdater, shell, dialog } from 'electron'; 2 | 3 | export var helpMenuTemplate = { 4 | label: 'Help', 5 | role: 'help', 6 | submenu: [{ 7 | label: 'About - manageyum', 8 | click: function(e, l) { 9 | dialog['showMessageBox'](l, { 10 | type: 'info', 11 | title: 'Manageyum', 12 | message: 'Manageyum', 13 | detail: 'Manageyum\x0AVersion:2.0.1 ', 14 | defaultId: 0, 15 | cancelId: 0, 16 | buttons: ['Ok'] 17 | }) 18 | } 19 | }, { 20 | type: 'separator' 21 | }, { 22 | label: 'Terms of service', 23 | click: function() { 24 | shell.openExternal('http://www.manageyum.com/terms.html'); 25 | } 26 | }, { 27 | type: 'separator' 28 | }, { 29 | label: 'Support', 30 | click: function() { 31 | shell.openExternal('http://docs.manageyum.com'); 32 | } 33 | }] 34 | }; 35 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015-2016 Jakub Szwacz 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /app/src/services/subscription.html: -------------------------------------------------------------------------------- 1 | 4 |
5 | 16 | 20 |
21 | -------------------------------------------------------------------------------- /app/src/app.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /** 4 | * @ngdoc overview 5 | * @name puraApp 6 | * @description 7 | * # puraApp 8 | * 9 | * Main module of the application. 10 | */ 11 | 12 | 13 | 14 | 15 | 16 | 17 | //require('electron-context-menu')(); 18 | 19 | 20 | var SRC_DIR = './src/'; 21 | angular 22 | .module('puraApp', [ 23 | 'ui.router', 24 | 'ui.bootstrap', 25 | 'ngSanitize', 26 | 'LocalStorageModule', 27 | 'angular-electron', 28 | 'ui.router.state.events', 29 | 'angular-ladda', 30 | 'angulartics', 31 | 'stripe.checkout', 32 | 'angulartics.mixpanel', 33 | 'cfp.hotkeys', 34 | 'checklist-model', 35 | 'angular-md5' 36 | ]) 37 | .config(function($stateProvider, $urlRouterProvider, $httpProvider, $analyticsProvider) { 38 | 39 | $stateProvider 40 | .state('index', { 41 | url: '/', 42 | templateUrl: SRC_DIR + 'index/index.html' 43 | }) 44 | 45 | $urlRouterProvider.otherwise('/'); 46 | $analyticsProvider.virtualPageviews(false); 47 | }) 48 | 49 | -------------------------------------------------------------------------------- /app/src/services/preloaders/utils/zoom.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | var electron = require('electron'), 3 | ipcRenderer = electron['ipcRenderer'], 4 | webFrame = electron['webFrame'], 5 | _browser_zoomLevel = 0, 6 | _browser_maxZoom = 9, 7 | _browser_minZoom = -8; 8 | ipcRenderer['on']('zoomIn', function() { 9 | _browser_maxZoom > _browser_zoomLevel && (_browser_zoomLevel += 1), webFrame['setZoomLevel'](_browser_zoomLevel), ipcRenderer['sendToHost']('zoom-level', { 10 | zoom: _browser_zoomLevel 11 | }) 12 | }), ipcRenderer['on']('zoomOut', function() { 13 | _browser_zoomLevel > _browser_minZoom && (_browser_zoomLevel -= 1), webFrame['setZoomLevel'](_browser_zoomLevel), ipcRenderer['sendToHost']('zoom-level', { 14 | zoom: _browser_zoomLevel 15 | }) 16 | }), ipcRenderer['on']('zoomReset', function() { 17 | _browser_zoomLevel = 0, webFrame['setZoomLevel'](_browser_zoomLevel), ipcRenderer['sendToHost']('zoom-level', { 18 | zoom: _browser_zoomLevel 19 | }) 20 | }), ipcRenderer['on']('setZoom', function(e, o) { 21 | _browser_zoomLevel = o, webFrame['setZoomLevel'](_browser_zoomLevel) 22 | }) 23 | -------------------------------------------------------------------------------- /app/images/cog.svg: -------------------------------------------------------------------------------- 1 | setting icon -------------------------------------------------------------------------------- /src/app.js: -------------------------------------------------------------------------------- 1 | // Here is the starting point for your application code. 2 | // All stuff below is just to show you how it works. You can delete all of it. 3 | 4 | // Use new ES6 modules syntax for everything. 5 | import os from 'os'; // native node.js module 6 | import { remote } from 'electron'; // native electron module 7 | import jetpack from 'fs-jetpack'; // module loaded from npm 8 | import { greet } from './hello_world/hello_world'; // code authored by you in this project 9 | import env from './env'; 10 | 11 | console.log('Loaded environment variables:', env); 12 | 13 | var app = remote.app; 14 | var appDir = jetpack.cwd(app.getAppPath()); 15 | 16 | // Holy crap! This is browser window with HTML and stuff, but I can read 17 | // here files like it is node.js! Welcome to Electron world :) 18 | console.log('The author of this app is:', appDir.read('package.json', 'json').author); 19 | 20 | document.addEventListener('DOMContentLoaded', function () { 21 | console.log("am called"); 22 | window.appVersion = appDir.read('package.json', 'json').version; 23 | // document.getElementById('greet').innerHTML = greet(); 24 | // document.getElementById('platform-info').innerHTML = os.platform(); 25 | // document.getElementById('env-name').innerHTML = env.name; 26 | }); 27 | -------------------------------------------------------------------------------- /app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Manageyum", 3 | "productName": "Manageyum", 4 | "description": "All apps in one place", 5 | "version": "2.0.1", 6 | "author": "Vinoth David ", 7 | "copyright": "© 2016, Revmakx inc.", 8 | "homepage": "http://manageyum.com", 9 | "license": "MIT", 10 | "main": "background.js", 11 | "dependencies": { 12 | "angular": "^1.5.8", 13 | "angular-electron": "^0.2.1", 14 | "angular-hotkeys": "^1.7.0", 15 | "angular-ladda": "^0.4.3", 16 | "angular-local-storage": "^0.5.0", 17 | "angular-md5": "^0.1.10", 18 | "angular-sanitize": "^1.5.8", 19 | "angular-stripe-checkout": "^5.1.0", 20 | "angular-ui-bootstrap": "^2.2.0", 21 | "angular-ui-router": "^1.0.0-beta.1", 22 | "angularfire": "^2.1.0", 23 | "angulartics": "^1.3.0", 24 | "angulartics-mixpanel": "^0.1.3", 25 | "auto-launch": "^5.0.1", 26 | "bootstrap": "^3.3.7", 27 | "checklist-model": "^0.10.0", 28 | "chrome-tabs": "0.0.1", 29 | "electron-context-menu": "^0.8.0", 30 | "electron-editor-context-menu": "^1.1.1", 31 | "electron-machine-id": "^1.0.9", 32 | "electron-search-text": "^0.3.0", 33 | "electron-spell-check-provider": "^1.0.0", 34 | "electron-spellchecker": "^1.0.6", 35 | "firebase": "^3.6.1", 36 | "fs-jetpack": "^0.9.0", 37 | "jquery": "^3.1.1", 38 | "lodash": "^4.17.2", 39 | "node-notifier": "^4.6.1", 40 | "semver": "^5.3.0" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/src/services/testPreload.js: -------------------------------------------------------------------------------- 1 | test = { 2 | init: function() { 3 | console.log('am in preload'); 4 | // Notification.onshow = function() { 5 | // console.log("new notification in preload"); 6 | // }; 7 | // Notification.onclick = function() { 8 | // console.log("new notification clicked in preload"); 9 | // }; 10 | var OldNotification = Notification; 11 | 12 | Notification = function(title, options) { 13 | // Send this to main thread. 14 | // Catch it in your main 'app' instance with `ipc.on`. 15 | // Then send it back to the view, if you want, with `event.returnValue` or `event.sender.send()`. 16 | // ipc.send('notification-shim', { 17 | // title, 18 | // options 19 | // }); 20 | console.log('catches notification'); 21 | 22 | // Send the native Notification. 23 | // You can't catch it, that's why we're doing all of this. :) 24 | return OldNotification(title, options); 25 | }; 26 | Notification.prototype = OldNotification.prototype; 27 | Notification.permission = OldNotification.permission; 28 | Notification.requestPermission = OldNotification.requestPermission; 29 | 30 | document.addEventListener('notificationclick', function() { 31 | console.log('notificationclicked'); 32 | }) 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/services/myModalContent.html: -------------------------------------------------------------------------------- 1 | 4 |
5 | 26 | 30 |
31 | -------------------------------------------------------------------------------- /app/src/servicesList/servicesList.html: -------------------------------------------------------------------------------- 1 |
2 |

Add a service

3 |
4 | 5 | esc 6 | 7 |
8 | 24 |
25 | -------------------------------------------------------------------------------- /app/src/services/upgradeModal.html: -------------------------------------------------------------------------------- 1 | 5 |
6 | 12 | 16 |
17 | -------------------------------------------------------------------------------- /app/helpers/external_links.js: -------------------------------------------------------------------------------- 1 | // Convenient way for opening links in external browser, not in the app. 2 | // Useful especially if you have a lot of links to deal with. 3 | // 4 | // Usage: 5 | // 6 | // Every link with class ".js-external-link" will be opened in external browser. 7 | // google 8 | // 9 | // The same behaviour for many links can be achieved by adding 10 | // this class to any parent tag of an anchor tag. 11 | // 15 | 16 | (function () { 17 | 'use strict'; 18 | 19 | var shell = require('electron').shell; 20 | 21 | var supportExternalLinks = function (e) { 22 | var href; 23 | var isExternal = false; 24 | 25 | var checkDomElement = function (element) { 26 | if (element.nodeName === 'A') { 27 | href = element.getAttribute('href'); 28 | } 29 | if (element.classList.contains('js-external-link')) { 30 | isExternal = true; 31 | } 32 | if (href && isExternal) { 33 | shell.openExternal(href); 34 | e.preventDefault(); 35 | } else if (element.parentElement) { 36 | checkDomElement(element.parentElement); 37 | } 38 | }; 39 | 40 | checkDomElement(e.target); 41 | }; 42 | 43 | document.addEventListener('click', supportExternalLinks, false); 44 | }()); 45 | -------------------------------------------------------------------------------- /app/images/services/messenger.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | messenger 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /tasks/build_app.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var gulp = require('gulp'); 4 | var less = require('gulp-less'); 5 | var watch = require('gulp-watch'); 6 | var batch = require('gulp-batch'); 7 | var plumber = require('gulp-plumber'); 8 | var jetpack = require('fs-jetpack'); 9 | var bundle = require('./bundle'); 10 | var utils = require('./utils'); 11 | 12 | var projectDir = jetpack; 13 | var srcDir = jetpack.cwd('./src'); 14 | var destDir = jetpack.cwd('./app'); 15 | 16 | gulp.task('bundle', function () { 17 | return Promise.all([ 18 | bundle(srcDir.path('background.js'), destDir.path('background.js')), 19 | bundle(srcDir.path('app.js'), destDir.path('app.js')), 20 | ]); 21 | }); 22 | 23 | gulp.task('less', function () { 24 | return gulp.src(srcDir.path('stylesheets/main.less')) 25 | .pipe(plumber()) 26 | .pipe(less()) 27 | .pipe(gulp.dest(destDir.path('stylesheets'))); 28 | }); 29 | 30 | gulp.task('environment', function () { 31 | var configFile = 'config/env_' + utils.getEnvName() + '.json'; 32 | projectDir.copy(configFile, destDir.path('env.json'), { overwrite: true }); 33 | }); 34 | 35 | gulp.task('watch', function () { 36 | var beepOnError = function (done) { 37 | return function (err) { 38 | if (err) { 39 | utils.beepSound(); 40 | } 41 | done(err); 42 | }; 43 | }; 44 | 45 | watch('src/**/*.js', batch(function (events, done) { 46 | gulp.start('bundle', beepOnError(done)); 47 | })); 48 | watch('src/**/*.less', batch(function (events, done) { 49 | gulp.start('less', beepOnError(done)); 50 | })); 51 | }); 52 | 53 | gulp.task('build', ['bundle', 'less', 'environment']); 54 | -------------------------------------------------------------------------------- /app/images/services/wire.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Wire symbol 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/images/services/gitter.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | gitter 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/menu/edit_menu_template.js: -------------------------------------------------------------------------------- 1 | import { 2 | app, 3 | BrowserWindow 4 | } from 'electron'; 5 | 6 | export var editMenuTemplate = { 7 | label: 'Edit', 8 | submenu: [{ 9 | label: "Undo", 10 | accelerator: "CmdOrCtrl+Z", 11 | selector: "undo:" 12 | }, 13 | { 14 | label: "Redo", 15 | accelerator: "Shift+CmdOrCtrl+Z", 16 | selector: "redo:" 17 | }, 18 | { 19 | type: "separator" 20 | }, 21 | { 22 | label: "Cut", 23 | accelerator: "CmdOrCtrl+X", 24 | selector: "cut:" 25 | }, 26 | { 27 | label: "Copy", 28 | accelerator: "CmdOrCtrl+C", 29 | selector: "copy:" 30 | }, { 31 | label: "Copy Current Page URL", 32 | click: function(e, l) { 33 | console.log('Copy current page url'); 34 | BrowserWindow.getFocusedWindow().webContents.send('copyCurrentPageURL', { 35 | msg: 'hello from main process' 36 | }); 37 | } 38 | }, 39 | { 40 | label: "Clear Current Page Cache", 41 | click: function(e, l) { 42 | console.log('Clear current page cache'); 43 | BrowserWindow.getFocusedWindow().webContents.send('clearCache', { 44 | msg: 'hello from main process' 45 | }); 46 | } 47 | }, 48 | { 49 | label: "Paste", 50 | accelerator: "CmdOrCtrl+V", 51 | selector: "paste:" 52 | }, 53 | { 54 | label: "Select All", 55 | accelerator: "CmdOrCtrl+A", 56 | selector: "selectAll:" 57 | } 58 | ] 59 | }; 60 | -------------------------------------------------------------------------------- /app/helpers/context_menu.js: -------------------------------------------------------------------------------- 1 | // This gives you default context menu (cut, copy, paste) 2 | // in all input fields and textareas across your app. 3 | 4 | (function () { 5 | 'use strict'; 6 | 7 | var remote = require('electron').remote; 8 | var Menu = remote.Menu; 9 | var MenuItem = remote.MenuItem; 10 | 11 | var isAnyTextSelected = function () { 12 | return window.getSelection().toString() !== ''; 13 | }; 14 | 15 | var cut = new MenuItem({ 16 | label: "Cut", 17 | click: function () { 18 | document.execCommand("cut"); 19 | } 20 | }); 21 | 22 | var copy = new MenuItem({ 23 | label: "Copy", 24 | click: function () { 25 | document.execCommand("copy"); 26 | } 27 | }); 28 | 29 | var paste = new MenuItem({ 30 | label: "Paste", 31 | click: function () { 32 | document.execCommand("paste"); 33 | } 34 | }); 35 | 36 | var normalMenu = new Menu(); 37 | normalMenu.append(copy); 38 | 39 | var textEditingMenu = new Menu(); 40 | textEditingMenu.append(cut); 41 | textEditingMenu.append(copy); 42 | textEditingMenu.append(paste); 43 | 44 | document.addEventListener('contextmenu', function (e) { 45 | switch (e.target.nodeName) { 46 | case 'TEXTAREA': 47 | case 'INPUT': 48 | e.preventDefault(); 49 | textEditingMenu.popup(remote.getCurrentWindow()); 50 | break; 51 | default: 52 | if (isAnyTextSelected()) { 53 | e.preventDefault(); 54 | normalMenu.popup(remote.getCurrentWindow()); 55 | } 56 | } 57 | }, false); 58 | 59 | }()); 60 | -------------------------------------------------------------------------------- /app/images/services/outlook.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Layer 1 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/images/services/trello.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | trello-mark-blue 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/services/preloaders/asana.js: -------------------------------------------------------------------------------- 1 | require('./utils/spellcheck.js'); 2 | require('./utils/zoom.js'); 3 | 4 | 5 | const { ipcRenderer } = require('electron'); 6 | 7 | var notificationMap = {}; 8 | 9 | var service = null; 10 | 11 | 12 | 13 | function replacePopupWithRedirect() { 14 | var google_auth_button = $('google_auth_button'); 15 | if (google_auth_button) { 16 | var str = google_auth_button.getAttribute('onclick'); 17 | str = str.replace('false', 'true'); 18 | google_auth_button.setAttribute('onclick', str); 19 | } 20 | } 21 | 22 | function getMessages() { 23 | var title = document.title; 24 | var count_indirect = 0; 25 | if (service.custom_badges_conf && service.custom_badges_conf.length > 0) { 26 | if (title.startsWith('●')) { 27 | count_indirect = 1; 28 | } 29 | } 30 | ipcRenderer['sendToHost']('notification-count', { 31 | count: 0, 32 | count_indirect: count_indirect 33 | }) 34 | } 35 | 36 | 37 | function initIpcListener() { 38 | ipcRenderer.on('open-notification', function(event, args) { 39 | console.log('am called'); 40 | 41 | var notification = args; 42 | var onClickFn = notificationMap[notification.title] 43 | 44 | if (onClickFn) { 45 | console.log('inside notificationHandler') 46 | onClickFn(); 47 | } 48 | }); 49 | 50 | ipcRenderer.on('serviceUpdate', function(event, args) { 51 | service = args; 52 | }); 53 | } 54 | 55 | 56 | asana = { 57 | init: function(serviceConfig) { 58 | service = JSON.parse(serviceConfig); 59 | setInterval(getMessages, 1000); 60 | replacePopupWithRedirect(); 61 | initIpcListener(); 62 | console.log("asana preloader initialized"); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Manageyum 2 | ============== 3 | 4 | 5 | # Quick start 6 | The only development dependency of this project is [Node.js](https://nodejs.org). So just make sure you have it installed. 7 | Then type few commands known to every Node developer... 8 | ``` 9 | git clone https://github.com/sivaramsi/manageyum.git 10 | cd manageyum 11 | npm install 12 | npm start 13 | ``` 14 | ... and boom! You have a running desktop application on your screen. 15 | 16 | 17 | ## Folders for application code 18 | 19 | The application is split between two main folders... 20 | 21 | `src` - this folder is intended for files which need to be transpiled or compiled (files which can't be used directly by electron). 22 | 23 | `app` - contains all static assets (put here images, css, html etc.) which don't need any pre-processing. 24 | 25 | The build process compiles all stuff from the `src` folder and puts it into the `app` folder, so after the build has finished, your `app` folder contains the full, runnable application. 26 | 27 | Treat `src` and `app` folders like two halves of one bigger thing. 28 | 29 | The drawback of this design is that `app` folder contains some files which should be git-ignored and some which shouldn't (see `.gitignore` file). But thanks to this two-folders split development builds are much (much!) faster. 30 | 31 | # Development 32 | 33 | ### Installation 34 | 35 | ``` 36 | npm install 37 | ``` 38 | It will also download Electron runtime and install dependencies for the second `package.json` file inside the `app` folder. 39 | 40 | ### Starting the app 41 | 42 | ``` 43 | npm start 44 | ``` 45 | 46 | ### Adding npm modules to your app 47 | 48 | Remember to add your dependencies to `app/package.json` file: 49 | ``` 50 | cd app 51 | npm install name_of_npm_module --save 52 | ``` 53 | 54 | # License 55 | 56 | Released under the MIT license. 57 | -------------------------------------------------------------------------------- /app/src/services/shareModal.html: -------------------------------------------------------------------------------- 1 | 8 |
9 |