aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.travis.yml57
-rw-r--r--README.md63
-rw-r--r--appveyor.yml13
-rw-r--r--src/assets/images/logo.svg85
-rw-r--r--src/components/layout/AppLayout.js99
5 files changed, 136 insertions, 181 deletions
diff --git a/.travis.yml b/.travis.yml
index c7e2c714c..ca238e86b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,53 +1,36 @@
1matrix: 1matrix:
2 include: 2 include:
3 - os: linux 3 - os: linux
4 dist: xenial 4 dist: xenial
5 addons: 5 addons:
6 apt: 6 apt:
7 packages: 7 packages:
8 - libx11-dev 8 - libx11-dev
9 - libxext-dev 9 - libxext-dev
10 - libxss-dev 10 - libxss-dev
11 - libxkbfile-dev 11 - libxkbfile-dev
12 - os: osx 12 - os: osx
13 osx_image: xcode8.3 13 osx_image: xcode8.3
14
15language: node_js 14language: node_js
16
17install: 15install:
18- echo do nothing 16 - echo do nothing
19
20before_script: 17before_script:
21- npx lerna bootstrap 18 - npx lerna bootstrap
22- npm install node-sass -g 19 - npm install node-sass -g
23
24script: 20script:
25- npm run test 21 - npm run test
26- travis_wait 30 npm run build 22 - travis_wait 30 npm run build
27
28cache: npm 23cache: npm
29
30notifications:
31 email: false
32 slack:
33 secure: GMiD9uhGUNkJbasOMvfUmQx/SKG8wd/MC4IPtiZZnlLkiN6eJQnV3p9OeMaiSCcq19gQ65z898h55PXwFX5pFqmGMQF0zdA3VXlVh7wrUU/Z8cYxCBaZTIOgNwtrteT9V9easV/5BuUGLHVgAFYEhS5tJDu2GU4UKdm6mko4YyxKHdsCsvkRpv+zpFF1a+G2ZUwWHDhTZsBJbx7SW7xzPKYI+vq+bNnbyC6p0kpeTehf29A8CoIgQlDctzk4aOHkj35WHIiKS5yzr/nb8oY/B6vCdfFHCrCkZxQrxPEagyYTfEusWwQRJ4rvwt8dgBO1A3ckO+AC1MEAYRYHgQMI5K86tcQ7/su5iOhu9NDbZ/BfriaTDlrurKMWPhZ/RVnFUT4tn7XVVcMxz6/FYFDYIDSHEn5E20a7qV1ixF7XKoJU6eOfo3qZ7euxiZIbDbHBH+Y2ZmzUGfrQ7DFlefMEM/6Laa0jNGOSvfc6mvk1x63bVTT5KfYEX4ztXnBY77haG4/h5bIHyNDzLsZ5vxXbvmHZb6ToMVn9UT6HS0sZQ/B4bghJbdZuOrPFlz8UNRpwoBS4HpLUndhYCo0ppxd3yCd5gqEhIJzEiJNoMq+LA9/iheLbWlJVdjP2WRQ2/m9VCSxnivTdNhnp6lSATiXAgq2WN2LGhTSGtXgqtcYGXhk=
34
35deploy: 24deploy:
36 provider: s3 25 provider: s3
37 access_key_id: AKIAIVRBS4YFL4ZBLCLA 26 access_key_id: AKIAQ5BBD2PS3SMVP3EZ
38 secret_access_key: 27 secret_access_key:
39 secure: LZ38b5DmVisSBfpuPN8IVNCe3C+hJYX88jV+/ifzlB6/h1VUU/w5B3xHNBoOC2P53D2htMtL7K1/JLxzKGmUsnOJe5boF0QmBPTXUVosurxwMPEuLotQucgqcOoFnJkq+BUziBy+uWsZnk6ECbI5hFHQJAM9iNjOcgrfK08NLYvtdwYKYXwhwSrN4dxBKkfRINgAqHCp6bMuH2Imgy9iM+Iy5ydMPUsKDRHj1ByJrhcb1nJTjWImH08IU970fEl0P2+bCV6nUTzc9x9mwaJAF6uaH9L44lLptHIhGgqAZGzwQ7z6ANJj3CJRWFbqW2/9/0+4YKhyBbE9TPIvWIXmVeoPm0nWLDfVDN2RwTGtv+oSgPS+UhcFTVanekKfrzMTVdi1jQ8LIL7Ur3DcXNhwTPuc7PjLPPuwTS2AQRkPMyyWLRAz40/YUepASRdqoVMYI+CZiwu2AZIoUr1HO1eXj/0rqC8t/mhUSOXTxNGRCP9SQTJ/FSaI5dZh3oY7bkz7uxDNbPvChcs7hPFqqhPUFIkX36DaDqjze6IqtZ6pDz7XTqzUET/Jgny9vGBypvGj5fJpYZJytqEs0SsPGQGaxSmAWjcPWQX56Tr98iwVvzAJ0hl7lJHVaEzuxoYmD0ijg2zysoZ7GPBXJg2n9W+QaS0KVuda1r+sQ6C2wY8yvi8= 28 secure: E57KoS2chEeYbW3LNXDpXIUAHWRV0IXSu6QxondJqXTK+Nh486+RaOx2Ln8xwjsN57rgE1nJkRrWzOzTGXjU1AEWWk4BLXeKrd/1nAK0akw7BYB7+IOPX15+n+PxO057oHyhzpf36iPhmXc3xz6mI8qvF6g5XIHGlTTs/+W6Va+OuhlXlotT5i4bRhsszpn7Mjd0fc5pVergFTu279eQtPkKEGfAyX1pAZJ5OObbsUckpFYTw2UG26qvAGZhzN6NdzNItKjDLzTw6WN1AJ6PZUu78xQRCbHJ0D+2BZSw+yvVx4UxC+ifJuouyzSlsRgRoOI4zNHDzOqDbiZ0gxbq7Eh0M+mFqMMq9U4FTZw7EjUuF3+929fLiyrdC+MD5+S98O3xZMdNl8C1rBUunWo/0nLMLROElZ/Zq9C7+Hfzz3HsN6+YHcvkKCBibHUmQB970090NspVy4fFCjze3XyJGDVgYMSB7dJ+zjawkZ3irEsA9g1h9V9GXiwHQ5Anuek1PtLHlwfNg9rOZDJQyaaZ96D6F1jYPw+JSDhiSvQgjeLbCPVdkp/UPWu8Aiks6p9oqMheKmd6J647H+/wrjU2GDbZiBOv0bSlPnaoBnapM3yVUSX8nkfVBpbewvIC+U9duzq7rZTVEwRWS3AIh1Z6aLYpGss9iZHE7vxJUKWVpyk=
40 bucket: franz-travis 29 bucket: ferdi-travis
41 region: eu-central-1 30 region: ap-southeast-1
42 local_dir: out 31 local_dir: out
43 upload-dir: "$TRAVIS_BUILD_NUMBER" 32 upload-dir: "$TRAVIS_BUILD_NUMBER"
44 skip_cleanup: true 33 skip_cleanup: true
45 acl: public_read 34 acl: public_read
46 on: 35 on:
47 all_branches: true 36 all_branches: true
48
49env:
50 global:
51 - secure: fddJzSmNYVX024jnhnFXEuAK1spEYi3y3RZdWaBtjQnzoObAxkcRW263JNpXQy+b7egnp2hSy8FvlQU+L967911F5Y70Pe3An4oI72hnS3DL4Njp2Dw5PwviwMA+X2ddWhzK4+k/JU6r8jBv1FGQ6ZjwSeaO/t8UKOsE8wDBFLRhnHqoR7QbM7zmKjzh/1oofunGbHsPOHmN4f7jBwSuSFTZltEENcQg3ZP++0NHU8UJdlpfqZOkro8v4AJMngAHeHlNtjwaAHdVv+6+kkwc4E/0Cy6YNyyBkbzipyngNY3GwnwzmNzvsfICD1TGklksjBlMQq7ld7eCiaYRNvyHVEmXJ17qlq7HhxkYgNy32hPRwb5Cv6o4M4tv8qS8UUk4W1RvBJ5fcmfZGQwGXPyQ/m85RJtrNfbYtr84jYcprTnSeji/9PuZv0f87dxELYm3DYmNUa1cgJqEdLUsEd0bMwUYNLnCSfu4ea2zxwir6LSBtJJCbGKxX87s5IOTrHkrWDe+PWd52v+UjQks7MBRlJnntTWo69Yy+ayXV1TnGVOHA5znHvPOvFlAF+y8tLGd4AGvehK1SAkf0+idmc9Q9xKk0QypT3ibjJui4D50p7sSajkzz3P2pUqOS/9HmjMfPMPN+Nl+48GU0CvB2aBGhdmp9vu54VaFzUaAGNGj4WI=
52 - secure: AjJvKhQ1jIloxogMdtOzJqovPQUBSA0lfHcRsmGdP8HIRKSRi9tKxCCgicTMpMWfvY7qtdexXBbl2/zl6cOhjfTYeAhNwwCg+dw7OVcE8LUn4E+gYZCYIKbNmmkVKsSckQd4h2IcyvqdqLwzjrEzdF95MoUI8WqdLwvQJLkoIaXju6ZT76FslGSUVXk58ZN7p2nr3kW8V7KclIzn/yyyYXE4bjBmS4djuvCReeSfSViCuX5CGT8avBb/IF/M5S7hcQVybmmalysOrranzSx0o9PPUIT9hHqqRpXW6iss2qVj+kCaFiC3ftlApVgizBoGcNAMA8N7hX8kkEjJSpiy7Vswuev9mVN9X94VwVZGyNvdYD8cKKxqTsfFDZDgefnuSYUhymKSBgM4yScYF6IPNJWFWJTugtVeMJ8ivqZhwJuD20nt6x7gGB1FS6m7axxRWeyp7h0FqWU9l6ZfmwHcRziVKNTk9BB4XIqco9M2wjV/YH321IGVwtVR5y6zty10+xk38TthCOidgBurFlMKbFKH5g9K5+84dhsCW0avMlJ0+QkgId0uAVyho+09Wx4cKqXLfobpznkUX+S0Um6G/NbAaUAU+SqBsm+X9CKFsPd/YJoxLdF7eBCG/3Fy4roKg3J4mBYeXe3wVnGft8Eeg0aNpOArMSStMY337UpdV80=
53 - secure: WNQBUyNvjTwMFm6pPzNXZYRvgLCTgEm93vLX/0amtr6gT6N8ZsTLL5+Ht3+v51MUOsjEe6tCM4cLSh4wSuwWcSEsUjK0jiqknlpgKKl6xLeo+1t8u6BKSgTpipWqrSD24TbvMrFUyeQrqCGRdZc3Ax/F1ERD81SXcsrg2evCL8g8zsYjxSMXc44drKrvYi68s/5ALrI+oH3t2PYsGuuP1ipj5CbaizUHEa5d8TukHRl96lxoEKCQ4Sa8UXRPNQsdb3TdkVmIEPIoioWU6AMPweBWR6Ky994aKwp0wWn1adWP49v8skMYWbirENniSxShtztF/NYqPQFyoyh0WD/C/ZJPh04HlMxnmQPUROq+LxBFz8WBY1eHDmz6GxH1lDYzneTtlRa5K8izvs2+ROhpVmmKeOgWHaL1ZRMy8Cn3V88kadF7i1K9NnqB6ZPyynJJctj7o0af6Os9/ZPqWfqIOWWeXgfXVzj17xJADfh6Z9epW95hdKZjnIf9IqGAI8aYTqhVL8DKTJ+PSGhJIOEX+ERm+0U9gMlwllwjHCDhBe42zCGuLaWZ239yD1eacM0Ko7yUM+xobiiF0FlB8VI/nBOpGdeUKNLeUfikLHILWd04AVRCNaQU67GMOHekfWdGR8tEh9I/5Y6GJR0IQL5eGmDUjSN0u/Ovss4jSEBOaXo=
diff --git a/README.md b/README.md
index 5397189c6..24cc0bf73 100644
--- a/README.md
+++ b/README.md
@@ -1,63 +1,24 @@
1<img src="./build-helpers/images/icon.png" alt="" width="150"/> 1<img src="./build-helpers/images/icon.png" alt="" width="150"/>
2 2
3# Franz 5 3# Ferdi
4[![Build status Windows](https://ci.appveyor.com/api/projects/status/9yman4ye19x4274o/branch/master?svg=true)](https://ci.appveyor.com/project/adlk/franz/branch/master)
5 [![Build Status Mac & Linux](https://travis-ci.com/meetfranz/franz.svg?branch=master)](https://travis-ci.com/meetfranz/franz) [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://meetfranz.com/payment.html)
6 4
7Messaging app for WhatsApp, Slack, Telegram, HipChat, Hangouts and many many more. 5👛 Hard-fork of [Franz](https://github.com/meetfranz/franz) removing the non-skippable app delay frequently inviting you to buy a licence
8
9## [Download Franz](https://www.meetfranz.com)
10👉 www.meetfranz.com
11
12### Or use homebrew (macOS only)
13
14`$ brew cask install franz`
15
16(Don't know homebrew? [brew.sh](https://brew.sh/))
17
18## Development
19
20### Preparations
21
22#### Install Linux OS dependencies
23[Guide: Linux distribution specific dependencies](docs/linux.md)
24
25#### Fix native modules to match current electron node version
26```bash
27$ npm run rebuild
28```
29
30### Install dependencies
31Run the following command to install all dependencies, and link sibling modules with Franz.
32```bash
33$ npx lerna bootstrap
34```
35
36If you previously ran `npm install` it sometimes is necessary to delete your `node_modules` folder before running `npx lerna bootstrap`.
37
38### Run Franz Development App
39Run these two commands __simultaneously__ in different console tabs.
40
41```bash
42$ npm run dev
43$ npm run start
44```
45Be aware that the development database will be reset regularly.
46 6
47## Packaging 7## Packaging
8
48```bash 9```bash
10$ npm install
49$ npm run build 11$ npm run build
50``` 12```
51 13
52## How can I support the project? 14Deliverables will be available in the `./out` folder.
53If you have found a bug that hasn't been reported yet or want to request a new feature, please open a new issue. 15
16## Releases
54 17
55## I need help? 18You can find the binaries for Linux, MacOS and Windows in the [latest release](https://github.com/kytwb/ferdi/releases/tag/Ferdi-5.2.0-beta.3) assets. Assets are continuously delivered through [Travis](https://travis-ci.org/kytwb/ferdi) for Linux/MacOS and [Appveyor](https://ci.appveyor.com/project/kytwb/ferdi) for Windows.
56Join the Franz community on [Slack](http://slack.franz.im) and get in touch with us.
57 19
58## Create your own plugins/recipes 20## Features
59You can find all the Information at the [Plugins repository](https://github.com/meetfranz/plugins).
60For questions feel free to ask in the [community Slack](http://slack.franz.im)
61 21
62## License 22- [x] Removes the fullscreen app delay inviting users to upgrade
63Franz 5 is open-source licensed under the Apache-2.0 License. 23- [ ] [#5](https://github.com/kytwb/ferdi/issues/5) Makes it optional to create an account
24- [ ] [#6](https://github.com/kytwb/ferdi/issues/6) Makes RocketChat self-hosted generally available
diff --git a/appveyor.yml b/appveyor.yml
index 1dd0dbd92..8df0934df 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -1,10 +1,4 @@
1environment: 1environment:
2 GH_TOKEN:
3 secure: LiO1Z/i16UV5YyElROSUykQqpJowSMK86I7Nw4G/NMa0q5yNA7EsUqEiJUL+OG01
4 CSC_LINK:
5 secure: NEYFWgUIAB//y2GR4AJOaegwuNjkxyNsdDf5A40dYovebTUsnIB5k4GCbU3I6JKW9iwH2ldU7Z+QawfyFerNgw==
6 CSC_KEY_PASSWORD:
7 secure: t8ypNTPKTmvRfd3hHA4aMOtC5KOFqOw3AsKhpU7140Q=
8 APPVEYOR_CACHE_SKIP_RESTORE: true 2 APPVEYOR_CACHE_SKIP_RESTORE: true
9 3
10version: 5.0.1.{build} 4version: 5.0.1.{build}
@@ -14,7 +8,7 @@ install:
14 - npx lerna bootstrap 8 - npx lerna bootstrap
15 9
16cache: 10cache:
17 - '%APPDATA%\npm-cache' 11 - '%APPDATA%\npm-cache'
18 12
19before_build: 13before_build:
20 - npm run lint 14 - npm run lint
@@ -23,11 +17,6 @@ before_build:
23build_script: 17build_script:
24 - npm run build 18 - npm run build
25 19
26notifications:
27 - provider: Slack
28 incoming_webhook:
29 secure: 2NnhP/L7Jk9PDE0JvdNnYVBnmDHFRWHmTQBQ1492ZQ7TpD2xQ/cXi3+G1Spr8zN5O8H+MQi4oMn3Ih2w0e8ZkHgQw138jvK/OfZO+FlF/mI=
30
31artifacts: 20artifacts:
32 - path: out\*.exe 21 - path: out\*.exe
33 - path: out\*.yml 22 - path: out\*.yml
diff --git a/src/assets/images/logo.svg b/src/assets/images/logo.svg
index 87188f4aa..9677d617b 100644
--- a/src/assets/images/logo.svg
+++ b/src/assets/images/logo.svg
@@ -1,35 +1,50 @@
1<?xml version="1.0" encoding="UTF-8"?> 1<?xml version="1.0" encoding="utf-8"?>
2<svg width="80px" height="80px" viewBox="0 0 80 80" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> 2<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3 <!-- Generator: Sketch 42 (36781) - http://www.bohemiancoding.com/sketch --> 3<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
4 <title>franz</title> 4 viewBox="0 0 80 80" style="enable-background:new 0 0 80 80;" xml:space="preserve">
5 <desc>Created with Sketch.</desc> 5<style type="text/css">
6 <defs> 6 .st0{filter:url(#filter-1);}
7 <filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="filter-1"> 7 .st1{stroke:#FFFFFF;stroke-width:2.5;}
8 <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset> 8 .st2{fill:#FEFEFE;}
9 <feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur> 9</style>
10 <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix> 10<filter filterUnits="objectBoundingBox" height="200%" id="filter-1" width="200%" x="-50%" y="-50%">
11 <feMerge> 11 <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
12 <feMergeNode in="shadowMatrixOuter1"></feMergeNode> 12 <feGaussianBlur in="shadowOffsetOuter1" result="shadowBlurOuter1" stdDeviation="1"></feGaussianBlur>
13 <feMergeNode in="SourceGraphic"></feMergeNode> 13
14 </feMerge> 14 <feColorMatrix in="shadowBlurOuter1" result="shadowMatrixOuter1" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0">
15 </filter> 15 </feColorMatrix>
16 <linearGradient x1="30.4719662%" y1="95.2408507%" x2="68.063052%" y2="3.5648771%" id="linearGradient-2"> 16 <feMerge>
17 <stop stop-color="#318CC8" offset="0%"></stop> 17 <feMergeNode in="shadowMatrixOuter1"></feMergeNode>
18 <stop stop-color="#5EC0FF" offset="100%"></stop> 18 <feMergeNode in="SourceGraphic"></feMergeNode>
19 </linearGradient> 19 </feMerge>
20 </defs> 20</filter>
21 <g id="icons" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> 21<title>franz</title>
22 <g id="franz"> 22<desc>Created with Sketch.</desc>
23 <g id="Page-1" filter="url(#filter-1)" transform="translate(4.000000, 4.000000)"> 23<g id="icons">
24 <path d="M35.9420808,71.5384615 C16.3467148,71.5384615 0.461538462,55.6532852 0.461538462,36.0579192 C0.461538462,16.4625533 16.3467148,0.577376909 35.9420808,0.577376909 C55.5374467,0.577376909 71.4226231,16.4625533 71.4226231,36.0579192 C71.4226231,55.6532852 55.5374467,71.5384615 35.9420808,71.5384615 Z" id="Fill-1" stroke="#FFFFFF" stroke-width="2.5" fill="url(#linearGradient-2)"></path> 24 <g id="franz">
25 <path d="M48.9831862,47.7311418 C48.3589601,47.7311418 47.7333024,47.695349 47.1072541,47.6262364 L47.1072541,51.7992839 C47.1072541,53.122185 48.5184007,53.8277583 50.4587598,53.8277583 C52.3991188,53.8277583 56.8089193,54.18061 58.5727874,51.0937106 C59.4799717,49.5060731 60.0599449,47.7327036 60.4099332,46.2456764 C57.3247258,47.2180686 53.4557216,47.7311418 48.9831862,47.7311418" id="Fill-3" fill="#FEFEFE"></path> 25 <g id="Page-1" transform="translate(4.000000, 4.000000)" class="st0">
26 <path d="M60.8655036,43.2258722 C60.8656338,43.2176724 60.8658941,43.2080409 60.8658941,43.2002315 C60.8658941,42.8456878 60.7797311,40.8259338 60.667537,38.2174863 C60.6590769,38.2176164 60.6513977,38.2178768 60.6428075,38.2178768 C58.3771897,38.2178768 55.0258142,37.0998405 53.3244207,35.7764188 C52.9135196,35.4568869 52.4548514,35.0301068 51.9649459,34.5413727 C49.7058359,37.4808058 47.549809,41.6273016 47.1687136,44.910866 C47.7640451,44.9870071 48.3697891,45.0282664 48.9832122,45.0282664 C53.829164,45.0282664 57.9269816,44.3915454 60.8655036,43.2258722" id="Fill-5" fill="#FEFEFE"></path> 26 <path id="Fill-1_1_" class="st1" d="M35.9,71.5c-19.6,0-35.5-15.9-35.5-35.5S16.3,0.6,35.9,0.6s35.5,15.9,35.5,35.5
27 <path d="M54.9840212,33.643 C56.1988932,34.5880595 58.8726789,35.4818377 60.5515554,35.5134655 C60.3633505,31.0949446 60.1603078,26.114412 60.1603078,24.4584428 C60.1603078,21.3716736 60.2495945,18.5935032 59.2783737,18.5935032 C56.8089323,18.5935032 57.4262601,29.3093405 54.3393608,31.9551427 C54.1456893,32.1212212 53.9478528,32.3035691 53.747153,32.5006246 C54.2137606,32.9712671 54.6418423,33.3768319 54.9840212,33.643" id="Fill-7" fill="#FEFEFE"></path> 27 S55.5,71.5,35.9,71.5z"/>
28 <path d="M12.0732694,35.4601798 C13.7241625,35.2508897 15.8906017,34.4664421 16.9491569,33.6430781 C17.3707308,33.3150861 17.9225903,32.7754611 18.5167504,32.1628189 C18.4383968,32.091754 18.3603035,32.0212096 18.2832514,31.9552208 C15.196352,29.3092884 15.8136798,18.5934511 13.3442384,18.5934511 C12.3731478,18.5934511 12.4623043,21.3716215 12.4623043,24.4585209 C12.4623043,26.107722 12.2608235,31.0550649 12.0732694,35.4601798" id="Fill-9" fill="#FEFEFE"></path> 28 <path id="Fill-3_1_" class="st2" d="M49,47.7c-0.6,0-1.2,0-1.9-0.1v4.2c0,1.3,1.4,2,3.4,2c1.9,0,6.4,0.4,8.1-2.7
29 <path d="M25.4406878,44.8074965 C25.008311,41.3920845 22.6955769,37.0765166 20.3525165,34.1524418 C19.7173574,34.8036101 19.1252797,35.3746025 18.6085622,35.7765229 C17.0675204,36.9752556 14.1720798,38.005567 11.9563116,38.188826 C11.8435969,40.8110701 11.7566529,42.8443602 11.7566529,43.2002055 C11.7566529,43.278429 11.7602973,43.3748743 11.7669352,43.4845954 C14.6418112,44.484971 18.4764543,45.0282403 22.9499008,45.0282403 C23.7973437,45.0282403 24.6298186,44.9488454 25.4406878,44.8074965" id="Fill-11" fill="#FEFEFE"></path> 29 c0.9-1.6,1.5-3.4,1.8-4.8C57.3,47.2,53.5,47.7,49,47.7"/>
30 <path d="M22.9499399,47.7311418 C18.830126,47.7311418 15.2211727,47.2965524 12.266251,46.4681122 C12.6207947,47.9073724 13.1873619,49.5845569 14.0497726,51.0937106 C15.8137709,54.18061 20.2235714,53.8277583 22.1638003,53.8277583 C24.1041594,53.8277583 25.515306,53.122185 25.515306,51.7992839 L25.515306,47.5360386 C24.6592728,47.6651529 23.8033699,47.7311418 22.9499399,47.7311418" id="Fill-13" fill="#FEFEFE"></path> 30 <path id="Fill-5_1_" class="st2" d="M60.9,43.2C60.9,43.2,60.9,43.2,60.9,43.2c0-0.4-0.1-2.4-0.2-5c0,0,0,0,0,0
31 <path d="M63.5454456,37.4703413 C63.0231314,37.4703413 62.4684084,37.6495655 61.8962446,38.0029379 C61.814637,38.0533081 61.4828705,38.2178247 60.6428465,38.2178247 C58.3770986,38.2178247 55.0258532,37.0999186 53.3244598,35.7764969 C52.4748043,35.1156971 51.4221061,33.9989624 50.3075841,32.8167595 C47.9636126,30.3303978 45.7496666,27.9820011 43.8337767,27.9820011 C42.471829,27.9820011 40.9034545,28.6166396 39.3866216,29.2305834 C38.1232016,29.7418344 36.8167001,30.2705263 35.966524,30.2705263 C35.1163479,30.2705263 33.8099765,29.7418344 32.5465565,29.2305834 C31.0297236,28.6166396 29.461219,27.9820011 28.0994014,27.9820011 C26.1833814,27.9820011 23.9693052,30.330528 21.6254639,32.8168896 C20.5109419,33.9990926 19.4582437,35.1156971 18.6085882,35.7764969 C16.9074551,37.0997884 13.5560796,38.2176945 11.2902015,38.2178247 C10.4503076,38.2178247 10.1185411,38.0533081 10.0369336,38.0029379 C9.46476974,37.6495655 8.9099166,37.4703413 8.3877325,37.4703413 C7.64857908,37.4703413 7.0250038,37.8567732 6.76039755,38.4787866 C6.43422772,39.2456631 6.70586237,40.1875989 7.48679572,40.9985982 C9.95272293,43.559539 15.5888491,45.0282143 22.9499269,45.0282143 C27.7832535,45.0282143 32.1465885,42.492784 34.6182426,40.1200482 C35.1197319,39.6387329 35.7738938,39.6142637 35.8998843,39.6142637 L35.9039192,39.6137431 L35.9276075,39.6223333 L36.0163736,39.614524 L36.0331636,39.6142637 C36.1591542,39.6142637 36.8134462,39.6387329 37.3149356,40.1200482 C39.7865896,42.492784 44.1497944,45.0282143 48.9831211,45.0282143 C56.3441989,45.0282143 61.980325,43.559539 64.4463824,40.9985982 C65.2273158,40.1877291 65.4986901,39.2456631 65.1726504,38.4787866 C64.9080442,37.8567732 64.2844689,37.4703413 63.5454456,37.4703413" id="Fill-15" fill="#FEFEFE"></path> 31 c-2.3,0-5.6-1.1-7.3-2.4c-0.4-0.3-0.9-0.7-1.4-1.2c-2.3,2.9-4.4,7.1-4.8,10.4C47.8,45,48.4,45,49,45C53.8,45,57.9,44.4,60.9,43.2
32 </g> 32 "/>
33 </g> 33 <path id="Fill-7_1_" class="st2" d="M55,33.6c1.2,0.9,3.9,1.8,5.6,1.9c-0.2-4.4-0.4-9.4-0.4-11.1c0-3.1,0.1-5.9-0.9-5.9
34 </g> 34 c-2.5,0-1.9,10.7-4.9,13.4c-0.2,0.2-0.4,0.3-0.6,0.5C54.2,33,54.6,33.4,55,33.6"/>
35</svg> \ No newline at end of file 35 <path id="Fill-9_1_" class="st2" d="M12.1,35.5c1.7-0.2,3.8-1,4.9-1.8c0.4-0.3,1-0.9,1.6-1.5c-0.1-0.1-0.2-0.1-0.2-0.2
36 c-3.1-2.6-2.5-13.4-4.9-13.4c-1,0-0.9,2.8-0.9,5.9C12.5,26.1,12.3,31.1,12.1,35.5"/>
37 <path id="Fill-11_1_" class="st2" d="M25.4,44.8c-0.4-3.4-2.7-7.7-5.1-10.7c-0.6,0.7-1.2,1.2-1.7,1.6C17.1,37,14.2,38,12,38.2
38 c-0.1,2.6-0.2,4.7-0.2,5c0,0.1,0,0.2,0,0.3c2.9,1,6.7,1.5,11.2,1.5C23.8,45,24.6,44.9,25.4,44.8"/>
39 <path id="Fill-13_1_" class="st2" d="M22.9,47.7c-4.1,0-7.7-0.4-10.7-1.3c0.4,1.4,0.9,3.1,1.8,4.6c1.8,3.1,6.2,2.7,8.1,2.7
40 c1.9,0,3.4-0.7,3.4-2v-4.3C24.7,47.7,23.8,47.7,22.9,47.7"/>
41 <path id="Fill-15_1_" class="st2" d="M63.5,37.5c-0.5,0-1.1,0.2-1.6,0.5c-0.1,0.1-0.4,0.2-1.3,0.2c-2.3,0-5.6-1.1-7.3-2.4
42 c-0.8-0.7-1.9-1.8-3-3C48,30.3,45.7,28,43.8,28c-1.4,0-2.9,0.6-4.4,1.2c-1.3,0.5-2.6,1-3.4,1c-0.9,0-2.2-0.5-3.4-1
43 C31,28.6,29.5,28,28.1,28c-1.9,0-4.1,2.3-6.5,4.8c-1.1,1.2-2.2,2.3-3,3c-1.7,1.3-5.1,2.4-7.3,2.4c-0.8,0-1.2-0.2-1.3-0.2
44 c-0.6-0.4-1.1-0.5-1.6-0.5c-0.7,0-1.4,0.4-1.6,1c-0.3,0.8-0.1,1.7,0.7,2.5c2.5,2.6,8.1,4,15.5,4c4.8,0,9.2-2.5,11.7-4.9
45 c0.5-0.5,1.2-0.5,1.3-0.5l0,0l0,0l0.1,0l0,0c0.1,0,0.8,0,1.3,0.5C39.8,42.5,44.1,45,49,45c7.4,0,13-1.5,15.5-4
46 c0.8-0.8,1.1-1.8,0.7-2.5C64.9,37.9,64.3,37.5,63.5,37.5"/>
47 </g>
48 </g>
49</g>
50</svg>
diff --git a/src/components/layout/AppLayout.js b/src/components/layout/AppLayout.js
index ebb9849ea..5edf96523 100644
--- a/src/components/layout/AppLayout.js
+++ b/src/components/layout/AppLayout.js
@@ -1,22 +1,21 @@
1import React, { Component } from 'react'; 1import React, { Component } from "react";
2import PropTypes from 'prop-types'; 2import PropTypes from "prop-types";
3import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; 3import { observer, PropTypes as MobxPropTypes } from "mobx-react";
4import { defineMessages, intlShape } from 'react-intl'; 4import { defineMessages, intlShape } from "react-intl";
5import { TitleBar } from 'electron-react-titlebar'; 5import { TitleBar } from "electron-react-titlebar";
6import injectSheet from 'react-jss'; 6import injectSheet from "react-jss";
7 7
8import InfoBar from '../ui/InfoBar'; 8import InfoBar from "../ui/InfoBar";
9import { Component as DelayApp } from '../../features/delayApp'; 9import { Component as BasicAuth } from "../../features/basicAuth";
10import { Component as BasicAuth } from '../../features/basicAuth'; 10import { Component as ShareFranz } from "../../features/shareFranz";
11import { Component as ShareFranz } from '../../features/shareFranz'; 11import ErrorBoundary from "../util/ErrorBoundary";
12import ErrorBoundary from '../util/ErrorBoundary';
13 12
14// import globalMessages from '../../i18n/globalMessages'; 13// import globalMessages from '../../i18n/globalMessages';
15 14
16import { isWindows } from '../../environment'; 15import { isWindows } from "../../environment";
17import WorkspaceSwitchingIndicator from '../../features/workspaces/components/WorkspaceSwitchingIndicator'; 16import WorkspaceSwitchingIndicator from "../../features/workspaces/components/WorkspaceSwitchingIndicator";
18import { workspaceStore } from '../../features/workspaces'; 17import { workspaceStore } from "../../features/workspaces";
19import AppUpdateInfoBar from '../AppUpdateInfoBar'; 18import AppUpdateInfoBar from "../AppUpdateInfoBar";
20 19
21function createMarkup(HTMLString) { 20function createMarkup(HTMLString) {
22 return { __html: HTMLString }; 21 return { __html: HTMLString };
@@ -24,30 +23,33 @@ function createMarkup(HTMLString) {
24 23
25const messages = defineMessages({ 24const messages = defineMessages({
26 servicesUpdated: { 25 servicesUpdated: {
27 id: 'infobar.servicesUpdated', 26 id: "infobar.servicesUpdated",
28 defaultMessage: '!!!Your services have been updated.', 27 defaultMessage: "!!!Your services have been updated."
29 }, 28 },
30 buttonReloadServices: { 29 buttonReloadServices: {
31 id: 'infobar.buttonReloadServices', 30 id: "infobar.buttonReloadServices",
32 defaultMessage: '!!!Reload services', 31 defaultMessage: "!!!Reload services"
33 }, 32 },
34 requiredRequestsFailed: { 33 requiredRequestsFailed: {
35 id: 'infobar.requiredRequestsFailed', 34 id: "infobar.requiredRequestsFailed",
36 defaultMessage: '!!!Could not load services and user information', 35 defaultMessage: "!!!Could not load services and user information"
37 }, 36 }
38}); 37});
39 38
40const styles = theme => ({ 39const styles = theme => ({
41 appContent: { 40 appContent: {
42 width: `calc(100% + ${theme.workspaces.drawer.width}px)`, 41 width: `calc(100% + ${theme.workspaces.drawer.width}px)`,
43 transition: 'transform 0.5s ease', 42 transition: "transform 0.5s ease",
44 transform() { 43 transform() {
45 return workspaceStore.isWorkspaceDrawerOpen ? 'translateX(0)' : `translateX(-${theme.workspaces.drawer.width}px)`; 44 return workspaceStore.isWorkspaceDrawerOpen
46 }, 45 ? "translateX(0)"
47 }, 46 : `translateX(-${theme.workspaces.drawer.width}px)`;
47 }
48 }
48}); 49});
49 50
50@injectSheet(styles) @observer 51@injectSheet(styles)
52@observer
51class AppLayout extends Component { 53class AppLayout extends Component {
52 static propTypes = { 54 static propTypes = {
53 classes: PropTypes.object.isRequired, 55 classes: PropTypes.object.isRequired,
@@ -67,17 +69,16 @@ class AppLayout extends Component {
67 showRequiredRequestsError: PropTypes.bool.isRequired, 69 showRequiredRequestsError: PropTypes.bool.isRequired,
68 areRequiredRequestsSuccessful: PropTypes.bool.isRequired, 70 areRequiredRequestsSuccessful: PropTypes.bool.isRequired,
69 retryRequiredRequests: PropTypes.func.isRequired, 71 retryRequiredRequests: PropTypes.func.isRequired,
70 areRequiredRequestsLoading: PropTypes.bool.isRequired, 72 areRequiredRequestsLoading: PropTypes.bool.isRequired
71 isDelayAppScreenVisible: PropTypes.bool.isRequired,
72 }; 73 };
73 74
74 static defaultProps = { 75 static defaultProps = {
75 children: [], 76 children: [],
76 nextAppReleaseVersion: null, 77 nextAppReleaseVersion: null
77 }; 78 };
78 79
79 static contextTypes = { 80 static contextTypes = {
80 intl: intlShape, 81 intl: intlShape
81 }; 82 };
82 83
83 render() { 84 render() {
@@ -99,8 +100,7 @@ class AppLayout extends Component {
99 showRequiredRequestsError, 100 showRequiredRequestsError,
100 areRequiredRequestsSuccessful, 101 areRequiredRequestsSuccessful,
101 retryRequiredRequests, 102 retryRequiredRequests,
102 areRequiredRequestsLoading, 103 areRequiredRequestsLoading
103 isDelayAppScreenVisible,
104 } = this.props; 104 } = this.props;
105 105
106 const { intl } = this.context; 106 const { intl } = this.context;
@@ -108,23 +108,31 @@ class AppLayout extends Component {
108 return ( 108 return (
109 <ErrorBoundary> 109 <ErrorBoundary>
110 <div className="app"> 110 <div className="app">
111 {isWindows && !isFullScreen && <TitleBar menu={window.franz.menu.template} icon="assets/images/logo.svg" />} 111 {isWindows && !isFullScreen && (
112 <TitleBar
113 menu={window.franz.menu.template}
114 icon="assets/images/logo.svg"
115 />
116 )}
112 <div className={`app__content ${classes.appContent}`}> 117 <div className={`app__content ${classes.appContent}`}>
113 {workspacesDrawer} 118 {workspacesDrawer}
114 {sidebar} 119 {sidebar}
115 <div className="app__service"> 120 <div className="app__service">
116 <WorkspaceSwitchingIndicator /> 121 <WorkspaceSwitchingIndicator />
117 {news.length > 0 && news.map(item => ( 122 {news.length > 0 &&
118 <InfoBar 123 news.map(item => (
119 key={item.id} 124 <InfoBar
120 position="top" 125 key={item.id}
121 type={item.type} 126 position="top"
122 sticky={item.sticky} 127 type={item.type}
123 onHide={() => removeNewsItem({ newsId: item.id })} 128 sticky={item.sticky}
124 > 129 onHide={() => removeNewsItem({ newsId: item.id })}
125 <span dangerouslySetInnerHTML={createMarkup(item.message)} /> 130 >
126 </InfoBar> 131 <span
127 ))} 132 dangerouslySetInnerHTML={createMarkup(item.message)}
133 />
134 </InfoBar>
135 ))}
128 {/* {!isOnline && ( 136 {/* {!isOnline && (
129 <InfoBar 137 <InfoBar
130 type="danger" 138 type="danger"
@@ -163,7 +171,6 @@ class AppLayout extends Component {
163 onInstallUpdate={installAppUpdate} 171 onInstallUpdate={installAppUpdate}
164 /> 172 />
165 )} 173 )}
166 {isDelayAppScreenVisible && (<DelayApp />)}
167 <BasicAuth /> 174 <BasicAuth />
168 <ShareFranz /> 175 <ShareFranz />
169 {services} 176 {services}