Move translations script to scripts folder
This commit is contained in:
@@ -89,7 +89,7 @@
|
||||
"all_filters_up_to_date_toast": "All filters are already up-to-date",
|
||||
"updated_upstream_dns_toast": "Updated the upstream DNS servers",
|
||||
"dns_test_ok_toast": "Specified DNS servers are working correctly",
|
||||
"dns_test_not_ok_toast": "Server '{{key}}': could not be used, please check that you've written it correctly",
|
||||
"dns_test_not_ok_toast": "Server \"{{key}}\": could not be used, please check that you've written it correctly",
|
||||
"unblock_btn": "Unblock",
|
||||
"block_btn": "Block",
|
||||
"time_table_header": "Time",
|
||||
|
||||
@@ -25,7 +25,7 @@ class Statistics extends Component {
|
||||
return (
|
||||
<div className="row">
|
||||
<div className="col-sm-6 col-lg-3">
|
||||
<Card bodyType="card-wrap">
|
||||
<Card type="card--full" bodyType="card-wrap">
|
||||
<div className="card-body-stats">
|
||||
<div className="card-value card-value-stats text-blue">
|
||||
{dnsQueries}
|
||||
@@ -40,7 +40,7 @@ class Statistics extends Component {
|
||||
</Card>
|
||||
</div>
|
||||
<div className="col-sm-6 col-lg-3">
|
||||
<Card bodyType="card-wrap">
|
||||
<Card type="card--full" bodyType="card-wrap">
|
||||
<div className="card-body-stats">
|
||||
<div className="card-value card-value-stats text-red">
|
||||
{blockedFiltering}
|
||||
@@ -49,7 +49,7 @@ class Statistics extends Component {
|
||||
{getPercent(dnsQueries, blockedFiltering)}
|
||||
</div>
|
||||
<div className="card-title-stats">
|
||||
<Trans>blocked_by</Trans> <a href="#filters"><Trans>filters</Trans></a>
|
||||
<Trans>blocked_by</Trans><a href="#filters"> <Trans>filters</Trans></a>
|
||||
</div>
|
||||
</div>
|
||||
<div className="card-chart-bg">
|
||||
@@ -58,7 +58,7 @@ class Statistics extends Component {
|
||||
</Card>
|
||||
</div>
|
||||
<div className="col-sm-6 col-lg-3">
|
||||
<Card bodyType="card-wrap">
|
||||
<Card type="card--full" bodyType="card-wrap">
|
||||
<div className="card-body-stats">
|
||||
<div className="card-value card-value-stats text-green">
|
||||
{replacedSafebrowsing}
|
||||
@@ -76,7 +76,7 @@ class Statistics extends Component {
|
||||
</Card>
|
||||
</div>
|
||||
<div className="col-sm-6 col-lg-3">
|
||||
<Card bodyType="card-wrap">
|
||||
<Card type="card--full" bodyType="card-wrap">
|
||||
<div className="card-body-stats">
|
||||
<div className="card-value card-value-stats text-yellow">
|
||||
{replacedParental}
|
||||
|
||||
@@ -88,6 +88,8 @@
|
||||
.nav-tabs .nav-link {
|
||||
width: auto;
|
||||
border-bottom: 1px solid transparent;
|
||||
font-size: 13px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.mobile-menu {
|
||||
@@ -107,6 +109,15 @@
|
||||
|
||||
.nav-version {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1280px) {
|
||||
.nav-tabs .nav-link {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.nav-version {
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,14 +17,14 @@ class Menu extends Component {
|
||||
|
||||
render() {
|
||||
const menuClass = classnames({
|
||||
'col-lg mobile-menu': true,
|
||||
'col-lg-6 mobile-menu': true,
|
||||
'mobile-menu--active': this.props.isMenuOpen,
|
||||
});
|
||||
|
||||
return (
|
||||
<Fragment>
|
||||
<div className={menuClass}>
|
||||
<ul className="nav nav-tabs border-0 flex-column flex-lg-row">
|
||||
<ul className="nav nav-tabs border-0 flex-column flex-lg-row flex-nowrap">
|
||||
<li className="nav-item border-bottom d-lg-none" onClick={this.toggleMenu}>
|
||||
<div className="nav-link nav-link--back">
|
||||
<svg className="nav-icon" fill="none" height="24" strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="m19 12h-14"/><path d="m12 19-7-7 7-7"/></svg>
|
||||
|
||||
@@ -49,15 +49,14 @@
|
||||
}
|
||||
|
||||
.card-title-stats {
|
||||
font-size: 13px;
|
||||
color: #9aa0ac;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.card-body-stats {
|
||||
position: relative;
|
||||
flex: 1 1 auto;
|
||||
height: calc(100% - 3rem);
|
||||
margin: 0;
|
||||
padding: 1rem 1.5rem;
|
||||
}
|
||||
@@ -84,3 +83,17 @@
|
||||
.card-value-percent:after {
|
||||
content: "%";
|
||||
}
|
||||
|
||||
.card--full {
|
||||
height: calc(100% - 1.5rem);
|
||||
}
|
||||
|
||||
.card-wrap {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1280px) {
|
||||
.card-title-stats {
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,8 +4,8 @@ import PropTypes from 'prop-types';
|
||||
import './Card.css';
|
||||
|
||||
const Card = props => (
|
||||
<div className="card">
|
||||
{ props.title &&
|
||||
<div className={props.type ? `card ${props.type}` : 'card'}>
|
||||
{props.title &&
|
||||
<div className="card-header with-border">
|
||||
<div className="card-inner">
|
||||
<div className="card-title">
|
||||
@@ -33,6 +33,7 @@ Card.propTypes = {
|
||||
title: PropTypes.string,
|
||||
subtitle: PropTypes.string,
|
||||
bodyType: PropTypes.string,
|
||||
type: PropTypes.string,
|
||||
refresh: PropTypes.node,
|
||||
children: PropTypes.node.isRequired,
|
||||
};
|
||||
|
||||
@@ -1,107 +0,0 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const crypto = require('crypto');
|
||||
const requestPromise = require('request-promise');
|
||||
|
||||
const LOCALES_DIR = '../../__locales';
|
||||
const LOCALES_LIST = ['en', 'ru', 'vi'];
|
||||
|
||||
/**
|
||||
* Hash content
|
||||
* @param {string} content
|
||||
*/
|
||||
const hashString = content => crypto.createHash('md5').update(content, 'utf8').digest('hex');
|
||||
|
||||
/**
|
||||
* Prepare params to get translations from oneskyapp
|
||||
* @param {string} locale language shortcut
|
||||
* @param {object} oneskyapp config oneskyapp
|
||||
*/
|
||||
const prepare = (locale, oneskyapp) => {
|
||||
const timestamp = Math.round(new Date().getTime() / 1000);
|
||||
|
||||
let url = [];
|
||||
url.push(oneskyapp.url + oneskyapp.projectId);
|
||||
url.push(`/translations?locale=${locale}`);
|
||||
url.push('&source_file_name=en.json');
|
||||
url.push(`&export_file_name=${locale}.json`);
|
||||
url.push(`&api_key=${oneskyapp.apiKey}`);
|
||||
url.push(`×tamp=${timestamp}`);
|
||||
url.push(`&dev_hash=${hashString(timestamp + oneskyapp.secretKey)}`);
|
||||
url = url.join('');
|
||||
|
||||
return url;
|
||||
};
|
||||
|
||||
/**
|
||||
* Promise wrapper for writing in file
|
||||
* @param {string} filename
|
||||
* @param {any} body
|
||||
*/
|
||||
function writeInFile(filename, body) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (typeof body !== 'string') {
|
||||
try {
|
||||
body = JSON.stringify(body, null, 4); // eslint-disable-line
|
||||
} catch (err) {
|
||||
reject(err);
|
||||
}
|
||||
}
|
||||
|
||||
fs.writeFile(filename, body, (err) => {
|
||||
if (err) reject(err);
|
||||
resolve('Ok');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Request to server onesky
|
||||
* @param {string} url
|
||||
* @param {string} locale
|
||||
*/
|
||||
const request = (url, locale) => (
|
||||
requestPromise.get(url)
|
||||
.then((res) => {
|
||||
if (res.length) {
|
||||
const pathToFile = path.join(LOCALES_DIR, `${locale}.json`);
|
||||
return writeInFile(pathToFile, res);
|
||||
}
|
||||
return null;
|
||||
})
|
||||
.then((res) => {
|
||||
let result = locale;
|
||||
result += res ? ' - OK' : ' - Empty';
|
||||
return result;
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
return `${locale} - Not OK`;
|
||||
}));
|
||||
|
||||
/**
|
||||
* Download locales
|
||||
*/
|
||||
const download = () => {
|
||||
const locales = LOCALES_LIST;
|
||||
let oneskyapp;
|
||||
try {
|
||||
oneskyapp = JSON.parse(fs.readFileSync('./oneskyapp.json'));
|
||||
} catch (err) {
|
||||
throw new Error(err);
|
||||
}
|
||||
|
||||
const requests = locales.map((locale) => {
|
||||
const url = prepare(locale, oneskyapp);
|
||||
return request(url, locale);
|
||||
});
|
||||
|
||||
Promise
|
||||
.all(requests)
|
||||
.then((res) => {
|
||||
res.forEach(item => console.log(item));
|
||||
})
|
||||
.catch(err => console.log(err));
|
||||
};
|
||||
|
||||
download();
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"url": "https://platform.api.onesky.io/1/projects/",
|
||||
"projectId": "<PROJECT ID>",
|
||||
"apiKey": "<API KEY>",
|
||||
"secretKey": "<SECRET KEY>"
|
||||
}
|
||||
61
client/src/helpers/translations/package-lock.json
generated
61
client/src/helpers/translations/package-lock.json
generated
@@ -1,61 +0,0 @@
|
||||
{
|
||||
"name": "translations",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"bluebird": {
|
||||
"version": "3.5.3",
|
||||
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
|
||||
"integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw=="
|
||||
},
|
||||
"lodash": {
|
||||
"version": "4.17.11",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
|
||||
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
|
||||
},
|
||||
"psl": {
|
||||
"version": "1.1.29",
|
||||
"resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
|
||||
"integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ=="
|
||||
},
|
||||
"punycode": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
|
||||
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
|
||||
},
|
||||
"request-promise": {
|
||||
"version": "4.2.2",
|
||||
"resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.2.tgz",
|
||||
"integrity": "sha1-0epG1lSm7k+O5qT+oQGMIpEZBLQ=",
|
||||
"requires": {
|
||||
"bluebird": "^3.5.0",
|
||||
"request-promise-core": "1.1.1",
|
||||
"stealthy-require": "^1.1.0",
|
||||
"tough-cookie": ">=2.3.3"
|
||||
}
|
||||
},
|
||||
"request-promise-core": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz",
|
||||
"integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=",
|
||||
"requires": {
|
||||
"lodash": "^4.13.1"
|
||||
}
|
||||
},
|
||||
"stealthy-require": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
|
||||
"integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks="
|
||||
},
|
||||
"tough-cookie": {
|
||||
"version": "2.4.3",
|
||||
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
|
||||
"integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
|
||||
"requires": {
|
||||
"psl": "^1.1.24",
|
||||
"punycode": "^1.4.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"name": "translations",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"download-locales": "node download.js",
|
||||
"upload-locales": "node upload.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"request-promise": "^4.2.2"
|
||||
}
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
const crypto = require('crypto');
|
||||
const request = require('request-promise');
|
||||
|
||||
const LOCALES_DIR = '../../__locales';
|
||||
|
||||
/**
|
||||
* Hash content
|
||||
*
|
||||
* @param {string} content
|
||||
*/
|
||||
const hashString = content => crypto.createHash('md5').update(content, 'utf8').digest('hex');
|
||||
|
||||
/**
|
||||
* Prepare post params
|
||||
*/
|
||||
const prepare = () => {
|
||||
let oneskyapp;
|
||||
try {
|
||||
oneskyapp = JSON.parse(fs.readFileSync('./oneskyapp.json'));
|
||||
} catch (err) {
|
||||
throw new Error(err);
|
||||
}
|
||||
|
||||
const url = `${oneskyapp.url}${oneskyapp.projectId}/files`;
|
||||
const timestamp = Math.round(new Date().getTime() / 1000);
|
||||
const formData = {
|
||||
timestamp,
|
||||
file: fs.createReadStream(path.resolve(LOCALES_DIR, 'en.json')),
|
||||
file_format: 'HIERARCHICAL_JSON',
|
||||
locale: 'en',
|
||||
is_keeping_all_strings: 'false',
|
||||
api_key: oneskyapp.apiKey,
|
||||
dev_hash: hashString(timestamp + oneskyapp.secretKey),
|
||||
};
|
||||
|
||||
return { url, formData };
|
||||
};
|
||||
|
||||
/**
|
||||
* Make request to onesky to upload new json
|
||||
*/
|
||||
const upload = () => {
|
||||
const { url, formData } = prepare();
|
||||
request
|
||||
.post({ url, formData })
|
||||
.catch(err => console.log(err));
|
||||
};
|
||||
|
||||
upload();
|
||||
Reference in New Issue
Block a user