From d40564ce3190f17c24b4b92ed313cf5066342d2b Mon Sep 17 00:00:00 2001 From: Maciej Lenartowicz Date: Tue, 28 Jan 2020 15:37:35 +0100 Subject: [PATCH 01/15] Fetch list of snapshots. --- js/src/API.js | 2 +- js/src/schnapps/Schnapps.js | 6 +++--- reforis_schnapps/__init__.py | 36 +++++++++++++++++++++++++++--------- 3 files changed, 31 insertions(+), 13 deletions(-) diff --git a/js/src/API.js b/js/src/API.js index a66778f..83ed8e6 100644 --- a/js/src/API.js +++ b/js/src/API.js @@ -11,7 +11,7 @@ const API_URL_PREFIX = `${REFORIS_URL_PREFIX}/schnapps/api`; const API_URLs = new Proxy( { - example: "/example", + snapshots: "/snapshots", }, { get: (target, name) => `${API_URL_PREFIX}${target[name]}`, diff --git a/js/src/schnapps/Schnapps.js b/js/src/schnapps/Schnapps.js index 537e5e1..6d9c2f8 100644 --- a/js/src/schnapps/Schnapps.js +++ b/js/src/schnapps/Schnapps.js @@ -12,10 +12,10 @@ import { useAPIGet } from "foris"; import API_URLs from "API"; export default function Schnapps() { - const [, getExample] = useAPIGet(API_URLs.example); + const [, getSnapshots] = useAPIGet(API_URLs.snapshots); useEffect(() => { - getExample(); - }, [getExample]); + getSnapshots(); + }, [getSnapshots]); return ( <> diff --git a/reforis_schnapps/__init__.py b/reforis_schnapps/__init__.py index 6d4480a..64490f2 100644 --- a/reforis_schnapps/__init__.py +++ b/reforis_schnapps/__init__.py @@ -30,17 +30,35 @@ schnapps = { } -@blueprint.route('/example', methods=['GET']) -def get_example(): - return jsonify(current_app.backend.perform('example_module', 'example_action')) +@blueprint.route('/snapshots', methods=['GET']) +def get_snapshots(): + return jsonify(current_app.backend.perform('schnapps', 'list')) -@blueprint.route('/example', methods=['POST']) -def post_example(): - validate_json(request.json, {'modules': list}) +@blueprint.route('/snapshots', methods=['POST']) +def create_snapshot(): + validate_json(request.json, {'description': str}) - response = current_app.backend.perform('example_module', 'example_action', request.json) + response = current_app.backend.perform('schnapps', 'create', request.json) if response.get('result') is not True: - raise APIError(_('Cannot create entity'), HTTPStatus.INTERNAL_SERVER_ERROR) + raise APIError(_('Cannot create snapshot.'), HTTPStatus.INTERNAL_SERVER_ERROR) - return jsonify(response), HTTPStatus.CREATED + return jsonify(response), HTTPStatus.ACCEPTED # TODO: Is it an async operation? + + +@blueprint.route('/snapshots/', methods=['DELETE']) +def delete_snapshot(snapshot_number): + response = current_app.backend.perform('schnapps', 'delete', {'number': snapshot_number}) + if response.get('result') is not True: + raise APIError(_('Cannot delete snapshot.'), HTTPStatus.INTERNAL_SERVER_ERROR) # TODO: Is it an async operation? + + return '', HTTPStatus.NO_CONTENT + + +@blueprint.route('/snapshots//rollback', methods=['PUT']) +def rollback_to_snapshot(snapshot_number): + response = current_app.backend.perform('schnapps', 'rollback', {'number': snapshot_number}) + if response.get('result') is not True: + raise APIError(_('Cannot rollback to snapshot.'), HTTPStatus.INTERNAL_SERVER_ERROR) # TODO: Is it an async operation? + + return '', HTTPStatus.NO_CONTENT -- GitLab From 6880d0c6651272243e26d61c672556760865d4b7 Mon Sep 17 00:00:00 2001 From: Maciej Lenartowicz Date: Wed, 29 Jan 2020 10:30:55 +0100 Subject: [PATCH 02/15] Updated description. --- js/src/schnapps/Schnapps.js | 4 +++- js/src/schnapps/Snapshots.js | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 js/src/schnapps/Snapshots.js diff --git a/js/src/schnapps/Schnapps.js b/js/src/schnapps/Schnapps.js index 6d9c2f8..4528d87 100644 --- a/js/src/schnapps/Schnapps.js +++ b/js/src/schnapps/Schnapps.js @@ -10,6 +10,7 @@ import React, { useEffect } from "react"; import { useAPIGet } from "foris"; import API_URLs from "API"; +import Snapshots from "./Snapshots"; export default function Schnapps() { const [, getSnapshots] = useAPIGet(API_URLs.snapshots); @@ -20,7 +21,8 @@ export default function Schnapps() { return ( <>

{_("Schnapps")}

-

{_("Add your components here")}

+

advanced options.")}} /> + ); } diff --git a/js/src/schnapps/Snapshots.js b/js/src/schnapps/Snapshots.js new file mode 100644 index 0000000..26ca19f --- /dev/null +++ b/js/src/schnapps/Snapshots.js @@ -0,0 +1,12 @@ +/* + * Copyright (C) 2020 CZ.NIC z.s.p.o. (http://www.nic.cz/) + * + * This is free software, licensed under the GNU General Public License v3. + * See /LICENSE for more information. + */ + +import React from "react"; + +export default function Snapshots() { + return null; +} -- GitLab From 9e1e705a14fab9eac2b0145133180102e7948e67 Mon Sep 17 00:00:00 2001 From: Maciej Lenartowicz Date: Wed, 29 Jan 2020 11:06:53 +0100 Subject: [PATCH 03/15] Renamed plugin to Snapshots. --- .gitignore | 2 +- MANIFEST.in | 2 +- Makefile | 20 ++++++++--------- README.md | 2 +- babel.cfg | 2 +- js/package-lock.json | 2 +- js/package.json | 2 +- js/src/API.js | 2 +- js/src/app.js | 12 +++++----- js/src/schnapps/Snapshots.js | 12 ---------- .../Schnapps.js => snapshots/Snapshots.js} | 8 +++---- .../__tests__/Schnapps.test.js | 10 ++++----- js/webpack.config.js | 2 +- .../__init__.py | 22 +++++++++---------- .../translations/.gitkeep | 0 .../.gitkeep | 0 setup.py | 8 +++---- tests/test_api.py | 20 +++-------------- 18 files changed, 50 insertions(+), 78 deletions(-) delete mode 100644 js/src/schnapps/Snapshots.js rename js/src/{schnapps/Schnapps.js => snapshots/Snapshots.js} (77%) rename js/src/{schnapps => snapshots}/__tests__/Schnapps.test.js (56%) rename {reforis_schnapps => reforis_snapshots}/__init__.py (71%) rename {reforis_schnapps => reforis_snapshots}/translations/.gitkeep (100%) rename reforis_static/{reforis_schnapps => reforis_snapshots}/.gitkeep (100%) diff --git a/.gitignore b/.gitignore index 490d3c7..4077479 100644 --- a/.gitignore +++ b/.gitignore @@ -109,4 +109,4 @@ venv.bak/ ## mypy .mypy_cache/ -reforis_static/reforis_schnapps/js/app.min.js +reforis_static/reforis_snapshots/js/app.min.js diff --git a/MANIFEST.in b/MANIFEST.in index e59109e..eb4e228 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1 +1 @@ -recursive-include reforis_static/schnapps * +recursive-include reforis_static/snapshots * diff --git a/Makefile b/Makefile index d56be0d..187e3fe 100644 --- a/Makefile +++ b/Makefile @@ -57,7 +57,7 @@ prepare-dev: install: $(ROUTER_PYTHON) -m pip install -e . - ln -sf /tmp/reforis-schnapps/reforis_static/reforis_schnapps /tmp/reforis/reforis_static/ + ln -sf /tmp/reforis-snapshots/reforis_static/reforis_snapshots /tmp/reforis/reforis_static/ /etc/init.d/lighttpd restart install-js: js/package.json cd $(JS_DIR); npm install --save-dev @@ -75,8 +75,8 @@ lint-js: lint-js-fix: cd $(JS_DIR); npm run lint:fix lint-web: venv - $(VENV_BIN)/$(DEV_PYTHON) -m pylint --rcfile=pylintrc reforis_schnapps - $(VENV_BIN)/$(DEV_PYTHON) -m pycodestyle --config=pycodestyle reforis_schnapps + $(VENV_BIN)/$(DEV_PYTHON) -m pylint --rcfile=pylintrc reforis_snapshots + $(VENV_BIN)/$(DEV_PYTHON) -m pycodestyle --config=pycodestyle reforis_snapshots test: test-js test-web test-js: @@ -87,21 +87,21 @@ test-js-update-snapshots: cd $(JS_DIR); npm test -- -u create-messages: - $(VENV_BIN)/pybabel extract -F babel.cfg -o ./reforis_schnapps/translations/messages.pot . + $(VENV_BIN)/pybabel extract -F babel.cfg -o ./reforis_snapshots/translations/messages.pot . init-langs: create-messages for lang in $(LANGS); do \ $(VENV_BIN)/pybabel init \ - -i reforis_schnapps/translations/messages.pot \ - -d reforis_schnapps/translations/ -l $$lang \ + -i reforis_snapshots/translations/messages.pot \ + -d reforis_snapshots/translations/ -l $$lang \ ; done update-messages: - $(VENV_BIN)/pybabel update -i ./reforis_schnapps/translations/messages.pot -d ./reforis/translations + $(VENV_BIN)/pybabel update -i ./reforis_snapshots/translations/messages.pot -d ./reforis/translations compile-messages: - $(VENV_BIN)/pybabel compile -f -d ./reforis_schnapps/translations + $(VENV_BIN)/pybabel compile -f -d ./reforis_snapshots/translations clean: find . -name '*.pyc' -exec rm -f {} + rm -rf $(VENV_NAME) *.eggs *.egg-info dist build .cache rm -rf dist build *.egg-info - rm -rf $(JS_DIR)/node_modules/ reforis_static/reforis_schnapps/js/app.min.js - $(ROUTER_PYTHON) -m pip uninstall -y reforis_schnapps + rm -rf $(JS_DIR)/node_modules/ reforis_static/reforis_snapshots/js/app.min.js + $(ROUTER_PYTHON) -m pip uninstall -y reforis_snapshots diff --git a/README.md b/README.md index 29489ce..5c921b5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# reForis Schnapps plugin +# reForis Snapshots plugin To learn more about the plugin system see documentation of [reForis](https://gitlab.labs.nic.cz/turris/reforis). diff --git a/babel.cfg b/babel.cfg index ccb1084..aadf334 100644 --- a/babel.cfg +++ b/babel.cfg @@ -1,2 +1,2 @@ -[python: reforis_schnapps/**.py] +[python: reforis_snapshots/**.py] [javascript: js/src/**.js] diff --git a/js/package-lock.json b/js/package-lock.json index b2853ff..42eda3f 100644 --- a/js/package-lock.json +++ b/js/package-lock.json @@ -1,5 +1,5 @@ { - "name": "reforis_schnapps", + "name": "reforis_snapshots", "version": "0.1.0", "lockfileVersion": 1, "requires": true, diff --git a/js/package.json b/js/package.json index b286209..71866bb 100644 --- a/js/package.json +++ b/js/package.json @@ -1,5 +1,5 @@ { - "name": "reforis_schnapps", + "name": "reforis_snapshots", "author": "CZ.NIC, z.s.p.o.", "license": "GPL-3.0", "version": "0.1.0", diff --git a/js/src/API.js b/js/src/API.js index 83ed8e6..e68331d 100644 --- a/js/src/API.js +++ b/js/src/API.js @@ -7,7 +7,7 @@ import { REFORIS_URL_PREFIX } from "foris"; -const API_URL_PREFIX = `${REFORIS_URL_PREFIX}/schnapps/api`; +const API_URL_PREFIX = `${REFORIS_URL_PREFIX}/snapshots/api`; const API_URLs = new Proxy( { diff --git a/js/src/app.js b/js/src/app.js index 6e4c840..bc2abc3 100644 --- a/js/src/app.js +++ b/js/src/app.js @@ -5,14 +5,14 @@ * See /LICENSE for more information. */ -import Schnapps from "./schnapps/Schnapps"; +import Snapshots from "./snapshots/Snapshots"; -const SchnappsPlugin = { - name: _("Schnapps"), +const SnapshotsPlugin = { + name: _("Snapshots"), submenuId: "administration", weight: 100, - path: "/schnapps", - component: Schnapps, + path: "/snapshots", + component: Snapshots, }; -ForisPlugins.push(SchnappsPlugin); +ForisPlugins.push(SnapshotsPlugin); diff --git a/js/src/schnapps/Snapshots.js b/js/src/schnapps/Snapshots.js deleted file mode 100644 index 26ca19f..0000000 --- a/js/src/schnapps/Snapshots.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright (C) 2020 CZ.NIC z.s.p.o. (http://www.nic.cz/) - * - * This is free software, licensed under the GNU General Public License v3. - * See /LICENSE for more information. - */ - -import React from "react"; - -export default function Snapshots() { - return null; -} diff --git a/js/src/schnapps/Schnapps.js b/js/src/snapshots/Snapshots.js similarity index 77% rename from js/src/schnapps/Schnapps.js rename to js/src/snapshots/Snapshots.js index 4528d87..c7e2d17 100644 --- a/js/src/schnapps/Schnapps.js +++ b/js/src/snapshots/Snapshots.js @@ -10,9 +10,8 @@ import React, { useEffect } from "react"; import { useAPIGet } from "foris"; import API_URLs from "API"; -import Snapshots from "./Snapshots"; -export default function Schnapps() { +export default function Snapshots() { const [, getSnapshots] = useAPIGet(API_URLs.snapshots); useEffect(() => { getSnapshots(); @@ -20,9 +19,8 @@ export default function Schnapps() { return ( <> -

{_("Schnapps")}

-

advanced options.")}} /> - +

{_("Snapshots")}

+

advanced options.") }} /> ); } diff --git a/js/src/schnapps/__tests__/Schnapps.test.js b/js/src/snapshots/__tests__/Schnapps.test.js similarity index 56% rename from js/src/schnapps/__tests__/Schnapps.test.js rename to js/src/snapshots/__tests__/Schnapps.test.js index b1169e0..809283d 100644 --- a/js/src/schnapps/__tests__/Schnapps.test.js +++ b/js/src/snapshots/__tests__/Schnapps.test.js @@ -9,12 +9,12 @@ import React from "react"; import mockAxios from "jest-mock-axios"; import { render } from "foris/testUtils/customTestRender"; -import Schnapps from "../Schnapps"; +import Snapshots from "../Snapshots"; -describe("", () => { +describe("", () => { it("should render component", () => { - const { getByText } = render(); - expect(getByText("Schnapps")).toBeDefined(); - expect(mockAxios.get).toBeCalledWith("/reforis/schnapps/api/example", expect.anything()); + const { getByText } = render(); + expect(getByText("Snapshots")).toBeDefined(); + expect(mockAxios.get).toBeCalledWith("/reforis/snapshots/api/snapshots", expect.anything()); }); }); diff --git a/js/webpack.config.js b/js/webpack.config.js index 81d1d86..62ca4e3 100644 --- a/js/webpack.config.js +++ b/js/webpack.config.js @@ -14,7 +14,7 @@ module.exports = () => ({ // Build js app to ../reforis_static{python_module_name}/app.min.js // See https://gitlab.labs.nic.cz/turris/reforis/reforis-distutils/blob/master/reforis_distutils/__init__.py#L11 filename: "app.min.js", - path: path.join(__dirname, "../reforis_static/reforis_schnapps/js/"), + path: path.join(__dirname, "../reforis_static/reforis_snapshots/js/"), }, resolve: { modules: [ diff --git a/reforis_schnapps/__init__.py b/reforis_snapshots/__init__.py similarity index 71% rename from reforis_schnapps/__init__.py rename to reforis_snapshots/__init__.py index 64490f2..16d89bf 100644 --- a/reforis_schnapps/__init__.py +++ b/reforis_snapshots/__init__.py @@ -13,52 +13,52 @@ from reforis.foris_controller_api.utils import log_error, validate_json, APIErro # pylint: disable=invalid-name blueprint = Blueprint( - 'Schnapps', + 'Snapshots', __name__, - url_prefix='/schnapps/api', + url_prefix='/snapshots/api', ) BASE_DIR = Path(__file__).parent # pylint: disable=invalid-name -schnapps = { +snapshots = { 'blueprint': blueprint, # Define {python_module_name}/js/app.min.js # See https://gitlab.labs.nic.cz/turris/reforis/reforis-distutils/blob/master/reforis_distutils/__init__.py#L11 - 'js_app_path': 'reforis_schnapps/js/app.min.js', + 'js_app_path': 'reforis_snapshots/js/app.min.js', 'translations_path': BASE_DIR / 'translations', } @blueprint.route('/snapshots', methods=['GET']) def get_snapshots(): - return jsonify(current_app.backend.perform('schnapps', 'list')) + return jsonify(current_app.backend.perform('snapshots', 'list')) @blueprint.route('/snapshots', methods=['POST']) def create_snapshot(): validate_json(request.json, {'description': str}) - response = current_app.backend.perform('schnapps', 'create', request.json) + response = current_app.backend.perform('snapshots', 'create', request.json) if response.get('result') is not True: raise APIError(_('Cannot create snapshot.'), HTTPStatus.INTERNAL_SERVER_ERROR) - return jsonify(response), HTTPStatus.ACCEPTED # TODO: Is it an async operation? + return jsonify(response), HTTPStatus.ACCEPTED @blueprint.route('/snapshots/', methods=['DELETE']) def delete_snapshot(snapshot_number): - response = current_app.backend.perform('schnapps', 'delete', {'number': snapshot_number}) + response = current_app.backend.perform('snapshots', 'delete', {'number': snapshot_number}) if response.get('result') is not True: - raise APIError(_('Cannot delete snapshot.'), HTTPStatus.INTERNAL_SERVER_ERROR) # TODO: Is it an async operation? + raise APIError(_('Cannot delete snapshot.'), HTTPStatus.INTERNAL_SERVER_ERROR) return '', HTTPStatus.NO_CONTENT @blueprint.route('/snapshots//rollback', methods=['PUT']) def rollback_to_snapshot(snapshot_number): - response = current_app.backend.perform('schnapps', 'rollback', {'number': snapshot_number}) + response = current_app.backend.perform('snapshots', 'rollback', {'number': snapshot_number}) if response.get('result') is not True: - raise APIError(_('Cannot rollback to snapshot.'), HTTPStatus.INTERNAL_SERVER_ERROR) # TODO: Is it an async operation? + raise APIError(_('Cannot rollback to snapshot.'), HTTPStatus.INTERNAL_SERVER_ERROR) return '', HTTPStatus.NO_CONTENT diff --git a/reforis_schnapps/translations/.gitkeep b/reforis_snapshots/translations/.gitkeep similarity index 100% rename from reforis_schnapps/translations/.gitkeep rename to reforis_snapshots/translations/.gitkeep diff --git a/reforis_static/reforis_schnapps/.gitkeep b/reforis_static/reforis_snapshots/.gitkeep similarity index 100% rename from reforis_static/reforis_schnapps/.gitkeep rename to reforis_static/reforis_snapshots/.gitkeep diff --git a/setup.py b/setup.py index 3081237..90169ba 100644 --- a/setup.py +++ b/setup.py @@ -11,12 +11,12 @@ import pathlib import setuptools from setuptools.command.build_py import build_py -NAME = 'reforis_schnapps' +NAME = 'reforis_snapshots' BASE_DIR = pathlib.Path(__file__).absolute().parent -class SchnappsBuild(build_py): +class SnapshotsBuild(build_py): def run(self): # build package build_py.run(self) @@ -63,7 +63,7 @@ setuptools.setup( 'git+https://gitlab.labs.nic.cz/turris/reforis/reforis-distutils.git#egg=reforis-distutils', ], entry_points={ - 'foris.plugins': f'{NAME} = {NAME}:schnapps' + 'foris.plugins': f'{NAME} = {NAME}:snapshots' }, classifiers=[ 'Framework :: Flask', @@ -76,7 +76,7 @@ setuptools.setup( 'Topic :: Internet :: WWW/HTTP :: WSGI :: Application', ], cmdclass={ - 'build_py': SchnappsBuild, + 'build_py': SnapshotsBuild, }, zip_safe=False, ) diff --git a/tests/test_api.py b/tests/test_api.py index b1a15f9..b46c85d 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -7,22 +7,8 @@ from http import HTTPStatus from reforis.test_utils import mock_backend_response -@mock_backend_response({'example_module': {'example_action': {'key': 'value'}}}) -def test_get_example(client): - response = client.get('/schnapps/api/example') +@mock_backend_response({'snapshots': {'list': {'key': 'value'}}}) +def test_get_snapshots(client): + response = client.get('/snapshots/api/snapshots') assert response.status_code == HTTPStatus.OK assert response.json['key'] == 'value' - - -@mock_backend_response({'example_module': {'example_action': {'result': True}}}) -def test_post_example_invalid_json(client): - response = client.post('/schnapps/api/example', json=False) - assert response.status_code == HTTPStatus.BAD_REQUEST - assert response.json == 'Invalid JSON' - - -@mock_backend_response({'example_module': {'example_action': {'key': 'value'}}}) -def test_post_example_backend_error(client): - response = client.post('/schnapps/api/example', json={'modules': []}) - assert response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR - assert response.json == 'Cannot create entity' -- GitLab From 43311a3aecb652895674666add570184f656703d Mon Sep 17 00:00:00 2001 From: Maciej Lenartowicz Date: Wed, 29 Jan 2020 11:50:51 +0100 Subject: [PATCH 04/15] Use hook to get list of snapshots. --- js/src/snapshots/Snapshots.js | 23 ++++++++++++++++------- js/src/snapshots/hooks.js | 30 ++++++++++++++++++++++++++++++ reforis_snapshots/__init__.py | 8 ++++---- tests/test_api.py | 2 +- 4 files changed, 51 insertions(+), 12 deletions(-) create mode 100644 js/src/snapshots/hooks.js diff --git a/js/src/snapshots/Snapshots.js b/js/src/snapshots/Snapshots.js index c7e2d17..069ce82 100644 --- a/js/src/snapshots/Snapshots.js +++ b/js/src/snapshots/Snapshots.js @@ -5,22 +5,31 @@ * See /LICENSE for more information. */ -import React, { useEffect } from "react"; +import React, { useState } from "react"; -import { useAPIGet } from "foris"; +import { API_STATE, Spinner, ErrorMessage } from "foris"; -import API_URLs from "API"; +import { useGetSnapshots } from "./hooks"; export default function Snapshots() { - const [, getSnapshots] = useAPIGet(API_URLs.snapshots); - useEffect(() => { - getSnapshots(); - }, [getSnapshots]); + const [, setSnapshots] = useState([]); + + const [getState] = useGetSnapshots(setSnapshots); + + let componentContent; + if (getState === API_STATE.INIT || [getState].includes(API_STATE.SENDING)) { + componentContent = ; + } else if (getState === API_STATE.ERROR) { + componentContent = ; + } else { + componentContent =

; + } return ( <>

{_("Snapshots")}

advanced options.") }} /> + {componentContent} ); } diff --git a/js/src/snapshots/hooks.js b/js/src/snapshots/hooks.js new file mode 100644 index 0000000..e9f71f9 --- /dev/null +++ b/js/src/snapshots/hooks.js @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2020 CZ.NIC z.s.p.o. (http://www.nic.cz/) + * + * This is free software, licensed under the GNU General Public License v3. + * See /LICENSE for more information. + */ + +import { useEffect } from "react"; + +import { useAPIGet, API_STATE } from "foris"; + +import API_URLs from "API"; + +export function useGetSnapshots(setSnapshots) { + const [getSnapshotsResponse, getSnapshots] = useAPIGet(API_URLs.snapshots); + + // Initial data fetch + useEffect(() => { + getSnapshots(); + }, [getSnapshots]); + + // Update snapshots data + useEffect(() => { + if (getSnapshotsResponse.state === API_STATE.SUCCESS) { + setSnapshots(getSnapshotsResponse.data); + } + }, [getSnapshotsResponse, setSnapshots]); + + return [getSnapshotsResponse.state]; +} diff --git a/reforis_snapshots/__init__.py b/reforis_snapshots/__init__.py index 16d89bf..08178fa 100644 --- a/reforis_snapshots/__init__.py +++ b/reforis_snapshots/__init__.py @@ -32,14 +32,14 @@ snapshots = { @blueprint.route('/snapshots', methods=['GET']) def get_snapshots(): - return jsonify(current_app.backend.perform('snapshots', 'list')) + return jsonify(current_app.backend.perform('schnapps', 'list')) @blueprint.route('/snapshots', methods=['POST']) def create_snapshot(): validate_json(request.json, {'description': str}) - response = current_app.backend.perform('snapshots', 'create', request.json) + response = current_app.backend.perform('schnapps', 'create', request.json) if response.get('result') is not True: raise APIError(_('Cannot create snapshot.'), HTTPStatus.INTERNAL_SERVER_ERROR) @@ -48,7 +48,7 @@ def create_snapshot(): @blueprint.route('/snapshots/', methods=['DELETE']) def delete_snapshot(snapshot_number): - response = current_app.backend.perform('snapshots', 'delete', {'number': snapshot_number}) + response = current_app.backend.perform('schnapps', 'delete', {'number': snapshot_number}) if response.get('result') is not True: raise APIError(_('Cannot delete snapshot.'), HTTPStatus.INTERNAL_SERVER_ERROR) @@ -57,7 +57,7 @@ def delete_snapshot(snapshot_number): @blueprint.route('/snapshots//rollback', methods=['PUT']) def rollback_to_snapshot(snapshot_number): - response = current_app.backend.perform('snapshots', 'rollback', {'number': snapshot_number}) + response = current_app.backend.perform('schnapps', 'rollback', {'number': snapshot_number}) if response.get('result') is not True: raise APIError(_('Cannot rollback to snapshot.'), HTTPStatus.INTERNAL_SERVER_ERROR) diff --git a/tests/test_api.py b/tests/test_api.py index b46c85d..0cbf9af 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -7,7 +7,7 @@ from http import HTTPStatus from reforis.test_utils import mock_backend_response -@mock_backend_response({'snapshots': {'list': {'key': 'value'}}}) +@mock_backend_response({'schnapps': {'list': {'key': 'value'}}}) def test_get_snapshots(client): response = client.get('/snapshots/api/snapshots') assert response.status_code == HTTPStatus.OK -- GitLab From 41b7799a2c22e9cec55f25bf12f9ab0554af5ef1 Mon Sep 17 00:00:00 2001 From: Maciej Lenartowicz Date: Wed, 29 Jan 2020 14:17:45 +0100 Subject: [PATCH 05/15] Display snapshots in table. --- js/src/snapshots/Snapshots.js | 5 +-- js/src/snapshots/SnapshotsTable.js | 56 ++++++++++++++++++++++++++++++ reforis_snapshots/__init__.py | 2 +- tests/test_api.py | 4 +-- 4 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 js/src/snapshots/SnapshotsTable.js diff --git a/js/src/snapshots/Snapshots.js b/js/src/snapshots/Snapshots.js index 069ce82..b4dd36d 100644 --- a/js/src/snapshots/Snapshots.js +++ b/js/src/snapshots/Snapshots.js @@ -10,9 +10,10 @@ import React, { useState } from "react"; import { API_STATE, Spinner, ErrorMessage } from "foris"; import { useGetSnapshots } from "./hooks"; +import SnapshotsTable from "./SnapshotsTable"; export default function Snapshots() { - const [, setSnapshots] = useState([]); + const [snapshots, setSnapshots] = useState([]); const [getState] = useGetSnapshots(setSnapshots); @@ -22,7 +23,7 @@ export default function Snapshots() { } else if (getState === API_STATE.ERROR) { componentContent = ; } else { - componentContent =

; + componentContent = ; } return ( diff --git a/js/src/snapshots/SnapshotsTable.js b/js/src/snapshots/SnapshotsTable.js new file mode 100644 index 0000000..8ee9262 --- /dev/null +++ b/js/src/snapshots/SnapshotsTable.js @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2020 CZ.NIC z.s.p.o. (http://www.nic.cz/) + * + * This is free software, licensed under the GNU General Public License v3. + * See /LICENSE for more information. + */ + +import React from "react"; +import PropTypes from "prop-types"; + +const snapshotShape = PropTypes.shape({ + number: PropTypes.number.isRequired, + type: PropTypes.string.isRequired, + description: PropTypes.string.isRequired, + created: PropTypes.string.isRequired, + size: PropTypes.string.isRequired, +}); + +SnapshotsTable.propTypes = { + snapshots: PropTypes.arrayOf(snapshotShape).isRequired, +}; + +export default function SnapshotsTable({ snapshots }) { + return ( + + + + + + + + + + + + {snapshots.map((snapshot) => )} + +
{_("Number")}{_("Type")}{_("Description")}{_("Created at")}{_("Size")}
+ ); +} + +SnapshotRow.propTypes = { + snapshot: snapshotShape.isRequired, +}; + +function SnapshotRow({ snapshot }) { + return ( + + {snapshot.number} + {snapshot.type} + {snapshot.description} + {snapshot.created} + {snapshot.size} + + ); +} diff --git a/reforis_snapshots/__init__.py b/reforis_snapshots/__init__.py index 08178fa..401beef 100644 --- a/reforis_snapshots/__init__.py +++ b/reforis_snapshots/__init__.py @@ -32,7 +32,7 @@ snapshots = { @blueprint.route('/snapshots', methods=['GET']) def get_snapshots(): - return jsonify(current_app.backend.perform('schnapps', 'list')) + return jsonify(current_app.backend.perform('schnapps', 'list')['snapshots']) @blueprint.route('/snapshots', methods=['POST']) diff --git a/tests/test_api.py b/tests/test_api.py index 0cbf9af..78d836d 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -7,8 +7,8 @@ from http import HTTPStatus from reforis.test_utils import mock_backend_response -@mock_backend_response({'schnapps': {'list': {'key': 'value'}}}) +@mock_backend_response({'schnapps': {'list': {'snapshots': ['foo', 'bar']}}}) def test_get_snapshots(client): response = client.get('/snapshots/api/snapshots') assert response.status_code == HTTPStatus.OK - assert response.json['key'] == 'value' + assert response.json == ['foo', 'bar'] -- GitLab From 190be8a55ee6a56e93bf520258b58abdae1e7c47 Mon Sep 17 00:00:00 2001 From: Maciej Lenartowicz Date: Thu, 30 Jan 2020 12:31:57 +0100 Subject: [PATCH 06/15] Add snapshot with fixed description. --- js/src/snapshots/Snapshots.js | 43 ++++++++++++++++++--- js/src/snapshots/SnapshotsTable.js | 4 +- js/src/snapshots/__tests__/Schnapps.test.js | 4 +- js/src/snapshots/hooks.js | 30 +++++++++++++- 4 files changed, 71 insertions(+), 10 deletions(-) diff --git a/js/src/snapshots/Snapshots.js b/js/src/snapshots/Snapshots.js index b4dd36d..f6f0545 100644 --- a/js/src/snapshots/Snapshots.js +++ b/js/src/snapshots/Snapshots.js @@ -6,24 +6,39 @@ */ import React, { useState } from "react"; +import PropTypes from "prop-types"; -import { API_STATE, Spinner, ErrorMessage } from "foris"; +import { + API_STATE, Spinner, ErrorMessage, Button, +} from "foris"; -import { useGetSnapshots } from "./hooks"; +import { useGetSnapshots, useUpdateSnapshotsOnAdd, useCreateSnapshot } from "./hooks"; import SnapshotsTable from "./SnapshotsTable"; -export default function Snapshots() { +Snapshots.propTypes = { + ws: PropTypes.object.isRequired, +}; + +export default function Snapshots({ ws }) { const [snapshots, setSnapshots] = useState([]); - const [getState] = useGetSnapshots(setSnapshots); + const [getState, getSnapshots] = useGetSnapshots(setSnapshots); + useUpdateSnapshotsOnAdd(ws, getSnapshots); + + const [createState, createSnapshot] = useCreateSnapshot(); let componentContent; - if (getState === API_STATE.INIT || [getState].includes(API_STATE.SENDING)) { + if (getState === API_STATE.INIT || [getState, createState].includes(API_STATE.SENDING)) { componentContent = ; } else if (getState === API_STATE.ERROR) { componentContent = ; } else { - componentContent = ; + componentContent = ( + <> + + + + ); } return ( @@ -34,3 +49,19 @@ export default function Snapshots() { ); } + +CreateSnapshotButton.propTypes = { + onClick: PropTypes.func.isRequired, +}; + +function CreateSnapshotButton({ onClick }) { + return ( + + ); +} diff --git a/js/src/snapshots/SnapshotsTable.js b/js/src/snapshots/SnapshotsTable.js index 8ee9262..220b385 100644 --- a/js/src/snapshots/SnapshotsTable.js +++ b/js/src/snapshots/SnapshotsTable.js @@ -33,7 +33,9 @@ export default function SnapshotsTable({ snapshots }) { - {snapshots.map((snapshot) => )} + {snapshots.map( + (snapshot) => , + )} ); diff --git a/js/src/snapshots/__tests__/Schnapps.test.js b/js/src/snapshots/__tests__/Schnapps.test.js index 809283d..6cb1862 100644 --- a/js/src/snapshots/__tests__/Schnapps.test.js +++ b/js/src/snapshots/__tests__/Schnapps.test.js @@ -8,12 +8,14 @@ import React from "react"; import mockAxios from "jest-mock-axios"; import { render } from "foris/testUtils/customTestRender"; +import { WebSockets } from "foris"; import Snapshots from "../Snapshots"; describe("", () => { it("should render component", () => { - const { getByText } = render(); + const webSockets = new WebSockets(); + const { getByText } = render(); expect(getByText("Snapshots")).toBeDefined(); expect(mockAxios.get).toBeCalledWith("/reforis/snapshots/api/snapshots", expect.anything()); }); diff --git a/js/src/snapshots/hooks.js b/js/src/snapshots/hooks.js index e9f71f9..4824065 100644 --- a/js/src/snapshots/hooks.js +++ b/js/src/snapshots/hooks.js @@ -7,7 +7,9 @@ import { useEffect } from "react"; -import { useAPIGet, API_STATE } from "foris"; +import { + useAlert, useWSForisModule, useAPIGet, useAPIPost, API_STATE, +} from "foris"; import API_URLs from "API"; @@ -26,5 +28,29 @@ export function useGetSnapshots(setSnapshots) { } }, [getSnapshotsResponse, setSnapshots]); - return [getSnapshotsResponse.state]; + return [getSnapshotsResponse.state, getSnapshots]; +} + +export function useUpdateSnapshotsOnAdd(ws, getSnapshots) { + const [addNotification] = useWSForisModule(ws, "schnapps", "create"); + useEffect(() => { + if (!addNotification) { + return; + } + getSnapshots(); + }, [addNotification, getSnapshots]); +} + +export function useCreateSnapshot() { + const [setAlert] = useAlert(); + + // Handle API request + const [postSnapshotResponse, postSnapshot] = useAPIPost(`${API_URLs.snapshots}`); + useEffect(() => { + if (postSnapshotResponse.state === API_STATE.ERROR) { + setAlert(postSnapshotResponse.data); + } + }, [postSnapshotResponse, setAlert]); + + return [postSnapshotResponse.state, postSnapshot]; } -- GitLab From a71116803f52494133996f44e46432bd53b3357e Mon Sep 17 00:00:00 2001 From: Maciej Lenartowicz Date: Thu, 30 Jan 2020 16:40:09 +0100 Subject: [PATCH 07/15] Added form for creating snapshots. --- js/src/snapshots/CreateSnapshotForm.js | 60 ++++++++++++++++++++++++++ js/src/snapshots/Snapshots.js | 24 ++--------- 2 files changed, 64 insertions(+), 20 deletions(-) create mode 100644 js/src/snapshots/CreateSnapshotForm.js diff --git a/js/src/snapshots/CreateSnapshotForm.js b/js/src/snapshots/CreateSnapshotForm.js new file mode 100644 index 0000000..01c5c9b --- /dev/null +++ b/js/src/snapshots/CreateSnapshotForm.js @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2020 CZ.NIC z.s.p.o. (http://www.nic.cz/) + * + * This is free software, licensed under the GNU General Public License v3. + * See /LICENSE for more information. + */ + +import React, { useEffect } from "react"; +import PropTypes from "prop-types"; + +import { + SubmitButton, SUBMIT_BUTTON_STATES, TextInput, useForm, formFieldsSize, +} from "foris"; + +CreateSnapshotForm.propTypes = { + createSnapshot: PropTypes.func.isRequired, +}; + +export default function CreateSnapshotForm({ createSnapshot }) { + const [formState, formChangeHandler, reloadForm] = useForm(validator); + const formData = formState.data; + const formErrors = formState.errors || {}; + useEffect(() => { + reloadForm({ description: "" }); + }, [reloadForm]); + + function handleSubmit(event) { + event.preventDefault(); + createSnapshot({ data: { description: formState.data.description } }); + } + + if (!formData) { + return null; + } + + return ( +
+
+

{_("Create new snapshot")}

+ ({ description: { $set: value } }))} + /> +
+ +
+ +
+ ); +} + +function validator(formData) { + if (!formData.description) { + return { description: _("Description is required.") }; + } + return undefined; +} diff --git a/js/src/snapshots/Snapshots.js b/js/src/snapshots/Snapshots.js index f6f0545..e0fc37c 100644 --- a/js/src/snapshots/Snapshots.js +++ b/js/src/snapshots/Snapshots.js @@ -8,11 +8,10 @@ import React, { useState } from "react"; import PropTypes from "prop-types"; -import { - API_STATE, Spinner, ErrorMessage, Button, -} from "foris"; +import { API_STATE, Spinner, ErrorMessage } from "foris"; import { useGetSnapshots, useUpdateSnapshotsOnAdd, useCreateSnapshot } from "./hooks"; +import CreateSnapshotForm from "./CreateSnapshotForm"; import SnapshotsTable from "./SnapshotsTable"; Snapshots.propTypes = { @@ -35,7 +34,8 @@ export default function Snapshots({ ws }) { } else { componentContent = ( <> - + +

{_("Available Snapshots")}

); @@ -49,19 +49,3 @@ export default function Snapshots({ ws }) { ); } - -CreateSnapshotButton.propTypes = { - onClick: PropTypes.func.isRequired, -}; - -function CreateSnapshotButton({ onClick }) { - return ( - - ); -} -- GitLab From 2496eaec8f97cbc2ae354fb069775473153b5936 Mon Sep 17 00:00:00 2001 From: Maciej Lenartowicz Date: Thu, 30 Jan 2020 17:31:31 +0100 Subject: [PATCH 08/15] Delete snapshot. --- js/src/snapshots/Snapshots.js | 13 +++++++-- js/src/snapshots/SnapshotsTable.css | 9 ++++++ js/src/snapshots/SnapshotsTable.js | 27 +++++++++++++++--- js/src/snapshots/hooks.js | 43 +++++++++++++++++++++++++++-- reforis_snapshots/__init__.py | 2 +- 5 files changed, 84 insertions(+), 10 deletions(-) create mode 100644 js/src/snapshots/SnapshotsTable.css diff --git a/js/src/snapshots/Snapshots.js b/js/src/snapshots/Snapshots.js index e0fc37c..9d7a3af 100644 --- a/js/src/snapshots/Snapshots.js +++ b/js/src/snapshots/Snapshots.js @@ -10,7 +10,10 @@ import PropTypes from "prop-types"; import { API_STATE, Spinner, ErrorMessage } from "foris"; -import { useGetSnapshots, useUpdateSnapshotsOnAdd, useCreateSnapshot } from "./hooks"; +import { + useGetSnapshots, useUpdateSnapshotsOnAdd, useCreateSnapshot, useDeleteSnapshot, + useUpdateSnapshotsOnDelete, +} from "./hooks"; import CreateSnapshotForm from "./CreateSnapshotForm"; import SnapshotsTable from "./SnapshotsTable"; @@ -26,8 +29,12 @@ export default function Snapshots({ ws }) { const [createState, createSnapshot] = useCreateSnapshot(); + const [deleteState, deleteSnapshot] = useDeleteSnapshot(); + useUpdateSnapshotsOnDelete(ws, setSnapshots); + let componentContent; - if (getState === API_STATE.INIT || [getState, createState].includes(API_STATE.SENDING)) { + if (getState === API_STATE.INIT + || [getState, createState, deleteState].includes(API_STATE.SENDING)) { componentContent = ; } else if (getState === API_STATE.ERROR) { componentContent = ; @@ -36,7 +43,7 @@ export default function Snapshots({ ws }) { <>

{_("Available Snapshots")}

- + ); } diff --git a/js/src/snapshots/SnapshotsTable.css b/js/src/snapshots/SnapshotsTable.css new file mode 100644 index 0000000..8d3d349 --- /dev/null +++ b/js/src/snapshots/SnapshotsTable.css @@ -0,0 +1,9 @@ +.snapshots-table td { + vertical-align: middle; +} + +@media (max-width: 1400px) { + .snapshots-table-delete-icon { + display: none; + } +} diff --git a/js/src/snapshots/SnapshotsTable.js b/js/src/snapshots/SnapshotsTable.js index 220b385..945d51a 100644 --- a/js/src/snapshots/SnapshotsTable.js +++ b/js/src/snapshots/SnapshotsTable.js @@ -8,6 +8,10 @@ import React from "react"; import PropTypes from "prop-types"; +import { Button } from "foris"; + +import "./SnapshotsTable.css"; + const snapshotShape = PropTypes.shape({ number: PropTypes.number.isRequired, type: PropTypes.string.isRequired, @@ -18,11 +22,12 @@ const snapshotShape = PropTypes.shape({ SnapshotsTable.propTypes = { snapshots: PropTypes.arrayOf(snapshotShape).isRequired, + deleteSnapshot: PropTypes.func.isRequired, }; -export default function SnapshotsTable({ snapshots }) { +export default function SnapshotsTable({ snapshots, deleteSnapshot }) { return ( - +
@@ -30,11 +35,18 @@ export default function SnapshotsTable({ snapshots }) { + {snapshots.map( - (snapshot) => , + (snapshot) => ( + deleteSnapshot({ suffix: snapshot.number })} + /> + ), )}
{_("Number")}{_("Description")} {_("Created at")} {_("Size")}
@@ -43,9 +55,10 @@ export default function SnapshotsTable({ snapshots }) { SnapshotRow.propTypes = { snapshot: snapshotShape.isRequired, + deleteSnapshot: PropTypes.func.isRequired, }; -function SnapshotRow({ snapshot }) { +function SnapshotRow({ snapshot, deleteSnapshot }) { return ( {snapshot.number} @@ -53,6 +66,12 @@ function SnapshotRow({ snapshot }) { {snapshot.description} {snapshot.created} {snapshot.size} + + + ); } diff --git a/js/src/snapshots/hooks.js b/js/src/snapshots/hooks.js index 4824065..fb43d2b 100644 --- a/js/src/snapshots/hooks.js +++ b/js/src/snapshots/hooks.js @@ -5,10 +5,10 @@ * See /LICENSE for more information. */ -import { useEffect } from "react"; +import { useEffect, useCallback } from "react"; import { - useAlert, useWSForisModule, useAPIGet, useAPIPost, API_STATE, + useAlert, useWSForisModule, useAPIGet, useAPIPost, useAPIDelete, API_STATE, } from "foris"; import API_URLs from "API"; @@ -54,3 +54,42 @@ export function useCreateSnapshot() { return [postSnapshotResponse.state, postSnapshot]; } + +export function useDeleteSnapshot() { + const [setAlert] = useAlert(); + + // Handle API request + const [deleteSnapshotResponse, deleteSnapshot] = useAPIDelete(`${API_URLs.snapshots}`); + useEffect(() => { + if (deleteSnapshotResponse.state === API_STATE.ERROR) { + setAlert(deleteSnapshotResponse.data); + } + }, [deleteSnapshotResponse, setAlert]); + + return [deleteSnapshotResponse.state, deleteSnapshot]; +} + +export function useUpdateSnapshotsOnDelete(ws, setSnapshots) { + const [deleteNotification] = useWSForisModule(ws, "schnapps", "delete"); + + // Update devices data + const removeSnapshotFromTable = useCallback((number) => { + setSnapshots((previousDevices) => { + const snapshots = [...previousDevices]; + const deleteIndex = snapshots.findIndex( + (snapshot) => snapshot.number === number, + ); + if (deleteIndex !== -1) { + snapshots.splice(deleteIndex, 1); + } + return snapshots; + }); + }, [setSnapshots]); + + useEffect(() => { + if (!deleteNotification) { + return; + } + removeSnapshotFromTable(deleteNotification.number); + }, [removeSnapshotFromTable, deleteNotification]); +} diff --git a/reforis_snapshots/__init__.py b/reforis_snapshots/__init__.py index 401beef..5eca061 100644 --- a/reforis_snapshots/__init__.py +++ b/reforis_snapshots/__init__.py @@ -46,7 +46,7 @@ def create_snapshot(): return jsonify(response), HTTPStatus.ACCEPTED -@blueprint.route('/snapshots/', methods=['DELETE']) +@blueprint.route('/snapshots/', methods=['DELETE']) def delete_snapshot(snapshot_number): response = current_app.backend.perform('schnapps', 'delete', {'number': snapshot_number}) if response.get('result') is not True: -- GitLab From 151127252071ca4cb85017c3d828f1c6d5cb837b Mon Sep 17 00:00:00 2001 From: Maciej Lenartowicz Date: Thu, 30 Jan 2020 18:01:48 +0100 Subject: [PATCH 09/15] Rollback to selected snapshot. --- js/src/snapshots/Snapshots.js | 13 ++++++++++--- js/src/snapshots/SnapshotsTable.js | 14 ++++++++++++-- js/src/snapshots/hooks.js | 30 +++++++++++++++++++++++++++++- reforis_snapshots/__init__.py | 2 +- 4 files changed, 52 insertions(+), 7 deletions(-) diff --git a/js/src/snapshots/Snapshots.js b/js/src/snapshots/Snapshots.js index 9d7a3af..0277c00 100644 --- a/js/src/snapshots/Snapshots.js +++ b/js/src/snapshots/Snapshots.js @@ -12,7 +12,7 @@ import { API_STATE, Spinner, ErrorMessage } from "foris"; import { useGetSnapshots, useUpdateSnapshotsOnAdd, useCreateSnapshot, useDeleteSnapshot, - useUpdateSnapshotsOnDelete, + useUpdateSnapshotsOnDelete, useRollbackSnapshot, useUpdateSnapshotsOnRollback, } from "./hooks"; import CreateSnapshotForm from "./CreateSnapshotForm"; import SnapshotsTable from "./SnapshotsTable"; @@ -29,12 +29,15 @@ export default function Snapshots({ ws }) { const [createState, createSnapshot] = useCreateSnapshot(); + const [rollbackState, rollbackSnapshot] = useRollbackSnapshot(); + useUpdateSnapshotsOnRollback(ws, getSnapshots); + const [deleteState, deleteSnapshot] = useDeleteSnapshot(); useUpdateSnapshotsOnDelete(ws, setSnapshots); let componentContent; if (getState === API_STATE.INIT - || [getState, createState, deleteState].includes(API_STATE.SENDING)) { + || [getState, createState, rollbackState, deleteState].includes(API_STATE.SENDING)) { componentContent = ; } else if (getState === API_STATE.ERROR) { componentContent = ; @@ -43,7 +46,11 @@ export default function Snapshots({ ws }) { <>

{_("Available Snapshots")}

- + ); } diff --git a/js/src/snapshots/SnapshotsTable.js b/js/src/snapshots/SnapshotsTable.js index 945d51a..bd85c5c 100644 --- a/js/src/snapshots/SnapshotsTable.js +++ b/js/src/snapshots/SnapshotsTable.js @@ -22,10 +22,11 @@ const snapshotShape = PropTypes.shape({ SnapshotsTable.propTypes = { snapshots: PropTypes.arrayOf(snapshotShape).isRequired, + rollbackSnapshot: PropTypes.func.isRequired, deleteSnapshot: PropTypes.func.isRequired, }; -export default function SnapshotsTable({ snapshots, deleteSnapshot }) { +export default function SnapshotsTable({ snapshots, rollbackSnapshot, deleteSnapshot }) { return ( @@ -35,6 +36,7 @@ export default function SnapshotsTable({ snapshots, deleteSnapshot }) { + @@ -44,6 +46,7 @@ export default function SnapshotsTable({ snapshots, deleteSnapshot }) { rollbackSnapshot(snapshot.number)} deleteSnapshot={() => deleteSnapshot({ suffix: snapshot.number })} /> ), @@ -55,10 +58,11 @@ export default function SnapshotsTable({ snapshots, deleteSnapshot }) { SnapshotRow.propTypes = { snapshot: snapshotShape.isRequired, + rollbackSnapshot: PropTypes.func.isRequired, deleteSnapshot: PropTypes.func.isRequired, }; -function SnapshotRow({ snapshot, deleteSnapshot }) { +function SnapshotRow({ snapshot, rollbackSnapshot, deleteSnapshot }) { return ( @@ -66,6 +70,12 @@ function SnapshotRow({ snapshot, deleteSnapshot }) { + - - + + - - - + + -
{_("Description")} {_("Created at")} {_("Size")}
{snapshot.number}{snapshot.description} {snapshot.created} {snapshot.size} + + + + + +

+ Available Snapshots +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Number + + Type + + Description + + Created at + + Size + + +
+ 1 + + single + + Whatever + + 2020-01-30T10:27:34Z + + 808 kB + + + + +
+ 2 + + rollback + + Something + + 2020-01-31T10:27:34Z + + 909 kB + + + + +
+ +`; -- GitLab From 4e3387d4b4acc1ab27fdf3c6352b935941768c3c Mon Sep 17 00:00:00 2001 From: Maciej Lenartowicz Date: Fri, 31 Jan 2020 15:04:49 +0100 Subject: [PATCH 12/15] Added translations. --- .../translations/cs/LC_MESSAGES/messages.po | 84 ++++++++++++++++++ .../translations/da/LC_MESSAGES/messages.po | 84 ++++++++++++++++++ .../translations/de/LC_MESSAGES/messages.po | 84 ++++++++++++++++++ .../translations/el/LC_MESSAGES/messages.po | 84 ++++++++++++++++++ .../translations/en/LC_MESSAGES/messages.po | 84 ++++++++++++++++++ .../translations/fi/LC_MESSAGES/messages.po | 84 ++++++++++++++++++ .../translations/fo/LC_MESSAGES/messages.po | 84 ++++++++++++++++++ .../translations/fr/LC_MESSAGES/messages.po | 84 ++++++++++++++++++ .../translations/hr/LC_MESSAGES/messages.po | 85 +++++++++++++++++++ .../translations/hu/LC_MESSAGES/messages.po | 84 ++++++++++++++++++ .../translations/it/LC_MESSAGES/messages.po | 84 ++++++++++++++++++ .../translations/ja/LC_MESSAGES/messages.po | 84 ++++++++++++++++++ .../translations/ko/LC_MESSAGES/messages.po | 84 ++++++++++++++++++ .../translations/lt/LC_MESSAGES/messages.po | 85 +++++++++++++++++++ reforis_snapshots/translations/messages.pot | 83 ++++++++++++++++++ .../translations/nb/LC_MESSAGES/messages.po | 84 ++++++++++++++++++ .../nb_NO/LC_MESSAGES/messages.po | 84 ++++++++++++++++++ .../translations/nl/LC_MESSAGES/messages.po | 84 ++++++++++++++++++ .../translations/pl/LC_MESSAGES/messages.po | 85 +++++++++++++++++++ .../translations/ro/LC_MESSAGES/messages.po | 85 +++++++++++++++++++ .../translations/ru/LC_MESSAGES/messages.po | 85 +++++++++++++++++++ .../translations/sk/LC_MESSAGES/messages.po | 84 ++++++++++++++++++ .../translations/sv/LC_MESSAGES/messages.po | 84 ++++++++++++++++++ 23 files changed, 1936 insertions(+) create mode 100644 reforis_snapshots/translations/cs/LC_MESSAGES/messages.po create mode 100644 reforis_snapshots/translations/da/LC_MESSAGES/messages.po create mode 100644 reforis_snapshots/translations/de/LC_MESSAGES/messages.po create mode 100644 reforis_snapshots/translations/el/LC_MESSAGES/messages.po create mode 100644 reforis_snapshots/translations/en/LC_MESSAGES/messages.po create mode 100644 reforis_snapshots/translations/fi/LC_MESSAGES/messages.po create mode 100644 reforis_snapshots/translations/fo/LC_MESSAGES/messages.po create mode 100644 reforis_snapshots/translations/fr/LC_MESSAGES/messages.po create mode 100644 reforis_snapshots/translations/hr/LC_MESSAGES/messages.po create mode 100644 reforis_snapshots/translations/hu/LC_MESSAGES/messages.po create mode 100644 reforis_snapshots/translations/it/LC_MESSAGES/messages.po create mode 100644 reforis_snapshots/translations/ja/LC_MESSAGES/messages.po create mode 100644 reforis_snapshots/translations/ko/LC_MESSAGES/messages.po create mode 100644 reforis_snapshots/translations/lt/LC_MESSAGES/messages.po create mode 100644 reforis_snapshots/translations/messages.pot create mode 100644 reforis_snapshots/translations/nb/LC_MESSAGES/messages.po create mode 100644 reforis_snapshots/translations/nb_NO/LC_MESSAGES/messages.po create mode 100644 reforis_snapshots/translations/nl/LC_MESSAGES/messages.po create mode 100644 reforis_snapshots/translations/pl/LC_MESSAGES/messages.po create mode 100644 reforis_snapshots/translations/ro/LC_MESSAGES/messages.po create mode 100644 reforis_snapshots/translations/ru/LC_MESSAGES/messages.po create mode 100644 reforis_snapshots/translations/sk/LC_MESSAGES/messages.po create mode 100644 reforis_snapshots/translations/sv/LC_MESSAGES/messages.po diff --git a/reforis_snapshots/translations/cs/LC_MESSAGES/messages.po b/reforis_snapshots/translations/cs/LC_MESSAGES/messages.po new file mode 100644 index 0000000..2249a44 --- /dev/null +++ b/reforis_snapshots/translations/cs/LC_MESSAGES/messages.po @@ -0,0 +1,84 @@ +# Czech translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-01-31 14:58+0100\n" +"PO-Revision-Date: 2020-01-31 14:58+0100\n" +"Last-Translator: FULL NAME \n" +"Language: cs\n" +"Language-Team: cs \n" +"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: js/src/app.js:11 js/src/snapshots/Snapshots.js:60 +msgid "Snapshots" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:39 +msgid "Create new snapshot" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:41 +#: js/src/snapshots/SnapshotsTable.js:36 +msgid "Description" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:60 +msgid "Description is required." +msgstr "" + +#: js/src/snapshots/Snapshots.js:48 +msgid "Available Snapshots" +msgstr "" + +#: js/src/snapshots/Snapshots.js:61 +msgid "" +"This is an addition to Schnapps command-line utility which can provide " +"more advanced options." +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:34 +msgid "Number" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:35 +msgid "Type" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:37 +msgid "Created at" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:38 +msgid "Size" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:39 js/src/snapshots/SnapshotsTable.js:76 +msgid "Rollback" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:40 js/src/snapshots/SnapshotsTable.js:82 +msgid "Delete" +msgstr "" + +#: reforis_snapshots/__init__.py:44 +msgid "Cannot create snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:53 +msgid "Cannot delete snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:62 +msgid "Cannot rollback to snapshot." +msgstr "" + diff --git a/reforis_snapshots/translations/da/LC_MESSAGES/messages.po b/reforis_snapshots/translations/da/LC_MESSAGES/messages.po new file mode 100644 index 0000000..db7d47c --- /dev/null +++ b/reforis_snapshots/translations/da/LC_MESSAGES/messages.po @@ -0,0 +1,84 @@ +# Danish translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-01-31 14:58+0100\n" +"PO-Revision-Date: 2020-01-31 14:58+0100\n" +"Last-Translator: FULL NAME \n" +"Language: da\n" +"Language-Team: da \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: js/src/app.js:11 js/src/snapshots/Snapshots.js:60 +msgid "Snapshots" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:39 +msgid "Create new snapshot" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:41 +#: js/src/snapshots/SnapshotsTable.js:36 +msgid "Description" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:60 +msgid "Description is required." +msgstr "" + +#: js/src/snapshots/Snapshots.js:48 +msgid "Available Snapshots" +msgstr "" + +#: js/src/snapshots/Snapshots.js:61 +msgid "" +"This is an addition to Schnapps command-line utility which can provide " +"more advanced options." +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:34 +msgid "Number" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:35 +msgid "Type" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:37 +msgid "Created at" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:38 +msgid "Size" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:39 js/src/snapshots/SnapshotsTable.js:76 +msgid "Rollback" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:40 js/src/snapshots/SnapshotsTable.js:82 +msgid "Delete" +msgstr "" + +#: reforis_snapshots/__init__.py:44 +msgid "Cannot create snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:53 +msgid "Cannot delete snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:62 +msgid "Cannot rollback to snapshot." +msgstr "" + diff --git a/reforis_snapshots/translations/de/LC_MESSAGES/messages.po b/reforis_snapshots/translations/de/LC_MESSAGES/messages.po new file mode 100644 index 0000000..016222a --- /dev/null +++ b/reforis_snapshots/translations/de/LC_MESSAGES/messages.po @@ -0,0 +1,84 @@ +# German translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-01-31 14:58+0100\n" +"PO-Revision-Date: 2020-01-31 14:58+0100\n" +"Last-Translator: FULL NAME \n" +"Language: de\n" +"Language-Team: de \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: js/src/app.js:11 js/src/snapshots/Snapshots.js:60 +msgid "Snapshots" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:39 +msgid "Create new snapshot" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:41 +#: js/src/snapshots/SnapshotsTable.js:36 +msgid "Description" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:60 +msgid "Description is required." +msgstr "" + +#: js/src/snapshots/Snapshots.js:48 +msgid "Available Snapshots" +msgstr "" + +#: js/src/snapshots/Snapshots.js:61 +msgid "" +"This is an addition to Schnapps command-line utility which can provide " +"more advanced options." +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:34 +msgid "Number" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:35 +msgid "Type" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:37 +msgid "Created at" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:38 +msgid "Size" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:39 js/src/snapshots/SnapshotsTable.js:76 +msgid "Rollback" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:40 js/src/snapshots/SnapshotsTable.js:82 +msgid "Delete" +msgstr "" + +#: reforis_snapshots/__init__.py:44 +msgid "Cannot create snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:53 +msgid "Cannot delete snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:62 +msgid "Cannot rollback to snapshot." +msgstr "" + diff --git a/reforis_snapshots/translations/el/LC_MESSAGES/messages.po b/reforis_snapshots/translations/el/LC_MESSAGES/messages.po new file mode 100644 index 0000000..96726bc --- /dev/null +++ b/reforis_snapshots/translations/el/LC_MESSAGES/messages.po @@ -0,0 +1,84 @@ +# Greek translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-01-31 14:58+0100\n" +"PO-Revision-Date: 2020-01-31 14:58+0100\n" +"Last-Translator: FULL NAME \n" +"Language: el\n" +"Language-Team: el \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: js/src/app.js:11 js/src/snapshots/Snapshots.js:60 +msgid "Snapshots" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:39 +msgid "Create new snapshot" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:41 +#: js/src/snapshots/SnapshotsTable.js:36 +msgid "Description" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:60 +msgid "Description is required." +msgstr "" + +#: js/src/snapshots/Snapshots.js:48 +msgid "Available Snapshots" +msgstr "" + +#: js/src/snapshots/Snapshots.js:61 +msgid "" +"This is an addition to Schnapps command-line utility which can provide " +"more advanced options." +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:34 +msgid "Number" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:35 +msgid "Type" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:37 +msgid "Created at" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:38 +msgid "Size" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:39 js/src/snapshots/SnapshotsTable.js:76 +msgid "Rollback" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:40 js/src/snapshots/SnapshotsTable.js:82 +msgid "Delete" +msgstr "" + +#: reforis_snapshots/__init__.py:44 +msgid "Cannot create snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:53 +msgid "Cannot delete snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:62 +msgid "Cannot rollback to snapshot." +msgstr "" + diff --git a/reforis_snapshots/translations/en/LC_MESSAGES/messages.po b/reforis_snapshots/translations/en/LC_MESSAGES/messages.po new file mode 100644 index 0000000..a7228a0 --- /dev/null +++ b/reforis_snapshots/translations/en/LC_MESSAGES/messages.po @@ -0,0 +1,84 @@ +# English translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-01-31 14:58+0100\n" +"PO-Revision-Date: 2020-01-31 14:58+0100\n" +"Last-Translator: FULL NAME \n" +"Language: en\n" +"Language-Team: en \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: js/src/app.js:11 js/src/snapshots/Snapshots.js:60 +msgid "Snapshots" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:39 +msgid "Create new snapshot" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:41 +#: js/src/snapshots/SnapshotsTable.js:36 +msgid "Description" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:60 +msgid "Description is required." +msgstr "" + +#: js/src/snapshots/Snapshots.js:48 +msgid "Available Snapshots" +msgstr "" + +#: js/src/snapshots/Snapshots.js:61 +msgid "" +"This is an addition to Schnapps command-line utility which can provide " +"more advanced options." +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:34 +msgid "Number" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:35 +msgid "Type" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:37 +msgid "Created at" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:38 +msgid "Size" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:39 js/src/snapshots/SnapshotsTable.js:76 +msgid "Rollback" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:40 js/src/snapshots/SnapshotsTable.js:82 +msgid "Delete" +msgstr "" + +#: reforis_snapshots/__init__.py:44 +msgid "Cannot create snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:53 +msgid "Cannot delete snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:62 +msgid "Cannot rollback to snapshot." +msgstr "" + diff --git a/reforis_snapshots/translations/fi/LC_MESSAGES/messages.po b/reforis_snapshots/translations/fi/LC_MESSAGES/messages.po new file mode 100644 index 0000000..e31a643 --- /dev/null +++ b/reforis_snapshots/translations/fi/LC_MESSAGES/messages.po @@ -0,0 +1,84 @@ +# Finnish translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-01-31 14:58+0100\n" +"PO-Revision-Date: 2020-01-31 14:58+0100\n" +"Last-Translator: FULL NAME \n" +"Language: fi\n" +"Language-Team: fi \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: js/src/app.js:11 js/src/snapshots/Snapshots.js:60 +msgid "Snapshots" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:39 +msgid "Create new snapshot" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:41 +#: js/src/snapshots/SnapshotsTable.js:36 +msgid "Description" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:60 +msgid "Description is required." +msgstr "" + +#: js/src/snapshots/Snapshots.js:48 +msgid "Available Snapshots" +msgstr "" + +#: js/src/snapshots/Snapshots.js:61 +msgid "" +"This is an addition to Schnapps command-line utility which can provide " +"more advanced options." +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:34 +msgid "Number" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:35 +msgid "Type" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:37 +msgid "Created at" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:38 +msgid "Size" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:39 js/src/snapshots/SnapshotsTable.js:76 +msgid "Rollback" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:40 js/src/snapshots/SnapshotsTable.js:82 +msgid "Delete" +msgstr "" + +#: reforis_snapshots/__init__.py:44 +msgid "Cannot create snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:53 +msgid "Cannot delete snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:62 +msgid "Cannot rollback to snapshot." +msgstr "" + diff --git a/reforis_snapshots/translations/fo/LC_MESSAGES/messages.po b/reforis_snapshots/translations/fo/LC_MESSAGES/messages.po new file mode 100644 index 0000000..832383f --- /dev/null +++ b/reforis_snapshots/translations/fo/LC_MESSAGES/messages.po @@ -0,0 +1,84 @@ +# Faroese translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-01-31 14:58+0100\n" +"PO-Revision-Date: 2020-01-31 14:58+0100\n" +"Last-Translator: FULL NAME \n" +"Language: fo\n" +"Language-Team: fo \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: js/src/app.js:11 js/src/snapshots/Snapshots.js:60 +msgid "Snapshots" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:39 +msgid "Create new snapshot" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:41 +#: js/src/snapshots/SnapshotsTable.js:36 +msgid "Description" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:60 +msgid "Description is required." +msgstr "" + +#: js/src/snapshots/Snapshots.js:48 +msgid "Available Snapshots" +msgstr "" + +#: js/src/snapshots/Snapshots.js:61 +msgid "" +"This is an addition to Schnapps command-line utility which can provide " +"more advanced options." +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:34 +msgid "Number" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:35 +msgid "Type" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:37 +msgid "Created at" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:38 +msgid "Size" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:39 js/src/snapshots/SnapshotsTable.js:76 +msgid "Rollback" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:40 js/src/snapshots/SnapshotsTable.js:82 +msgid "Delete" +msgstr "" + +#: reforis_snapshots/__init__.py:44 +msgid "Cannot create snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:53 +msgid "Cannot delete snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:62 +msgid "Cannot rollback to snapshot." +msgstr "" + diff --git a/reforis_snapshots/translations/fr/LC_MESSAGES/messages.po b/reforis_snapshots/translations/fr/LC_MESSAGES/messages.po new file mode 100644 index 0000000..a62d2ac --- /dev/null +++ b/reforis_snapshots/translations/fr/LC_MESSAGES/messages.po @@ -0,0 +1,84 @@ +# French translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-01-31 14:58+0100\n" +"PO-Revision-Date: 2020-01-31 14:58+0100\n" +"Last-Translator: FULL NAME \n" +"Language: fr\n" +"Language-Team: fr \n" +"Plural-Forms: nplurals=2; plural=(n > 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: js/src/app.js:11 js/src/snapshots/Snapshots.js:60 +msgid "Snapshots" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:39 +msgid "Create new snapshot" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:41 +#: js/src/snapshots/SnapshotsTable.js:36 +msgid "Description" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:60 +msgid "Description is required." +msgstr "" + +#: js/src/snapshots/Snapshots.js:48 +msgid "Available Snapshots" +msgstr "" + +#: js/src/snapshots/Snapshots.js:61 +msgid "" +"This is an addition to Schnapps command-line utility which can provide " +"more advanced options." +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:34 +msgid "Number" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:35 +msgid "Type" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:37 +msgid "Created at" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:38 +msgid "Size" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:39 js/src/snapshots/SnapshotsTable.js:76 +msgid "Rollback" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:40 js/src/snapshots/SnapshotsTable.js:82 +msgid "Delete" +msgstr "" + +#: reforis_snapshots/__init__.py:44 +msgid "Cannot create snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:53 +msgid "Cannot delete snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:62 +msgid "Cannot rollback to snapshot." +msgstr "" + diff --git a/reforis_snapshots/translations/hr/LC_MESSAGES/messages.po b/reforis_snapshots/translations/hr/LC_MESSAGES/messages.po new file mode 100644 index 0000000..331b63c --- /dev/null +++ b/reforis_snapshots/translations/hr/LC_MESSAGES/messages.po @@ -0,0 +1,85 @@ +# Croatian translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-01-31 14:58+0100\n" +"PO-Revision-Date: 2020-01-31 14:58+0100\n" +"Last-Translator: FULL NAME \n" +"Language: hr\n" +"Language-Team: hr \n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: js/src/app.js:11 js/src/snapshots/Snapshots.js:60 +msgid "Snapshots" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:39 +msgid "Create new snapshot" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:41 +#: js/src/snapshots/SnapshotsTable.js:36 +msgid "Description" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:60 +msgid "Description is required." +msgstr "" + +#: js/src/snapshots/Snapshots.js:48 +msgid "Available Snapshots" +msgstr "" + +#: js/src/snapshots/Snapshots.js:61 +msgid "" +"This is an addition to Schnapps command-line utility which can provide " +"more advanced options." +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:34 +msgid "Number" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:35 +msgid "Type" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:37 +msgid "Created at" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:38 +msgid "Size" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:39 js/src/snapshots/SnapshotsTable.js:76 +msgid "Rollback" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:40 js/src/snapshots/SnapshotsTable.js:82 +msgid "Delete" +msgstr "" + +#: reforis_snapshots/__init__.py:44 +msgid "Cannot create snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:53 +msgid "Cannot delete snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:62 +msgid "Cannot rollback to snapshot." +msgstr "" + diff --git a/reforis_snapshots/translations/hu/LC_MESSAGES/messages.po b/reforis_snapshots/translations/hu/LC_MESSAGES/messages.po new file mode 100644 index 0000000..19a0e04 --- /dev/null +++ b/reforis_snapshots/translations/hu/LC_MESSAGES/messages.po @@ -0,0 +1,84 @@ +# Hungarian translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-01-31 14:58+0100\n" +"PO-Revision-Date: 2020-01-31 14:58+0100\n" +"Last-Translator: FULL NAME \n" +"Language: hu\n" +"Language-Team: hu \n" +"Plural-Forms: nplurals=1; plural=0\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: js/src/app.js:11 js/src/snapshots/Snapshots.js:60 +msgid "Snapshots" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:39 +msgid "Create new snapshot" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:41 +#: js/src/snapshots/SnapshotsTable.js:36 +msgid "Description" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:60 +msgid "Description is required." +msgstr "" + +#: js/src/snapshots/Snapshots.js:48 +msgid "Available Snapshots" +msgstr "" + +#: js/src/snapshots/Snapshots.js:61 +msgid "" +"This is an addition to Schnapps command-line utility which can provide " +"more advanced options." +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:34 +msgid "Number" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:35 +msgid "Type" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:37 +msgid "Created at" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:38 +msgid "Size" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:39 js/src/snapshots/SnapshotsTable.js:76 +msgid "Rollback" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:40 js/src/snapshots/SnapshotsTable.js:82 +msgid "Delete" +msgstr "" + +#: reforis_snapshots/__init__.py:44 +msgid "Cannot create snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:53 +msgid "Cannot delete snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:62 +msgid "Cannot rollback to snapshot." +msgstr "" + diff --git a/reforis_snapshots/translations/it/LC_MESSAGES/messages.po b/reforis_snapshots/translations/it/LC_MESSAGES/messages.po new file mode 100644 index 0000000..502ecc6 --- /dev/null +++ b/reforis_snapshots/translations/it/LC_MESSAGES/messages.po @@ -0,0 +1,84 @@ +# Italian translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-01-31 14:58+0100\n" +"PO-Revision-Date: 2020-01-31 14:58+0100\n" +"Last-Translator: FULL NAME \n" +"Language: it\n" +"Language-Team: it \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: js/src/app.js:11 js/src/snapshots/Snapshots.js:60 +msgid "Snapshots" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:39 +msgid "Create new snapshot" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:41 +#: js/src/snapshots/SnapshotsTable.js:36 +msgid "Description" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:60 +msgid "Description is required." +msgstr "" + +#: js/src/snapshots/Snapshots.js:48 +msgid "Available Snapshots" +msgstr "" + +#: js/src/snapshots/Snapshots.js:61 +msgid "" +"This is an addition to Schnapps command-line utility which can provide " +"more advanced options." +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:34 +msgid "Number" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:35 +msgid "Type" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:37 +msgid "Created at" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:38 +msgid "Size" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:39 js/src/snapshots/SnapshotsTable.js:76 +msgid "Rollback" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:40 js/src/snapshots/SnapshotsTable.js:82 +msgid "Delete" +msgstr "" + +#: reforis_snapshots/__init__.py:44 +msgid "Cannot create snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:53 +msgid "Cannot delete snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:62 +msgid "Cannot rollback to snapshot." +msgstr "" + diff --git a/reforis_snapshots/translations/ja/LC_MESSAGES/messages.po b/reforis_snapshots/translations/ja/LC_MESSAGES/messages.po new file mode 100644 index 0000000..3254ba5 --- /dev/null +++ b/reforis_snapshots/translations/ja/LC_MESSAGES/messages.po @@ -0,0 +1,84 @@ +# Japanese translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-01-31 14:58+0100\n" +"PO-Revision-Date: 2020-01-31 14:58+0100\n" +"Last-Translator: FULL NAME \n" +"Language: ja\n" +"Language-Team: ja \n" +"Plural-Forms: nplurals=1; plural=0\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: js/src/app.js:11 js/src/snapshots/Snapshots.js:60 +msgid "Snapshots" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:39 +msgid "Create new snapshot" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:41 +#: js/src/snapshots/SnapshotsTable.js:36 +msgid "Description" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:60 +msgid "Description is required." +msgstr "" + +#: js/src/snapshots/Snapshots.js:48 +msgid "Available Snapshots" +msgstr "" + +#: js/src/snapshots/Snapshots.js:61 +msgid "" +"This is an addition to Schnapps command-line utility which can provide " +"more advanced options." +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:34 +msgid "Number" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:35 +msgid "Type" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:37 +msgid "Created at" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:38 +msgid "Size" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:39 js/src/snapshots/SnapshotsTable.js:76 +msgid "Rollback" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:40 js/src/snapshots/SnapshotsTable.js:82 +msgid "Delete" +msgstr "" + +#: reforis_snapshots/__init__.py:44 +msgid "Cannot create snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:53 +msgid "Cannot delete snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:62 +msgid "Cannot rollback to snapshot." +msgstr "" + diff --git a/reforis_snapshots/translations/ko/LC_MESSAGES/messages.po b/reforis_snapshots/translations/ko/LC_MESSAGES/messages.po new file mode 100644 index 0000000..304ff57 --- /dev/null +++ b/reforis_snapshots/translations/ko/LC_MESSAGES/messages.po @@ -0,0 +1,84 @@ +# Korean translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-01-31 14:58+0100\n" +"PO-Revision-Date: 2020-01-31 14:58+0100\n" +"Last-Translator: FULL NAME \n" +"Language: ko\n" +"Language-Team: ko \n" +"Plural-Forms: nplurals=1; plural=0\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: js/src/app.js:11 js/src/snapshots/Snapshots.js:60 +msgid "Snapshots" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:39 +msgid "Create new snapshot" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:41 +#: js/src/snapshots/SnapshotsTable.js:36 +msgid "Description" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:60 +msgid "Description is required." +msgstr "" + +#: js/src/snapshots/Snapshots.js:48 +msgid "Available Snapshots" +msgstr "" + +#: js/src/snapshots/Snapshots.js:61 +msgid "" +"This is an addition to Schnapps command-line utility which can provide " +"more advanced options." +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:34 +msgid "Number" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:35 +msgid "Type" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:37 +msgid "Created at" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:38 +msgid "Size" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:39 js/src/snapshots/SnapshotsTable.js:76 +msgid "Rollback" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:40 js/src/snapshots/SnapshotsTable.js:82 +msgid "Delete" +msgstr "" + +#: reforis_snapshots/__init__.py:44 +msgid "Cannot create snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:53 +msgid "Cannot delete snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:62 +msgid "Cannot rollback to snapshot." +msgstr "" + diff --git a/reforis_snapshots/translations/lt/LC_MESSAGES/messages.po b/reforis_snapshots/translations/lt/LC_MESSAGES/messages.po new file mode 100644 index 0000000..a1bcba2 --- /dev/null +++ b/reforis_snapshots/translations/lt/LC_MESSAGES/messages.po @@ -0,0 +1,85 @@ +# Lithuanian translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-01-31 14:58+0100\n" +"PO-Revision-Date: 2020-01-31 14:58+0100\n" +"Last-Translator: FULL NAME \n" +"Language: lt\n" +"Language-Team: lt \n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"(n%100<10 || n%100>=20) ? 1 : 2)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: js/src/app.js:11 js/src/snapshots/Snapshots.js:60 +msgid "Snapshots" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:39 +msgid "Create new snapshot" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:41 +#: js/src/snapshots/SnapshotsTable.js:36 +msgid "Description" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:60 +msgid "Description is required." +msgstr "" + +#: js/src/snapshots/Snapshots.js:48 +msgid "Available Snapshots" +msgstr "" + +#: js/src/snapshots/Snapshots.js:61 +msgid "" +"This is an addition to Schnapps command-line utility which can provide " +"more advanced options." +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:34 +msgid "Number" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:35 +msgid "Type" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:37 +msgid "Created at" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:38 +msgid "Size" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:39 js/src/snapshots/SnapshotsTable.js:76 +msgid "Rollback" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:40 js/src/snapshots/SnapshotsTable.js:82 +msgid "Delete" +msgstr "" + +#: reforis_snapshots/__init__.py:44 +msgid "Cannot create snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:53 +msgid "Cannot delete snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:62 +msgid "Cannot rollback to snapshot." +msgstr "" + diff --git a/reforis_snapshots/translations/messages.pot b/reforis_snapshots/translations/messages.pot new file mode 100644 index 0000000..6d04008 --- /dev/null +++ b/reforis_snapshots/translations/messages.pot @@ -0,0 +1,83 @@ +# Translations template for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-01-31 14:58+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: js/src/app.js:11 js/src/snapshots/Snapshots.js:60 +msgid "Snapshots" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:39 +msgid "Create new snapshot" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:41 +#: js/src/snapshots/SnapshotsTable.js:36 +msgid "Description" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:60 +msgid "Description is required." +msgstr "" + +#: js/src/snapshots/Snapshots.js:48 +msgid "Available Snapshots" +msgstr "" + +#: js/src/snapshots/Snapshots.js:61 +msgid "" +"This is an addition to Schnapps command-line utility which can provide " +"more advanced options." +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:34 +msgid "Number" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:35 +msgid "Type" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:37 +msgid "Created at" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:38 +msgid "Size" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:39 js/src/snapshots/SnapshotsTable.js:76 +msgid "Rollback" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:40 js/src/snapshots/SnapshotsTable.js:82 +msgid "Delete" +msgstr "" + +#: reforis_snapshots/__init__.py:44 +msgid "Cannot create snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:53 +msgid "Cannot delete snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:62 +msgid "Cannot rollback to snapshot." +msgstr "" + diff --git a/reforis_snapshots/translations/nb/LC_MESSAGES/messages.po b/reforis_snapshots/translations/nb/LC_MESSAGES/messages.po new file mode 100644 index 0000000..1f082a9 --- /dev/null +++ b/reforis_snapshots/translations/nb/LC_MESSAGES/messages.po @@ -0,0 +1,84 @@ +# Norwegian Bokmål translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-01-31 14:58+0100\n" +"PO-Revision-Date: 2020-01-31 14:58+0100\n" +"Last-Translator: FULL NAME \n" +"Language: nb\n" +"Language-Team: nb \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: js/src/app.js:11 js/src/snapshots/Snapshots.js:60 +msgid "Snapshots" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:39 +msgid "Create new snapshot" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:41 +#: js/src/snapshots/SnapshotsTable.js:36 +msgid "Description" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:60 +msgid "Description is required." +msgstr "" + +#: js/src/snapshots/Snapshots.js:48 +msgid "Available Snapshots" +msgstr "" + +#: js/src/snapshots/Snapshots.js:61 +msgid "" +"This is an addition to Schnapps command-line utility which can provide " +"more advanced options." +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:34 +msgid "Number" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:35 +msgid "Type" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:37 +msgid "Created at" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:38 +msgid "Size" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:39 js/src/snapshots/SnapshotsTable.js:76 +msgid "Rollback" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:40 js/src/snapshots/SnapshotsTable.js:82 +msgid "Delete" +msgstr "" + +#: reforis_snapshots/__init__.py:44 +msgid "Cannot create snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:53 +msgid "Cannot delete snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:62 +msgid "Cannot rollback to snapshot." +msgstr "" + diff --git a/reforis_snapshots/translations/nb_NO/LC_MESSAGES/messages.po b/reforis_snapshots/translations/nb_NO/LC_MESSAGES/messages.po new file mode 100644 index 0000000..3f81eea --- /dev/null +++ b/reforis_snapshots/translations/nb_NO/LC_MESSAGES/messages.po @@ -0,0 +1,84 @@ +# Norwegian Bokmål (Norway) translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-01-31 14:58+0100\n" +"PO-Revision-Date: 2020-01-31 14:58+0100\n" +"Last-Translator: FULL NAME \n" +"Language: nb_NO\n" +"Language-Team: nb_NO \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: js/src/app.js:11 js/src/snapshots/Snapshots.js:60 +msgid "Snapshots" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:39 +msgid "Create new snapshot" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:41 +#: js/src/snapshots/SnapshotsTable.js:36 +msgid "Description" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:60 +msgid "Description is required." +msgstr "" + +#: js/src/snapshots/Snapshots.js:48 +msgid "Available Snapshots" +msgstr "" + +#: js/src/snapshots/Snapshots.js:61 +msgid "" +"This is an addition to Schnapps command-line utility which can provide " +"more advanced options." +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:34 +msgid "Number" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:35 +msgid "Type" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:37 +msgid "Created at" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:38 +msgid "Size" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:39 js/src/snapshots/SnapshotsTable.js:76 +msgid "Rollback" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:40 js/src/snapshots/SnapshotsTable.js:82 +msgid "Delete" +msgstr "" + +#: reforis_snapshots/__init__.py:44 +msgid "Cannot create snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:53 +msgid "Cannot delete snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:62 +msgid "Cannot rollback to snapshot." +msgstr "" + diff --git a/reforis_snapshots/translations/nl/LC_MESSAGES/messages.po b/reforis_snapshots/translations/nl/LC_MESSAGES/messages.po new file mode 100644 index 0000000..a52e1b9 --- /dev/null +++ b/reforis_snapshots/translations/nl/LC_MESSAGES/messages.po @@ -0,0 +1,84 @@ +# Dutch translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-01-31 14:58+0100\n" +"PO-Revision-Date: 2020-01-31 14:58+0100\n" +"Last-Translator: FULL NAME \n" +"Language: nl\n" +"Language-Team: nl \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: js/src/app.js:11 js/src/snapshots/Snapshots.js:60 +msgid "Snapshots" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:39 +msgid "Create new snapshot" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:41 +#: js/src/snapshots/SnapshotsTable.js:36 +msgid "Description" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:60 +msgid "Description is required." +msgstr "" + +#: js/src/snapshots/Snapshots.js:48 +msgid "Available Snapshots" +msgstr "" + +#: js/src/snapshots/Snapshots.js:61 +msgid "" +"This is an addition to Schnapps command-line utility which can provide " +"more advanced options." +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:34 +msgid "Number" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:35 +msgid "Type" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:37 +msgid "Created at" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:38 +msgid "Size" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:39 js/src/snapshots/SnapshotsTable.js:76 +msgid "Rollback" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:40 js/src/snapshots/SnapshotsTable.js:82 +msgid "Delete" +msgstr "" + +#: reforis_snapshots/__init__.py:44 +msgid "Cannot create snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:53 +msgid "Cannot delete snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:62 +msgid "Cannot rollback to snapshot." +msgstr "" + diff --git a/reforis_snapshots/translations/pl/LC_MESSAGES/messages.po b/reforis_snapshots/translations/pl/LC_MESSAGES/messages.po new file mode 100644 index 0000000..3f89200 --- /dev/null +++ b/reforis_snapshots/translations/pl/LC_MESSAGES/messages.po @@ -0,0 +1,85 @@ +# Polish translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-01-31 14:58+0100\n" +"PO-Revision-Date: 2020-01-31 14:58+0100\n" +"Last-Translator: FULL NAME \n" +"Language: pl\n" +"Language-Team: pl \n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && " +"(n%100<10 || n%100>=20) ? 1 : 2)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: js/src/app.js:11 js/src/snapshots/Snapshots.js:60 +msgid "Snapshots" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:39 +msgid "Create new snapshot" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:41 +#: js/src/snapshots/SnapshotsTable.js:36 +msgid "Description" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:60 +msgid "Description is required." +msgstr "" + +#: js/src/snapshots/Snapshots.js:48 +msgid "Available Snapshots" +msgstr "" + +#: js/src/snapshots/Snapshots.js:61 +msgid "" +"This is an addition to Schnapps command-line utility which can provide " +"more advanced options." +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:34 +msgid "Number" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:35 +msgid "Type" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:37 +msgid "Created at" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:38 +msgid "Size" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:39 js/src/snapshots/SnapshotsTable.js:76 +msgid "Rollback" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:40 js/src/snapshots/SnapshotsTable.js:82 +msgid "Delete" +msgstr "" + +#: reforis_snapshots/__init__.py:44 +msgid "Cannot create snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:53 +msgid "Cannot delete snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:62 +msgid "Cannot rollback to snapshot." +msgstr "" + diff --git a/reforis_snapshots/translations/ro/LC_MESSAGES/messages.po b/reforis_snapshots/translations/ro/LC_MESSAGES/messages.po new file mode 100644 index 0000000..b341645 --- /dev/null +++ b/reforis_snapshots/translations/ro/LC_MESSAGES/messages.po @@ -0,0 +1,85 @@ +# Romanian translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-01-31 14:58+0100\n" +"PO-Revision-Date: 2020-01-31 14:58+0100\n" +"Last-Translator: FULL NAME \n" +"Language: ro\n" +"Language-Team: ro \n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100" +" < 20)) ? 1 : 2)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: js/src/app.js:11 js/src/snapshots/Snapshots.js:60 +msgid "Snapshots" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:39 +msgid "Create new snapshot" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:41 +#: js/src/snapshots/SnapshotsTable.js:36 +msgid "Description" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:60 +msgid "Description is required." +msgstr "" + +#: js/src/snapshots/Snapshots.js:48 +msgid "Available Snapshots" +msgstr "" + +#: js/src/snapshots/Snapshots.js:61 +msgid "" +"This is an addition to Schnapps command-line utility which can provide " +"more advanced options." +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:34 +msgid "Number" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:35 +msgid "Type" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:37 +msgid "Created at" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:38 +msgid "Size" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:39 js/src/snapshots/SnapshotsTable.js:76 +msgid "Rollback" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:40 js/src/snapshots/SnapshotsTable.js:82 +msgid "Delete" +msgstr "" + +#: reforis_snapshots/__init__.py:44 +msgid "Cannot create snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:53 +msgid "Cannot delete snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:62 +msgid "Cannot rollback to snapshot." +msgstr "" + diff --git a/reforis_snapshots/translations/ru/LC_MESSAGES/messages.po b/reforis_snapshots/translations/ru/LC_MESSAGES/messages.po new file mode 100644 index 0000000..86899ec --- /dev/null +++ b/reforis_snapshots/translations/ru/LC_MESSAGES/messages.po @@ -0,0 +1,85 @@ +# Russian translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-01-31 14:58+0100\n" +"PO-Revision-Date: 2020-01-31 14:58+0100\n" +"Last-Translator: FULL NAME \n" +"Language: ru\n" +"Language-Team: ru \n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: js/src/app.js:11 js/src/snapshots/Snapshots.js:60 +msgid "Snapshots" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:39 +msgid "Create new snapshot" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:41 +#: js/src/snapshots/SnapshotsTable.js:36 +msgid "Description" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:60 +msgid "Description is required." +msgstr "" + +#: js/src/snapshots/Snapshots.js:48 +msgid "Available Snapshots" +msgstr "" + +#: js/src/snapshots/Snapshots.js:61 +msgid "" +"This is an addition to Schnapps command-line utility which can provide " +"more advanced options." +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:34 +msgid "Number" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:35 +msgid "Type" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:37 +msgid "Created at" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:38 +msgid "Size" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:39 js/src/snapshots/SnapshotsTable.js:76 +msgid "Rollback" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:40 js/src/snapshots/SnapshotsTable.js:82 +msgid "Delete" +msgstr "" + +#: reforis_snapshots/__init__.py:44 +msgid "Cannot create snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:53 +msgid "Cannot delete snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:62 +msgid "Cannot rollback to snapshot." +msgstr "" + diff --git a/reforis_snapshots/translations/sk/LC_MESSAGES/messages.po b/reforis_snapshots/translations/sk/LC_MESSAGES/messages.po new file mode 100644 index 0000000..5fb64ec --- /dev/null +++ b/reforis_snapshots/translations/sk/LC_MESSAGES/messages.po @@ -0,0 +1,84 @@ +# Slovak translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-01-31 14:58+0100\n" +"PO-Revision-Date: 2020-01-31 14:58+0100\n" +"Last-Translator: FULL NAME \n" +"Language: sk\n" +"Language-Team: sk \n" +"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: js/src/app.js:11 js/src/snapshots/Snapshots.js:60 +msgid "Snapshots" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:39 +msgid "Create new snapshot" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:41 +#: js/src/snapshots/SnapshotsTable.js:36 +msgid "Description" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:60 +msgid "Description is required." +msgstr "" + +#: js/src/snapshots/Snapshots.js:48 +msgid "Available Snapshots" +msgstr "" + +#: js/src/snapshots/Snapshots.js:61 +msgid "" +"This is an addition to Schnapps command-line utility which can provide " +"more advanced options." +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:34 +msgid "Number" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:35 +msgid "Type" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:37 +msgid "Created at" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:38 +msgid "Size" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:39 js/src/snapshots/SnapshotsTable.js:76 +msgid "Rollback" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:40 js/src/snapshots/SnapshotsTable.js:82 +msgid "Delete" +msgstr "" + +#: reforis_snapshots/__init__.py:44 +msgid "Cannot create snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:53 +msgid "Cannot delete snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:62 +msgid "Cannot rollback to snapshot." +msgstr "" + diff --git a/reforis_snapshots/translations/sv/LC_MESSAGES/messages.po b/reforis_snapshots/translations/sv/LC_MESSAGES/messages.po new file mode 100644 index 0000000..8471f40 --- /dev/null +++ b/reforis_snapshots/translations/sv/LC_MESSAGES/messages.po @@ -0,0 +1,84 @@ +# Swedish translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-01-31 14:58+0100\n" +"PO-Revision-Date: 2020-01-31 14:58+0100\n" +"Last-Translator: FULL NAME \n" +"Language: sv\n" +"Language-Team: sv \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: js/src/app.js:11 js/src/snapshots/Snapshots.js:60 +msgid "Snapshots" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:39 +msgid "Create new snapshot" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:41 +#: js/src/snapshots/SnapshotsTable.js:36 +msgid "Description" +msgstr "" + +#: js/src/snapshots/CreateSnapshotForm.js:60 +msgid "Description is required." +msgstr "" + +#: js/src/snapshots/Snapshots.js:48 +msgid "Available Snapshots" +msgstr "" + +#: js/src/snapshots/Snapshots.js:61 +msgid "" +"This is an addition to Schnapps command-line utility which can provide " +"more advanced options." +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:34 +msgid "Number" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:35 +msgid "Type" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:37 +msgid "Created at" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:38 +msgid "Size" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:39 js/src/snapshots/SnapshotsTable.js:76 +msgid "Rollback" +msgstr "" + +#: js/src/snapshots/SnapshotsTable.js:40 js/src/snapshots/SnapshotsTable.js:82 +msgid "Delete" +msgstr "" + +#: reforis_snapshots/__init__.py:44 +msgid "Cannot create snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:53 +msgid "Cannot delete snapshot." +msgstr "" + +#: reforis_snapshots/__init__.py:62 +msgid "Cannot rollback to snapshot." +msgstr "" + -- GitLab From 3743ed21073712830b0ac7cef8880b7e8923da19 Mon Sep 17 00:00:00 2001 From: Maciej Lenartowicz Date: Thu, 6 Feb 2020 16:39:00 +0100 Subject: [PATCH 13/15] Improved table rendering on mobile devices. --- js/src/snapshots/SnapshotsTable.css | 5 + js/src/snapshots/SnapshotsTable.js | 64 ++-- .../__snapshots__/Snapshots.test.js.snap | 288 ++++++++++-------- 3 files changed, 198 insertions(+), 159 deletions(-) diff --git a/js/src/snapshots/SnapshotsTable.css b/js/src/snapshots/SnapshotsTable.css index 8d3d349..1bf2559 100644 --- a/js/src/snapshots/SnapshotsTable.css +++ b/js/src/snapshots/SnapshotsTable.css @@ -7,3 +7,8 @@ display: none; } } + +.snaphots-table-created-at { + text-align: center; + min-width: 6rem; +} diff --git a/js/src/snapshots/SnapshotsTable.js b/js/src/snapshots/SnapshotsTable.js index bd85c5c..690960a 100644 --- a/js/src/snapshots/SnapshotsTable.js +++ b/js/src/snapshots/SnapshotsTable.js @@ -28,31 +28,33 @@ SnapshotsTable.propTypes = { export default function SnapshotsTable({ snapshots, rollbackSnapshot, deleteSnapshot }) { return ( - - - - - - - - - - - - {snapshots.map( - (snapshot) => ( - rollbackSnapshot(snapshot.number)} - deleteSnapshot={() => deleteSnapshot({ suffix: snapshot.number })} - /> - ), - )} - -
{_("Number")}{_("Type")}{_("Description")}{_("Created at")}{_("Size")} - -
+
+ + + + + + + + + + + + {snapshots.map( + (snapshot) => ( + rollbackSnapshot(snapshot.number)} + deleteSnapshot={() => deleteSnapshot({ suffix: snapshot.number })} + /> + ), + )} + +
{_("Number")}{_("Type")}{_("Description")}{_("Created at")}{_("Size")} + +
+
); } @@ -65,18 +67,18 @@ SnapshotRow.propTypes = { function SnapshotRow({ snapshot, rollbackSnapshot, deleteSnapshot }) { return (
{snapshot.number}{snapshot.type}{snapshot.number}{snapshot.type} {snapshot.description}{snapshot.created}{snapshot.size} + {snapshot.created}{snapshot.size} +