translations update

This commit is contained in:
carodej
2020-07-12 11:02:21 +02:00
parent 3c3a18cf6b
commit a74c1c7b6e
46 changed files with 13226 additions and 2018 deletions

View File

@@ -77,6 +77,9 @@ class SubscriptionController extends Controller
// Get user // Get user
$user = Auth::user(); $user = Auth::user();
// Forget user subscription
Cache::forget('subscription-user-' . $user->id);
// Get requested plan // Get requested plan
$plan = $this->stripe->getPlan($request->input('plan.data.id')); $plan = $this->stripe->getPlan($request->input('plan.data.id'));
@@ -104,8 +107,13 @@ class SubscriptionController extends Controller
*/ */
public function cancel() public function cancel()
{ {
$user = Auth::user();
// Cancel subscription // Cancel subscription
Auth::user()->subscription('main')->cancel(); $user->subscription('main')->cancel();
// Forget user subscription
Cache::forget('subscription-user-' . $user->id);
return response('Done!', 204); return response('Done!', 204);
} }
@@ -117,8 +125,13 @@ class SubscriptionController extends Controller
*/ */
public function resume() public function resume()
{ {
$user = Auth::user();
// Resume subscription // Resume subscription
Auth::user()->subscription('main')->resume(); $user->subscription('main')->resume();
// Forget user subscription
Cache::forget('subscription-user-' . $user->id);
return response('Done!', 204); return response('Done!', 204);
} }

325
composer.lock generated
View File

@@ -60,16 +60,16 @@
}, },
{ {
"name": "aws/aws-sdk-php", "name": "aws/aws-sdk-php",
"version": "3.143.0", "version": "3.145.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/aws/aws-sdk-php.git", "url": "https://github.com/aws/aws-sdk-php.git",
"reference": "ce52251b25c83e225fc04043e6ee376465b6ae8f" "reference": "3c5a921f0de917f9fc3d51b2970106d3abfc6b8f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/ce52251b25c83e225fc04043e6ee376465b6ae8f", "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/3c5a921f0de917f9fc3d51b2970106d3abfc6b8f",
"reference": "ce52251b25c83e225fc04043e6ee376465b6ae8f", "reference": "3c5a921f0de917f9fc3d51b2970106d3abfc6b8f",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -141,7 +141,7 @@
"s3", "s3",
"sdk" "sdk"
], ],
"time": "2020-06-24T19:09:03+00:00" "time": "2020-07-09T18:13:42+00:00"
}, },
{ {
"name": "brick/math", "name": "brick/math",
@@ -403,16 +403,16 @@
}, },
{ {
"name": "doctrine/cache", "name": "doctrine/cache",
"version": "1.10.1", "version": "1.10.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/cache.git", "url": "https://github.com/doctrine/cache.git",
"reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3" "reference": "13e3381b25847283a91948d04640543941309727"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/cache/zipball/35a4a70cd94e09e2259dfae7488afc6b474ecbd3", "url": "https://api.github.com/repos/doctrine/cache/zipball/13e3381b25847283a91948d04640543941309727",
"reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3", "reference": "13e3381b25847283a91948d04640543941309727",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -481,7 +481,7 @@
"redis", "redis",
"xcache" "xcache"
], ],
"time": "2020-05-27T16:24:54+00:00" "time": "2020-07-07T18:54:01+00:00"
}, },
{ {
"name": "doctrine/dbal", "name": "doctrine/dbal",
@@ -1455,16 +1455,16 @@
}, },
{ {
"name": "laminas/laminas-diactoros", "name": "laminas/laminas-diactoros",
"version": "2.3.0", "version": "2.3.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laminas/laminas-diactoros.git", "url": "https://github.com/laminas/laminas-diactoros.git",
"reference": "5ab185dba63ec655a2380c97711b09adc7061f89" "reference": "2ffc7cc816f6207b27923ee15edf6fac668390aa"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/5ab185dba63ec655a2380c97711b09adc7061f89", "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/2ffc7cc816f6207b27923ee15edf6fac668390aa",
"reference": "5ab185dba63ec655a2380c97711b09adc7061f89", "reference": "2ffc7cc816f6207b27923ee15edf6fac668390aa",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -1536,9 +1536,10 @@
"http", "http",
"laminas", "laminas",
"psr", "psr",
"psr-17",
"psr-7" "psr-7"
], ],
"time": "2020-04-27T17:07:01+00:00" "time": "2020-07-07T15:34:31+00:00"
}, },
{ {
"name": "laminas/laminas-zendframework-bridge", "name": "laminas/laminas-zendframework-bridge",
@@ -1594,16 +1595,16 @@
}, },
{ {
"name": "laravel/cashier", "name": "laravel/cashier",
"version": "v12.0.1", "version": "v12.1.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/cashier.git", "url": "https://github.com/laravel/cashier.git",
"reference": "e3479f548a7d167ff1c241e718041162e66306a5" "reference": "3faad324f8f37e27a05bf455c1f5b326738676e6"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/cashier/zipball/e3479f548a7d167ff1c241e718041162e66306a5", "url": "https://api.github.com/repos/laravel/cashier/zipball/3faad324f8f37e27a05bf455c1f5b326738676e6",
"reference": "e3479f548a7d167ff1c241e718041162e66306a5", "reference": "3faad324f8f37e27a05bf455c1f5b326738676e6",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -1620,7 +1621,7 @@
"moneyphp/money": "^3.2", "moneyphp/money": "^3.2",
"nesbot/carbon": "^2.0", "nesbot/carbon": "^2.0",
"php": "^7.2", "php": "^7.2",
"stripe/stripe-php": "^7.0", "stripe/stripe-php": "^7.29",
"symfony/http-kernel": "^4.3|^5.0", "symfony/http-kernel": "^4.3|^5.0",
"symfony/intl": "^4.3|^5.0" "symfony/intl": "^4.3|^5.0"
}, },
@@ -1664,20 +1665,20 @@
"laravel", "laravel",
"stripe" "stripe"
], ],
"time": "2020-06-16T18:54:05+00:00" "time": "2020-06-30T19:47:11+00:00"
}, },
{ {
"name": "laravel/framework", "name": "laravel/framework",
"version": "v7.17.2", "version": "v7.19.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/framework.git", "url": "https://github.com/laravel/framework.git",
"reference": "d16ff3a0a66d98e04163456b39c4b7302cf50a40" "reference": "4f373c373915ec828e3374029919a6fe946ed6d9"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/d16ff3a0a66d98e04163456b39c4b7302cf50a40", "url": "https://api.github.com/repos/laravel/framework/zipball/4f373c373915ec828e3374029919a6fe946ed6d9",
"reference": "d16ff3a0a66d98e04163456b39c4b7302cf50a40", "reference": "4f373c373915ec828e3374029919a6fe946ed6d9",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -1821,7 +1822,7 @@
"framework", "framework",
"laravel" "laravel"
], ],
"time": "2020-06-24T13:11:25+00:00" "time": "2020-07-10T16:41:39+00:00"
}, },
{ {
"name": "laravel/passport", "name": "laravel/passport",
@@ -1963,16 +1964,16 @@
}, },
{ {
"name": "laravel/tinker", "name": "laravel/tinker",
"version": "v2.4.0", "version": "v2.4.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/tinker.git", "url": "https://github.com/laravel/tinker.git",
"reference": "cde90a7335a2130a4488beb68f4b2141869241db" "reference": "3c9ef136ca59366bc1b50b7f2500a946d5149c62"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/tinker/zipball/cde90a7335a2130a4488beb68f4b2141869241db", "url": "https://api.github.com/repos/laravel/tinker/zipball/3c9ef136ca59366bc1b50b7f2500a946d5149c62",
"reference": "cde90a7335a2130a4488beb68f4b2141869241db", "reference": "3c9ef136ca59366bc1b50b7f2500a946d5149c62",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -2023,20 +2024,20 @@
"laravel", "laravel",
"psysh" "psysh"
], ],
"time": "2020-04-07T15:01:31+00:00" "time": "2020-07-07T15:10:00+00:00"
}, },
{ {
"name": "laravel/ui", "name": "laravel/ui",
"version": "v2.0.3", "version": "v2.1.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/ui.git", "url": "https://github.com/laravel/ui.git",
"reference": "15368c5328efb7ce94f35ca750acde9b496ab1b1" "reference": "da9350533d0da60d5dc42fb7de9c561c72129bba"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/ui/zipball/15368c5328efb7ce94f35ca750acde9b496ab1b1", "url": "https://api.github.com/repos/laravel/ui/zipball/da9350533d0da60d5dc42fb7de9c561c72129bba",
"reference": "15368c5328efb7ce94f35ca750acde9b496ab1b1", "reference": "da9350533d0da60d5dc42fb7de9c561c72129bba",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -2078,7 +2079,7 @@
"laravel", "laravel",
"ui" "ui"
], ],
"time": "2020-04-29T15:06:45+00:00" "time": "2020-06-30T20:56:33+00:00"
}, },
{ {
"name": "lcobucci/jwt", "name": "lcobucci/jwt",
@@ -2137,16 +2138,16 @@
}, },
{ {
"name": "league/commonmark", "name": "league/commonmark",
"version": "1.5.0", "version": "1.5.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/thephpleague/commonmark.git", "url": "https://github.com/thephpleague/commonmark.git",
"reference": "fc33ca12575e98e57cdce7d5f38b2ca5335714b3" "reference": "6d74caf6abeed5fd85d6ec20da23d7269cd0b46f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/thephpleague/commonmark/zipball/fc33ca12575e98e57cdce7d5f38b2ca5335714b3", "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/6d74caf6abeed5fd85d6ec20da23d7269cd0b46f",
"reference": "fc33ca12575e98e57cdce7d5f38b2ca5335714b3", "reference": "6d74caf6abeed5fd85d6ec20da23d7269cd0b46f",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -2202,7 +2203,7 @@
"md", "md",
"parser" "parser"
], ],
"time": "2020-06-21T20:50:13+00:00" "time": "2020-06-27T12:50:08+00:00"
}, },
{ {
"name": "league/event", "name": "league/event",
@@ -2434,16 +2435,16 @@
}, },
{ {
"name": "league/oauth2-server", "name": "league/oauth2-server",
"version": "8.1.0", "version": "8.1.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/thephpleague/oauth2-server.git", "url": "https://github.com/thephpleague/oauth2-server.git",
"reference": "b53d324f774eb782250f7d8973811a33a75ecdef" "reference": "09f22e8121fa1832962dba18213b80d4267ef8a3"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/thephpleague/oauth2-server/zipball/b53d324f774eb782250f7d8973811a33a75ecdef", "url": "https://api.github.com/repos/thephpleague/oauth2-server/zipball/09f22e8121fa1832962dba18213b80d4267ef8a3",
"reference": "b53d324f774eb782250f7d8973811a33a75ecdef", "reference": "09f22e8121fa1832962dba18213b80d4267ef8a3",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -2507,7 +2508,7 @@
"secure", "secure",
"server" "server"
], ],
"time": "2020-04-29T22:14:38+00:00" "time": "2020-07-01T11:33:50+00:00"
}, },
{ {
"name": "moneyphp/money", "name": "moneyphp/money",
@@ -2731,16 +2732,16 @@
}, },
{ {
"name": "nesbot/carbon", "name": "nesbot/carbon",
"version": "2.35.0", "version": "2.36.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/briannesbitt/Carbon.git", "url": "https://github.com/briannesbitt/Carbon.git",
"reference": "4b9bd835261ef23d36397a46a76b496a458305e5" "reference": "ee7378a36cc62952100e718bcc58be4c7210e55f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4b9bd835261ef23d36397a46a76b496a458305e5", "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/ee7378a36cc62952100e718bcc58be4c7210e55f",
"reference": "4b9bd835261ef23d36397a46a76b496a458305e5", "reference": "ee7378a36cc62952100e718bcc58be4c7210e55f",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -2752,9 +2753,10 @@
"require-dev": { "require-dev": {
"doctrine/orm": "^2.7", "doctrine/orm": "^2.7",
"friendsofphp/php-cs-fixer": "^2.14 || ^3.0", "friendsofphp/php-cs-fixer": "^2.14 || ^3.0",
"kylekatarnls/multi-tester": "^1.1", "kylekatarnls/multi-tester": "^2.0",
"phpmd/phpmd": "^2.8", "phpmd/phpmd": "^2.8",
"phpstan/phpstan": "^0.11", "phpstan/extension-installer": "^1.0",
"phpstan/phpstan": "^0.12.30",
"phpunit/phpunit": "^7.5 || ^8.0", "phpunit/phpunit": "^7.5 || ^8.0",
"squizlabs/php_codesniffer": "^3.4" "squizlabs/php_codesniffer": "^3.4"
}, },
@@ -2771,6 +2773,11 @@
"providers": [ "providers": [
"Carbon\\Laravel\\ServiceProvider" "Carbon\\Laravel\\ServiceProvider"
] ]
},
"phpstan": {
"includes": [
"extension.neon"
]
} }
}, },
"autoload": { "autoload": {
@@ -2800,20 +2807,20 @@
"datetime", "datetime",
"time" "time"
], ],
"time": "2020-05-24T18:27:52+00:00" "time": "2020-07-04T12:29:56+00:00"
}, },
{ {
"name": "nikic/php-parser", "name": "nikic/php-parser",
"version": "v4.5.0", "version": "v4.6.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/nikic/PHP-Parser.git", "url": "https://github.com/nikic/PHP-Parser.git",
"reference": "53c2753d756f5adb586dca79c2ec0e2654dd9463" "reference": "c346bbfafe2ff60680258b631afb730d186ed864"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/53c2753d756f5adb586dca79c2ec0e2654dd9463", "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c346bbfafe2ff60680258b631afb730d186ed864",
"reference": "53c2753d756f5adb586dca79c2ec0e2654dd9463", "reference": "c346bbfafe2ff60680258b631afb730d186ed864",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -2852,7 +2859,7 @@
"parser", "parser",
"php" "php"
], ],
"time": "2020-06-03T07:24:19+00:00" "time": "2020-07-02T17:12:47+00:00"
}, },
{ {
"name": "nyholm/psr7", "name": "nyholm/psr7",
@@ -3207,16 +3214,16 @@
}, },
{ {
"name": "phpseclib/phpseclib", "name": "phpseclib/phpseclib",
"version": "2.0.27", "version": "2.0.28",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpseclib/phpseclib.git", "url": "https://github.com/phpseclib/phpseclib.git",
"reference": "34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc" "reference": "d1ca58cf33cb21046d702ae3a7b14fdacd9f3260"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc", "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/d1ca58cf33cb21046d702ae3a7b14fdacd9f3260",
"reference": "34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc", "reference": "d1ca58cf33cb21046d702ae3a7b14fdacd9f3260",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -3295,7 +3302,7 @@
"x.509", "x.509",
"x509" "x509"
], ],
"time": "2020-04-04T23:17:33+00:00" "time": "2020-07-08T09:08:33+00:00"
}, },
{ {
"name": "psr/cache", "name": "psr/cache",
@@ -3936,16 +3943,16 @@
}, },
{ {
"name": "stripe/stripe-php", "name": "stripe/stripe-php",
"version": "v7.38.0", "version": "v7.40.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/stripe/stripe-php.git", "url": "https://github.com/stripe/stripe-php.git",
"reference": "65264cace7787083f6c3026d543fa002cc17e2af" "reference": "04aedea5ad95b9722aa394a41787751b2b478310"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/stripe/stripe-php/zipball/65264cace7787083f6c3026d543fa002cc17e2af", "url": "https://api.github.com/repos/stripe/stripe-php/zipball/04aedea5ad95b9722aa394a41787751b2b478310",
"reference": "65264cace7787083f6c3026d543fa002cc17e2af", "reference": "04aedea5ad95b9722aa394a41787751b2b478310",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -3989,7 +3996,7 @@
"payment processing", "payment processing",
"stripe" "stripe"
], ],
"time": "2020-06-25T04:38:46+00:00" "time": "2020-07-06T17:51:30+00:00"
}, },
{ {
"name": "swiftmailer/swiftmailer", "name": "swiftmailer/swiftmailer",
@@ -4187,16 +4194,16 @@
}, },
{ {
"name": "symfony/deprecation-contracts", "name": "symfony/deprecation-contracts",
"version": "v2.1.2", "version": "v2.1.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git", "url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "dd99cb3a0aff6cadd2a8d7d7ed72c2161e218337" "reference": "5e20b83385a77593259c9f8beb2c43cd03b2ac14"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/dd99cb3a0aff6cadd2a8d7d7ed72c2161e218337", "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5e20b83385a77593259c9f8beb2c43cd03b2ac14",
"reference": "dd99cb3a0aff6cadd2a8d7d7ed72c2161e218337", "reference": "5e20b83385a77593259c9f8beb2c43cd03b2ac14",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -4206,6 +4213,10 @@
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "2.1-dev" "dev-master": "2.1-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
} }
}, },
"autoload": { "autoload": {
@@ -4229,7 +4240,7 @@
], ],
"description": "A generic function and convention to trigger deprecation notices", "description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-05-27T08:34:37+00:00" "time": "2020-06-06T08:49:21+00:00"
}, },
{ {
"name": "symfony/error-handler", "name": "symfony/error-handler",
@@ -4362,16 +4373,16 @@
}, },
{ {
"name": "symfony/event-dispatcher-contracts", "name": "symfony/event-dispatcher-contracts",
"version": "v2.1.2", "version": "v2.1.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git", "url": "https://github.com/symfony/event-dispatcher-contracts.git",
"reference": "405952c4e90941a17e52ef7489a2bd94870bb290" "reference": "f6f613d74cfc5a623fc36294d3451eb7fa5a042b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/405952c4e90941a17e52ef7489a2bd94870bb290", "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f6f613d74cfc5a623fc36294d3451eb7fa5a042b",
"reference": "405952c4e90941a17e52ef7489a2bd94870bb290", "reference": "f6f613d74cfc5a623fc36294d3451eb7fa5a042b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -4385,6 +4396,10 @@
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "2.1-dev" "dev-master": "2.1-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
} }
}, },
"autoload": { "autoload": {
@@ -4416,7 +4431,7 @@
"interoperability", "interoperability",
"standards" "standards"
], ],
"time": "2020-05-20T17:43:50+00:00" "time": "2020-07-06T13:23:11+00:00"
}, },
{ {
"name": "symfony/finder", "name": "symfony/finder",
@@ -5590,16 +5605,16 @@
}, },
{ {
"name": "symfony/service-contracts", "name": "symfony/service-contracts",
"version": "v2.1.2", "version": "v2.1.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/service-contracts.git", "url": "https://github.com/symfony/service-contracts.git",
"reference": "66a8f0957a3ca54e4f724e49028ab19d75a8918b" "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/66a8f0957a3ca54e4f724e49028ab19d75a8918b", "url": "https://api.github.com/repos/symfony/service-contracts/zipball/58c7475e5457c5492c26cc740cc0ad7464be9442",
"reference": "66a8f0957a3ca54e4f724e49028ab19d75a8918b", "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -5613,6 +5628,10 @@
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "2.1-dev" "dev-master": "2.1-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
} }
}, },
"autoload": { "autoload": {
@@ -5644,7 +5663,7 @@
"interoperability", "interoperability",
"standards" "standards"
], ],
"time": "2020-05-20T17:43:50+00:00" "time": "2020-07-06T13:23:11+00:00"
}, },
{ {
"name": "symfony/string", "name": "symfony/string",
@@ -5797,16 +5816,16 @@
}, },
{ {
"name": "symfony/translation-contracts", "name": "symfony/translation-contracts",
"version": "v2.1.2", "version": "v2.1.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/translation-contracts.git", "url": "https://github.com/symfony/translation-contracts.git",
"reference": "e5ca07c8f817f865f618aa072c2fe8e0e637340e" "reference": "616a9773c853097607cf9dd6577d5b143ffdcd63"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e5ca07c8f817f865f618aa072c2fe8e0e637340e", "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/616a9773c853097607cf9dd6577d5b143ffdcd63",
"reference": "e5ca07c8f817f865f618aa072c2fe8e0e637340e", "reference": "616a9773c853097607cf9dd6577d5b143ffdcd63",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -5819,6 +5838,10 @@
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "2.1-dev" "dev-master": "2.1-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
} }
}, },
"autoload": { "autoload": {
@@ -5850,7 +5873,7 @@
"interoperability", "interoperability",
"standards" "standards"
], ],
"time": "2020-05-20T17:43:50+00:00" "time": "2020-07-06T13:23:11+00:00"
}, },
{ {
"name": "symfony/var-dumper", "name": "symfony/var-dumper",
@@ -6973,20 +6996,20 @@
}, },
{ {
"name": "hamcrest/hamcrest-php", "name": "hamcrest/hamcrest-php",
"version": "v2.0.0", "version": "v2.0.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/hamcrest/hamcrest-php.git", "url": "https://github.com/hamcrest/hamcrest-php.git",
"reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad" "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/776503d3a8e85d4f9a1148614f95b7a608b046ad", "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
"reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad", "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^5.3|^7.0" "php": "^5.3|^7.0|^8.0"
}, },
"replace": { "replace": {
"cordoval/hamcrest-php": "*", "cordoval/hamcrest-php": "*",
@@ -6994,14 +7017,13 @@
"kodova/hamcrest-php": "*" "kodova/hamcrest-php": "*"
}, },
"require-dev": { "require-dev": {
"phpunit/php-file-iterator": "1.3.3", "phpunit/php-file-iterator": "^1.4 || ^2.0",
"phpunit/phpunit": "~4.0", "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0"
"satooshi/php-coveralls": "^1.0"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "2.0-dev" "dev-master": "2.1-dev"
} }
}, },
"autoload": { "autoload": {
@@ -7011,13 +7033,13 @@
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
"license": [ "license": [
"BSD" "BSD-3-Clause"
], ],
"description": "This is the PHP port of Hamcrest Matchers", "description": "This is the PHP port of Hamcrest Matchers",
"keywords": [ "keywords": [
"test" "test"
], ],
"time": "2016-01-20T08:20:44+00:00" "time": "2020-07-09T08:09:16+00:00"
}, },
{ {
"name": "justinrainbow/json-schema", "name": "justinrainbow/json-schema",
@@ -7087,28 +7109,28 @@
}, },
{ {
"name": "mockery/mockery", "name": "mockery/mockery",
"version": "1.4.0", "version": "1.4.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/mockery/mockery.git", "url": "https://github.com/mockery/mockery.git",
"reference": "6c6a7c533469873deacf998237e7649fc6b36223" "reference": "1404386ca3410b04fe58b9517e85d702ab33b2c6"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/mockery/mockery/zipball/6c6a7c533469873deacf998237e7649fc6b36223", "url": "https://api.github.com/repos/mockery/mockery/zipball/1404386ca3410b04fe58b9517e85d702ab33b2c6",
"reference": "6c6a7c533469873deacf998237e7649fc6b36223", "reference": "1404386ca3410b04fe58b9517e85d702ab33b2c6",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"hamcrest/hamcrest-php": "~2.0", "hamcrest/hamcrest-php": "^2.0.1",
"lib-pcre": ">=7.0", "lib-pcre": ">=7.0",
"php": "^7.3.0" "php": "^7.3 || ^8.0"
}, },
"conflict": { "conflict": {
"phpunit/phpunit": "<8.0" "phpunit/phpunit": "<8.0"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^8.0.0 || ^9.0.0" "phpunit/phpunit": "^8.5 || ^9.0"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
@@ -7151,24 +7173,24 @@
"test double", "test double",
"testing" "testing"
], ],
"time": "2020-05-19T14:25:16+00:00" "time": "2020-07-09T08:31:54+00:00"
}, },
{ {
"name": "myclabs/deep-copy", "name": "myclabs/deep-copy",
"version": "1.9.5", "version": "1.10.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/myclabs/DeepCopy.git", "url": "https://github.com/myclabs/DeepCopy.git",
"reference": "b2c28789e80a97badd14145fda39b545d83ca3ef" "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef", "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
"reference": "b2c28789e80a97badd14145fda39b545d83ca3ef", "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1" "php": "^7.1 || ^8.0"
}, },
"replace": { "replace": {
"myclabs/deep-copy": "self.version" "myclabs/deep-copy": "self.version"
@@ -7199,7 +7221,7 @@
"object", "object",
"object graph" "object graph"
], ],
"time": "2020-01-17T21:11:47+00:00" "time": "2020-06-29T13:22:24+00:00"
}, },
{ {
"name": "nunomaduro/collision", "name": "nunomaduro/collision",
@@ -7375,25 +7397,25 @@
}, },
{ {
"name": "phpdocumentor/reflection-common", "name": "phpdocumentor/reflection-common",
"version": "2.1.0", "version": "2.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpDocumentor/ReflectionCommon.git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
"reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b" "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b", "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
"reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b", "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=7.1" "php": "^7.2 || ^8.0"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "2.x-dev" "dev-2.x": "2.x-dev"
} }
}, },
"autoload": { "autoload": {
@@ -7420,7 +7442,7 @@
"reflection", "reflection",
"static analysis" "static analysis"
], ],
"time": "2020-04-27T09:25:28+00:00" "time": "2020-06-27T09:03:43+00:00"
}, },
{ {
"name": "phpdocumentor/reflection-docblock", "name": "phpdocumentor/reflection-docblock",
@@ -7477,25 +7499,24 @@
}, },
{ {
"name": "phpdocumentor/type-resolver", "name": "phpdocumentor/type-resolver",
"version": "1.2.0", "version": "1.3.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git", "url": "https://github.com/phpDocumentor/TypeResolver.git",
"reference": "30441f2752e493c639526b215ed81d54f369d693" "reference": "e878a14a65245fbe78f8080eba03b47c3b705651"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/30441f2752e493c639526b215ed81d54f369d693", "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e878a14a65245fbe78f8080eba03b47c3b705651",
"reference": "30441f2752e493c639526b215ed81d54f369d693", "reference": "e878a14a65245fbe78f8080eba03b47c3b705651",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.2", "php": "^7.2 || ^8.0",
"phpdocumentor/reflection-common": "^2.0" "phpdocumentor/reflection-common": "^2.0"
}, },
"require-dev": { "require-dev": {
"ext-tokenizer": "^7.2", "ext-tokenizer": "*"
"mockery/mockery": "~1"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
@@ -7519,37 +7540,37 @@
} }
], ],
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
"time": "2020-06-19T20:22:09+00:00" "time": "2020-06-27T10:12:23+00:00"
}, },
{ {
"name": "phpspec/prophecy", "name": "phpspec/prophecy",
"version": "v1.10.3", "version": "1.11.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpspec/prophecy.git", "url": "https://github.com/phpspec/prophecy.git",
"reference": "451c3cd1418cf640de218914901e51b064abb093" "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b20034be5efcdab4fb60ca3a29cba2949aead160",
"reference": "451c3cd1418cf640de218914901e51b064abb093", "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"doctrine/instantiator": "^1.0.2", "doctrine/instantiator": "^1.2",
"php": "^5.3|^7.0", "php": "^7.2",
"phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", "phpdocumentor/reflection-docblock": "^5.0",
"sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", "sebastian/comparator": "^3.0 || ^4.0",
"sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" "sebastian/recursion-context": "^3.0 || ^4.0"
}, },
"require-dev": { "require-dev": {
"phpspec/phpspec": "^2.5 || ^3.2", "phpspec/phpspec": "^6.0",
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" "phpunit/phpunit": "^8.0"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.10.x-dev" "dev-master": "1.11.x-dev"
} }
}, },
"autoload": { "autoload": {
@@ -7582,7 +7603,7 @@
"spy", "spy",
"stub" "stub"
], ],
"time": "2020-03-05T15:02:03+00:00" "time": "2020-07-08T12:44:21+00:00"
}, },
{ {
"name": "phpunit/php-code-coverage", "name": "phpunit/php-code-coverage",
@@ -8654,16 +8675,16 @@
}, },
{ {
"name": "seld/phar-utils", "name": "seld/phar-utils",
"version": "1.1.0", "version": "1.1.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Seldaek/phar-utils.git", "url": "https://github.com/Seldaek/phar-utils.git",
"reference": "8800503d56b9867d43d9c303b9cbcc26016e82f0" "reference": "8674b1d84ffb47cc59a101f5d5a3b61e87d23796"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/8800503d56b9867d43d9c303b9cbcc26016e82f0", "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/8674b1d84ffb47cc59a101f5d5a3b61e87d23796",
"reference": "8800503d56b9867d43d9c303b9cbcc26016e82f0", "reference": "8674b1d84ffb47cc59a101f5d5a3b61e87d23796",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -8694,7 +8715,7 @@
"keywords": [ "keywords": [
"phar" "phar"
], ],
"time": "2020-02-14T15:25:33+00:00" "time": "2020-07-07T18:42:57+00:00"
}, },
{ {
"name": "symfony/filesystem", "name": "symfony/filesystem",
@@ -8788,20 +8809,20 @@
}, },
{ {
"name": "webmozart/assert", "name": "webmozart/assert",
"version": "1.9.0", "version": "1.9.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/webmozart/assert.git", "url": "https://github.com/webmozart/assert.git",
"reference": "9dc4f203e36f2b486149058bade43c851dd97451" "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/webmozart/assert/zipball/9dc4f203e36f2b486149058bade43c851dd97451", "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
"reference": "9dc4f203e36f2b486149058bade43c851dd97451", "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^5.3.3 || ^7.0", "php": "^5.3.3 || ^7.0 || ^8.0",
"symfony/polyfill-ctype": "^1.8" "symfony/polyfill-ctype": "^1.8"
}, },
"conflict": { "conflict": {
@@ -8833,7 +8854,7 @@
"check", "check",
"validate" "validate"
], ],
"time": "2020-06-16T10:16:42+00:00" "time": "2020-07-08T17:02:28+00:00"
} }
], ],
"aliases": [], "aliases": [],

View File

@@ -80,7 +80,7 @@ return [
| |
*/ */
'locale' => 'en', 'locale' => 'sk',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@@ -239,28 +239,55 @@ return [
'debug_blacklist' => [ 'debug_blacklist' => [
'_ENV' => [ '_ENV' => [
'APP_KEY', 'APP_KEY',
'DB_USERNAME',
'DB_PASSWORD', 'DB_PASSWORD',
'REDIS_PASSWORD', 'REDIS_PASSWORD',
'MAIL_PASSWORD', 'MAIL_PASSWORD',
'PUSHER_APP_KEY', 'PUSHER_APP_KEY',
'PUSHER_APP_SECRET', 'PUSHER_APP_SECRET',
'PASSPORT_CLIENT_ID', 'PASSPORT_CLIENT_ID',
'PASSPORT_CLIENT_SECRET', 'PASSPORT_CLIENT_SECRET',
'AWS_SECRET_ACCESS_KEY', 'AWS_SECRET_ACCESS_KEY',
'AWS_ACCESS_KEY_ID', 'AWS_ACCESS_KEY_ID',
'AWS_SECRET_ACCESS_KEY',
'DO_SPACES_KEY',
'DO_SPACES_SECRET',
'WASABI_KEY',
'WASABI_SECRET',
'BACKBLAZE_KEY',
'BACKBLAZE_SECRET',
], ],
'_SERVER' => [ '_SERVER' => [
'APP_KEY', 'APP_KEY',
'DB_USERNAME',
'DB_PASSWORD', 'DB_PASSWORD',
'REDIS_PASSWORD', 'REDIS_PASSWORD',
'MAIL_PASSWORD', 'MAIL_PASSWORD',
'PUSHER_APP_KEY', 'PUSHER_APP_KEY',
'PUSHER_APP_SECRET', 'PUSHER_APP_SECRET',
'PASSPORT_CLIENT_ID', 'PASSPORT_CLIENT_ID',
'PASSPORT_CLIENT_SECRET', 'PASSPORT_CLIENT_SECRET',
'AWS_ACCESS_KEY_ID',
'AWS_SECRET_ACCESS_KEY', 'AWS_SECRET_ACCESS_KEY',
'AWS_ACCESS_KEY_ID',
'DO_SPACES_KEY',
'DO_SPACES_SECRET',
'WASABI_KEY',
'WASABI_SECRET',
'BACKBLAZE_KEY',
'BACKBLAZE_SECRET',
], ],
'_POST' => [ '_POST' => [
'password', 'password',

View File

@@ -1,297 +1,115 @@
{ {
"/js/main.js": "/js/main.js", "/js/main.js": "/js/main.js",
"/css/app.css": "/css/app.css", "/css/app.css": "/css/app.css",
"/js/main.16976b0d5706c2a00092.hot-update.js": "/js/main.16976b0d5706c2a00092.hot-update.js", "/js/main.3525fa8ecdcc4619c499.hot-update.js": "/js/main.3525fa8ecdcc4619c499.hot-update.js",
"/js/main.a211c0d72c6ded875d15.hot-update.js": "/js/main.a211c0d72c6ded875d15.hot-update.js", "/js/main.a023b02bace4b2a4fc8a.hot-update.js": "/js/main.a023b02bace4b2a4fc8a.hot-update.js",
"/js/main.2f7ed2be33be8a628c94.hot-update.js": "/js/main.2f7ed2be33be8a628c94.hot-update.js", "/js/main.10f095559968534606b1.hot-update.js": "/js/main.10f095559968534606b1.hot-update.js",
"/js/main.41ebe4de6b7379b19aae.hot-update.js": "/js/main.41ebe4de6b7379b19aae.hot-update.js", "/js/main.fef7313a472bf0496440.hot-update.js": "/js/main.fef7313a472bf0496440.hot-update.js",
"/js/main.0f3a90b8f378f32dcefd.hot-update.js": "/js/main.0f3a90b8f378f32dcefd.hot-update.js", "/js/main.4449cd64f120d4102f7d.hot-update.js": "/js/main.4449cd64f120d4102f7d.hot-update.js",
"/js/main.8061b41cbff2c99e8892.hot-update.js": "/js/main.8061b41cbff2c99e8892.hot-update.js", "/js/main.f83e378de6f06a7f56a4.hot-update.js": "/js/main.f83e378de6f06a7f56a4.hot-update.js",
"/js/main.8bbdafddac84c5216bf2.hot-update.js": "/js/main.8bbdafddac84c5216bf2.hot-update.js", "/js/main.8995597ef4c17bc29600.hot-update.js": "/js/main.8995597ef4c17bc29600.hot-update.js",
"/js/main.874276679a5cc2310cb2.hot-update.js": "/js/main.874276679a5cc2310cb2.hot-update.js", "/js/main.aad2736ee53b292e518e.hot-update.js": "/js/main.aad2736ee53b292e518e.hot-update.js",
"/js/main.fb0e89a13e3bccb562c6.hot-update.js": "/js/main.fb0e89a13e3bccb562c6.hot-update.js", "/js/main.30ad4be540d1d27ff7a1.hot-update.js": "/js/main.30ad4be540d1d27ff7a1.hot-update.js",
"/js/main.0c3be53e15ad4f96bc41.hot-update.js": "/js/main.0c3be53e15ad4f96bc41.hot-update.js", "/js/main.5fa35f99ca5551c0e31a.hot-update.js": "/js/main.5fa35f99ca5551c0e31a.hot-update.js",
"/js/main.bf1c3c4043845e03345e.hot-update.js": "/js/main.bf1c3c4043845e03345e.hot-update.js", "/js/main.6320e6ed76381e1d5458.hot-update.js": "/js/main.6320e6ed76381e1d5458.hot-update.js",
"/js/main.12e4b2cf981dcc9e768a.hot-update.js": "/js/main.12e4b2cf981dcc9e768a.hot-update.js", "/js/main.7a6783b381e12ae73c03.hot-update.js": "/js/main.7a6783b381e12ae73c03.hot-update.js",
"/js/main.0abf1dd52a2776a478b4.hot-update.js": "/js/main.0abf1dd52a2776a478b4.hot-update.js", "/js/main.5af22b51d8cdf841796b.hot-update.js": "/js/main.5af22b51d8cdf841796b.hot-update.js",
"/js/main.a18a08d3a28152cc7cb2.hot-update.js": "/js/main.a18a08d3a28152cc7cb2.hot-update.js", "/js/main.df160e291453c41ecd5f.hot-update.js": "/js/main.df160e291453c41ecd5f.hot-update.js",
"/js/main.6d3700ac99287979de27.hot-update.js": "/js/main.6d3700ac99287979de27.hot-update.js", "/js/main.c16d31123ba7d7108155.hot-update.js": "/js/main.c16d31123ba7d7108155.hot-update.js",
"/js/main.b134bc2a66c059fdf792.hot-update.js": "/js/main.b134bc2a66c059fdf792.hot-update.js", "/js/main.f5a0ee886545063ab195.hot-update.js": "/js/main.f5a0ee886545063ab195.hot-update.js",
"/js/main.d75cde21608d40f79776.hot-update.js": "/js/main.d75cde21608d40f79776.hot-update.js", "/js/main.b00122ec0cf03aeecf1d.hot-update.js": "/js/main.b00122ec0cf03aeecf1d.hot-update.js",
"/js/main.77ff21263b76989532ed.hot-update.js": "/js/main.77ff21263b76989532ed.hot-update.js", "/js/main.6a7f6fd4cd348d9db704.hot-update.js": "/js/main.6a7f6fd4cd348d9db704.hot-update.js",
"/js/main.40151b0bcd05a234189b.hot-update.js": "/js/main.40151b0bcd05a234189b.hot-update.js", "/js/main.3e58a722d181e6d112dd.hot-update.js": "/js/main.3e58a722d181e6d112dd.hot-update.js",
"/js/main.79c0c46b3144482d3bb0.hot-update.js": "/js/main.79c0c46b3144482d3bb0.hot-update.js", "/js/main.e9cff7c5c5e6f6c2e0ef.hot-update.js": "/js/main.e9cff7c5c5e6f6c2e0ef.hot-update.js",
"/js/main.469486322ed7679225b6.hot-update.js": "/js/main.469486322ed7679225b6.hot-update.js", "/js/main.32c945709059ac338172.hot-update.js": "/js/main.32c945709059ac338172.hot-update.js",
"/js/main.518685d7fe77c54be3c6.hot-update.js": "/js/main.518685d7fe77c54be3c6.hot-update.js", "/js/main.b33392dae528781b46cb.hot-update.js": "/js/main.b33392dae528781b46cb.hot-update.js",
"/js/main.083746580fffb67d9ebe.hot-update.js": "/js/main.083746580fffb67d9ebe.hot-update.js", "/js/main.8283e01b581c364df275.hot-update.js": "/js/main.8283e01b581c364df275.hot-update.js",
"/js/main.a0341dd65fdef07c70b7.hot-update.js": "/js/main.a0341dd65fdef07c70b7.hot-update.js", "/js/main.d7085624260c95f4a7bb.hot-update.js": "/js/main.d7085624260c95f4a7bb.hot-update.js",
"/js/main.42c5f08f687d8e7f5911.hot-update.js": "/js/main.42c5f08f687d8e7f5911.hot-update.js", "/js/main.7d531c678f1eb2072c7a.hot-update.js": "/js/main.7d531c678f1eb2072c7a.hot-update.js",
"/js/main.7e3b0de5a8e587da220b.hot-update.js": "/js/main.7e3b0de5a8e587da220b.hot-update.js", "/js/main.cff2e29eb9dc8da55e08.hot-update.js": "/js/main.cff2e29eb9dc8da55e08.hot-update.js",
"/js/main.6b99f5562239841fa03c.hot-update.js": "/js/main.6b99f5562239841fa03c.hot-update.js", "/js/main.03e3003550132bd5e0fe.hot-update.js": "/js/main.03e3003550132bd5e0fe.hot-update.js",
"/js/main.3ffbbb278020dcc4a63d.hot-update.js": "/js/main.3ffbbb278020dcc4a63d.hot-update.js", "/js/main.2b19a87471c5bef94340.hot-update.js": "/js/main.2b19a87471c5bef94340.hot-update.js",
"/js/main.4a0368537496905355bd.hot-update.js": "/js/main.4a0368537496905355bd.hot-update.js", "/js/main.6a96e4ea51ac28f3ebac.hot-update.js": "/js/main.6a96e4ea51ac28f3ebac.hot-update.js",
"/js/main.5f9c7ff63834ee297ed7.hot-update.js": "/js/main.5f9c7ff63834ee297ed7.hot-update.js", "/js/main.93198022cc3d89187bc6.hot-update.js": "/js/main.93198022cc3d89187bc6.hot-update.js",
"/js/main.a02e07e032a4351c3dfe.hot-update.js": "/js/main.a02e07e032a4351c3dfe.hot-update.js", "/js/main.83a71ab76c9a875c636e.hot-update.js": "/js/main.83a71ab76c9a875c636e.hot-update.js",
"/js/main.489f7ed6cf9c4e6982be.hot-update.js": "/js/main.489f7ed6cf9c4e6982be.hot-update.js", "/js/main.7efb8a14accdc5fbc61d.hot-update.js": "/js/main.7efb8a14accdc5fbc61d.hot-update.js",
"/js/main.872bcf53000f970576df.hot-update.js": "/js/main.872bcf53000f970576df.hot-update.js", "/js/main.159357ada5cb55417e7c.hot-update.js": "/js/main.159357ada5cb55417e7c.hot-update.js",
"/js/main.2ef085884a7fa44278ce.hot-update.js": "/js/main.2ef085884a7fa44278ce.hot-update.js", "/js/main.91a833e79281617fbb82.hot-update.js": "/js/main.91a833e79281617fbb82.hot-update.js",
"/js/main.34d56f38fca2e433cacf.hot-update.js": "/js/main.34d56f38fca2e433cacf.hot-update.js", "/js/main.0b87dcae3eb86e267825.hot-update.js": "/js/main.0b87dcae3eb86e267825.hot-update.js",
"/js/main.466d710b501a93abd7f4.hot-update.js": "/js/main.466d710b501a93abd7f4.hot-update.js", "/js/main.7a7b09c202d1458d0deb.hot-update.js": "/js/main.7a7b09c202d1458d0deb.hot-update.js",
"/js/main.f7dae3809a9f3583ff34.hot-update.js": "/js/main.f7dae3809a9f3583ff34.hot-update.js", "/js/main.283f28e2888a1a101f0d.hot-update.js": "/js/main.283f28e2888a1a101f0d.hot-update.js",
"/js/main.0862ece8be796e0f6195.hot-update.js": "/js/main.0862ece8be796e0f6195.hot-update.js", "/js/main.6964f772a47463f49daa.hot-update.js": "/js/main.6964f772a47463f49daa.hot-update.js",
"/js/main.9f95c61a9ca0721e3738.hot-update.js": "/js/main.9f95c61a9ca0721e3738.hot-update.js", "/js/main.4a73c73c83e02e91b574.hot-update.js": "/js/main.4a73c73c83e02e91b574.hot-update.js",
"/js/main.fa1dc34dabcbab87344b.hot-update.js": "/js/main.fa1dc34dabcbab87344b.hot-update.js", "/js/main.b2350eb32acfd276a1ac.hot-update.js": "/js/main.b2350eb32acfd276a1ac.hot-update.js",
"/js/main.c2c02a0db55681a7e541.hot-update.js": "/js/main.c2c02a0db55681a7e541.hot-update.js", "/js/main.231f719bd8c639c2f4c5.hot-update.js": "/js/main.231f719bd8c639c2f4c5.hot-update.js",
"/js/main.8d5d79b5e894c5402f7d.hot-update.js": "/js/main.8d5d79b5e894c5402f7d.hot-update.js", "/js/main.e21f84fbb118e4676b68.hot-update.js": "/js/main.e21f84fbb118e4676b68.hot-update.js",
"/js/main.8f82060e41947c1e7cb3.hot-update.js": "/js/main.8f82060e41947c1e7cb3.hot-update.js", "/js/main.a6b4d6105ab684174e1a.hot-update.js": "/js/main.a6b4d6105ab684174e1a.hot-update.js",
"/js/main.4ca1a3f33fff650214d0.hot-update.js": "/js/main.4ca1a3f33fff650214d0.hot-update.js", "/js/main.b10ac2849385c9e5ea15.hot-update.js": "/js/main.b10ac2849385c9e5ea15.hot-update.js",
"/js/main.5bb6544e8c6b09359550.hot-update.js": "/js/main.5bb6544e8c6b09359550.hot-update.js", "/js/main.317ccb0e533bbda72734.hot-update.js": "/js/main.317ccb0e533bbda72734.hot-update.js",
"/js/main.6d1ef470bed9b4cb265c.hot-update.js": "/js/main.6d1ef470bed9b4cb265c.hot-update.js", "/js/main.6b13272deac3f9988a11.hot-update.js": "/js/main.6b13272deac3f9988a11.hot-update.js",
"/js/main.757827785a635bc21758.hot-update.js": "/js/main.757827785a635bc21758.hot-update.js", "/js/main.c2372924d699f6bcfc3a.hot-update.js": "/js/main.c2372924d699f6bcfc3a.hot-update.js",
"/js/main.6e7f1e2f8ca70c6ad7e2.hot-update.js": "/js/main.6e7f1e2f8ca70c6ad7e2.hot-update.js", "/js/main.a62a3b68177622e9f7fb.hot-update.js": "/js/main.a62a3b68177622e9f7fb.hot-update.js",
"/js/main.1c06b4e4f740aae1077b.hot-update.js": "/js/main.1c06b4e4f740aae1077b.hot-update.js", "/js/main.b8f7fdbe57ba8dcb2369.hot-update.js": "/js/main.b8f7fdbe57ba8dcb2369.hot-update.js",
"/js/main.df9fd59943447226f3c6.hot-update.js": "/js/main.df9fd59943447226f3c6.hot-update.js", "/js/main.e83947f3bc68af45bfba.hot-update.js": "/js/main.e83947f3bc68af45bfba.hot-update.js",
"/js/main.9c621ba4eed601c0f6f0.hot-update.js": "/js/main.9c621ba4eed601c0f6f0.hot-update.js", "/js/main.e7ba67817f80b9f1d0d3.hot-update.js": "/js/main.e7ba67817f80b9f1d0d3.hot-update.js",
"/js/main.709335aea3a22987ac1a.hot-update.js": "/js/main.709335aea3a22987ac1a.hot-update.js", "/js/main.b58f13eec45cd59894f5.hot-update.js": "/js/main.b58f13eec45cd59894f5.hot-update.js",
"/js/main.98ae78a0faa3eaede224.hot-update.js": "/js/main.98ae78a0faa3eaede224.hot-update.js", "/js/main.98627e1e2b15195f9d49.hot-update.js": "/js/main.98627e1e2b15195f9d49.hot-update.js",
"/js/main.974ca0ca6760f28c54c4.hot-update.js": "/js/main.974ca0ca6760f28c54c4.hot-update.js", "/js/main.0f6fe6aa10d74df489fd.hot-update.js": "/js/main.0f6fe6aa10d74df489fd.hot-update.js",
"/js/main.ec16e154c799de466efe.hot-update.js": "/js/main.ec16e154c799de466efe.hot-update.js", "/js/main.bad3bd8f4a8cd0a1b98c.hot-update.js": "/js/main.bad3bd8f4a8cd0a1b98c.hot-update.js",
"/js/main.3cb2aeec0e03ba8e9c47.hot-update.js": "/js/main.3cb2aeec0e03ba8e9c47.hot-update.js", "/js/main.ed8694a62b0165be57bc.hot-update.js": "/js/main.ed8694a62b0165be57bc.hot-update.js",
"/js/main.fe54d34c7b97f29d9594.hot-update.js": "/js/main.fe54d34c7b97f29d9594.hot-update.js", "/js/main.467c51825c9390c10135.hot-update.js": "/js/main.467c51825c9390c10135.hot-update.js",
"/js/main.a8eb63020d7c840892c7.hot-update.js": "/js/main.a8eb63020d7c840892c7.hot-update.js", "/js/main.cfd7180a6e7a577b838e.hot-update.js": "/js/main.cfd7180a6e7a577b838e.hot-update.js",
"/js/main.23704e19cb7454c18696.hot-update.js": "/js/main.23704e19cb7454c18696.hot-update.js", "/js/main.8aab3644a5656e99c88c.hot-update.js": "/js/main.8aab3644a5656e99c88c.hot-update.js",
"/js/main.f5d7cf948058831397f3.hot-update.js": "/js/main.f5d7cf948058831397f3.hot-update.js", "/js/main.ef2bb422e5f16c647199.hot-update.js": "/js/main.ef2bb422e5f16c647199.hot-update.js",
"/js/main.f3f9f32c61e45753a3fb.hot-update.js": "/js/main.f3f9f32c61e45753a3fb.hot-update.js", "/js/main.edba4af712aefc4703d8.hot-update.js": "/js/main.edba4af712aefc4703d8.hot-update.js",
"/js/main.2b20a5b95235d5895759.hot-update.js": "/js/main.2b20a5b95235d5895759.hot-update.js", "/js/main.c522aa1544700fddfd8f.hot-update.js": "/js/main.c522aa1544700fddfd8f.hot-update.js",
"/js/main.256e1f115ce42c71dedf.hot-update.js": "/js/main.256e1f115ce42c71dedf.hot-update.js", "/js/main.afa094e4e88f903ba36d.hot-update.js": "/js/main.afa094e4e88f903ba36d.hot-update.js",
"/js/main.f92a4dfa091e4476483e.hot-update.js": "/js/main.f92a4dfa091e4476483e.hot-update.js", "/js/main.69be22e5650945a31be5.hot-update.js": "/js/main.69be22e5650945a31be5.hot-update.js",
"/js/main.8e577ec9da5c134f5921.hot-update.js": "/js/main.8e577ec9da5c134f5921.hot-update.js", "/js/main.6eed2a123ce023932058.hot-update.js": "/js/main.6eed2a123ce023932058.hot-update.js",
"/js/main.3afcbe74ecf0967bae12.hot-update.js": "/js/main.3afcbe74ecf0967bae12.hot-update.js", "/js/main.030a0efbcbd7c219cfef.hot-update.js": "/js/main.030a0efbcbd7c219cfef.hot-update.js",
"/js/main.b4e361a0f5fadbed2b91.hot-update.js": "/js/main.b4e361a0f5fadbed2b91.hot-update.js", "/js/main.596e2916617bf0866cf9.hot-update.js": "/js/main.596e2916617bf0866cf9.hot-update.js",
"/js/main.ab71a9d67bf80623241c.hot-update.js": "/js/main.ab71a9d67bf80623241c.hot-update.js", "/js/main.7d29e89392b12cd1b7dd.hot-update.js": "/js/main.7d29e89392b12cd1b7dd.hot-update.js",
"/js/main.822404ed31e1c7a4da54.hot-update.js": "/js/main.822404ed31e1c7a4da54.hot-update.js", "/js/main.2a609f8a4ba4834d326a.hot-update.js": "/js/main.2a609f8a4ba4834d326a.hot-update.js",
"/js/main.263161964edff3d3e929.hot-update.js": "/js/main.263161964edff3d3e929.hot-update.js", "/js/main.9facde67ab78651307da.hot-update.js": "/js/main.9facde67ab78651307da.hot-update.js",
"/js/main.9768f88e7907d660548e.hot-update.js": "/js/main.9768f88e7907d660548e.hot-update.js", "/js/main.3ca78979855481285bd4.hot-update.js": "/js/main.3ca78979855481285bd4.hot-update.js",
"/js/main.3b39c7f507f5bf626c96.hot-update.js": "/js/main.3b39c7f507f5bf626c96.hot-update.js", "/js/main.666698596cc1cccb6fba.hot-update.js": "/js/main.666698596cc1cccb6fba.hot-update.js",
"/js/main.5696b1aeae48d4332cb7.hot-update.js": "/js/main.5696b1aeae48d4332cb7.hot-update.js", "/js/main.4a596ca8a8df4b9822a8.hot-update.js": "/js/main.4a596ca8a8df4b9822a8.hot-update.js",
"/js/main.8ead1856944b29ac775e.hot-update.js": "/js/main.8ead1856944b29ac775e.hot-update.js", "/js/main.20f7307ec14adff9f5fd.hot-update.js": "/js/main.20f7307ec14adff9f5fd.hot-update.js",
"/js/main.74bd951352632ad0f3b8.hot-update.js": "/js/main.74bd951352632ad0f3b8.hot-update.js", "/js/main.58182232baae6731db0d.hot-update.js": "/js/main.58182232baae6731db0d.hot-update.js",
"/js/main.24aa72d9f5df957773f4.hot-update.js": "/js/main.24aa72d9f5df957773f4.hot-update.js", "/js/main.444ecd60b900b01a5f22.hot-update.js": "/js/main.444ecd60b900b01a5f22.hot-update.js",
"/js/main.ee9cc233513282294067.hot-update.js": "/js/main.ee9cc233513282294067.hot-update.js", "/js/main.662dcec9e999610f674f.hot-update.js": "/js/main.662dcec9e999610f674f.hot-update.js",
"/js/main.2fb019a238db5fe0b57a.hot-update.js": "/js/main.2fb019a238db5fe0b57a.hot-update.js", "/js/main.c98760eac35907f8310b.hot-update.js": "/js/main.c98760eac35907f8310b.hot-update.js",
"/js/main.b0747b0026aa12d82148.hot-update.js": "/js/main.b0747b0026aa12d82148.hot-update.js", "/js/main.c1878444b327def22e4d.hot-update.js": "/js/main.c1878444b327def22e4d.hot-update.js",
"/js/main.3eb95def6e309e869065.hot-update.js": "/js/main.3eb95def6e309e869065.hot-update.js", "/js/main.e02a4aa1ab5aad07141e.hot-update.js": "/js/main.e02a4aa1ab5aad07141e.hot-update.js",
"/js/main.68bc8f304c03b87bde6c.hot-update.js": "/js/main.68bc8f304c03b87bde6c.hot-update.js", "/js/main.c6909407bead3dd94d28.hot-update.js": "/js/main.c6909407bead3dd94d28.hot-update.js",
"/js/main.eea0a3863d4444122387.hot-update.js": "/js/main.eea0a3863d4444122387.hot-update.js", "/js/main.a612c6b1865939a43119.hot-update.js": "/js/main.a612c6b1865939a43119.hot-update.js",
"/js/main.8e63403d4cb05270cda8.hot-update.js": "/js/main.8e63403d4cb05270cda8.hot-update.js", "/js/main.1f56bc914fd5f11b9d51.hot-update.js": "/js/main.1f56bc914fd5f11b9d51.hot-update.js",
"/js/main.7eaa97adb1c24aa10ee7.hot-update.js": "/js/main.7eaa97adb1c24aa10ee7.hot-update.js", "/js/main.bcfed775e88011a9228a.hot-update.js": "/js/main.bcfed775e88011a9228a.hot-update.js",
"/js/main.677a29997da90d239321.hot-update.js": "/js/main.677a29997da90d239321.hot-update.js", "/js/main.1125dfcbaea1a10bc199.hot-update.js": "/js/main.1125dfcbaea1a10bc199.hot-update.js",
"/js/main.f31a178ed458429a6029.hot-update.js": "/js/main.f31a178ed458429a6029.hot-update.js", "/js/main.bd585548ba12071cbc92.hot-update.js": "/js/main.bd585548ba12071cbc92.hot-update.js",
"/js/main.08051bae45414ea3e737.hot-update.js": "/js/main.08051bae45414ea3e737.hot-update.js", "/js/main.bd53d6b265fb9f8fef12.hot-update.js": "/js/main.bd53d6b265fb9f8fef12.hot-update.js",
"/js/main.db9c4a61a85ec1c723ff.hot-update.js": "/js/main.db9c4a61a85ec1c723ff.hot-update.js", "/js/main.8b84499568cb04ec7397.hot-update.js": "/js/main.8b84499568cb04ec7397.hot-update.js",
"/js/main.e80c3665c97cbe2f9c99.hot-update.js": "/js/main.e80c3665c97cbe2f9c99.hot-update.js", "/js/main.c24fa7243d2e43ff603a.hot-update.js": "/js/main.c24fa7243d2e43ff603a.hot-update.js",
"/js/main.a8c70e3e9d306a653fdd.hot-update.js": "/js/main.a8c70e3e9d306a653fdd.hot-update.js", "/js/main.77b9cc7a1d9befea8662.hot-update.js": "/js/main.77b9cc7a1d9befea8662.hot-update.js",
"/js/main.01ea8fc57e9ee32f3511.hot-update.js": "/js/main.01ea8fc57e9ee32f3511.hot-update.js", "/js/main.d44b20fbd31efb19be07.hot-update.js": "/js/main.d44b20fbd31efb19be07.hot-update.js",
"/js/main.a96a397b546de0bdaefe.hot-update.js": "/js/main.a96a397b546de0bdaefe.hot-update.js", "/js/main.ebc2142a7139eb1643b9.hot-update.js": "/js/main.ebc2142a7139eb1643b9.hot-update.js",
"/js/main.cd37c076ef4b6ffa1066.hot-update.js": "/js/main.cd37c076ef4b6ffa1066.hot-update.js", "/js/main.d9c34f451a600a70ab75.hot-update.js": "/js/main.d9c34f451a600a70ab75.hot-update.js",
"/js/main.c3934e1fb8ae435bccdf.hot-update.js": "/js/main.c3934e1fb8ae435bccdf.hot-update.js", "/js/main.4d9123f29bb4c3f67f35.hot-update.js": "/js/main.4d9123f29bb4c3f67f35.hot-update.js",
"/js/main.0c60592eb4d7e3df5065.hot-update.js": "/js/main.0c60592eb4d7e3df5065.hot-update.js", "/js/main.91974174026f6fdb169d.hot-update.js": "/js/main.91974174026f6fdb169d.hot-update.js",
"/js/main.8411b90746a4fe9cffc3.hot-update.js": "/js/main.8411b90746a4fe9cffc3.hot-update.js", "/js/main.e8f5e28b26a68904fedb.hot-update.js": "/js/main.e8f5e28b26a68904fedb.hot-update.js",
"/js/main.0976a48abb2d771f18ef.hot-update.js": "/js/main.0976a48abb2d771f18ef.hot-update.js", "/js/main.3ce0940187780a62c501.hot-update.js": "/js/main.3ce0940187780a62c501.hot-update.js",
"/js/main.73c95c3b8a566985ba89.hot-update.js": "/js/main.73c95c3b8a566985ba89.hot-update.js", "/js/main.1d7b51b32d9c2e8c3257.hot-update.js": "/js/main.1d7b51b32d9c2e8c3257.hot-update.js",
"/js/main.30a4931b93d799ac9cde.hot-update.js": "/js/main.30a4931b93d799ac9cde.hot-update.js", "/js/main.9c4b2984408925b5cd55.hot-update.js": "/js/main.9c4b2984408925b5cd55.hot-update.js",
"/js/main.752f09bcab9312df80f7.hot-update.js": "/js/main.752f09bcab9312df80f7.hot-update.js", "/js/main.e907323d5c8f7433a2b6.hot-update.js": "/js/main.e907323d5c8f7433a2b6.hot-update.js",
"/js/main.9673279bcb4703b7047d.hot-update.js": "/js/main.9673279bcb4703b7047d.hot-update.js", "/js/main.3001d2290f27a879609f.hot-update.js": "/js/main.3001d2290f27a879609f.hot-update.js",
"/js/main.48ad6363e8988b13af7e.hot-update.js": "/js/main.48ad6363e8988b13af7e.hot-update.js", "/js/main.dc0b517fb93ac24cfd97.hot-update.js": "/js/main.dc0b517fb93ac24cfd97.hot-update.js",
"/js/main.a1cd261ccf13dfef9842.hot-update.js": "/js/main.a1cd261ccf13dfef9842.hot-update.js", "/js/main.0c727077d58adf01e7ba.hot-update.js": "/js/main.0c727077d58adf01e7ba.hot-update.js",
"/js/main.90a02c322e17b55f2aa0.hot-update.js": "/js/main.90a02c322e17b55f2aa0.hot-update.js", "/js/main.a9fb0b15861543419c29.hot-update.js": "/js/main.a9fb0b15861543419c29.hot-update.js",
"/js/main.d0998bfa55ba80b05ce2.hot-update.js": "/js/main.d0998bfa55ba80b05ce2.hot-update.js", "/js/main.cdcc4a4f61a3919fdfad.hot-update.js": "/js/main.cdcc4a4f61a3919fdfad.hot-update.js",
"/js/main.fc2c589ac28b34cd86c1.hot-update.js": "/js/main.fc2c589ac28b34cd86c1.hot-update.js", "/js/main.04729729e454907b876b.hot-update.js": "/js/main.04729729e454907b876b.hot-update.js",
"/js/main.5f73c9e4aaba706cc8bf.hot-update.js": "/js/main.5f73c9e4aaba706cc8bf.hot-update.js", "/js/main.1f5c768890ffc8fac5ac.hot-update.js": "/js/main.1f5c768890ffc8fac5ac.hot-update.js",
"/js/main.6266a430210a222231af.hot-update.js": "/js/main.6266a430210a222231af.hot-update.js", "/js/main.be531e9750e90ae0dcf2.hot-update.js": "/js/main.be531e9750e90ae0dcf2.hot-update.js",
"/js/main.16fe81256d3096ee719a.hot-update.js": "/js/main.16fe81256d3096ee719a.hot-update.js", "/js/main.efbab434181b2cd4b9d1.hot-update.js": "/js/main.efbab434181b2cd4b9d1.hot-update.js",
"/js/main.c0405a10917592b127c1.hot-update.js": "/js/main.c0405a10917592b127c1.hot-update.js", "/js/main.6fcb72ff8beccffd8b43.hot-update.js": "/js/main.6fcb72ff8beccffd8b43.hot-update.js",
"/js/main.1b4aa9a9619777869eec.hot-update.js": "/js/main.1b4aa9a9619777869eec.hot-update.js", "/js/main.6e970c831f11b919b087.hot-update.js": "/js/main.6e970c831f11b919b087.hot-update.js"
"/js/main.588d9ece8b504c93737f.hot-update.js": "/js/main.588d9ece8b504c93737f.hot-update.js",
"/js/main.b2f8de27a3bd67ac35a4.hot-update.js": "/js/main.b2f8de27a3bd67ac35a4.hot-update.js",
"/js/main.70a024f32874574bb991.hot-update.js": "/js/main.70a024f32874574bb991.hot-update.js",
"/js/main.fb7331769c4c6f65f074.hot-update.js": "/js/main.fb7331769c4c6f65f074.hot-update.js",
"/js/main.1694a9416fde14785a9c.hot-update.js": "/js/main.1694a9416fde14785a9c.hot-update.js",
"/js/main.7173937d4f7649a45a43.hot-update.js": "/js/main.7173937d4f7649a45a43.hot-update.js",
"/js/main.dd40aef833b706962974.hot-update.js": "/js/main.dd40aef833b706962974.hot-update.js",
"/js/main.b2a3fc96d076b23c0665.hot-update.js": "/js/main.b2a3fc96d076b23c0665.hot-update.js",
"/js/main.bb840bc1aa63dd116b8a.hot-update.js": "/js/main.bb840bc1aa63dd116b8a.hot-update.js",
"/js/main.d7b93a6fdc4801343643.hot-update.js": "/js/main.d7b93a6fdc4801343643.hot-update.js",
"/js/main.52be778aa7edc57c429c.hot-update.js": "/js/main.52be778aa7edc57c429c.hot-update.js",
"/js/main.839fbc8892a0e6201d14.hot-update.js": "/js/main.839fbc8892a0e6201d14.hot-update.js",
"/js/main.a5a78e0748f1a1b63dab.hot-update.js": "/js/main.a5a78e0748f1a1b63dab.hot-update.js",
"/js/main.212af0d35ad85b31a916.hot-update.js": "/js/main.212af0d35ad85b31a916.hot-update.js",
"/js/main.7a91e002c87b8af6a536.hot-update.js": "/js/main.7a91e002c87b8af6a536.hot-update.js",
"/js/main.668b6d168627c849b0e4.hot-update.js": "/js/main.668b6d168627c849b0e4.hot-update.js",
"/js/main.a93b6be9df0525809026.hot-update.js": "/js/main.a93b6be9df0525809026.hot-update.js",
"/js/main.d0b2d48845c07a042505.hot-update.js": "/js/main.d0b2d48845c07a042505.hot-update.js",
"/js/main.e4253ee3fab1d1fff214.hot-update.js": "/js/main.e4253ee3fab1d1fff214.hot-update.js",
"/js/main.91d9e11b1efe7c7d0d15.hot-update.js": "/js/main.91d9e11b1efe7c7d0d15.hot-update.js",
"/js/main.dc0fab4176fb7c6813b2.hot-update.js": "/js/main.dc0fab4176fb7c6813b2.hot-update.js",
"/js/main.d11c3b0e0d7cc1e48dca.hot-update.js": "/js/main.d11c3b0e0d7cc1e48dca.hot-update.js",
"/js/main.2a529cddc98e893a2a92.hot-update.js": "/js/main.2a529cddc98e893a2a92.hot-update.js",
"/js/main.c1ccc04443059ee81bbd.hot-update.js": "/js/main.c1ccc04443059ee81bbd.hot-update.js",
"/js/main.3591683cbd6405141621.hot-update.js": "/js/main.3591683cbd6405141621.hot-update.js",
"/js/main.edc3e8d79e6f7dbcd78a.hot-update.js": "/js/main.edc3e8d79e6f7dbcd78a.hot-update.js",
"/js/main.bcb98702fe5f148ca99b.hot-update.js": "/js/main.bcb98702fe5f148ca99b.hot-update.js",
"/js/main.d93739d96e7f0dd63a6e.hot-update.js": "/js/main.d93739d96e7f0dd63a6e.hot-update.js",
"/js/main.21982489490b8b1f053b.hot-update.js": "/js/main.21982489490b8b1f053b.hot-update.js",
"/js/main.f78fd5f2e6fdd875629a.hot-update.js": "/js/main.f78fd5f2e6fdd875629a.hot-update.js",
"/js/main.7879315093b155e70be2.hot-update.js": "/js/main.7879315093b155e70be2.hot-update.js",
"/js/main.e0b6de1f5c9fbd6385ae.hot-update.js": "/js/main.e0b6de1f5c9fbd6385ae.hot-update.js",
"/js/main.fc88d4d7925a25cd3ca8.hot-update.js": "/js/main.fc88d4d7925a25cd3ca8.hot-update.js",
"/js/main.53bde087ad2b4a5fb326.hot-update.js": "/js/main.53bde087ad2b4a5fb326.hot-update.js",
"/js/main.70e0952ecd6228de217a.hot-update.js": "/js/main.70e0952ecd6228de217a.hot-update.js",
"/js/main.b694752c4beb49d17887.hot-update.js": "/js/main.b694752c4beb49d17887.hot-update.js",
"/js/main.ca80fbb07d0f0f1ace38.hot-update.js": "/js/main.ca80fbb07d0f0f1ace38.hot-update.js",
"/js/main.b124350f9f734bcfe2ee.hot-update.js": "/js/main.b124350f9f734bcfe2ee.hot-update.js",
"/js/main.e748be3883e9de32b0fb.hot-update.js": "/js/main.e748be3883e9de32b0fb.hot-update.js",
"/js/main.278019b6c6b74a339884.hot-update.js": "/js/main.278019b6c6b74a339884.hot-update.js",
"/js/main.41107c8e3c7ad87b0d64.hot-update.js": "/js/main.41107c8e3c7ad87b0d64.hot-update.js",
"/js/main.3703f4c70eac63efbd9f.hot-update.js": "/js/main.3703f4c70eac63efbd9f.hot-update.js",
"/js/main.d749219e06421131ba5f.hot-update.js": "/js/main.d749219e06421131ba5f.hot-update.js",
"/js/main.20fa819c4cd22e824f75.hot-update.js": "/js/main.20fa819c4cd22e824f75.hot-update.js",
"/js/main.d1d52ee2fab59c6a91e1.hot-update.js": "/js/main.d1d52ee2fab59c6a91e1.hot-update.js",
"/js/main.db26cc4c20789df44aa2.hot-update.js": "/js/main.db26cc4c20789df44aa2.hot-update.js",
"/js/main.d5307c561d3c930ab7e5.hot-update.js": "/js/main.d5307c561d3c930ab7e5.hot-update.js",
"/js/main.d3041f453ecd615aae72.hot-update.js": "/js/main.d3041f453ecd615aae72.hot-update.js",
"/js/main.004d7e6d77ccc3b781b4.hot-update.js": "/js/main.004d7e6d77ccc3b781b4.hot-update.js",
"/js/main.ef2eab6e7f29b856cb04.hot-update.js": "/js/main.ef2eab6e7f29b856cb04.hot-update.js",
"/js/main.dfaaa4609f908dc952c1.hot-update.js": "/js/main.dfaaa4609f908dc952c1.hot-update.js",
"/js/main.931d8fb7c032b784e10d.hot-update.js": "/js/main.931d8fb7c032b784e10d.hot-update.js",
"/js/main.b8cd688a2fe891c59ab7.hot-update.js": "/js/main.b8cd688a2fe891c59ab7.hot-update.js",
"/js/main.ac3c8bc2323e792340fc.hot-update.js": "/js/main.ac3c8bc2323e792340fc.hot-update.js",
"/js/main.c87dd72cd5100c869612.hot-update.js": "/js/main.c87dd72cd5100c869612.hot-update.js",
"/js/main.641ff08404b2dce38497.hot-update.js": "/js/main.641ff08404b2dce38497.hot-update.js",
"/js/main.12c8a38776fc5151961a.hot-update.js": "/js/main.12c8a38776fc5151961a.hot-update.js",
"/js/main.566920d55522102802f9.hot-update.js": "/js/main.566920d55522102802f9.hot-update.js",
"/js/main.a9cbd3028594009ac18d.hot-update.js": "/js/main.a9cbd3028594009ac18d.hot-update.js",
"/js/main.1056b30c917d55f286db.hot-update.js": "/js/main.1056b30c917d55f286db.hot-update.js",
"/js/main.67b45271e6bc3ef59224.hot-update.js": "/js/main.67b45271e6bc3ef59224.hot-update.js",
"/js/main.5647a13b5606291fe87f.hot-update.js": "/js/main.5647a13b5606291fe87f.hot-update.js",
"/js/main.5c7c0c5a8555b3ca3861.hot-update.js": "/js/main.5c7c0c5a8555b3ca3861.hot-update.js",
"/js/main.6fed08595674209484cc.hot-update.js": "/js/main.6fed08595674209484cc.hot-update.js",
"/js/main.dbf95742a1c6b10fef82.hot-update.js": "/js/main.dbf95742a1c6b10fef82.hot-update.js",
"/js/main.d2cd2dbbeededfde4747.hot-update.js": "/js/main.d2cd2dbbeededfde4747.hot-update.js",
"/js/main.8c8ab7ee8f110a6778e7.hot-update.js": "/js/main.8c8ab7ee8f110a6778e7.hot-update.js",
"/js/main.0a9830dfaadcac43ad90.hot-update.js": "/js/main.0a9830dfaadcac43ad90.hot-update.js",
"/js/main.c52f09db76f6521311d0.hot-update.js": "/js/main.c52f09db76f6521311d0.hot-update.js",
"/js/main.5eaadb8ade32028e6d9c.hot-update.js": "/js/main.5eaadb8ade32028e6d9c.hot-update.js",
"/js/main.5ea1c209e4ba1a66191b.hot-update.js": "/js/main.5ea1c209e4ba1a66191b.hot-update.js",
"/js/main.fb81adae93ae1109a054.hot-update.js": "/js/main.fb81adae93ae1109a054.hot-update.js",
"/js/main.d27bcdc0e934cd992fea.hot-update.js": "/js/main.d27bcdc0e934cd992fea.hot-update.js",
"/js/main.9621e68a9cec93315d6f.hot-update.js": "/js/main.9621e68a9cec93315d6f.hot-update.js",
"/js/main.ff0be9f89c5168bdaba6.hot-update.js": "/js/main.ff0be9f89c5168bdaba6.hot-update.js",
"/js/main.d9598c910569aa83148d.hot-update.js": "/js/main.d9598c910569aa83148d.hot-update.js",
"/js/main.44f644f118d7704b24ec.hot-update.js": "/js/main.44f644f118d7704b24ec.hot-update.js",
"/js/main.5bdaa56d5aed6e8f6364.hot-update.js": "/js/main.5bdaa56d5aed6e8f6364.hot-update.js",
"/js/main.ec01a51e0e5a53cfb359.hot-update.js": "/js/main.ec01a51e0e5a53cfb359.hot-update.js",
"/js/main.f92016b969ed908c935d.hot-update.js": "/js/main.f92016b969ed908c935d.hot-update.js",
"/js/main.41abc6ba9aeb74e7c3c7.hot-update.js": "/js/main.41abc6ba9aeb74e7c3c7.hot-update.js",
"/js/main.b1b6d51330cfc5041bc5.hot-update.js": "/js/main.b1b6d51330cfc5041bc5.hot-update.js",
"/js/main.fd77c3c1cf870493480b.hot-update.js": "/js/main.fd77c3c1cf870493480b.hot-update.js",
"/js/main.fd9df7267c2d99bc893d.hot-update.js": "/js/main.fd9df7267c2d99bc893d.hot-update.js",
"/js/main.45dd13d09dae058ba872.hot-update.js": "/js/main.45dd13d09dae058ba872.hot-update.js",
"/js/main.0a8395c1069ccefb0943.hot-update.js": "/js/main.0a8395c1069ccefb0943.hot-update.js",
"/js/main.6d554f4a3c4ec827a959.hot-update.js": "/js/main.6d554f4a3c4ec827a959.hot-update.js",
"/js/main.1a5c4ad2b6aef192ec4f.hot-update.js": "/js/main.1a5c4ad2b6aef192ec4f.hot-update.js",
"/js/main.bc3a88e8bd8844326875.hot-update.js": "/js/main.bc3a88e8bd8844326875.hot-update.js",
"/js/main.308b3b0df2e2e3948dbc.hot-update.js": "/js/main.308b3b0df2e2e3948dbc.hot-update.js",
"/js/main.9d1cc0ccb868d3967f71.hot-update.js": "/js/main.9d1cc0ccb868d3967f71.hot-update.js",
"/js/main.25a21955766150c76941.hot-update.js": "/js/main.25a21955766150c76941.hot-update.js",
"/js/main.b0b92dd5c8138a4c9b98.hot-update.js": "/js/main.b0b92dd5c8138a4c9b98.hot-update.js",
"/js/main.69ad6d1e840ce22281bf.hot-update.js": "/js/main.69ad6d1e840ce22281bf.hot-update.js",
"/js/main.a48d4c1a19b0cba22963.hot-update.js": "/js/main.a48d4c1a19b0cba22963.hot-update.js",
"/js/main.1aab1718cf149559392f.hot-update.js": "/js/main.1aab1718cf149559392f.hot-update.js",
"/js/main.9dde85f6fcc4f8bd6631.hot-update.js": "/js/main.9dde85f6fcc4f8bd6631.hot-update.js",
"/js/main.88aa9e8c3f4a6006af43.hot-update.js": "/js/main.88aa9e8c3f4a6006af43.hot-update.js",
"/js/main.fa53519359fcec31b8fc.hot-update.js": "/js/main.fa53519359fcec31b8fc.hot-update.js",
"/js/main.8ab31299c3202def3b72.hot-update.js": "/js/main.8ab31299c3202def3b72.hot-update.js",
"/js/main.4fea33b8e211270b52b7.hot-update.js": "/js/main.4fea33b8e211270b52b7.hot-update.js",
"/js/main.e1d361c0e8bc17114e8e.hot-update.js": "/js/main.e1d361c0e8bc17114e8e.hot-update.js",
"/js/main.9bfef48d6b70ca5aa783.hot-update.js": "/js/main.9bfef48d6b70ca5aa783.hot-update.js",
"/js/main.1586788eaae954e1e4d3.hot-update.js": "/js/main.1586788eaae954e1e4d3.hot-update.js",
"/js/main.e166fc5ed7f56f97e136.hot-update.js": "/js/main.e166fc5ed7f56f97e136.hot-update.js",
"/js/main.4891a453eab2e3fca61f.hot-update.js": "/js/main.4891a453eab2e3fca61f.hot-update.js",
"/js/main.845b32877e889a928971.hot-update.js": "/js/main.845b32877e889a928971.hot-update.js",
"/js/main.daf67585052f46540fe1.hot-update.js": "/js/main.daf67585052f46540fe1.hot-update.js",
"/js/main.37eae3f9ced48c056d91.hot-update.js": "/js/main.37eae3f9ced48c056d91.hot-update.js",
"/js/main.5795b0e3d8ccd0a35746.hot-update.js": "/js/main.5795b0e3d8ccd0a35746.hot-update.js",
"/js/main.4827f3616eb69595e599.hot-update.js": "/js/main.4827f3616eb69595e599.hot-update.js",
"/js/main.ce9404ad0a7c39e16bda.hot-update.js": "/js/main.ce9404ad0a7c39e16bda.hot-update.js",
"/js/main.13dad5c43211389f15a7.hot-update.js": "/js/main.13dad5c43211389f15a7.hot-update.js",
"/js/main.df868c27dae73ae76e5a.hot-update.js": "/js/main.df868c27dae73ae76e5a.hot-update.js",
"/js/main.44d076b285147195d904.hot-update.js": "/js/main.44d076b285147195d904.hot-update.js",
"/js/main.c47875f1460781df96c2.hot-update.js": "/js/main.c47875f1460781df96c2.hot-update.js",
"/js/main.f61d813cccaa3b1273bc.hot-update.js": "/js/main.f61d813cccaa3b1273bc.hot-update.js",
"/js/main.9802b7239d9a230b2dca.hot-update.js": "/js/main.9802b7239d9a230b2dca.hot-update.js",
"/js/main.fa187f65e1bd71f69699.hot-update.js": "/js/main.fa187f65e1bd71f69699.hot-update.js",
"/js/main.633617e8eba3821c3bac.hot-update.js": "/js/main.633617e8eba3821c3bac.hot-update.js",
"/js/main.f6fb49e311ffff953243.hot-update.js": "/js/main.f6fb49e311ffff953243.hot-update.js",
"/js/main.dc7221de894747bb892e.hot-update.js": "/js/main.dc7221de894747bb892e.hot-update.js",
"/js/main.6c8903b924fa7a9a70bb.hot-update.js": "/js/main.6c8903b924fa7a9a70bb.hot-update.js",
"/js/main.67ca2888e104841b449d.hot-update.js": "/js/main.67ca2888e104841b449d.hot-update.js",
"/js/main.f7ea32b1bdd7d5893101.hot-update.js": "/js/main.f7ea32b1bdd7d5893101.hot-update.js",
"/js/main.bb919bf230ccfd1da5ad.hot-update.js": "/js/main.bb919bf230ccfd1da5ad.hot-update.js",
"/js/main.c339a8942aeb56673ce8.hot-update.js": "/js/main.c339a8942aeb56673ce8.hot-update.js",
"/js/main.666b5bd039ecb83ba849.hot-update.js": "/js/main.666b5bd039ecb83ba849.hot-update.js",
"/js/main.5d6bd6229cad21177b5d.hot-update.js": "/js/main.5d6bd6229cad21177b5d.hot-update.js",
"/js/main.1314bd7b0155050142db.hot-update.js": "/js/main.1314bd7b0155050142db.hot-update.js",
"/js/main.c55d0aaf47449e57f28f.hot-update.js": "/js/main.c55d0aaf47449e57f28f.hot-update.js",
"/js/main.1ebff55b9a709134bdf9.hot-update.js": "/js/main.1ebff55b9a709134bdf9.hot-update.js",
"/js/main.d9e14c4f874d9aae2991.hot-update.js": "/js/main.d9e14c4f874d9aae2991.hot-update.js",
"/js/main.6aad28750a58dc8a1a84.hot-update.js": "/js/main.6aad28750a58dc8a1a84.hot-update.js",
"/js/main.a4a5e491361ca05ac530.hot-update.js": "/js/main.a4a5e491361ca05ac530.hot-update.js",
"/js/main.ab40d76d1114a2a348d9.hot-update.js": "/js/main.ab40d76d1114a2a348d9.hot-update.js",
"/js/main.272e7fc5df78185ef223.hot-update.js": "/js/main.272e7fc5df78185ef223.hot-update.js",
"/js/main.3980c9d6032f6d9893d6.hot-update.js": "/js/main.3980c9d6032f6d9893d6.hot-update.js",
"/js/main.3fd1ae93571bb5fe8493.hot-update.js": "/js/main.3fd1ae93571bb5fe8493.hot-update.js",
"/js/main.c9097f4a153e7fd3e0bd.hot-update.js": "/js/main.c9097f4a153e7fd3e0bd.hot-update.js",
"/js/main.89cbccfdfb280c101229.hot-update.js": "/js/main.89cbccfdfb280c101229.hot-update.js",
"/js/main.3a92cbc41ec25d8e2018.hot-update.js": "/js/main.3a92cbc41ec25d8e2018.hot-update.js",
"/js/main.2a86157426eb177cc6f2.hot-update.js": "/js/main.2a86157426eb177cc6f2.hot-update.js",
"/js/main.411caab58470390ff0bd.hot-update.js": "/js/main.411caab58470390ff0bd.hot-update.js",
"/js/main.d594e00eec3ae4abd751.hot-update.js": "/js/main.d594e00eec3ae4abd751.hot-update.js",
"/js/main.70d17783fe28bf990276.hot-update.js": "/js/main.70d17783fe28bf990276.hot-update.js",
"/js/main.c7bc397e2e421f0141fc.hot-update.js": "/js/main.c7bc397e2e421f0141fc.hot-update.js",
"/js/main.815d02e7f3f9f8841915.hot-update.js": "/js/main.815d02e7f3f9f8841915.hot-update.js",
"/js/main.d40b9abc043ed8480a8a.hot-update.js": "/js/main.d40b9abc043ed8480a8a.hot-update.js",
"/js/main.19a9789de3de21c4b8eb.hot-update.js": "/js/main.19a9789de3de21c4b8eb.hot-update.js",
"/js/main.8be11c6045cb66da58d1.hot-update.js": "/js/main.8be11c6045cb66da58d1.hot-update.js",
"/js/main.1983ca165da1e65707ed.hot-update.js": "/js/main.1983ca165da1e65707ed.hot-update.js",
"/js/main.7a29b122f46980bbd2ef.hot-update.js": "/js/main.7a29b122f46980bbd2ef.hot-update.js",
"/js/main.ddb45dcd7b4091c5ac5f.hot-update.js": "/js/main.ddb45dcd7b4091c5ac5f.hot-update.js",
"/js/main.7d7ac6845f8c792a4476.hot-update.js": "/js/main.7d7ac6845f8c792a4476.hot-update.js",
"/js/main.ae16004d1621864211e7.hot-update.js": "/js/main.ae16004d1621864211e7.hot-update.js",
"/js/main.84b099565f7cb44a5aae.hot-update.js": "/js/main.84b099565f7cb44a5aae.hot-update.js",
"/js/main.61d6dc70f0b4a8d69347.hot-update.js": "/js/main.61d6dc70f0b4a8d69347.hot-update.js",
"/js/main.6d77e25fc48e11872fb5.hot-update.js": "/js/main.6d77e25fc48e11872fb5.hot-update.js",
"/js/main.e52f1368604fe28cad40.hot-update.js": "/js/main.e52f1368604fe28cad40.hot-update.js",
"/js/main.0d074a932a774d85ed24.hot-update.js": "/js/main.0d074a932a774d85ed24.hot-update.js",
"/js/main.9372920546a93ccc4f10.hot-update.js": "/js/main.9372920546a93ccc4f10.hot-update.js",
"/js/main.e865592c8390a29c196a.hot-update.js": "/js/main.e865592c8390a29c196a.hot-update.js",
"/js/main.a405908c3c0bda177afe.hot-update.js": "/js/main.a405908c3c0bda177afe.hot-update.js",
"/js/main.40ee7f6bbbdb4944b217.hot-update.js": "/js/main.40ee7f6bbbdb4944b217.hot-update.js",
"/js/main.0ca213bc260327e5c44c.hot-update.js": "/js/main.0ca213bc260327e5c44c.hot-update.js",
"/js/main.1917f89d4150ee8fa356.hot-update.js": "/js/main.1917f89d4150ee8fa356.hot-update.js",
"/js/main.f61541d93f712f3870ca.hot-update.js": "/js/main.f61541d93f712f3870ca.hot-update.js",
"/js/main.ebf234ddd5de8b436e8c.hot-update.js": "/js/main.ebf234ddd5de8b436e8c.hot-update.js",
"/js/main.fb8288157f51ae2a8545.hot-update.js": "/js/main.fb8288157f51ae2a8545.hot-update.js",
"/js/main.16962ba62f72f7247d29.hot-update.js": "/js/main.16962ba62f72f7247d29.hot-update.js",
"/js/main.039a8cc665108287b217.hot-update.js": "/js/main.039a8cc665108287b217.hot-update.js",
"/js/main.ee47b865bc9872684964.hot-update.js": "/js/main.ee47b865bc9872684964.hot-update.js",
"/js/main.63b6901d1d22c6ac0984.hot-update.js": "/js/main.63b6901d1d22c6ac0984.hot-update.js",
"/js/main.45cbdbd7827041cbf512.hot-update.js": "/js/main.45cbdbd7827041cbf512.hot-update.js",
"/js/main.3e33271a12bfec030777.hot-update.js": "/js/main.3e33271a12bfec030777.hot-update.js",
"/js/main.5dbd0ab9a4c5232667e8.hot-update.js": "/js/main.5dbd0ab9a4c5232667e8.hot-update.js",
"/js/main.04e901a4b402b51a750f.hot-update.js": "/js/main.04e901a4b402b51a750f.hot-update.js",
"/js/main.4558580a594cbc8eff6c.hot-update.js": "/js/main.4558580a594cbc8eff6c.hot-update.js",
"/js/main.dba2bd0ad2b7d3512714.hot-update.js": "/js/main.dba2bd0ad2b7d3512714.hot-update.js",
"/js/main.5a7ca08ce1752a485326.hot-update.js": "/js/main.5a7ca08ce1752a485326.hot-update.js",
"/js/main.1a592bc84a9da2723333.hot-update.js": "/js/main.1a592bc84a9da2723333.hot-update.js"
} }

10464
resources/babel/langs.babel Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -11,11 +11,11 @@
</header> </header>
<section class="plan-features"> <section class="plan-features">
<b class="storage-size">{{ plan.data.attributes.capacity_formatted }}</b> <b class="storage-size">{{ plan.data.attributes.capacity_formatted }}</b>
<span class="storage-description">Of Storage Capacity</span> <span class="storage-description">{{ $t('page_pricing_tables.storage_capacity') }}</span>
</section> </section>
<footer class="plan-footer"> <footer class="plan-footer">
<b class="price"> <b class="price">
{{ plan.data.attributes.price }}/{{ $t('global.monthly_ac') }}. {{ plan.data.attributes.price }}/{{ $t('global.monthly_ac') }}
</b> </b>
<ButtonBase @click.native="selectPlan(plan)" type="submit" button-style="secondary" class="sign-in-button"> <ButtonBase @click.native="selectPlan(plan)" type="submit" button-style="secondary" class="sign-in-button">
{{ $t('global.get_it') }} {{ $t('global.get_it') }}

View File

@@ -15,13 +15,13 @@
@click.native="closePopup" @click.native="closePopup"
button-style="secondary" button-style="secondary"
class="popup-button" class="popup-button"
>Cancel >{{ $t('global.cancel') }}
</ButtonBase> </ButtonBase>
<ButtonBase <ButtonBase
@click.native="confirm" @click.native="confirm"
:button-style="buttonColor" :button-style="buttonColor"
class="popup-button" class="popup-button"
>Yes, I'm sure >{{ $t('global.confirm_action') }}
</ButtonBase> </ButtonBase>
</PopupActions> </PopupActions>
</PopupWrapper> </PopupWrapper>

View File

@@ -76,7 +76,7 @@
computed: { computed: {
...mapGetters(['user']), ...mapGetters(['user']),
isUserProfileRoute() { isUserProfileRoute() {
return this.$isThisRoute(this.$route, ['Profile', 'Password', 'Storage', 'Invoice', 'Subscription']) return this.$isThisRoute(this.$route, ['Profile', 'Password', 'Storage', 'Invoice', 'Subscription', 'PaymentMethods'])
} }
}, },
data() { data() {
@@ -99,6 +99,9 @@
'UserDelete', 'UserDelete',
'PlanCreate', 'PlanCreate',
'UserCreate', 'UserCreate',
'AppPayments',
'PageEdit',
'Pages',
'UserDelete', 'UserDelete',
'UserDetail', 'UserDetail',
'Invoices', 'Invoices',

View File

@@ -3,7 +3,7 @@ import VueI18n from 'vue-i18n';
import en from './lang/en.json' import en from './lang/en.json'
import sk from './lang/sk.json' import sk from './lang/sk.json'
//import cn from './lang/cn.json' import cn from './lang/cn.json'
Vue.use(VueI18n); Vue.use(VueI18n);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -37,11 +37,11 @@ import Pages from './views/Admin/Pages'
import PageEdit from './views/Admin/Pages/PageEdit' import PageEdit from './views/Admin/Pages/PageEdit'
// App Settings // App Settings
import AppAppearance from './views/Admin/AppSettings/AppSettingsTabs/Appearance'
import AppPayments from './views/Admin/AppSettings/AppSettingsTabs/Payments'
import AppBillings from './views/Admin/AppSettings/AppSettingsTabs/Billings'
import AppOthers from './views/Admin/AppSettings/AppSettingsTabs/Others'
import AppEmail from './views/Admin/AppSettings/AppSettingsTabs/Email' import AppEmail from './views/Admin/AppSettings/AppSettingsTabs/Email'
import AppOthers from './views/Admin/AppSettings/AppSettingsTabs/Others'
import AppBillings from './views/Admin/AppSettings/AppSettingsTabs/Billings'
import AppPayments from './views/Admin/AppSettings/AppSettingsTabs/Payments'
import AppAppearance from './views/Admin/AppSettings/AppSettingsTabs/Appearance'
// Plans // Plans
import Plans from './views/Admin/Plans' import Plans from './views/Admin/Plans'
@@ -76,9 +76,9 @@ import SubscriptionService from './views/SetupWizard/SubscriptionService'
import InstallationDisclaimer from './views/SetupWizard/InstallationDisclaimer' import InstallationDisclaimer from './views/SetupWizard/InstallationDisclaimer'
// Index pages // Index pages
import SaaSLandingPage from './views/index/SaaSLandingPage'
import DynamicPage from './views/Index/DynamicPage'
import ContactUs from './views/Index/ContactUs' import ContactUs from './views/Index/ContactUs'
import DynamicPage from './views/Index/DynamicPage'
import SaaSLandingPage from './views/index/SaaSLandingPage'
Vue.use(Router) Vue.use(Router)
@@ -98,7 +98,7 @@ const routesAdmin = [
component: Dashboard, component: Dashboard,
meta: { meta: {
requiresAuth: true, requiresAuth: true,
title: 'Dashboard' title: i18n.t('routes_title.dashboard')
}, },
}, },
{ {
@@ -107,7 +107,7 @@ const routesAdmin = [
component: Invoices, component: Invoices,
meta: { meta: {
requiresAuth: true, requiresAuth: true,
title: 'Invoices' title: i18n.t('routes_title.invoices')
}, },
}, },
{ {
@@ -116,7 +116,7 @@ const routesAdmin = [
component: Pages, component: Pages,
meta: { meta: {
requiresAuth: true, requiresAuth: true,
title: 'Pages' title: i18n.t('routes_title.pages')
}, },
}, },
{ {
@@ -125,7 +125,7 @@ const routesAdmin = [
component: PageEdit, component: PageEdit,
meta: { meta: {
requiresAuth: true, requiresAuth: true,
title: 'Edit Page' title: i18n.t('routes_title.page_edit')
}, },
}, },
{ {
@@ -134,7 +134,7 @@ const routesAdmin = [
component: Plans, component: Plans,
meta: { meta: {
requiresAuth: true, requiresAuth: true,
title: 'Pricing Plans' title: i18n.t('routes_title.pricing_plans')
}, },
}, },
{ {
@@ -163,7 +163,7 @@ const routesAdmin = [
component: PlanCreate, component: PlanCreate,
meta: { meta: {
requiresAuth: true, requiresAuth: true,
title: 'Create Plan' title: i18n.t('routes_title.plan_create')
}, },
}, },
@@ -201,7 +201,7 @@ const routesAdmin = [
component: UserSubscription, component: UserSubscription,
meta: { meta: {
requiresAuth: true, requiresAuth: true,
title: 'Subscription' title: i18n.t('routes_title.subscription')
}, },
}, },
{ {
@@ -210,7 +210,7 @@ const routesAdmin = [
component: UserInvoices, component: UserInvoices,
meta: { meta: {
requiresAuth: true, requiresAuth: true,
title: 'Invoices' title: i18n.t('routes_title.invoices')
}, },
}, },
{ {
@@ -239,7 +239,7 @@ const routesAdmin = [
component: Plan, component: Plan,
meta: { meta: {
requiresAuth: true, requiresAuth: true,
title: 'Plan' title: i18n.t('routes_title.plan')
}, },
children: [ children: [
{ {
@@ -248,7 +248,7 @@ const routesAdmin = [
component: PlanSubscribers, component: PlanSubscribers,
meta: { meta: {
requiresAuth: true, requiresAuth: true,
title: 'Plan Subscribers' title: i18n.t('routes_title.subscribers')
}, },
}, },
{ {
@@ -257,7 +257,7 @@ const routesAdmin = [
component: PlanSettings, component: PlanSettings,
meta: { meta: {
requiresAuth: true, requiresAuth: true,
title: 'Plan Settings', title: i18n.t('routes_title.plan_settings'),
}, },
}, },
{ {
@@ -266,7 +266,7 @@ const routesAdmin = [
component: PlanDelete, component: PlanDelete,
meta: { meta: {
requiresAuth: true, requiresAuth: true,
title: 'Plan Delete', title: i18n.t('routes_title.plan_delete'),
}, },
}, },
] ]
@@ -277,7 +277,7 @@ const routesAdmin = [
component: AppSettings, component: AppSettings,
meta: { meta: {
requiresAuth: true, requiresAuth: true,
title: 'Settings' title: i18n.t('routes_title.settings')
}, },
children: [ children: [
{ {
@@ -286,7 +286,7 @@ const routesAdmin = [
component: AppAppearance, component: AppAppearance,
meta: { meta: {
requiresAuth: true, requiresAuth: true,
title: 'Appearance' title: i18n.t('routes_title.appearance')
}, },
}, },
{ {
@@ -295,7 +295,7 @@ const routesAdmin = [
component: AppBillings, component: AppBillings,
meta: { meta: {
requiresAuth: true, requiresAuth: true,
title: 'Billings' title: i18n.t('routes_title.billings')
}, },
}, },
{ {
@@ -304,7 +304,7 @@ const routesAdmin = [
component: AppEmail, component: AppEmail,
meta: { meta: {
requiresAuth: true, requiresAuth: true,
title: 'Email' title: i18n.t('routes_title.email')
}, },
}, },
{ {
@@ -313,7 +313,7 @@ const routesAdmin = [
component: AppPayments, component: AppPayments,
meta: { meta: {
requiresAuth: true, requiresAuth: true,
title: 'Payments' title: i18n.t('routes_title.payments')
}, },
}, },
{ {
@@ -322,7 +322,7 @@ const routesAdmin = [
component: AppOthers, component: AppOthers,
meta: { meta: {
requiresAuth: true, requiresAuth: true,
title: 'Others' title: i18n.t('routes_title.others')
}, },
}, },
] ]
@@ -344,7 +344,7 @@ const routesAdmin = [
component: UserProfileMobileMenu, component: UserProfileMobileMenu,
meta: { meta: {
requiresAuth: true, requiresAuth: true,
title: 'Profile Settings' title: i18n.t('routes_title.profile_settings')
}, },
}, },
] ]
@@ -466,7 +466,7 @@ const routesUser = [
component: Invoice, component: Invoice,
meta: { meta: {
requiresAuth: true, requiresAuth: true,
title: 'Invoices' title: i18n.t('routes_title.invoices')
}, },
}, },
{ {
@@ -475,16 +475,16 @@ const routesUser = [
component: Subscription, component: Subscription,
meta: { meta: {
requiresAuth: true, requiresAuth: true,
title: 'Subscription' title: i18n.t('routes_title.subscription')
}, },
}, },
{ {
name: 'PaymentMethods', name: 'PaymentMethods',
path: '/settings/payment-cards', path: '/settings/payment-methods',
component: PaymentMethods, component: PaymentMethods,
meta: { meta: {
requiresAuth: true, requiresAuth: true,
title: 'Payment Cards' title: i18n.t('routes_title.payment_methods')
}, },
}, },
] ]
@@ -495,7 +495,7 @@ const routesUser = [
component: UpgradePlan, component: UpgradePlan,
meta: { meta: {
requiresAuth: true, requiresAuth: true,
title: 'Upgrade Plan' title: i18n.t('routes_title.upgrade_plan')
}, },
}, },
{ {
@@ -504,7 +504,7 @@ const routesUser = [
component: UpgradeBilling, component: UpgradeBilling,
meta: { meta: {
requiresAuth: true, requiresAuth: true,
title: 'Upgrade Billing' title: i18n.t('routes_title.upgrade_billing')
}, },
}, },
] ]

View File

@@ -14,7 +14,7 @@
<eye-icon size="17"></eye-icon> <eye-icon size="17"></eye-icon>
</div> </div>
<div class="label"> <div class="label">
Appearance {{ $t('admin_settings.tabs.appearance') }}
</div> </div>
</router-link> </router-link>
@@ -24,7 +24,7 @@
<file-text-icon size="17"></file-text-icon> <file-text-icon size="17"></file-text-icon>
</div> </div>
<div class="label"> <div class="label">
Billings {{ $t('admin_settings.tabs.billings') }}
</div> </div>
</router-link> </router-link>
@@ -34,7 +34,7 @@
<mail-icon size="17"></mail-icon> <mail-icon size="17"></mail-icon>
</div> </div>
<div class="label"> <div class="label">
Email {{ $t('admin_settings.tabs.email') }}
</div> </div>
</router-link> </router-link>
@@ -44,7 +44,7 @@
<credit-card-icon size="17"></credit-card-icon> <credit-card-icon size="17"></credit-card-icon>
</div> </div>
<div class="label"> <div class="label">
Payments {{ $t('admin_settings.tabs.payments') }}
</div> </div>
</router-link> </router-link>
@@ -54,7 +54,7 @@
<code-icon size="17"></code-icon> <code-icon size="17"></code-icon>
</div> </div>
<div class="label"> <div class="label">
Others {{ $t('admin_settings.tabs.others') }}
</div> </div>
</router-link> </router-link>
</div> </div>
@@ -71,9 +71,7 @@
import MobileHeader from '@/components/Mobile/MobileHeader' import MobileHeader from '@/components/Mobile/MobileHeader'
import SectionTitle from '@/components/Others/SectionTitle' import SectionTitle from '@/components/Others/SectionTitle'
import PageHeader from '@/components/Others/PageHeader' import PageHeader from '@/components/Others/PageHeader'
import Spinner from '@/components/FilesView/Spinner'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import axios from 'axios'
export default { export default {
name: 'AppSettings', name: 'AppSettings',
@@ -89,7 +87,6 @@
SectionTitle, SectionTitle,
MobileHeader, MobileHeader,
PageHeader, PageHeader,
Spinner,
}, },
computed: { computed: {
...mapGetters(['config']), ...mapGetters(['config']),
@@ -100,13 +97,4 @@
<style lang="scss" scoped> <style lang="scss" scoped>
@import '@assets/vue-file-manager/_variables'; @import '@assets/vue-file-manager/_variables';
@import '@assets/vue-file-manager/_mixins'; @import '@assets/vue-file-manager/_mixins';
@media only screen and (max-width: 960px) {
}
@media (prefers-color-scheme: dark) {
}
</style> </style>

View File

@@ -4,42 +4,45 @@
<!--Personal Information--> <!--Personal Information-->
<PageTabGroup> <PageTabGroup>
<div class="form block-form"> <div class="form block-form">
<FormLabel>General Settings</FormLabel> <FormLabel>{{ $t('admin_settings.appearance.section_general') }}</FormLabel>
<div class="block-wrapper"> <div class="block-wrapper">
<label>App Title:</label> <label>{{ $t('admin_settings.appearance.title') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="App Title" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="App Title" rules="required" v-slot="{ errors }">
<input @input="$updateText('/settings', 'app_title', app.title)" v-model="app.title" placeholder="Type your app title" type="text" :class="{'is-error': errors[0]}"/> <input @input="$updateText('/settings', 'app_title', app.title)" v-model="app.title" :placeholder="$t('admin_settings.appearance.title_plac')" type="text"
:class="{'is-error': errors[0]}"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
<div class="block-wrapper"> <div class="block-wrapper">
<label>App Description:</label> <label>{{ $t('admin_settings.appearance.description') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="App Description" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="App Description" rules="required" v-slot="{ errors }">
<input @input="$updateText('/settings', 'app_description', app.description)" v-model="app.description" placeholder="Type your app description" type="text" :class="{'is-error': errors[0]}"/> <input @input="$updateText('/settings', 'app_description', app.description)" v-model="app.description"
:placeholder="$t('admin_settings.appearance.description_plac')" type="text" :class="{'is-error': errors[0]}"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
<FormLabel class="mt-70">Appearance</FormLabel> <FormLabel class="mt-70">{{ $t('admin_settings.appearance.section_appearance') }}</FormLabel>
<div class="block-wrapper"> <div class="block-wrapper">
<label>App Logo (optional):</label> <label>{{ $t('admin_settings.appearance.logo') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="App Logo" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="App Logo" v-slot="{ errors }">
<ImageInput @input="$updateImage('/settings', 'app_logo', app.logo)" :image="$getImage(app.logo)" v-model="app.logo" :error="errors[0]"/> <ImageInput @input="$updateImage('/settings', 'app_logo', app.logo)" :image="$getImage(app.logo)" v-model="app.logo" :error="errors[0]"/>
</ValidationProvider> </ValidationProvider>
</div> </div>
<div class="block-wrapper"> <div class="block-wrapper">
<label>App Logo Horizontal (optional):</label> <label>{{ $t('admin_settings.appearance.logo_horizontal') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="App Logo Horizontal" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="App Logo Horizontal" v-slot="{ errors }">
<ImageInput @input="$updateImage('/settings', 'app_logo_horizontal', app.logo_horizontal)" :image="$getImage(app.logo_horizontal)" v-model="app.logo_horizontal" :error="errors[0]"/> <ImageInput @input="$updateImage('/settings', 'app_logo_horizontal', app.logo_horizontal)" :image="$getImage(app.logo_horizontal)"
v-model="app.logo_horizontal" :error="errors[0]"/>
</ValidationProvider> </ValidationProvider>
</div> </div>
<div class="block-wrapper"> <div class="block-wrapper">
<label>App Favicon (optional):</label> <label>{{ $t('admin_settings.appearance.favicon') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="App Favicon" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="App Favicon" v-slot="{ errors }">
<ImageInput @input="$updateImage('/settings', 'app_favicon', app.favicon)" :image="$getImage(app.favicon)" v-model="app.favicon" :error="errors[0]"/> <ImageInput @input="$updateImage('/settings', 'app_favicon', app.favicon)" :image="$getImage(app.favicon)" v-model="app.favicon" :error="errors[0]"/>
</ValidationProvider> </ValidationProvider>
@@ -83,11 +86,11 @@
return { return {
isLoading: true, isLoading: true,
app: { app: {
title: '',
description: '',
logo: undefined,
logo_horizontal: undefined, logo_horizontal: undefined,
favicon: undefined, favicon: undefined,
logo: undefined,
description: '',
title: '',
}, },
} }
}, },
@@ -98,13 +101,14 @@
} }
}) })
.then(response => { .then(response => {
this.isLoading = false
this.app.title = response.data.app_title
this.app.description = response.data.app_description
this.app.logo = response.data.app_logo
this.app.logo_horizontal = response.data.app_logo_horizontal this.app.logo_horizontal = response.data.app_logo_horizontal
this.app.description = response.data.app_description
this.app.favicon = response.data.app_favicon this.app.favicon = response.data.app_favicon
this.app.title = response.data.app_title
this.app.logo = response.data.app_logo
})
.finally(() => {
this.isLoading = false
}) })
} }
} }

View File

@@ -4,44 +4,44 @@
<!--Personal Information--> <!--Personal Information-->
<PageTabGroup> <PageTabGroup>
<div class="form block-form"> <div class="form block-form">
<FormLabel>Company Information</FormLabel> <FormLabel>{{ $t('admin_settings.billings.section_company') }}</FormLabel>
<div class="block-wrapper"> <div class="block-wrapper">
<label>Company Name:</label> <label>{{ $t('admin_settings.billings.company_name') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Billing Name" <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Billing Name"
rules="required" v-slot="{ errors }"> rules="required" v-slot="{ errors }">
<input @input="$updateText('/settings', 'billing_name', billingInformation.billing_name)" v-model="billingInformation.billing_name" placeholder="Type your company name" <input @input="$updateText('/settings', 'billing_name', billingInformation.billing_name)" v-model="billingInformation.billing_name" :placeholder="$t('admin_settings.billings.company_name_plac')"
type="text" :class="{'is-error': errors[0]}"/> type="text" :class="{'is-error': errors[0]}"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
<div class="block-wrapper"> <div class="block-wrapper">
<label>VAT Number:</label> <label>{{ $t('admin_settings.billings.vat') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Billing Vat Number" <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Billing Vat Number"
rules="required" v-slot="{ errors }"> rules="required" v-slot="{ errors }">
<input @input="$updateText('/settings', 'billing_vat_number', billingInformation.billing_vat_number)" v-model="billingInformation.billing_vat_number" placeholder="Type your VAT number" <input @input="$updateText('/settings', 'billing_vat_number', billingInformation.billing_vat_number)" v-model="billingInformation.billing_vat_number" :placeholder="$t('admin_settings.billings.vat_plac')"
type="text" :class="{'is-error': errors[0]}"/> type="text" :class="{'is-error': errors[0]}"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
<FormLabel class="mt-70">Billing Information</FormLabel> <FormLabel class="mt-70">{{ $t('admin_settings.billings.section_billing') }}</FormLabel>
<div class="block-wrapper"> <div class="block-wrapper">
<label>Billing Country:</label> <label>{{ $t('admin_settings.billings.country') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Billing Country" <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Billing Country"
rules="required" v-slot="{ errors }"> rules="required" v-slot="{ errors }">
<SelectInput @input="$updateText('/settings', 'billing_country', billingInformation.billing_country)" v-model="billingInformation.billing_country" :default="billingInformation.billing_country" :options="countries" placeholder="Select your billing country" :isError="errors[0]"/> <SelectInput @input="$updateText('/settings', 'billing_country', billingInformation.billing_country)" v-model="billingInformation.billing_country" :default="billingInformation.billing_country" :options="countries" :placeholder="$t('admin_settings.billings.country_plac')" :isError="errors[0]"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
<div class="block-wrapper"> <div class="block-wrapper">
<label>Billing Address:</label> <label>{{ $t('admin_settings.billings.address') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Billing Address" <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Billing Address"
rules="required" v-slot="{ errors }"> rules="required" v-slot="{ errors }">
<input @input="$updateText('/settings', 'billing_address', billingInformation.billing_address)" v-model="billingInformation.billing_address" placeholder="Type your billing address" <input @input="$updateText('/settings', 'billing_address', billingInformation.billing_address)" v-model="billingInformation.billing_address" :placeholder="$t('admin_settings.billings.address_plac')"
type="text" :class="{'is-error': errors[0]}"/> type="text" :class="{'is-error': errors[0]}"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
@@ -49,40 +49,40 @@
<div class="wrapper-inline"> <div class="wrapper-inline">
<div class="block-wrapper"> <div class="block-wrapper">
<label>Billing City:</label> <label>{{ $t('admin_settings.billings.city') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Billing City" <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Billing City"
rules="required" v-slot="{ errors }"> rules="required" v-slot="{ errors }">
<input @input="$updateText('/settings', 'billing_city', billingInformation.billing_city)" v-model="billingInformation.billing_city" placeholder="Type your billing city" <input @input="$updateText('/settings', 'billing_city', billingInformation.billing_city)" v-model="billingInformation.billing_city" :placeholder="$t('admin_settings.billings.city_plac')"
type="text" :class="{'is-error': errors[0]}"/> type="text" :class="{'is-error': errors[0]}"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
<div class="block-wrapper"> <div class="block-wrapper">
<label>Billing Postal Code:</label> <label>{{ $t('admin_settings.billings.postal_code') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Billing Postal Code" <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Billing Postal Code"
rules="required" v-slot="{ errors }"> rules="required" v-slot="{ errors }">
<input @input="$updateText('/settings', 'billing_postal_code', billingInformation.billing_postal_code)" v-model="billingInformation.billing_postal_code" <input @input="$updateText('/settings', 'billing_postal_code', billingInformation.billing_postal_code)" v-model="billingInformation.billing_postal_code"
placeholder="Type your billing postal code" type="text" :class="{'is-error': errors[0]}"/> :placeholder="$t('admin_settings.billings.postal_code_plac')" type="text" :class="{'is-error': errors[0]}"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
</div> </div>
<div class="block-wrapper"> <div class="block-wrapper">
<label>Billing State:</label> <label>{{ $t('admin_settings.billings.state') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Billing State" <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Billing State"
rules="required" v-slot="{ errors }"> rules="required" v-slot="{ errors }">
<input @input="$updateText('/settings', 'billing_state', billingInformation.billing_state)" v-model="billingInformation.billing_state" placeholder="Type your billing state" <input @input="$updateText('/settings', 'billing_state', billingInformation.billing_state)" v-model="billingInformation.billing_state" :placeholder="$t('admin_settings.billings.state_plac')"
type="text" :class="{'is-error': errors[0]}"/> type="text" :class="{'is-error': errors[0]}"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
<div class="block-wrapper"> <div class="block-wrapper">
<label>Billing Phone Number (optional):</label> <label>{{ $t('admin_settings.billings.phone_number') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Billing Phone Number" <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Billing Phone Number"
v-slot="{ errors }"> v-slot="{ errors }">
<input @input="$updateText('/settings', 'billing_phone_number', billingInformation.billing_phone_number)" v-model="billingInformation.billing_phone_number" placeholder="Type your billing phone number" <input @input="$updateText('/settings', 'billing_phone_number', billingInformation.billing_phone_number)" v-model="billingInformation.billing_phone_number" :placeholder="$t('admin_settings.billings.phone_number_plac')"
type="text" :class="{'is-error': errors[0]}"/> type="text" :class="{'is-error': errors[0]}"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>

View File

@@ -4,63 +4,63 @@
<!--Personal Information--> <!--Personal Information-->
<PageTabGroup> <PageTabGroup>
<ValidationObserver @submit.prevent="EmailSetupSubmit" ref="EmailSetup" v-slot="{ invalid }" tag="form" class="form block-form"> <ValidationObserver @submit.prevent="EmailSetupSubmit" ref="EmailSetup" v-slot="{ invalid }" tag="form" class="form block-form">
<FormLabel>Email Setup</FormLabel> <FormLabel>{{ $t('admin_settings.email.section_email') }}</FormLabel>
<InfoBox> <InfoBox>
<p>This form is not fully pre-filled for security reasons. Your email settings is available in your <b>.env</b> file. For apply new Email settings, please confirm your options by button at the end of formular.</p> <p v-html="$t('admin_settings.email.email_disclaimer')"></p>
</InfoBox> </InfoBox>
<div class="block-wrapper"> <div class="block-wrapper">
<label>Mail Driver:</label> <label>{{ $t('admin_settings.email.driver') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Mail Driver" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Mail Driver" rules="required" v-slot="{ errors }">
<input v-model="mail.driver" placeholder="Type your mail driver" type="text" :class="{'is-error': errors[0]}" /> <input v-model="mail.driver" :placeholder="$t('admin_settings.email.driver_plac')" type="text" :class="{'is-error': errors[0]}" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
<div class="block-wrapper"> <div class="block-wrapper">
<label>Mail Host:</label> <label>{{ $t('admin_settings.email.host') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Mail Host" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Mail Host" rules="required" v-slot="{ errors }">
<input v-model="mail.host" placeholder="Type your mail host" type="text" :class="{'is-error': errors[0]}" /> <input v-model="mail.host" :placeholder="$t('admin_settings.email.host_plac')" type="text" :class="{'is-error': errors[0]}" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
<div class="block-wrapper"> <div class="block-wrapper">
<label>Mail Port:</label> <label>{{ $t('admin_settings.email.port') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Mail Port" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Mail Port" rules="required" v-slot="{ errors }">
<input v-model="mail.port" placeholder="Type your mail port" type="text" :class="{'is-error': errors[0]}" /> <input v-model="mail.port" :placeholder="$t('admin_settings.email.port_plac')" type="text" :class="{'is-error': errors[0]}" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
<div class="block-wrapper"> <div class="block-wrapper">
<label>Mail Username:</label> <label>{{ $t('admin_settings.email.username') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Mail Username" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Mail Username" rules="required" v-slot="{ errors }">
<input v-model="mail.username" placeholder="Type your mail username" type="text" :class="{'is-error': errors[0]}" /> <input v-model="mail.username" :placeholder="$t('admin_settings.email.username_plac')" type="text" :class="{'is-error': errors[0]}" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
<div class="block-wrapper"> <div class="block-wrapper">
<label>Mail Password:</label> <label>{{ $t('admin_settings.email.password') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Mail Password" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Mail Password" rules="required" v-slot="{ errors }">
<input v-model="mail.password" placeholder="Type your mail password" type="text" :class="{'is-error': errors[0]}" /> <input v-model="mail.password" :placeholder="$t('admin_settings.email.password_plac')" type="text" :class="{'is-error': errors[0]}" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
<div class="block-wrapper"> <div class="block-wrapper">
<label>Mail Encryption:</label> <label>{{ $t('admin_settings.email.encryption') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Mail Encryption" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Mail Encryption" rules="required" v-slot="{ errors }">
<SelectInput v-model="mail.encryption" :options="encryptionList" placeholder="Select your mail encryption" :isError="errors[0]"/> <SelectInput v-model="mail.encryption" :options="encryptionList" :placeholder="$t('admin_settings.email.encryption_plac')" :isError="errors[0]"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
<ButtonBase :loading="isSendingRequest" :disabled="isSendingRequest" type="submit" <ButtonBase :loading="isSendingRequest" :disabled="isSendingRequest" type="submit"
button-style="theme" class="submit-button"> button-style="theme" class="submit-button">
Save Email Settings {{ $t('admin_settings.email.save_button') }}
</ButtonBase> </ButtonBase>
</ValidationObserver> </ValidationObserver>
</PageTabGroup> </PageTabGroup>
@@ -100,7 +100,7 @@
}, },
data() { data() {
return { return {
isLoading: true, isLoading: false,
isSendingRequest: false, isSendingRequest: false,
encryptionList: [ encryptionList: [
{ {
@@ -136,34 +136,19 @@
// Send request to get verify account // Send request to get verify account
axios axios
.put('/api/settings/email', this.mail) .put('/api/settings/email', this.mail)
.then(response => { .then(() => {
// End loading
this.isSendingRequest = false
events.$emit('toaster', { events.$emit('toaster', {
type: 'success', type: 'success',
message: 'Your email settings was updated successfully', message: this.$t('toaster.email_set'),
}) })
}) })
.catch(error => { .finally(() => {
// End loading // End loading
this.isSendingRequest = false this.isSendingRequest = false
}) })
}, },
},
mounted() {
axios.get('/api/settings', {
params: {
column: 'app_title|app_description|app_logo|app_favicon'
}
})
.then(response => {
this.isLoading = false
this.app.title = response.data.app_title
})
} }
} }
</script> </script>

View File

@@ -4,26 +4,35 @@
<!--Personal Information--> <!--Personal Information-->
<PageTabGroup> <PageTabGroup>
<div class="form block-form"> <div class="form block-form">
<FormLabel>Users and Storage</FormLabel> <FormLabel>
{{ $t('admin_settings.others.section_user') }}
</FormLabel>
<div class="block-wrapper"> <div class="block-wrapper">
<div class="input-wrapper"> <div class="input-wrapper">
<div class="inline-wrapper"> <div class="inline-wrapper">
<div class="switch-label"> <div class="switch-label">
<label class="input-label">Storage Limitation:</label> <label class="input-label">
<small class="input-help">If this value is off, all users will have infinity storage capacity and you won't be <br/>able to charge your users for storage plan.</small> {{ $t('admin_settings.others.storage_limit') }}:
</label>
<small class="input-help" v-html="$t('admin_settings.others.storage_limit_help')"></small>
</div> </div>
<SwitchInput @input="$updateText('/settings', 'storage_limitation', app.storageLimitation)" v-model="app.storageLimitation" class="switch" :state="app.storageLimitation"/> <SwitchInput
@input="$updateText('/settings', 'storage_limitation', app.storageLimitation)"
v-model="app.storageLimitation"
class="switch"
:state="app.storageLimitation"
/>
</div> </div>
</div> </div>
</div> </div>
<div class="block-wrapper" v-if="app.storageLimitation"> <div class="block-wrapper" v-if="app.storageLimitation">
<label>Default Storage Space for User Accounts:</label> <label>{{ $t('admin_settings.others.default_storage') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Default Storage Space" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Default Storage Space" rules="required" v-slot="{ errors }">
<input @input="$updateText('/settings', 'storage_default', app.defaultStorage)" <input @input="$updateText('/settings', 'storage_default', app.defaultStorage)"
v-model="app.defaultStorage" v-model="app.defaultStorage"
min="1" min="1"
max="999999999" max="999999999"
placeholder="Set default storage space in GB" :placeholder="$t('admin_settings.others.default_storage_plac')"
type="number" type="number"
:class="{'is-error': errors[0]}" :class="{'is-error': errors[0]}"
/> />
@@ -34,30 +43,36 @@
<div class="input-wrapper"> <div class="input-wrapper">
<div class="inline-wrapper"> <div class="inline-wrapper">
<div class="switch-label"> <div class="switch-label">
<label class="input-label">Allow User Registration:</label> <label class="input-label">
<small class="input-help">You can disable public registration for new users. You will still able to <br/>create new users in administration panel.</small> {{ $t('admin_settings.others.allow_registration') }}:
</label>
<small class="input-help" v-html="$t('admin_settings.others.allow_registration_help')"></small>
</div> </div>
<SwitchInput @input="$updateText('/settings', 'registration', app.userRegistration)" v-model="app.userRegistration" class="switch" :state="app.userRegistration"/> <SwitchInput @input="$updateText('/settings', 'registration', app.userRegistration)"
v-model="app.userRegistration"
class="switch"
:state="app.userRegistration"
/>
</div> </div>
</div> </div>
</div> </div>
<FormLabel class="mt-70">Others Settings</FormLabel> <FormLabel class="mt-70">{{ $t('admin_settings.others.section_others') }}</FormLabel>
<div class="block-wrapper"> <div class="block-wrapper">
<label>Contact Email:</label> <label>{{ $t('admin_settings.others.contact_email') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Contact Email" <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Contact Email"
rules="required" v-slot="{ errors }"> rules="required" v-slot="{ errors }">
<input @input="$updateText('/settings', 'contact_email', app.contactMail)" v-model="app.contactMail" <input @input="$updateText('/settings', 'contact_email', app.contactMail)" v-model="app.contactMail"
placeholder="Type your contact email" type="email" :class="{'is-error': errors[0]}"/> :placeholder="$t('admin_settings.others.contact_email_plac')" type="email" :class="{'is-error': errors[0]}"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
<div class="block-wrapper"> <div class="block-wrapper">
<label>Google Analytics Code (optional):</label> <label>{{ $t('admin_settings.others.google_analytics') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Google Analytics Code" <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Google Analytics Code"
v-slot="{ errors }"> v-slot="{ errors }">
<input @input="$updateText('/settings', 'google_analytics', app.googleAnalytics)" v-model="app.googleAnalytics" <input @input="$updateText('/settings', 'google_analytics', app.googleAnalytics)" v-model="app.googleAnalytics"
placeholder="Paste your Google Analytics Code" :placeholder="$t('admin_settings.others.google_analytics_plac')"
type="text" :class="{'is-error': errors[0]}"/> type="text" :class="{'is-error': errors[0]}"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
@@ -138,13 +153,4 @@
.block-form { .block-form {
max-width: 100%; max-width: 100%;
} }
@media only screen and (max-width: 960px) {
}
@media (prefers-color-scheme: dark) {
}
</style> </style>

View File

@@ -4,22 +4,22 @@
<!--Personal Information--> <!--Personal Information-->
<PageTabGroup> <PageTabGroup>
<div class="form block-form"> <div class="form block-form">
<FormLabel>Stripe Payments</FormLabel> <FormLabel>{{ $t('admin_settings.payments.section_payments') }}</FormLabel>
<InfoBox> <InfoBox>
<p>Your Stripe credentials is not showed because these values are secret and must not be revealed by stranger. You can change your Stripe credentials in your <b>.env</b> file.</p> <p v-html="$t('admin_settings.payments.credentials_disclaimer')"></p>
</InfoBox> </InfoBox>
<div class="block-wrapper"> <div class="block-wrapper">
<div class="input-wrapper"> <div class="input-wrapper">
<div class="inline-wrapper"> <div class="inline-wrapper">
<div class="switch-label"> <div class="switch-label">
<label class="input-label">Allow Subscription Payments:</label> <label class="input-label">{{ $t('admin_settings.payments.allow_payments') }}:</label>
</div> </div>
<SwitchInput @input="$updateText('/settings', 'payments_active', payments.status)" v-model="payments.status" class="switch" :state="payments.status"/> <SwitchInput @input="$updateText('/settings', 'payments_active', payments.status)" v-model="payments.status" class="switch" :state="payments.status"/>
</div> </div>
</div> </div>
</div> </div>
<div class="block-wrapper"> <div class="block-wrapper">
<label>Stripe webhook URL:</label> <label>{{ $t('admin_settings.payments.webhook_url') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Webhook URL" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Webhook URL" rules="required" v-slot="{ errors }">
<input :value="stripeWebhookEndpoint" type="text" disabled/> <input :value="stripeWebhookEndpoint" type="text" disabled/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
@@ -102,13 +102,4 @@
.block-form { .block-form {
max-width: 100%; max-width: 100%;
} }
@media only screen and (max-width: 960px) {
}
@media (prefers-color-scheme: dark) {
}
</style> </style>

View File

@@ -1,6 +1,6 @@
<template> <template>
<div id="single-page"> <div id="single-page">
<div id="page-content" v-if="! isLoading"> <div id="page-content" v-if="! isLoading && data">
<div class="dashboard-headline"> <div class="dashboard-headline">
<div class="logo"> <div class="logo">
<a href="https://vuefilemanager.com" target="_blank"> <a href="https://vuefilemanager.com" target="_blank">
@@ -21,7 +21,7 @@
{{ data.license }} {{ data.license }}
</ColorLabel> </ColorLabel>
</a> </a>
<a href="https://vuefilemanager.com" target="_blank" class="became-backer"> <a v-if="! config.isDemo" href="https://vuefilemanager.com" target="_blank" class="became-backer">
<div class="icon"> <div class="icon">
<credit-card-icon size="15"></credit-card-icon> <credit-card-icon size="15"></credit-card-icon>
</div> </div>
@@ -124,6 +124,8 @@
axios.get('/api/dashboard') axios.get('/api/dashboard')
.then(response => { .then(response => {
this.data = response.data this.data = response.data
})
.finally(() => {
this.isLoading = false this.isLoading = false
}) })
} }

View File

@@ -6,15 +6,17 @@
<div class="content-page"> <div class="content-page">
<ValidationObserver ref="personalInformation" v-slot="{ invalid }" tag="form" class="form block-form form-fixed-width"> <ValidationObserver ref="personalInformation" v-slot="{ invalid }" tag="form" class="form block-form form-fixed-width">
<FormLabel>{{ page.data.attributes.title }}</FormLabel> <FormLabel>
{{ page.data.attributes.title }}
</FormLabel>
<!--Visible--> <!--Visible-->
<div class="block-wrapper"> <div class="block-wrapper">
<div class="input-wrapper"> <div class="input-wrapper">
<div class="inline-wrapper"> <div class="inline-wrapper">
<div class="switch-label"> <div class="switch-label">
<label class="input-label">Visibility:</label> <label class="input-label">{{ $t('admin_pages.form.visibility') }}:</label>
<small class="input-help">Status of your page visibility on website.</small> <small class="input-help">{{ $t('admin_pages.form.visibility_help') }}</small>
</div> </div>
<SwitchInput @input="changeStatus" class="switch" :state="page.data.attributes.visibility"/> <SwitchInput @input="changeStatus" class="switch" :state="page.data.attributes.visibility"/>
</div> </div>
@@ -22,28 +24,28 @@
</div> </div>
<div class="block-wrapper"> <div class="block-wrapper">
<label>Title:</label> <label>{{ $t('admin_pages.form.title') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Name" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Name" rules="required" v-slot="{ errors }">
<input @input="$updateText('/pages/' + $route.params.slug, 'title', page.data.attributes.title)" v-model="page.data.attributes.title" <input @input="$updateText('/pages/' + $route.params.slug, 'title', page.data.attributes.title)" v-model="page.data.attributes.title"
placeholder="Title name" type="text" :class="{'is-error': errors[0]}"/> :placeholder="$t('admin_pages.form.title_plac')" type="text" :class="{'is-error': errors[0]}"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
<div class="block-wrapper"> <div class="block-wrapper">
<label>Slug:</label> <label>{{ $t('admin_pages.form.slug') }}:</label>
<div class="input-wrapper"> <div class="input-wrapper">
<input v-model="page.data.attributes.slug" type="text" disabled/> <input v-model="page.data.attributes.slug" type="text" disabled/>
</div> </div>
</div> </div>
<div class="block-wrapper"> <div class="block-wrapper">
<label>Title:</label> <label>{{ $t('admin_pages.form.content') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Name" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Name" rules="required" v-slot="{ errors }">
<textarea <textarea
@input="$updateText('/pages/' + $route.params.slug, 'content', page.data.attributes.content)" @input="$updateText('/pages/' + $route.params.slug, 'content', page.data.attributes.content)"
v-model="page.data.attributes.content" v-model="page.data.attributes.content"
placeholder="Type your content here..." :placeholder="$t('admin_pages.form.content_plac')"
:class="{'is-error': errors[0]}" :class="{'is-error': errors[0]}"
rows="18" rows="18"
></textarea> ></textarea>

View File

@@ -14,7 +14,7 @@
<settings-icon size="17"></settings-icon> <settings-icon size="17"></settings-icon>
</div> </div>
<div class="label"> <div class="label">
Settings {{ $t('admin_page_plans.tabs.settings') }}
</div> </div>
</router-link> </router-link>
@@ -24,7 +24,7 @@
<users-icon size="17"></users-icon> <users-icon size="17"></users-icon>
</div> </div>
<div class="label"> <div class="label">
Subscribers {{ $t('admin_page_plans.tabs.subscribers') }}
</div> </div>
</router-link> </router-link>
@@ -34,7 +34,7 @@
<trash2-icon size="17"></trash2-icon> <trash2-icon size="17"></trash2-icon>
</div> </div>
<div class="label"> <div class="label">
Delete Plan {{ $t('admin_page_plans.tabs.delete') }}
</div> </div>
</router-link> </router-link>
</div> </div>

View File

@@ -8,52 +8,60 @@
<ValidationObserver @submit.prevent="createPlan" ref="createPlan" v-slot="{ invalid }" tag="form" class="form block-form form-fixed-width"> <ValidationObserver @submit.prevent="createPlan" ref="createPlan" v-slot="{ invalid }" tag="form" class="form block-form form-fixed-width">
<div class="form-group"> <div class="form-group">
<FormLabel>Plan Details</FormLabel> <FormLabel>
{{ $t('admin_page_plans.form.title_details') }}
</FormLabel>
<!--Name--> <!--Name-->
<div class="block-wrapper"> <div class="block-wrapper">
<label>Name:</label> <label>{{ $t('admin_page_plans.form.name') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Name" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Name" rules="required" v-slot="{ errors }">
<input v-model="plan.name" placeholder="Plan name" type="text" :class="{'is-error': errors[0]}"/> <input v-model="plan.name" :placeholder="$t('admin_page_plans.form.name_plac')" type="text" :class="{'is-error': errors[0]}"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
<!--Description--> <!--Description-->
<div class="block-wrapper"> <div class="block-wrapper">
<label>Description (optional):</label> <label>{{ $t('admin_page_plans.form.description') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Description" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Description" v-slot="{ errors }">
<textarea v-model="plan.description" placeholder="Plan description" :class="{'is-error': errors[0]}"/> <textarea v-model="plan.description" :placeholder="$t('admin_page_plans.form.description_plac')" :class="{'is-error': errors[0]}"></textarea>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
<FormLabel>Plan Pricing</FormLabel> <FormLabel>
{{ $t('admin_page_plans.form.title_pricing') }}
</FormLabel>
<!--Price--> <!--Price-->
<div class="block-wrapper"> <div class="block-wrapper">
<label>Price:</label> <label>{{ $t('admin_page_plans.form.price') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Plan price" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Plan price" rules="required" v-slot="{ errors }">
<input v-model="plan.price" placeholder="Plan price" type="number" step="0.01" min="1" max="99999" :class="{'is-error': errors[0]}"/> <input v-model="plan.price" :placeholder="$t('admin_page_plans.form.price_plac')" type="number" step="0.01" min="1" max="99999"
:class="{'is-error': errors[0]}"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
<!--Storage Capacity--> <!--Storage Capacity-->
<div class="block-wrapper"> <div class="block-wrapper">
<label>Storage Capacity:</label> <label>{{ $t('admin_page_plans.form.storage') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Storage capacity" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Storage capacity" rules="required" v-slot="{ errors }">
<input v-model="plan.capacity" placeholder="Storage capacity" type="number" min="1" max="999999999" :class="{'is-error': errors[0]}"/> <input v-model="plan.capacity" :placeholder="$t('admin_page_plans.form.storage_plac')" type="number" min="1" max="999999999"
:class="{'is-error': errors[0]}"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
<small class="input-help">You have to type only number e.g. value '5' means, user will have 5GB of storage capacity.</small> <small class="input-help">
{{ $t('admin_page_plans.form.storage_helper') }}
</small>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<ButtonBase :disabled="isLoading" :loading="isLoading" button-style="theme" type="submit"> <ButtonBase :disabled="isLoading" :loading="isLoading" button-style="theme" type="submit">
Create Plan {{ $t('admin_page_plans.create_plan_button') }}
</ButtonBase> </ButtonBase>
</div> </div>
</ValidationObserver> </ValidationObserver>
@@ -72,7 +80,7 @@
import ButtonBase from '@/components/FilesView/ButtonBase' import ButtonBase from '@/components/FilesView/ButtonBase'
import PageHeader from '@/components/Others/PageHeader' import PageHeader from '@/components/Others/PageHeader'
import {required} from 'vee-validate/dist/rules' import {required} from 'vee-validate/dist/rules'
import { mapGetters } from 'vuex' import {mapGetters} from 'vuex'
import {events} from "@/bus" import {events} from "@/bus"
import axios from 'axios' import axios from 'axios'
@@ -119,13 +127,10 @@
}) })
.then(response => { .then(response => {
// End loading
this.isLoading = false
// Show toaster // Show toaster
events.$emit('toaster', { events.$emit('toaster', {
type: 'success', type: 'success',
message: 'Your plan was successfully created!', message: this.$t('toaster.plan_created'),
}) })
// Go to User page // Go to User page
@@ -136,29 +141,14 @@
// Validation errors // Validation errors
if (error.response.status == 422) { if (error.response.status == 422) {
// Email validation error
if (error.response.data.errors['email']) {
this.$refs.createPlan.setErrors({
'email': error.response.data.errors['email']
});
}
// Password validation error
if (error.response.data.errors['password']) {
this.$refs.createPlan.setErrors({
'password': error.response.data.errors['password']
});
}
// Password validation error // Password validation error
if (error.response.data.errors['storage_capacity']) { if (error.response.data.errors['storage_capacity']) {
this.$refs.createPlan.setErrors({ this.$refs.createPlan.setErrors({
'storage capacity': 'The storage capacity must be lower than 10 digit number.' 'storage capacity': this.$t('errors.capacity_digit')
}); });
} }
} else { } else {
events.$emit('alert:open', { events.$emit('alert:open', {
@@ -167,9 +157,11 @@
}) })
} }
}).finally(() => {
// End loading // End loading
this.isLoading = false this.isLoading = false
}) })
} }
}, },
} }

View File

@@ -1,24 +1,19 @@
<template> <template>
<PageTab class="form-fixed-width"> <PageTab class="form-fixed-width">
<PageTabGroup> <PageTabGroup>
<FormLabel>Delete Plan</FormLabel> <FormLabel>
{{ $t('admin_page_plans.form.title_delete') }}
</FormLabel>
<InfoBox> <InfoBox>
<p>You can delete plan, but, pay attention!</p> <p>{{ $t('admin_page_plans.disclaimer_delete_plan') }}</p>
</InfoBox> </InfoBox>
<ValidationObserver ref="deletePlan" @submit.prevent="deletePlan" v-slot="{ invalid }" tag="form" <ValidationObserver ref="deletePlan" @submit.prevent="deletePlan" v-slot="{ invalid }" tag="form" class="form block-form">
class="form block-form"> <ValidationProvider tag="div" class="block-wrapper" v-slot="{ errors }" mode="passive" name="Plan name" :rules="'required|is:' + plan.attributes.name">
<ValidationProvider tag="div" class="block-wrapper" v-slot="{ errors }" mode="passive"
name="Plan name" :rules="'required|is:' + plan.attributes.name">
<label>{{ $t('admin_page_user.label_delete_user', {user: plan.attributes.name}) }}:</label> <label>{{ $t('admin_page_user.label_delete_user', {user: plan.attributes.name}) }}:</label>
<div class="single-line-form"> <div class="single-line-form">
<input v-model="planName" <input v-model="planName" :placeholder="$t('admin_page_plans.form.name_delete_plac')" type="text" :class="{'is-error': errors[0]}" />
placeholder="Type plan name" <ButtonBase :loading="isSendingRequest" :disabled="isSendingRequest" type="submit" button-style="danger" class="submit-button">
type="text" {{ $t('admin_page_plans.delete_plan_button') }}
:class="{'is-error': errors[0]}"
/>
<ButtonBase :loading="isSendingRequest" :disabled="isSendingRequest" type="submit"
button-style="danger" class="submit-button">
Delete Plan
</ButtonBase> </ButtonBase>
</div> </div>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
@@ -47,15 +42,15 @@
'plan' 'plan'
], ],
components: { components: {
FormLabel,
InfoBox,
PageTabGroup,
PageTab,
ValidationProvider, ValidationProvider,
ValidationObserver, ValidationObserver,
PageTabGroup,
ButtonBase, ButtonBase,
FormLabel,
SetupBox, SetupBox,
required, required,
InfoBox,
PageTab,
}, },
data() { data() {
return { return {
@@ -88,8 +83,8 @@
// Show message // Show message
events.$emit('success:open', { events.$emit('success:open', {
emoji: '👍', emoji: '👍',
title: 'Plan was deleted', title: this.$t('popup_deleted_plan.title'),
message: 'Your plan was successfully deleted.', message: this.$t('popup_deleted_plan.message'),
}) })
this.$router.push({name: 'Plans'}) this.$router.push({name: 'Plans'})
@@ -116,14 +111,4 @@
.block-form { .block-form {
max-width: 100%; max-width: 100%;
} }
@media only screen and (max-width: 960px) {
}
@media (prefers-color-scheme: dark) {
}
</style> </style>

View File

@@ -2,15 +2,17 @@
<PageTab> <PageTab>
<ValidationObserver ref="personalInformation" v-slot="{ invalid }" tag="form" class="form block-form form-fixed-width"> <ValidationObserver ref="personalInformation" v-slot="{ invalid }" tag="form" class="form block-form form-fixed-width">
<PageTabGroup> <PageTabGroup>
<FormLabel>Plan details</FormLabel> <FormLabel>
{{ $t('admin_page_plans.form.title_details') }}
</FormLabel>
<!--Visible--> <!--Visible-->
<div class="block-wrapper"> <div class="block-wrapper">
<div class="input-wrapper"> <div class="input-wrapper">
<div class="inline-wrapper"> <div class="inline-wrapper">
<div class="switch-label"> <div class="switch-label">
<label class="input-label">Status:</label> <label class="input-label">{{ $t('admin_page_plans.form.status') }}:</label>
<small class="input-help">Status of your plan availability on website.</small> <small class="input-help">{{ $t('admin_page_plans.form.status_help') }}</small>
</div> </div>
<SwitchInput @input="changeStatus" class="switch" :state="plan.attributes.status"/> <SwitchInput @input="changeStatus" class="switch" :state="plan.attributes.status"/>
</div> </div>
@@ -19,34 +21,36 @@
<!--Name--> <!--Name-->
<div class="block-wrapper"> <div class="block-wrapper">
<label>Name:</label> <label>{{ $t('admin_page_plans.form.name') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Name" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Name" rules="required" v-slot="{ errors }">
<input @input="$updateText('/plans/' + $route.params.id + '/update', 'name', plan.attributes.name)" v-model="plan.attributes.name" placeholder="Plan name" type="text" :class="{'is-error': errors[0]}"/> <input @input="$updateText('/plans/' + $route.params.id + '/update', 'name', plan.attributes.name)" v-model="plan.attributes.name" :placeholder="$t('admin_page_plans.form.name_plac')" type="text" :class="{'is-error': errors[0]}"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
<!--Description--> <!--Description-->
<div class="block-wrapper"> <div class="block-wrapper">
<label>Description (optional):</label> <label>{{ $t('admin_page_plans.form.description') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Description" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Description" v-slot="{ errors }">
<textarea @input="$updateText('/plans/' + $route.params.id + '/update', 'description', plan.attributes.description)" v-model="plan.attributes.description" placeholder="Plan description" :class="{'is-error': errors[0]}"/> <textarea @input="$updateText('/plans/' + $route.params.id + '/update', 'description', plan.attributes.description)" v-model="plan.attributes.description" :placeholder="$t('admin_page_plans.form.description_plac')" :class="{'is-error': errors[0]}"></textarea>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
</div> </div>
<!--Storage Capacity--> <!--Storage Capacity-->
<div class="block-wrapper"> <div class="block-wrapper">
<label>Storage Capacity in GB:</label> <label>{{ $t('admin_page_plans.form.storage') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Storage capacity" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Storage capacity" rules="required" v-slot="{ errors }">
<input @input="$updateText('/plans/' + $route.params.id + '/update', 'capacity', plan.attributes.capacity)" v-model="plan.attributes.capacity" placeholder="Storage capacity" type="number" min="1" max="999999999" :class="{'is-error': errors[0]}"/> <input @input="$updateText('/plans/' + $route.params.id + '/update', 'capacity', plan.attributes.capacity)" v-model="plan.attributes.capacity" :placeholder="$t('admin_page_plans.form.storage_plac')" type="number" min="1" max="999999999" :class="{'is-error': errors[0]}"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span> <span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider> </ValidationProvider>
<small class="input-help">You have to type only number e.g. value '5' means, user will have 5GB of storage capacity.</small> <small class="input-help">
{{ $t('admin_page_plans.form.storage_helper') }}
</small>
</div> </div>
<InfoBox> <InfoBox>
<p>Price change for your plan is not available due to Stripe service design. If you wish change your price plan, please, create new plan.</p> <p>{{ $t('admin_page_plans.disclaimer_edit_price') }}</p>
</InfoBox> </InfoBox>
</PageTabGroup> </PageTabGroup>
</ValidationObserver> </ValidationObserver>
@@ -107,13 +111,4 @@
.block-form { .block-form {
max-width: 100%; max-width: 100%;
} }
@media only screen and (max-width: 960px) {
}
@media (prefers-color-scheme: dark) {
}
</style> </style>

View File

@@ -33,7 +33,7 @@
</DatatableWrapper> </DatatableWrapper>
</PageTabGroup> </PageTabGroup>
<InfoBox v-else> <InfoBox v-else>
<p>There is no any subscriber yet.</p> <p>{{ $t('admin_page_plans.subscribers.empty') }}</p>
</InfoBox> </InfoBox>
</PageTab> </PageTab>
</template> </template>
@@ -65,7 +65,7 @@
isLoading: false, isLoading: false,
columns: [ columns: [
{ {
label: 'User', label: this.$t('admin_page_user.table.name'),
field: 'data.attributes.name', field: 'data.attributes.name',
sortable: true sortable: true
}, },
@@ -99,14 +99,4 @@
.block-form { .block-form {
max-width: 100%; max-width: 100%;
} }
@media only screen and (max-width: 960px) {
}
@media (prefers-color-scheme: dark) {
}
</style> </style>

View File

@@ -12,7 +12,7 @@
<!--Avatar--> <!--Avatar-->
<div class="block-wrapper"> <div class="block-wrapper">
<label>Avatar</label> <label>{{ $t('admin_page_user.create_user.avatar') }}</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="avatar" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="avatar" v-slot="{ errors }">
<ImageInput v-model="user.avatar" :error="errors[0]" /> <ImageInput v-model="user.avatar" :error="errors[0]" />
</ValidationProvider> </ValidationProvider>
@@ -206,7 +206,7 @@
if (error.response.data.errors['storage_capacity']) { if (error.response.data.errors['storage_capacity']) {
this.$refs.createUser.setErrors({ this.$refs.createUser.setErrors({
'storage capacity': 'The storage capacity must be lower than 10 digit number.' 'storage capacity': this.$t('errors.capacity_digit')
}); });
} }
} else { } else {

View File

@@ -8,11 +8,12 @@
<!--Info about active subscription--> <!--Info about active subscription-->
<div v-if="! subscription.canceled" class="state active"> <div v-if="! subscription.canceled" class="state active">
<ListInfo class="list-info"> <ListInfo class="list-info">
<ListInfoItem class="list-item" :title="$t('user_subscription.plan')" :content="subscription.attributes.name + ' - ' + subscription.attributes.capacity_formatted"/> <ListInfoItem class="list-item" :title="$t('user_subscription.plan')"
<ListInfoItem class="list-item" :title="$t('user_subscription.billed')" content="Monthly"/> :content="subscription.attributes.name + ' - ' + subscription.attributes.capacity_formatted"/>
<ListInfoItem class="list-item" :title="$t('user_subscription.billed')" :content="$t('admin_page_user.subscription.interval_mo')"/>
<ListInfoItem class="list-item" :title="$t('user_subscription.status')" :content="status"/> <ListInfoItem class="list-item" :title="$t('user_subscription.status')" :content="status"/>
<ListInfoItem class="list-item" :title="$t('user_subscription.created_at')" :content="subscription.attributes.created_at"/> <ListInfoItem class="list-item capitalize" :title="$t('user_subscription.created_at')" :content="subscription.attributes.created_at"/>
<ListInfoItem class="list-item" :title="$t('user_subscription.renews_at')" :content="subscription.attributes.ends_at"/> <ListInfoItem class="list-item capitalize" :title="$t('user_subscription.renews_at')" :content="subscription.attributes.ends_at"/>
</ListInfo> </ListInfo>
</div> </div>
@@ -21,8 +22,8 @@
<ListInfo class="list-info"> <ListInfo class="list-info">
<ListInfoItem class="list-item" :title="$t('user_subscription.plan')" :content="subscription.attributes.name"/> <ListInfoItem class="list-item" :title="$t('user_subscription.plan')" :content="subscription.attributes.name"/>
<ListInfoItem class="list-item" :title="$t('user_subscription.status')" :content="status"/> <ListInfoItem class="list-item" :title="$t('user_subscription.status')" :content="status"/>
<ListInfoItem class="list-item" :title="$t('user_subscription.canceled_at')" :content="subscription.attributes.canceled_at"/> <ListInfoItem class="list-item capitalize" :title="$t('user_subscription.canceled_at')" :content="subscription.attributes.canceled_at"/>
<ListInfoItem class="list-item" :title="$t('user_subscription.ends_at')" :content="subscription.attributes.ends_at"/> <ListInfoItem class="list-item capitalize" :title="$t('user_subscription.ends_at')" :content="subscription.attributes.ends_at"/>
</ListInfo> </ListInfo>
</div> </div>
</PageTabGroup> </PageTabGroup>
@@ -83,10 +84,9 @@
this.subscription = response.data.data this.subscription = response.data.data
this.isLoading = false this.isLoading = false
}).catch(error => { }).catch(error => {
if (error.response.status == 404) { if (error.response.status == 404) {
this.isLoading = false this.isLoading = false
} }
}) })
} }
} }

View File

@@ -94,7 +94,7 @@
<div v-if="config.storageLimit && config.isSaaS && config.app_payments_active" class="headline-actions"> <div v-if="config.storageLimit && config.isSaaS && config.app_payments_active" class="headline-actions">
<router-link :to="{name: 'UpgradePlan'}" v-if="! user.relationships.subscription || (user.relationships.subscription && ! user.relationships.subscription.data.attributes.is_highest)"> <router-link :to="{name: 'UpgradePlan'}" v-if="! user.relationships.subscription || (user.relationships.subscription && ! user.relationships.subscription.data.attributes.is_highest)">
<ButtonBase class="upgrade-button" button-style="secondary" type="button"> <ButtonBase class="upgrade-button" button-style="secondary" type="button">
{{ $t('upgrade.upgrade_plan') }} {{ $t('global.upgrade_plan') }}
</ButtonBase> </ButtonBase>
</router-link> </router-link>
</div> </div>

View File

@@ -218,7 +218,7 @@
</ButtonBase> </ButtonBase>
<p class="error-message" v-if="isError">{{ errorMessage }}</p> <p class="error-message" v-if="isError">{{ errorMessage }}</p>
<small class="disclaimer"> <small class="disclaimer">
{{ $t('page_upgrade_account.summary.submit_disclaimer') }} {{ $t('page_upgrade_account.summary.submit_disclaimer', {app: config.app_name}) }}
</small> </small>
</div> </div>
</div> </div>
@@ -246,9 +246,7 @@
import {events} from "@/bus" import {events} from "@/bus"
import axios from 'axios' import axios from 'axios'
let stripe = Stripe(`pk_test_51GsACaCBETHMUxzVsYkeApHtqb85paMuye7G77PDDQ28kXqDJ5HTmqLi13aM6xee81OQK1fhkTZ7vmDiWLStU9160061Yb2MtL`), let [stripe, card] = [undefined, undefined];
elements = stripe.elements(),
card = undefined;
export default { export default {
name: 'UpgradePlan', name: 'UpgradePlan',
@@ -266,7 +264,7 @@
Spinner, Spinner,
}, },
computed: { computed: {
...mapGetters(['requestedPlan']), ...mapGetters(['requestedPlan', 'config']),
billing() { billing() {
return this.$store.getters.user.relationships.settings.data.attributes return this.$store.getters.user.relationships.settings.data.attributes
} }
@@ -291,6 +289,15 @@
} }
}, },
methods: { methods: {
initStripe() {
stripe = Stripe(this.config.stripe_public_key)
let elements = stripe.elements();
card = elements.create('card');
card.mount(this.$refs.stripeCard);
},
payByNewCardForm() { payByNewCardForm() {
this.payByNewCard = true this.payByNewCard = true
this.isError = false this.isError = false
@@ -392,8 +399,7 @@
if (!this.requestedPlan) { if (!this.requestedPlan) {
this.$router.push({name: 'UpgradePlan'}) this.$router.push({name: 'UpgradePlan'})
} else { } else {
card = elements.create('card'); this.initStripe()
card.mount(this.$refs.stripeCard);
} }
}, },
created() { created() {

View File

@@ -49,12 +49,12 @@
this.$store.commit('STORE_REQUESTED_PLAN', plan) this.$store.commit('STORE_REQUESTED_PLAN', plan)
} }
}, },
/*beforeMount() { beforeMount() {
let StripeElementsScript = document.createElement('script') let StripeElementsScript = document.createElement('script')
StripeElementsScript.setAttribute('src', 'https://js.stripe.com/v3/') StripeElementsScript.setAttribute('src', 'https://js.stripe.com/v3/')
document.head.appendChild(StripeElementsScript) document.head.appendChild(StripeElementsScript)
},*/ },
} }
</script> </script>

View File

@@ -136,8 +136,8 @@
}, },
deleteCard(card) { deleteCard(card) {
events.$emit('confirm:open', { events.$emit('confirm:open', {
title: this.$t('popup_set_card.'), title: this.$t('popup_set_card.title'),
message: this.$t('popup_set_card.'), message: this.$t('popup_set_card.message'),
action: { action: {
id: card.card_id, id: card.card_id,
operation: 'delete-credit-card' operation: 'delete-credit-card'

View File

@@ -8,11 +8,12 @@
<!--Info about active subscription--> <!--Info about active subscription-->
<div v-if="! subscription.data.attributes.canceled" class="state active"> <div v-if="! subscription.data.attributes.canceled" class="state active">
<ListInfo class="list-info"> <ListInfo class="list-info">
<ListInfoItem class="list-item" :title="$t('user_subscription.plan')" :content="subscription.data.attributes.name + ' - ' + subscription.data.attributes.capacity_formatted"/> <ListInfoItem class="list-item" :title="$t('user_subscription.plan')"
<ListInfoItem class="list-item" :title="$t('user_subscription.billed')" content="Monthly"/> :content="subscription.data.attributes.name + ' - ' + subscription.data.attributes.capacity_formatted"/>
<ListInfoItem class="list-item" :title="$t('user_subscription.billed')" :content="$t('admin_page_user.subscription.interval_mo')"/>
<ListInfoItem class="list-item" :title="$t('user_subscription.status')" :content="status"/> <ListInfoItem class="list-item" :title="$t('user_subscription.status')" :content="status"/>
<ListInfoItem class="list-item" :title="$t('user_subscription.created_at')" :content="subscription.data.attributes.created_at"/> <ListInfoItem class="list-item capitalize" :title="$t('user_subscription.created_at')" :content="subscription.data.attributes.created_at"/>
<ListInfoItem class="list-item" :title="$t('user_subscription.renews_at')" :content="subscription.data.attributes.ends_at"/> <ListInfoItem class="list-item capitalize" :title="$t('user_subscription.renews_at')" :content="subscription.data.attributes.ends_at"/>
</ListInfo> </ListInfo>
<div class="plan-action"> <div class="plan-action">
<ButtonBase <ButtonBase
@@ -30,8 +31,8 @@
<ListInfo class="list-info"> <ListInfo class="list-info">
<ListInfoItem class="list-item" :title="$t('user_subscription.plan')" :content="subscription.data.attributes.name"/> <ListInfoItem class="list-item" :title="$t('user_subscription.plan')" :content="subscription.data.attributes.name"/>
<ListInfoItem class="list-item" :title="$t('user_subscription.status')" :content="status"/> <ListInfoItem class="list-item" :title="$t('user_subscription.status')" :content="status"/>
<ListInfoItem class="list-item" :title="$t('user_subscription.canceled_at')" :content="subscription.data.attributes.canceled_at"/> <ListInfoItem class="list-item capitalize" :title="$t('user_subscription.canceled_at')" :content="subscription.data.attributes.canceled_at"/>
<ListInfoItem class="list-item" :title="$t('user_subscription.ends_at')" :content="subscription.data.attributes.ends_at"/> <ListInfoItem class="list-item capitalize" :title="$t('user_subscription.ends_at')" :content="subscription.data.attributes.ends_at"/>
</ListInfo> </ListInfo>
<div class="plan-action"> <div class="plan-action">
<ButtonBase <ButtonBase
@@ -60,7 +61,7 @@
import InfoBox from '@/components/Others/Forms/InfoBox' import InfoBox from '@/components/Others/Forms/InfoBox'
import ListInfo from '@/components/Others/ListInfo' import ListInfo from '@/components/Others/ListInfo'
import {ExternalLinkIcon} from "vue-feather-icons" import {ExternalLinkIcon} from "vue-feather-icons"
import { mapGetters } from 'vuex' import {mapGetters} from 'vuex'
import {events} from "@/bus" import {events} from "@/bus"
import axios from 'axios' import axios from 'axios'
@@ -113,7 +114,7 @@
cancelSubscription() { cancelSubscription() {
// Set confirm button // Set confirm button
if (! this.isConfirmedCancel) { if (!this.isConfirmedCancel) {
this.isConfirmedCancel = true this.isConfirmedCancel = true
} else { } else {
@@ -132,9 +133,6 @@
this.fetchSubscriptionDetail() this.fetchSubscriptionDetail()
}) })
// End deleting spinner button
this.isDeleting = false
events.$emit('alert:open', { events.$emit('alert:open', {
emoji: '👍', emoji: '👍',
title: this.$t('popup_subscription_cancel.title'), title: this.$t('popup_subscription_cancel.title'),
@@ -143,7 +141,7 @@
button: this.$t('popup_subscription_cancel.button') button: this.$t('popup_subscription_cancel.button')
}) })
}) })
.catch(() => { .finally(() => {
// End deleting spinner button // End deleting spinner button
this.isDeleting = false this.isDeleting = false
@@ -154,7 +152,7 @@
resumeSubscription() { resumeSubscription() {
// Set confirm button // Set confirm button
if (! this.isConfirmedResume) { if (!this.isConfirmedResume) {
this.isConfirmedResume = true this.isConfirmedResume = true
} else { } else {
@@ -178,10 +176,10 @@
events.$emit('alert:open', { events.$emit('alert:open', {
emoji: '👍', emoji: '👍',
title: this.$t('popup_subscription_cancel.title'), title: this.$t('popup_subscription_resumed.title'),
message: this.$t('popup_subscription_cancel.message'), message: this.$t('popup_subscription_resumed.message'),
buttonStyle: 'theme', buttonStyle: 'theme',
button: this.$t('popup_subscription_cancel.button') button: this.$t('popup_subscription_resumed.button')
}) })
}) })
.catch(() => { .catch(() => {
@@ -198,15 +196,15 @@
if (response.status == 204) { if (response.status == 204) {
this.subscription = undefined this.subscription = undefined
this.isLoading = false
} }
if (response.status == 200) { if (response.status == 200) {
this.subscription = response.data this.subscription = response.data
this.isLoading = false
} }
}) }).finally(() => {
this.isLoading = false
})
} }
}, },
created() { created() {

View File

@@ -1,18 +1,48 @@
<?php <?php
return [ return [
'app_description' => '利用 VueFileManager 创建您自己的私有云,由 Laravel and Vue 驱动', 'app_description' => '利用 VueFileManager 创建您自己的私有云,由 Laravel and Vue 驱动',
'user_not_fount' => '我们没有找到此邮箱对应的用户信息。', 'user_not_fount' => '我们没有找到此邮箱对应的用户信息。',
'incorrect_password' => '不好意思,您的密码好像不正确。', 'incorrect_password' => '不好意思,您的密码好像不正确。',
'time' => '%d. %B. %Y 于 %H:%M', 'time' => '%d. %B. %Y 于 %H:%M',
'home' => '首页', 'home' => '首页',
// Reset password email // Reset password email
'reset_password_greeting' => 'Hello!', 'reset_password_greeting' => 'Hello!',
'reset_password_subject' => 'Reset password for your account on ', 'reset_password_subject' => 'Reset password for your account on ',
'reset_password_line_1' => 'You are receiving this email because we received a password reset request for your account.', 'reset_password_line_1' => 'You are receiving this email because we received a password reset request for your account.',
'reset_password_line_2' => 'If you did not request a password reset, no further action is required.', 'reset_password_line_2' => 'If you did not request a password reset, no further action is required.',
'reset_password_action' => 'Reset Password', 'reset_password_action' => 'Reset Password',
'salutation' => 'Regards' 'salutation' => 'Regards',
// Invoice
'print_button' => 'Print Document',
'invoice_title' => 'Invoice',
'date' => 'Date',
'product' => 'Product',
'subscription' => 'Subscription',
'invoice_number' => 'Invoice Number',
'seller' => 'Seller',
'client' => 'Client',
'seller_vat' => 'VAT number',
'seller_name' => 'Name',
'seller_phone' => 'Phone',
'name' => 'Name',
'phone' => 'Phone',
'address' => 'Address',
'city' => 'City',
'state' => 'State',
'postal_code' => 'Postal code',
'country' => 'Country',
'col_description' => 'Description',
'col_date' => 'Date',
'col_amount' => 'Amount',
'total' => 'Total',
]; ];

View File

@@ -14,5 +14,35 @@ return [
'reset_password_line_2' => 'If you did not request a password reset, no further action is required.', 'reset_password_line_2' => 'If you did not request a password reset, no further action is required.',
'reset_password_action' => 'Reset Password', 'reset_password_action' => 'Reset Password',
'salutation' => 'Regards' 'salutation' => 'Regards',
// Invoice
'print_button' => 'Print Document',
'invoice_title' => 'Invoice',
'date' => 'Date',
'product' => 'Product',
'subscription' => 'Subscription',
'invoice_number' => 'Invoice Number',
'seller' => 'Seller',
'client' => 'Client',
'seller_vat' => 'VAT number',
'seller_name' => 'Name',
'seller_phone' => 'Phone',
'name' => 'Name',
'phone' => 'Phone',
'address' => 'Address',
'city' => 'City',
'state' => 'State',
'postal_code' => 'Postal code',
'country' => 'Country',
'col_description' => 'Description',
'col_date' => 'Date',
'col_amount' => 'Amount',
'total' => 'Total',
]; ];

View File

@@ -1,18 +1,48 @@
<?php <?php
return [ return [
'app_description' => 'Vytvor si svoj vlastný privátny cloud s VueFileManager klientom poháňaným Laravelom a Vue', 'app_description' => 'Vytvor si svoj vlastný privátny cloud s VueFileManager klientom poháňaným Laravelom a Vue',
'user_not_fount' => 'Uživateľ s touto emailovou adresou sa nenašiel.', 'user_not_fount' => 'Uživateľ s touto emailovou adresou sa nenašiel.',
'incorrect_password' => 'Prepáč, zadané heslo je nesprávne', 'incorrect_password' => 'Prepáč, zadané heslo je nesprávne',
'time' => '%d. %B. %Y o %H:%M', 'time' => '%d. %B. %Y o %H:%M',
'home' => 'Domov', 'home' => 'Domov',
// Reset password email // Reset password email
'reset_password_greeting' => 'Ahoj!', 'reset_password_greeting' => 'Ahoj!',
'reset_password_subject' => 'Resetujte svoje heslo v aplikácií ', 'reset_password_subject' => 'Resetujte svoje heslo v aplikácií ',
'reset_password_line_1' => 'Tento email ste dostali pretože ste nás požiadali o zmenu hesla pre Váš účet.', 'reset_password_line_1' => 'Tento email ste dostali pretože ste nás požiadali o zmenu hesla pre Váš účet.',
'reset_password_line_2' => 'Pokiaľ ste si nechceli zmeniť heslo, žiadna akcia nie je vyžadovaná.', 'reset_password_line_2' => 'Pokiaľ ste si nechceli zmeniť heslo, žiadna akcia nie je vyžadovaná.',
'reset_password_action' => 'Resetovať heslo', 'reset_password_action' => 'Resetovať heslo',
'salutation' => 'S pozdravom ' 'salutation' => 'S pozdravom ',
// Invoice
'print_button' => 'Vytlačiť dokument',
'invoice_title' => 'Faktúra',
'date' => 'Dátum',
'product' => 'Produkt',
'subscription' => 'Predplatné',
'invoice_number' => 'Číslo faktúry',
'seller' => 'Predajca',
'client' => 'Klient',
'seller_vat' => 'IČ DPH',
'seller_name' => 'Meno',
'seller_phone' => 'Telefónne číslo',
'name' => 'Meno',
'phone' => 'Telefónne číslo',
'address' => 'Adresa',
'city' => 'Mesto',
'state' => 'Štát',
'postal_code' => 'PSČ',
'country' => 'Krajina',
'col_description' => 'Popis',
'col_date' => 'Dátum',
'col_amount' => 'Čiastka',
'total' => 'Spolu',
]; ];

View File

@@ -283,6 +283,10 @@
margin-top: 70px; margin-top: 70px;
} }
.capitalize {
text-transform: capitalize;
}
@media only screen and (max-width: 1024px) { @media only screen and (max-width: 1024px) {
#single-page { #single-page {

View File

@@ -27,7 +27,6 @@
<body> <body>
<div id="app"></div> <div id="app"></div>
<script src="https://js.stripe.com/v3/"></script>
<script> <script>
let config = { let config = {
locale: '{{ \Illuminate\Support\Facades\App::getLocale() }}', locale: '{{ \Illuminate\Support\Facades\App::getLocale() }}',
@@ -42,6 +41,8 @@
host: '{{ url('/') }}', host: '{{ url('/') }}',
api: '{{ url('/api') }}', api: '{{ url('/api') }}',
stripe_public_key: '{{ config('cashier.key') ? config('cashier.key') : null }}',
userRegistration: {{ isset($settings->registration) ? $settings->registration : 1 }}, userRegistration: {{ isset($settings->registration) ? $settings->registration : 1 }},
storageLimit: {{ isset($settings->storage_limitation) ? $settings->storage_limitation : 1 }}, storageLimit: {{ isset($settings->storage_limitation) ? $settings->storage_limitation : 1 }},

View File

@@ -18,7 +18,7 @@
<path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"></path> <path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"></path>
<rect x="6" y="14" width="12" height="8"></rect> <rect x="6" y="14" width="12" height="8"></rect>
</svg> </svg>
<span class="label">Print Document</span> <span class="label">@lang('vuefilemanager.print_button')</span>
</button> </button>
</div> </div>
<div id="invoice-wrapper"> <div id="invoice-wrapper">
@@ -27,46 +27,46 @@
<img src="/assets/images/vuefilemanager-horizontal-logo.svg" alt="VueFileManager"> <img src="/assets/images/vuefilemanager-horizontal-logo.svg" alt="VueFileManager">
</div> </div>
<div class="title"> <div class="title">
<h1>Invoice</h1> <h1>@lang('vuefilemanager.invoice_title')</h1>
</div> </div>
</header> </header>
<section class="invoice-subject"> <section class="invoice-subject">
<ul class="list"> <ul class="list">
<li class="list-item"> <li class="list-item">
<b>Date:</b> <b>@lang('vuefilemanager.date'):</b>
<span>{{ format_date($invoice->date()) }}</span> <span>{{ format_date($invoice->date()) }}</span>
</li> </li>
<li class="list-item"> <li class="list-item">
<b>Product:</b> <b>@lang('vuefilemanager.product'):</b>
<span>Subscription</span> <span>@lang('vuefilemanager.subscription')</span>
</li> </li>
<li class="list-item"> <li class="list-item">
<b>Invoice Number:</b> <b>@lang('vuefilemanager.invoice_number'):</b>
<span>{{ $invoice->number }}</span> <span>{{ $invoice->number }}</span>
</li> </li>
</ul> </ul>
</section> </section>
<div class="invoice-partners"> <div class="invoice-partners">
<div class="partner"> <div class="partner">
<h2 class="partner-title">Seller:</h2> <h2 class="partner-title">@lang('vuefilemanager.seller'):</h2>
<ul class="list"> <ul class="list">
@isset($settings->billing_vat_number) @isset($settings->billing_vat_number)
<li class="list-item"> <li class="list-item">
<b>VAT number:</b> <b>@lang('vuefilemanager.seller_vat'):</b>
<span>{{ $settings->billing_vat_number }}</span> <span>{{ $settings->billing_vat_number }}</span>
</li> </li>
@endisset @endisset
@isset($settings->billing_name) @isset($settings->billing_name)
<li class="list-item"> <li class="list-item">
<b>Name:</b> <b>@lang('vuefilemanager.seller_name'):</b>
<span>{{ $settings->billing_name }}</span> <span>{{ $settings->billing_name }}</span>
</li> </li>
@endisset @endisset
@isset($settings->billing_phone_number) @isset($settings->billing_phone_number)
<li class="list-item"> <li class="list-item">
<b>Phone:</b> <b>@lang('vuefilemanager.seller_phone'):</b>
<span>{{ $settings->billing_phone_number }}</span> <span>{{ $settings->billing_phone_number }}</span>
</li> </li>
@endisset @endisset
@@ -74,54 +74,54 @@
<ul class="list"> <ul class="list">
@isset($settings->billing_address) @isset($settings->billing_address)
<li class="list-item"> <li class="list-item">
<b>Address:</b> <b>@lang('vuefilemanager.address'):</b>
<span>{{ $settings->billing_address }}</span> <span>{{ $settings->billing_address }}</span>
</li> </li>
@endisset @endisset
@isset($settings->billing_city) @isset($settings->billing_city)
<li class="list-item"> <li class="list-item">
<b>City:</b> <b>@lang('vuefilemanager.city'):</b>
<span>{{ $settings->billing_city }}</span> <span>{{ $settings->billing_city }}</span>
</li> </li>
@endisset @endisset
@isset($settings->billing_state) @isset($settings->billing_state)
<li class="list-item"> <li class="list-item">
<b>State:</b> <b>@lang('vuefilemanager.state'):</b>
<span>{{ $settings->billing_state }}</span> <span>{{ $settings->billing_state }}</span>
</li> </li>
@endisset @endisset
@isset($settings->billing_postal_code) @isset($settings->billing_postal_code)
<li class="list-item"> <li class="list-item">
<b>Postal code:</b> <b>@lang('vuefilemanager.postal_code'):</b>
<span>{{ $settings->billing_postal_code }}</span> <span>{{ $settings->billing_postal_code }}</span>
</li> </li>
@endisset @endisset
@isset($settings->billing_country) @isset($settings->billing_country)
<li class="list-item"> <li class="list-item">
<b>Country:</b> <b>@lang('vuefilemanager.country'):</b>
<span>{{ $settings->billing_country }}</span> <span>{{ $settings->billing_country }}</span>
</li> </li>
@endisset @endisset
</ul> </ul>
</div> </div>
<div class="partner"> <div class="partner">
<h2 class="partner-title">Client:</h2> <h2 class="partner-title">@lang('vuefilemanager.client'):</h2>
<ul class="list"> <ul class="list">
@isset($invoice->customer_name) @isset($invoice->customer_name)
<li class="list-item"> <li class="list-item">
<b>Name:</b> <b>@lang('vuefilemanager.name'):</b>
<span>{{ $invoice->customer_name }}</span> <span>{{ $invoice->customer_name }}</span>
</li> </li>
@endisset @endisset
@isset($invoice->customer_phone) @isset($invoice->customer_phone)
<li class="list-item"> <li class="list-item">
<b>Phone:</b> <b>@lang('vuefilemanager.phone'):</b>
<span>{{ $invoice->customer_phone }}</span> <span>{{ $invoice->customer_phone }}</span>
</li> </li>
@endisset @endisset
@@ -129,35 +129,35 @@
<ul class="list"> <ul class="list">
@isset($invoice->customer_address['line1']) @isset($invoice->customer_address['line1'])
<li class="list-item"> <li class="list-item">
<b>Address:</b> <b>@lang('vuefilemanager.address'):</b>
<span>{{ $invoice->customer_address['line1'] }}</span> <span>{{ $invoice->customer_address['line1'] }}</span>
</li> </li>
@endisset @endisset
@isset($invoice->customer_address['city']) @isset($invoice->customer_address['city'])
<li class="list-item"> <li class="list-item">
<b>City:</b> <b>@lang('vuefilemanager.city'):</b>
<span>{{ $invoice->customer_address['city'] }}</span> <span>{{ $invoice->customer_address['city'] }}</span>
</li> </li>
@endisset @endisset
@isset($invoice->customer_address['state']) @isset($invoice->customer_address['state'])
<li class="list-item"> <li class="list-item">
<b>State:</b> <b>@lang('vuefilemanager.state'):</b>
<span>{{ $invoice->customer_address['state'] }}</span> <span>{{ $invoice->customer_address['state'] }}</span>
</li> </li>
@endisset @endisset
@isset($invoice->customer_address['postal_code']) @isset($invoice->customer_address['postal_code'])
<li class="list-item"> <li class="list-item">
<b>Postal code:</b> <b>@lang('vuefilemanager.postal_code'):</b>
<span>{{ $invoice->customer_address['postal_code'] }}</span> <span>{{ $invoice->customer_address['postal_code'] }}</span>
</li> </li>
@endisset @endisset
@isset($invoice->customer_address['country']) @isset($invoice->customer_address['country'])
<li class="list-item"> <li class="list-item">
<b>Country:</b> <b>@lang('vuefilemanager.country'):</b>
<span>{{ $invoice->customer_address['country'] }}</span> <span>{{ $invoice->customer_address['country'] }}</span>
</li> </li>
@endisset @endisset
@@ -168,9 +168,9 @@
<table class="table"> <table class="table">
<thead class="table-header"> <thead class="table-header">
<tr> <tr>
<td>Description</td> <td>@lang('vuefilemanager.col_description')</td>
<td>Date</td> <td>@lang('vuefilemanager.col_date')</td>
<td>Amount</td> <td>@lang('vuefilemanager.col_amount')</td>
</tr> </tr>
</thead> </thead>
<tbody class="table-body"> <tbody class="table-body">
@@ -183,7 +183,7 @@
</table> </table>
</div> </div>
<div class="invoice-summary"> <div class="invoice-summary">
<b>Total {{ $invoice->total() }}</b> <b>@lang('vuefilemanager.total') {{ $invoice->total() }}</b>
</div> </div>
</div> </div>
</body> </body>

View File

@@ -0,0 +1 @@
9999999999a:2:{s:4:"plan";a:20:{s:2:"id";s:12:"starter-pack";s:6:"object";s:4:"plan";s:6:"active";b:1;s:15:"aggregate_usage";N;s:6:"amount";i:999;s:14:"amount_decimal";s:3:"999";s:14:"billing_scheme";s:8:"per_unit";s:7:"created";i:1593769244;s:8:"currency";s:3:"usd";s:8:"interval";s:5:"month";s:14:"interval_count";i:1;s:8:"livemode";b:0;s:8:"metadata";a:0:{}s:8:"nickname";N;s:7:"product";s:19:"prod_HZvEp2UNNs7zYx";s:5:"tiers";N;s:10:"tiers_mode";N;s:15:"transform_usage";N;s:17:"trial_period_days";N;s:10:"usage_type";s:8:"licensed";}s:7:"product";a:14:{s:2:"id";s:19:"prod_HZvEp2UNNs7zYx";s:6:"object";s:7:"product";s:6:"active";b:1;s:10:"attributes";a:0:{}s:7:"created";i:1593769243;s:11:"description";s:24:"The best for starting up";s:6:"images";a:0:{}s:8:"livemode";b:0;s:8:"metadata";a:1:{s:8:"capacity";s:3:"200";}s:4:"name";s:12:"Starter Pack";s:20:"statement_descriptor";N;s:4:"type";s:7:"service";s:10:"unit_label";N;s:7:"updated";i:1593769244;}}

View File

@@ -1 +1 @@
1594287749i:1594287749; 1594538596i:1594538596;

View File

@@ -1 +1 @@
1594287749i:1; 1594538596i:1;

4
webpack.mix.js vendored
View File

@@ -23,10 +23,10 @@ mix.js('resources/js/main.js', 'public/js')
} }
}, },
}) })
.options({ /* .options({
hmrOptions: { hmrOptions: {
host: '172.20.10.5', host: '172.20.10.5',
port: '8080' port: '8080'
}, },
}) })*/
.disableNotifications(); .disableNotifications();