feat: init
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"applinks": {
|
||||
"apps": [],
|
||||
"details": [
|
||||
{
|
||||
"appID": "KUT463DS29.com.linagora.ios.twake",
|
||||
"paths": [
|
||||
"*"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
[{"relation":["delegate_permission/common.handle_all_urls"],"target":{"namespace":"android_app","package_name":"com.twake.twake","sha256_cert_fingerprints":["E5:26:98:12:06:5D:7A:82:55:FA:19:0B:64:1D:EE:AC:7D:F8:BD:97:18:42:58:48:AB:E9:91:75:88:32:5C:03","3F:A6:0E:29:87:A4:0E:EA:12:02:16:8F:DA:76:86:22:F0:64:EB:2D:14:3D:6F:92:D6:F4:16:CB:DA:69:53:2C"]}}]
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square150x150logo src="/mstile-150x150.png"/>
|
||||
<TileColor>#da532c</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
</browserconfig>
|
||||
|
After Width: | Height: | Size: 9.4 KiB |
|
After Width: | Height: | Size: 31 KiB |
@@ -0,0 +1,150 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" translate="no">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Twake</title>
|
||||
<meta name="google" content="notranslate">
|
||||
<meta name="description" content="Go to Twake application" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
|
||||
/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<link rel="shortcut icon" href="/favicon.ico" />
|
||||
<meta name="apple-itunes-app" content="app-id=1588764852" />
|
||||
<style>
|
||||
#app,
|
||||
#root {
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
background: #0d0f38;
|
||||
}
|
||||
|
||||
#root {
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
#app {
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
#app_loader {
|
||||
pointer-events: none;
|
||||
opacity: 1;
|
||||
transition: 0.2s;
|
||||
}
|
||||
#app_loader.load {
|
||||
opacity: 1;
|
||||
transition: 0.8s;
|
||||
}
|
||||
|
||||
.circular{
|
||||
animation: rotate 2s linear infinite;
|
||||
height: 50px;
|
||||
left: calc(50% - 25px);
|
||||
position: absolute;
|
||||
top: calc(50% - 25px);
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
.path {
|
||||
stroke-dasharray: 1,200;
|
||||
stroke-dashoffset: 0;
|
||||
animation:
|
||||
dash 1.5s ease-in-out infinite,
|
||||
color 6s ease-in-out infinite
|
||||
;
|
||||
stroke-linecap: round;
|
||||
stroke: #FFFFFF;
|
||||
}
|
||||
|
||||
@keyframes rotate{
|
||||
100%{
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
@keyframes dash{
|
||||
0%{
|
||||
stroke-dasharray: 1,200;
|
||||
stroke-dashoffset: 0;
|
||||
}
|
||||
50%{
|
||||
stroke-dasharray: 89,200;
|
||||
stroke-dashoffset: -35;
|
||||
}
|
||||
100%{
|
||||
stroke-dasharray: 89,200;
|
||||
stroke-dashoffset: -124;
|
||||
}
|
||||
}
|
||||
|
||||
#canary_tag {
|
||||
background-image: url("/public/img/canary.png");
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
top: 0px;
|
||||
z-index: 100;
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
</style>
|
||||
<link rel="manifest" href="/manifest.json" />
|
||||
<link rel="stylesheet" href="/public/font/inter/inter.css" />
|
||||
<link rel="stylesheet" href="/public/font/helvetica/stylesheet.css" />
|
||||
</head>
|
||||
<body id="body" style="margin: 0; padding: 0;">
|
||||
<div id="fyfk-widget"></div>
|
||||
<div id="root" notranslate="true"></div>
|
||||
|
||||
<svg id="app_loader" class="circular" height="50" width="50">
|
||||
<circle class="path" cx="25" cy="25" r="20" fill="none" stroke-width="3" stroke-miterlimit="10" />
|
||||
</svg>
|
||||
|
||||
<script type="text/javascript">
|
||||
window.electron_config = {};
|
||||
if (typeof require != 'undefined' && typeof require('electron') != 'undefined') {
|
||||
window.electron = require('electron');
|
||||
if (
|
||||
window.electron.remote &&
|
||||
window.electron.remote.BrowserWindow &&
|
||||
window.electron.remote.BrowserWindow.getAllWindows() &&
|
||||
window.electron.remote.BrowserWindow.getAllWindows()[0]
|
||||
) {
|
||||
window.electron_config = window.electron.remote.BrowserWindow.getAllWindows()[0];
|
||||
|
||||
const sw = electron.screen.getPrimaryDisplay().size.width;
|
||||
const sh = electron.screen.getPrimaryDisplay().size.height;
|
||||
const w = Math.min(Math.ceil(sw * 0.8), 1792);
|
||||
const h = Math.min(Math.min(Math.ceil(sh * 0.8), 1120), w);
|
||||
electron.remote.getCurrentWindow().setBounds({ x: Math.ceil((sw - w) / 2), y: Math.ceil((sh - h) / 2), width: w, height: h });
|
||||
electron.remote.getCurrentWindow().center();
|
||||
}
|
||||
document.getElementById('body').className = 'electron';
|
||||
}
|
||||
</script>
|
||||
<script async src="https://cdn.headwayapp.co/widget.js"></script>
|
||||
<script>
|
||||
if(location.origin.indexOf("twake.app") >= 0){
|
||||
!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware"];analytics.factory=function(e){return function(){var t=Array.prototype.slice.call(arguments);t.unshift(e);analytics.push(t);return analytics}};for(var e=0;e<analytics.methods.length;e++){var key=analytics.methods[e];analytics[key]=analytics.factory(key)}analytics.load=function(key,e){var t=document.createElement("script");t.type="text/javascript";t.async=!0;t.src="https://cdn.segment.com/analytics.js/v1/" + key + "/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n);analytics._loadOptions=e};analytics.SNIPPET_VERSION="4.13.1";
|
||||
analytics.load("Vl5xpgcpGRe4BmSYp9xPlAeQdqLP5lLe");
|
||||
analytics.page();
|
||||
}}();
|
||||
}
|
||||
</script>
|
||||
<script>
|
||||
if(location.origin.indexOf("canary.twake.app") >= 0){
|
||||
const canaryTag = document.createElement("div");
|
||||
canaryTag.id = "canary_tag";
|
||||
document.body.appendChild(canaryTag);
|
||||
window.canary = true;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"printWidth": 100,
|
||||
"tabWidth": 4,
|
||||
"useTabs": false,
|
||||
"semi": true,
|
||||
"singleQuote": true,
|
||||
"trailingComma": "all",
|
||||
"bracketSpacing": true,
|
||||
"arrowParens": "avoid"
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
/** This too will clean up the languages keys if they are not used anywhere in the code */
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const dryRun = false;
|
||||
|
||||
let allKeys = {};
|
||||
const files = fs.readdirSync(__dirname);
|
||||
for (const file of files) {
|
||||
if (file.indexOf('.json') >= 0) {
|
||||
const content = JSON.parse(fs.readFileSync(__dirname + '/' + file));
|
||||
allKeys = { ...allKeys, ...content };
|
||||
}
|
||||
}
|
||||
allKeys = Object.keys(allKeys);
|
||||
|
||||
console.log(allKeys.length);
|
||||
|
||||
let srcFiles = [];
|
||||
let srcPath = __dirname + '/../../src/';
|
||||
function throughDirectory(directory) {
|
||||
fs.readdirSync(directory).forEach(file => {
|
||||
const abs = path.join(directory, file);
|
||||
if (fs.statSync(abs).isDirectory()) return throughDirectory(abs);
|
||||
else return srcFiles.push(abs);
|
||||
});
|
||||
}
|
||||
throughDirectory(srcPath);
|
||||
|
||||
const foundKeys = {};
|
||||
for (const srcFile of srcFiles) {
|
||||
if (
|
||||
srcFile.indexOf('.tsx') >= 0 ||
|
||||
srcFile.indexOf('.ts') >= 0 ||
|
||||
srcFile.indexOf('.jsx') >= 0 ||
|
||||
srcFile.indexOf('.js') >= 0
|
||||
) {
|
||||
const content = fs.readFileSync(srcFile);
|
||||
for (const key of allKeys) {
|
||||
if (!foundKeys[key]) foundKeys[key] = 0;
|
||||
//We keep the apps translations
|
||||
if (content.indexOf(key) >= 0 || key.indexOf('app.name.') === 0) {
|
||||
foundKeys[key]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const found = Object.keys(foundKeys).filter(key => foundKeys[key] > 0);
|
||||
const notFound = Object.keys(foundKeys).filter(key => foundKeys[key] == 0);
|
||||
|
||||
console.log('Found: ', found.length);
|
||||
console.log('Not found: ', notFound.length);
|
||||
|
||||
if (!dryRun) {
|
||||
for (const file of files) {
|
||||
if (file.indexOf('.json') >= 0) {
|
||||
const content = JSON.parse(fs.readFileSync(__dirname + '/' + file));
|
||||
for (const remove of notFound) {
|
||||
delete content[remove];
|
||||
}
|
||||
fs.writeFileSync(__dirname + '/' + file, JSON.stringify(content, null, 4));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "Twake",
|
||||
"short_name": "Twake"
|
||||
}
|
||||
|
After Width: | Height: | Size: 407 KiB |
|
After Width: | Height: | Size: 560 KiB |
|
After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 3.6 MiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 4.5 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 4.9 KiB |