|
@ -1,5 +0,0 @@
|
|||
# Change file name to .env
|
||||
# Change to your own userid unless you want to use the publicly available key
|
||||
USER_ID_OEANDB="400000000"
|
||||
# Change to your own DeepL Auth-Code (get one on DeepL.com)
|
||||
DEEPL_AUTH="code"
|
55
.gitignore
vendored
|
@ -1,21 +1,36 @@
|
|||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
/.pnp
|
||||
.pnp.js
|
||||
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# next.js
|
||||
/.next/
|
||||
/out/
|
||||
|
||||
# production
|
||||
/build
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
privacy-policy.php
|
||||
impressum.php
|
||||
prepros.config
|
||||
css/prepros.config
|
||||
.intern
|
||||
stats.php
|
||||
api/
|
||||
api
|
||||
.env
|
||||
vendor/*
|
||||
vendor/
|
||||
vendor
|
||||
vendor/composer/autoload_files.php
|
||||
vendor/composer/autoload_files.php
|
||||
vendor/composer/autoload_psr4.php
|
||||
vendor/composer/autoload_static.php
|
||||
langcache/
|
||||
includes/url.php
|
||||
node_modules/
|
||||
tos.php
|
||||
*.pem
|
||||
|
||||
# debug
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
.pnpm-debug.log*
|
||||
|
||||
# local env files
|
||||
.env*.local
|
||||
|
||||
# vercel
|
||||
.vercel
|
||||
|
||||
# typescript
|
||||
*.tsbuildinfo
|
||||
next-env.d.ts
|
||||
|
|
9
.gitmodules
vendored
|
@ -1,9 +0,0 @@
|
|||
[submodule "vegan-ingredients-api"]
|
||||
path = vegan-ingredients-api
|
||||
url = https://github.com/JokeNetwork/vegan-ingredients-api
|
||||
[submodule "VeganCheck-Python"]
|
||||
path = VeganCheck-Python
|
||||
url = https://github.com/JokeNetwork/VeganCheck-Python
|
||||
[submodule "vegancheck-stats"]
|
||||
path = vegancheck-stats
|
||||
url = https://github.com/JokeNetwork/vegancheck-stats
|
84
.htaccess
|
@ -1,84 +0,0 @@
|
|||
RewriteBase /
|
||||
|
||||
<ifModule mod_headers.c>
|
||||
Header set Access-Control-Allow-Origin: https://analytics.vegancheck.me
|
||||
</ifModule>
|
||||
|
||||
RewriteEngine on
|
||||
|
||||
# Redirect all to index
|
||||
# FallbackResource /index.php
|
||||
|
||||
# Redirect "datenschutz" to "privacy-policy"
|
||||
RewriteRule datenschutz privacy-policy [L,R=301]
|
||||
|
||||
# UTF-8 Endcoding
|
||||
AddDefaultCharset UTF-8
|
||||
|
||||
ErrorDocument 404 /errordocs/404.php
|
||||
ErrorDocument 403 /errordocs/403.html
|
||||
|
||||
# Don't require .php/.html ending
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteCond %{REQUEST_FILENAME}\.php -f
|
||||
RewriteRule ^(.*)$ $1.php
|
||||
|
||||
AddType application/vnd.ms-fontobject .eot
|
||||
AddType application/x-font-ttf .ttf
|
||||
AddType application/x-font-opentype .otf
|
||||
AddType application/x-font-woff .woff
|
||||
AddType application/x-font-woff2 .woff2
|
||||
AddType application/font-woff2 .woff2
|
||||
AddType image/svg+xml .svg
|
||||
AddType font/ttf .ttf
|
||||
AddType font/otf .otf
|
||||
AddType font/woff .woff
|
||||
AddType font/woff-2 .woff2
|
||||
|
||||
<ifModule mod_gzip.c>
|
||||
mod_gzip_on Yes
|
||||
mod_gzip_dechunk Yes
|
||||
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
|
||||
mod_gzip_item_include handler ^cgi-script$
|
||||
mod_gzip_item_include mime ^text/.*
|
||||
mod_gzip_item_include mime ^application/x-javascript.*
|
||||
mod_gzip_item_exclude mime ^image/.*
|
||||
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
|
||||
</ifModule>
|
||||
|
||||
<IfModule mod_deflate.c>
|
||||
AddOutputFilterByType DEFLATE text/plain
|
||||
AddOutputFilterByType DEFLATE text/html
|
||||
AddOutputFilterByType DEFLATE text/xml
|
||||
AddOutputFilterByType DEFLATE text/css
|
||||
AddOutputFilterByType DEFLATE application/xml
|
||||
AddOutputFilterByType DEFLATE application/xhtml+xml
|
||||
AddOutputFilterByType DEFLATE application/rss+xml
|
||||
AddOutputFilterByType DEFLATE application/javascript
|
||||
AddOutputFilterByType DEFLATE application/x-javascript
|
||||
AddOutputFilterByType DEFLATE application/x-font-ttf application/x-font-opentype image/svg+xml font/woff font/woff-2 font/otf font/ttf
|
||||
</IfModule>
|
||||
|
||||
<IfModule mod_expires.c>
|
||||
ExpiresActive On
|
||||
ExpiresDefault "access 60 seconds"
|
||||
ExpiresByType image/jpg "access plus 1 year"
|
||||
ExpiresByType image/jpeg "access plus 1 year"
|
||||
ExpiresByType image/gif "access plus 1 year"
|
||||
ExpiresByType image/png "access plus 1 year"
|
||||
ExpiresByType image/ico "access plus 1 year"
|
||||
ExpiresByType image/webp "access plus 1 year"
|
||||
ExpiresByType image/svg+xml "access plus 1 year"
|
||||
ExpiresByType text/css "access plus 1 month"
|
||||
ExpiresByType text/javascript "access 1 year"
|
||||
ExpiresByType application/javascript "access 1 year"
|
||||
ExpiresByType application/vnd.ms-fontobject "access plus 1 year"
|
||||
ExpiresByType application/x-font-ttf "access plus 1 year"
|
||||
ExpiresByType application/x-font-opentype "access plus 1 year"
|
||||
ExpiresByType application/x-font-woff "access plus 1 year"
|
||||
ExpiresByType application/font-woff2 "access plus 1 year"
|
||||
ExpiresByType font/ttf "access plus 1 year"
|
||||
ExpiresByType font/otf "access plus 1 year"
|
||||
ExpiresByType font/woff "access plus 1 year"
|
||||
ExpiresByType font/woff-2 "access plus 1 year"
|
||||
</IfModule>
|
|
@ -1,15 +0,0 @@
|
|||
# Our security address
|
||||
Contact: mailto:security@cldsi.de
|
||||
|
||||
# Our OpenPGP key
|
||||
Encryption: https://cldsi.de/pgp.txt
|
||||
|
||||
Preferred-Languages: en, de
|
||||
|
||||
# Our seurity policy
|
||||
Policy: https://philip-media.github.io/security-policy/en.html
|
||||
Acknowledgments: https://philip-media.github.io/security-policy/Acknowledgments.html
|
||||
|
||||
Expires: 2031-10-31T23:00:00.000Z
|
||||
|
||||
Canonical: https://vegancheck.me/.well-known/security.txt
|
19
README.md
|
@ -1,5 +1,5 @@
|
|||
<p align="center">
|
||||
<img width="100px" src="img/hero_icon.png" align="center" alt="VeganCheck Logo">
|
||||
<img width="100px" src="public/img/hero_icon.png" align="center" alt="VeganCheck Logo">
|
||||
</p>
|
||||
<h3 align="center">VeganCheck.me</h3>
|
||||
|
||||
|
@ -17,13 +17,13 @@
|
|||
|
||||
## Overview
|
||||
<p align="center">
|
||||
<img src="img/Hero.svg" alt="VeganCheck.me Hero" align="center" height="500"><br>
|
||||
<img src="public/img/Hero.svg" alt="VeganCheck.me Hero" align="center" height="500"><br>
|
||||
<sup>MacBook Pro® and iPhone® are trademarks of Apple Inc., registered in the U.S. and other countries.</sup>
|
||||
</p>
|
||||
|
||||
VeganCheck.me checks the barcode (EAN or UPC) of a food- or non-food-product and tells you if it is vegan or not. It is an useful tool for vegans and vegetarians - Developed with usability and simplicity in mind, so without distracting irrelevant facts or advertising.
|
||||
|
||||
VeganCheck.me combines the Databases of OpenFoodFacts, OpenBeautyFacts, Brocade.io and Open EAN Database in one tool.
|
||||
VeganCheck.me combines the Databases of OpenFoodFacts, OpenBeautyFacts and Open EAN Database, as well as our very own ingredient checker in one tool.
|
||||
<details>
|
||||
<summary>See an example of how it works!</summary>
|
||||
<img src="https://user-images.githubusercontent.com/4144601/198900839-8dc58d58-fdb8-48b6-93e4-a4662ae64954.mov" width="300">
|
||||
|
@ -47,8 +47,9 @@ The [VeganCheck Ingredients API](https://github.com/JokeNetwork/vegan-ingredient
|
|||
## Requirements
|
||||
[Click here to see the installation guide!](https://jokenetwork.github.io/vegancheck.me/)
|
||||
|
||||
- PHP >=7.4 installed
|
||||
- [Composer](https://getcomposer.org/download/) and [npm](https://docs.npmjs.com/cli/v8/commands/npm-install) installed
|
||||
- Node.js (React 18.2.0, Next.js 13.1.6)
|
||||
- [npm](https://docs.npmjs.com/cli/v8/commands/npm-install) installed
|
||||
- Run `npm run start` to develop & `npm run build` to build
|
||||
|
||||
## Browser Compatibility
|
||||
| | <img src="https://user-images.githubusercontent.com/4144601/196047698-f89fddb8-7de1-4309-934d-96ee31343933.png" width="25"> | <img src="https://user-images.githubusercontent.com/4144601/196047892-1f25f72f-dd1e-48d0-bd85-e404a8015ac3.png" width="25"> | <img src="https://user-images.githubusercontent.com/4144601/196047989-b60f7192-dc06-4896-8dba-993939991511.png" width="25"> | <img src="https://user-images.githubusercontent.com/4144601/196048071-381cdc29-bd8a-4f99-9477-3ae2d948d25d.png" width="25"> | <img src="https://user-images.githubusercontent.com/4144601/196048153-fe181ef2-303c-45cc-b4f4-c091ba4b5cea.png" width="25"> | <img src="https://user-images.githubusercontent.com/4144601/196048187-25de52f4-9a4c-4905-92c8-9d18ec9c71b6.png" width="25"> |
|
||||
|
@ -62,8 +63,8 @@ We're happy you want to help! Please read our [Code of Conduct](https://github.c
|
|||
|
||||
Please refer to our issue trackers to see where you could help:
|
||||
- [[Roadmap] v3.x](https://github.com/JokeNetwork/vegancheck.me/issues/152)
|
||||
- [[Tasks] Project enhancements](https://github.com/JokeNetwork/vegancheck.me/issues/53)
|
||||
- [[Tasks] Code Improvements](https://github.com/JokeNetwork/vegancheck.me/issues/52)
|
||||
- [[Tasks] Localization](https://github.com/JokeNetwork/vegancheck.me/issues/59)
|
||||
|
||||
or if you find something else you could improve, just open a new issue for it!
|
||||
|
||||
|
@ -77,13 +78,9 @@ or if you find something else you could improve, just open a new issue for it!
|
|||
## Dependencies & Credits
|
||||
|
||||
This repo uses:
|
||||
|
||||
* [JQuery](https://jquery.com) @jQuery
|
||||
* [BarCode-reader](https://github.com/iemadk/BarCode-reader) [@iemadk](https://github.com/iemadk)
|
||||
* [Quagga.js](https://serratus.github.io/quaggaJS/)
|
||||
* [OpenFoodFacts API](https://openfoodfacts.org/) & [OpenBeautyFacts API](https://openbeautyfacts.org/) [@openfoodfacts](https://github.com/openfoodfacts)
|
||||
* [Brocade.io API](https://brocade.io) [@ferrisoxide](https://github.com/ferrisoxide)
|
||||
* [Open EAN Database](https://opengtindb.org)
|
||||
* [is-vegan](https://github.com/hmontazeri/is-vegan) [@hmontazeri](https://github.com/hmontazeri)
|
||||
|
||||
## License
|
||||
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
Only the latest released version is supported.
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
Report a vulnerability using the information which can be found in our [security.txt](https://vegancheck.me/.well-known/security.txt).
|
|
@ -1,7 +0,0 @@
|
|||
{
|
||||
"require": {
|
||||
"rmccue/requests": "^2.0",
|
||||
"vlucas/phpdotenv": "^5.4",
|
||||
"philipp15b/php-i18n": "^4.0"
|
||||
}
|
||||
}
|
665
composer.lock
generated
|
@ -1,665 +0,0 @@
|
|||
{
|
||||
"_readme": [
|
||||
"This file locks the dependencies of your project to a known state",
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "c69b798082baad0833654d7cf62b3160",
|
||||
"packages": [
|
||||
{
|
||||
"name": "graham-campbell/result-type",
|
||||
"version": "v1.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/GrahamCampbell/Result-Type.git",
|
||||
"reference": "a878d45c1914464426dc94da61c9e1d36ae262a8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/a878d45c1914464426dc94da61c9e1d36ae262a8",
|
||||
"reference": "a878d45c1914464426dc94da61c9e1d36ae262a8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.2.5 || ^8.0",
|
||||
"phpoption/phpoption": "^1.9"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^8.5.28 || ^9.5.21"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"GrahamCampbell\\ResultType\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Graham Campbell",
|
||||
"email": "hello@gjcampbell.co.uk",
|
||||
"homepage": "https://github.com/GrahamCampbell"
|
||||
}
|
||||
],
|
||||
"description": "An Implementation Of The Result Type",
|
||||
"keywords": [
|
||||
"Graham Campbell",
|
||||
"GrahamCampbell",
|
||||
"Result Type",
|
||||
"Result-Type",
|
||||
"result"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/GrahamCampbell/Result-Type/issues",
|
||||
"source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/GrahamCampbell",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-07-30T15:56:11+00:00"
|
||||
},
|
||||
{
|
||||
"name": "mustangostang/spyc",
|
||||
"version": "0.6.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/mustangostang/spyc.git",
|
||||
"reference": "23c35ae854d835f2d7bcc3e3ad743d7e57a8c14d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/mustangostang/spyc/zipball/23c35ae854d835f2d7bcc3e3ad743d7e57a8c14d",
|
||||
"reference": "23c35ae854d835f2d7bcc3e3ad743d7e57a8c14d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "4.3.*@dev"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "0.5.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"Spyc.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "mustangostang",
|
||||
"email": "vlad.andersen@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "A simple YAML loader/dumper class for PHP",
|
||||
"homepage": "https://github.com/mustangostang/spyc/",
|
||||
"keywords": [
|
||||
"spyc",
|
||||
"yaml",
|
||||
"yml"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/mustangostang/spyc/issues",
|
||||
"source": "https://github.com/mustangostang/spyc/tree/master"
|
||||
},
|
||||
"time": "2017-02-24T16:06:33+00:00"
|
||||
},
|
||||
{
|
||||
"name": "philipp15b/php-i18n",
|
||||
"version": "v4.0.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Philipp15b/php-i18n.git",
|
||||
"reference": "693bd6800134ef20e45c070ff382b7ebd143c745"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/Philipp15b/php-i18n/zipball/693bd6800134ef20e45c070ff382b7ebd143c745",
|
||||
"reference": "693bd6800134ef20e45c070ff382b7ebd143c745",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"mustangostang/spyc": "0.6.2",
|
||||
"php": ">= 5.3"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"i18n.class.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Philipp Schröer",
|
||||
"email": "github@philworld.de"
|
||||
}
|
||||
],
|
||||
"description": "Simple i18n class for PHP",
|
||||
"homepage": "https://github.com/Philipp15b/php-i18n",
|
||||
"support": {
|
||||
"issues": "https://github.com/Philipp15b/php-i18n/issues",
|
||||
"source": "https://github.com/Philipp15b/php-i18n"
|
||||
},
|
||||
"time": "2018-03-26T12:50:46+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpoption/phpoption",
|
||||
"version": "1.9.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/schmittjoh/php-option.git",
|
||||
"reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dc5ff11e274a90cc1c743f66c9ad700ce50db9ab",
|
||||
"reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.2.5 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"bamarni/composer-bin-plugin": "^1.8",
|
||||
"phpunit/phpunit": "^8.5.28 || ^9.5.21"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"bamarni-bin": {
|
||||
"bin-links": true,
|
||||
"forward-command": true
|
||||
},
|
||||
"branch-alias": {
|
||||
"dev-master": "1.9-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"PhpOption\\": "src/PhpOption/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"Apache-2.0"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Johannes M. Schmitt",
|
||||
"email": "schmittjoh@gmail.com",
|
||||
"homepage": "https://github.com/schmittjoh"
|
||||
},
|
||||
{
|
||||
"name": "Graham Campbell",
|
||||
"email": "hello@gjcampbell.co.uk",
|
||||
"homepage": "https://github.com/GrahamCampbell"
|
||||
}
|
||||
],
|
||||
"description": "Option Type for PHP",
|
||||
"keywords": [
|
||||
"language",
|
||||
"option",
|
||||
"php",
|
||||
"type"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/schmittjoh/php-option/issues",
|
||||
"source": "https://github.com/schmittjoh/php-option/tree/1.9.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/GrahamCampbell",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-07-30T15:51:26+00:00"
|
||||
},
|
||||
{
|
||||
"name": "rmccue/requests",
|
||||
"version": "v2.0.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/WordPress/Requests.git",
|
||||
"reference": "b717f1d2f4ef7992ec0c127747ed8b7e170c2f49"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/WordPress/Requests/zipball/b717f1d2f4ef7992ec0c127747ed8b7e170c2f49",
|
||||
"reference": "b717f1d2f4ef7992ec0c127747ed8b7e170c2f49",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-json": "*",
|
||||
"php": ">=5.6"
|
||||
},
|
||||
"require-dev": {
|
||||
"dealerdirect/phpcodesniffer-composer-installer": "^0.7",
|
||||
"php-parallel-lint/php-console-highlighter": "^0.5.0",
|
||||
"php-parallel-lint/php-parallel-lint": "^1.3.1",
|
||||
"phpcompatibility/php-compatibility": "^9.0",
|
||||
"requests/test-server": "dev-main",
|
||||
"roave/security-advisories": "dev-latest",
|
||||
"squizlabs/php_codesniffer": "^3.6",
|
||||
"wp-coding-standards/wpcs": "^2.0",
|
||||
"yoast/phpunit-polyfills": "^1.0.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"library/Deprecated.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"WpOrg\\Requests\\": "src/"
|
||||
},
|
||||
"classmap": [
|
||||
"library/Requests.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"ISC"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Ryan McCue",
|
||||
"homepage": "https://rmccue.io/"
|
||||
},
|
||||
{
|
||||
"name": "Alain Schlesser",
|
||||
"homepage": "https://github.com/schlessera"
|
||||
},
|
||||
{
|
||||
"name": "Juliette Reinders Folmer",
|
||||
"homepage": "https://github.com/jrfnl"
|
||||
},
|
||||
{
|
||||
"name": "Contributors",
|
||||
"homepage": "https://github.com/WordPress/Requests/graphs/contributors"
|
||||
}
|
||||
],
|
||||
"description": "A HTTP library written in PHP, for human beings.",
|
||||
"homepage": "https://requests.ryanmccue.info/",
|
||||
"keywords": [
|
||||
"curl",
|
||||
"fsockopen",
|
||||
"http",
|
||||
"idna",
|
||||
"ipv6",
|
||||
"iri",
|
||||
"sockets"
|
||||
],
|
||||
"support": {
|
||||
"docs": "https://requests.ryanmccue.info/",
|
||||
"issues": "https://github.com/WordPress/Requests/issues",
|
||||
"source": "https://github.com/WordPress/Requests"
|
||||
},
|
||||
"time": "2022-10-11T08:15:28+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-ctype",
|
||||
"version": "v1.26.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-ctype.git",
|
||||
"reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4",
|
||||
"reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.1"
|
||||
},
|
||||
"provide": {
|
||||
"ext-ctype": "*"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-ctype": "For best performance"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.26-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
"url": "https://github.com/symfony/polyfill"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"bootstrap.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Symfony\\Polyfill\\Ctype\\": ""
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Gert de Pagter",
|
||||
"email": "BackEndTea@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony polyfill for ctype functions",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"compatibility",
|
||||
"ctype",
|
||||
"polyfill",
|
||||
"portable"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-05-24T11:49:31+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-mbstring",
|
||||
"version": "v1.26.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||
"reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e",
|
||||
"reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.1"
|
||||
},
|
||||
"provide": {
|
||||
"ext-mbstring": "*"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-mbstring": "For best performance"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.26-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
"url": "https://github.com/symfony/polyfill"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"bootstrap.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Symfony\\Polyfill\\Mbstring\\": ""
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nicolas Grekas",
|
||||
"email": "p@tchwork.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony polyfill for the Mbstring extension",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"compatibility",
|
||||
"mbstring",
|
||||
"polyfill",
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-05-24T11:49:31+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php80",
|
||||
"version": "v1.26.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php80.git",
|
||||
"reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace",
|
||||
"reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.1"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.26-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
"url": "https://github.com/symfony/polyfill"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"bootstrap.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Symfony\\Polyfill\\Php80\\": ""
|
||||
},
|
||||
"classmap": [
|
||||
"Resources/stubs"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Ion Bazan",
|
||||
"email": "ion.bazan@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Nicolas Grekas",
|
||||
"email": "p@tchwork.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"compatibility",
|
||||
"polyfill",
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-05-10T07:21:04+00:00"
|
||||
},
|
||||
{
|
||||
"name": "vlucas/phpdotenv",
|
||||
"version": "v5.5.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/vlucas/phpdotenv.git",
|
||||
"reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7",
|
||||
"reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-pcre": "*",
|
||||
"graham-campbell/result-type": "^1.0.2",
|
||||
"php": "^7.1.3 || ^8.0",
|
||||
"phpoption/phpoption": "^1.8",
|
||||
"symfony/polyfill-ctype": "^1.23",
|
||||
"symfony/polyfill-mbstring": "^1.23.1",
|
||||
"symfony/polyfill-php80": "^1.23.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"bamarni/composer-bin-plugin": "^1.4.1",
|
||||
"ext-filter": "*",
|
||||
"phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-filter": "Required to use the boolean validator."
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"bamarni-bin": {
|
||||
"bin-links": true,
|
||||
"forward-command": true
|
||||
},
|
||||
"branch-alias": {
|
||||
"dev-master": "5.5-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Dotenv\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"BSD-3-Clause"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Graham Campbell",
|
||||
"email": "hello@gjcampbell.co.uk",
|
||||
"homepage": "https://github.com/GrahamCampbell"
|
||||
},
|
||||
{
|
||||
"name": "Vance Lucas",
|
||||
"email": "vance@vancelucas.com",
|
||||
"homepage": "https://github.com/vlucas"
|
||||
}
|
||||
],
|
||||
"description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
|
||||
"keywords": [
|
||||
"dotenv",
|
||||
"env",
|
||||
"environment"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/vlucas/phpdotenv/issues",
|
||||
"source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/GrahamCampbell",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-10-16T01:01:54+00:00"
|
||||
}
|
||||
],
|
||||
"packages-dev": [],
|
||||
"aliases": [],
|
||||
"minimum-stability": "stable",
|
||||
"stability-flags": [],
|
||||
"prefer-stable": false,
|
||||
"prefer-lowest": false,
|
||||
"platform": [],
|
||||
"platform-dev": [],
|
||||
"plugin-api-version": "2.3.0"
|
||||
}
|
|
@ -1,190 +0,0 @@
|
|||
@font-face {
|
||||
font-family: 'vegancheckicons';
|
||||
src: url('https://vegancheck.me/css/font/vegancheckicons.eot?33525212');
|
||||
src: url('https://vegancheck.me/css/font/vegancheckicons.eot?33525212#iefix') format('embedded-opentype'),
|
||||
url('https://vegancheck.me/css/font/vegancheckicons.woff2?33525212') format('woff2'),
|
||||
url('https://vegancheck.me/css/font/vegancheckicons.woff?33525212') format('woff'),
|
||||
url('https://vegancheck.me/css/font/vegancheckicons.ttf?33525212') format('truetype'),
|
||||
url('https://vegancheck.me/css/font/vegancheckicons.svg?33525212#vegancheckicons') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'additional_icons';
|
||||
src: url('https://vegancheck.me/css/font/additional_icons.eot?64205737');
|
||||
src: url('https://vegancheck.me/css/font/additional_icons.eot?64205737#iefix') format('embedded-opentype'),
|
||||
url('https://vegancheck.me/css/font/additional_icons.svg?64205737#additional_icons') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
[class^="icon-"]:before,
|
||||
[class*=" icon-"]:before {
|
||||
font-family: "vegancheckicons";
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
speak: never;
|
||||
|
||||
display: inline-block;
|
||||
text-decoration: inherit;
|
||||
width: 1em;
|
||||
margin-right: .2em;
|
||||
text-align: center;
|
||||
/* opacity: .8; */
|
||||
|
||||
/* For safety - reset parent styles, that can break glyph codes*/
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
|
||||
/* fix buttons height, for twitter bootstrap */
|
||||
line-height: 1em;
|
||||
|
||||
/* Animation center compensation - margins should be symmetric */
|
||||
/* remove if not needed */
|
||||
margin-left: .2em;
|
||||
|
||||
/* you can be more comfortable with increased icons size */
|
||||
/* font-size: 120%; */
|
||||
|
||||
/* Font smoothing. That was taken from TWBS */
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
|
||||
/* Uncomment for 3D effect */
|
||||
/* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
|
||||
}
|
||||
|
||||
.icon-greenhosted:before {
|
||||
content: '\e800';
|
||||
}
|
||||
|
||||
/* '' */
|
||||
.icon-opensource:before {
|
||||
content: '\e801';
|
||||
}
|
||||
|
||||
/* '' */
|
||||
.icon-block:before {
|
||||
content: '\e802';
|
||||
}
|
||||
|
||||
/* '' */
|
||||
.icon-lock:before {
|
||||
content: '\e803';
|
||||
}
|
||||
|
||||
/* '' */
|
||||
.icon-ok:before {
|
||||
content: '\e804';
|
||||
}
|
||||
|
||||
/* '' */
|
||||
.icon-barcode:before {
|
||||
content: '\e805';
|
||||
}
|
||||
|
||||
/* '' */
|
||||
.icon-down-open:before {
|
||||
content: '\e806';
|
||||
}
|
||||
|
||||
/* '' */
|
||||
.icon-up-open:before {
|
||||
content: '\e807';
|
||||
}
|
||||
|
||||
/* '' */
|
||||
.icon-left-open:before {
|
||||
content: '\e808';
|
||||
}
|
||||
|
||||
/* '' */
|
||||
.icon-right-open:before {
|
||||
content: '\e809';
|
||||
}
|
||||
|
||||
/* '' */
|
||||
.icon-heart:before {
|
||||
content: '\e80a';
|
||||
}
|
||||
|
||||
/* '' */
|
||||
.icon-attention:before {
|
||||
content: '\e80b';
|
||||
}
|
||||
|
||||
/* '' */
|
||||
.icon-info-circled:before {
|
||||
content: '\e80c';
|
||||
}
|
||||
|
||||
/* '' */
|
||||
.icon-cancel:before {
|
||||
content: '\e80d';
|
||||
}
|
||||
|
||||
/* '' */
|
||||
.icon-vegancheck:before {
|
||||
content: '\e80e';
|
||||
color: #ee5253;
|
||||
}
|
||||
|
||||
/* '' */
|
||||
.icon-off:before {
|
||||
content: '\e80f';
|
||||
}
|
||||
|
||||
/* '' */
|
||||
.icon-pencil:before {
|
||||
content: '\e810';
|
||||
}
|
||||
|
||||
/* '' */
|
||||
.icon-twitter:before {
|
||||
content: '\f099';
|
||||
}
|
||||
|
||||
/* '' */
|
||||
.icon-github:before {
|
||||
content: '\f09b';
|
||||
}
|
||||
|
||||
/* '' */
|
||||
.icon-help:before {
|
||||
content: '\f128';
|
||||
}
|
||||
|
||||
/* '' */
|
||||
.icon-info-alt:before {
|
||||
content: '\f129';
|
||||
}
|
||||
|
||||
/* '' */
|
||||
.icon-lock-open-alt:before {
|
||||
content: '\f13e';
|
||||
}
|
||||
|
||||
/* '' */
|
||||
|
||||
.icon-flash:before {
|
||||
content: '\e900';
|
||||
}
|
||||
|
||||
/* '' */
|
||||
.icon-flipcamera:before {
|
||||
content: '\e901';
|
||||
}
|
||||
|
||||
/* '' */
|
||||
.icon-camera-outline:before {
|
||||
content: '\e902';
|
||||
}
|
||||
|
||||
/* '' */
|
||||
.icon-camera:before {
|
||||
content: '\e903';
|
||||
}
|
||||
|
||||
/* '' */
|
|
@ -1,114 +0,0 @@
|
|||
/* Scanner */
|
||||
.eanscanner {
|
||||
z-index: 999999 !important;
|
||||
}
|
||||
|
||||
/* Scanner close */
|
||||
#close {
|
||||
cursor: pointer;
|
||||
font-weight: bold;
|
||||
position: absolute;
|
||||
z-index: 99999999999;
|
||||
top: 0%;
|
||||
-webkit-transform: translateX(-50%);
|
||||
transform: translateX(-50%);
|
||||
background: var(--bg-color);
|
||||
width: 100%;
|
||||
padding-bottom: rem(16px);
|
||||
padding-top: rem(16px);
|
||||
text-align: left;
|
||||
color: #fff;
|
||||
|
||||
.flex-container {
|
||||
display: flex;
|
||||
flex-flow: row wrap;
|
||||
writing-mode: horizontal-tb;
|
||||
justify-content: space-between;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
margin-left: rem(16px);
|
||||
margin-right: rem(16px);
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.flex-item {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
padding-top: rem(3.2px);
|
||||
font-size: rem(20.8px);
|
||||
|
||||
&:last-child {
|
||||
float: right;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
}
|
||||
|
||||
.middle {
|
||||
font-size: rem(16px);
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.button {
|
||||
font-size: rem(11.2px);
|
||||
color: var(--button-fg);
|
||||
text-transform: uppercase;
|
||||
background: var(--button-bg);
|
||||
padding: rem(8px);
|
||||
padding-left: rem(24px);
|
||||
padding-right: rem(24px);
|
||||
border-radius: rem(48px);
|
||||
}
|
||||
}
|
||||
|
||||
.cam_btn {
|
||||
position: fixed;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
bottom: rem(32px);
|
||||
font-size: rem(19.2px);
|
||||
z-index: 99999999999999999;
|
||||
color: var(--button-fg);
|
||||
text-transform: uppercase;
|
||||
background: var(--button-bg);
|
||||
padding: rem(8px);
|
||||
padding-left: rem(24px);
|
||||
padding-right: rem(24px);
|
||||
border-radius: rem(48px);
|
||||
transition: .8s;
|
||||
|
||||
&:hover,
|
||||
&:active {
|
||||
background: grey;
|
||||
}
|
||||
}
|
||||
|
||||
/* Scanner Overlay */
|
||||
#barcodeicon {
|
||||
font-weight: bold;
|
||||
position: absolute;
|
||||
z-index: 99999999999;
|
||||
top: 30%;
|
||||
left: 50%;
|
||||
opacity: .4;
|
||||
font-size: rem(128px);
|
||||
-webkit-transform: translateX(-50%);
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
|
||||
/* Scanner Underlay */
|
||||
#background {
|
||||
backdrop-filter: blur(rem(48px));
|
||||
z-index: 999;
|
||||
position: fixed;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.name {
|
||||
display: block;
|
||||
padding-bottom: rem(16px);
|
||||
}
|
10
css/style.min.css
vendored
|
@ -1,3 +0,0 @@
|
|||
<?php
|
||||
require_once("../main.php");
|
||||
?>
|
|
@ -32,67 +32,30 @@
|
|||
main
|
||||
</span>
|
||||
<span class="Label mr-1 Label--success">Stable</span>
|
||||
<img width="80px" src="https://raw.githubusercontent.com/JokeNetwork/vegancheck.me/main/img/hero_icon.png" align="right" alt="VeganCheck Logo">
|
||||
<img width="80px" src="https://raw.githubusercontent.com/JokeNetwork/vegancheck.me/main/public/img/hero_icon.png" align="right" alt="VeganCheck Logo">
|
||||
<h1>VeganCheck.me Installation Guide</h1>
|
||||
<p>Installing VeganCheck.me on your own server or hosting your own mirror is straight forward.<br>Here you can find out how it works and what to note.</p>
|
||||
<h2 id="vercek">Deploy to Vercel</h2>
|
||||
<p>The easiest way is to deploy the project to Vercel. Please note that Vercel is not GDPR compliant.</p>
|
||||
<a href="https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FJokeNetwork%2Fvegancheck.me"><img src="https://vercel.com/button" alt="Deploy with Vercel"/></a>
|
||||
<h2 id="requirements">Requirements</h2>
|
||||
<ul>
|
||||
<li>PHP >=7.4 installed (We recommend 8.1 or higher)</li>
|
||||
<li><a href="https://getcomposer.org/download/">Composer</a> and <a href="https://docs.npmjs.com/cli/v8/commands/npm-install">npm</a> installed </li>
|
||||
<li>Node.js (React 18.2.0, Next.js 13.1.6) installed
|
||||
<li><a href="https://docs.npmjs.com/cli/v8/commands/npm-install">npm</a> installed (is automatically installed with Node)</li>
|
||||
</ul>
|
||||
<h2 id="get-started">Get started</h2>
|
||||
<p>Download the <a href="https://github.com/JokeNetwork/vegancheck.me/releases">latest release</a> and upload it to your server or just use the following command:</p>
|
||||
<p>Download the <a href="https://github.com/JokeNetwork/vegancheck.me/releases">latest release</a> or just use the following command:</p>
|
||||
<pre><code class="lang-bash">$ git clone git@github<span class="hljs-selector-class">.com</span>:JokeNetwork/vegancheck<span class="hljs-selector-class">.me</span><span class="hljs-selector-class">.git</span>
|
||||
</code></pre>
|
||||
<h2 id="install-dependencies">Install dependencies</h2>
|
||||
<p>The components <code>rmccue/requests</code>, <code>vlucas/phpdotenv</code>, <code>philipp15b/php-i18n</code>, <code>barcode-reader</code> and <code>jquery</code> are required.</p>
|
||||
<p>Use the following commands to install all at once: </p>
|
||||
<pre><code class="lang-bash"> $ composer <span class="hljs-keyword">install</span>
|
||||
$ npm <span class="hljs-keyword">install</span>
|
||||
</code></pre>
|
||||
<h2 id="configure-environment-variables">Configure environment-variables</h2>
|
||||
<p>To get VeganCheck.me working as expected, you will need to enter your own API-Keys into the <code>.env</code>-file.</p>
|
||||
<ul>
|
||||
<li>First of all, find the <code>.env.example</code> file and rename it to <code>.env</code> </li>
|
||||
<li>Change the path to the <code>.env</code>-file in <a href="https://github.com/JokeNetwork/vegancheck.me/blob/main/script.php#L16"><code>script.php:16</code></a> and <a href="https://github.com/JokeNetwork/vegancheck.me/blob/main/ingredients_script.php#L18"><code>ingredients_script.php:18</code></a>:
|
||||
<pre><code class="lang-php"><span class="hljs-variable">$dotenv</span> = Dotenv\<span class="hljs-symbol">Dotenv:</span><span class="hljs-symbol">:createImmutable</span>(<span class="hljs-string">'/var/www/virtual/jake/'</span>); <span class="hljs-regexp">//</span> Change to your path <span class="hljs-keyword">or</span> to <span class="hljs-string">'__DIR__'</span>
|
||||
</code></pre>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="where-to-get-the-api-keys">Where to get the API-Keys</h3>
|
||||
<h4 id="open-ean-database">Open EAN Database</h4>
|
||||
<p><strong>This is optional</strong>:
|
||||
Get an API-Key for Open EAN Database by donating to Coast against plastic (Küsten gegen Plastik) - <a href="https://opengtindb-org.translate.goog/userid.php?_x_tr_sl=de&_x_tr_tl=en&_x_tr_hl=de&_x_tr_pto=wapp">Learn more here</a>, insert it in the <a href="https://github.com/JokeNetwork/vegancheck.me/blob/main/.env.example#L3"><code>.env:3</code></a>.</p>
|
||||
<p>If you do not want to donate for the key, you can also use the already defined, publicly available test-key <code>400000000</code>. However, this key has limited usability, as the access limit of this key is more limited and others are abled to use it in their application. It is good for test purposes. </p>
|
||||
<p>You can also rewrite the <code>script.php</code> and use our <a href="#api-documentation">API</a> to avoid access limits.</p>
|
||||
<p><strong>What this is used for:</strong> Open EAN Database is a database that contains information about many EAN-codes such as ingredients.</p>
|
||||
<h4 id="deepl">DeepL</h4>
|
||||
<p>Get an API Token on <a href="https://www.deepl.com/pro#developer">DeepL.com</a> and insert it in the <a href="https://github.com/JokeNetwork/vegancheck.me/blob/main/.env.example#L5"><code>.env:5</code></a>.</p>
|
||||
<p>There is a free option available, however, if you use the free option you have to declare that no personal data is transferred to the API and let users know (we do so in our terms of service and privacy policy), because the data transferred will be processed and used to improve the DeepL AI.</p>
|
||||
<p><strong>What this is used for:</strong> DeepL is a translation service. It translates ingredients entered into the ingredients-checker to english and back to the original language, to make the best use of the Ingredients API.</p>
|
||||
<h2 id="reconfigure-paths">Reconfigure paths</h2>
|
||||
<ul>
|
||||
<li>
|
||||
<p>To make localizations with <code>php-i18n</code> work, you need to change the paths to the language-files in <a href="https://github.com/JokeNetwork/vegancheck.me/blob/main/includes/header.php#L3"><code>includes/header.php:3</code></a>, <a href="https://github.com/JokeNetwork/vegancheck.me/blob/main/ingredients_script.php#L16"><code>ingredients_script.php:16</code></a>, <a href="https://github.com/JokeNetwork/vegancheck.me/blob/main/script.php#L21"><code>script.php:21</code></a>: </p>
|
||||
<pre><code class="lang-php">$i18n = <span class="hljs-keyword">new</span> <span class="hljs-type">i18n</span>(<span class="hljs-string">'/var/www/virtual/jake/vegancheck.me/l10n/{LANGUAGE}.json'</span>, <span class="hljs-string">'/var/www/virtual/jake/vegancheck.me/langcache/'</span>, <span class="hljs-string">'en'</span>);
|
||||
</code></pre>
|
||||
<p>Change <code>/var/www/virtual/jake/vegancheck.me/</code> to your absolute path.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>To make the language recognition work, you need to change the following lines (<a href="https://github.com/JokeNetwork/vegancheck.me/blob/main/index.php#L9"><code>9</code></a> & <a href="https://github.com/JokeNetwork/vegancheck.me/blob/main/index.php#L13"><code>13</code></a>) in <a href="https://github.com/JokeNetwork/vegancheck.me/blob/main/index.php"><code>index.php</code></a> to your url:</p>
|
||||
<pre><code class="lang-php"><span class="hljs-keyword">header</span>(<span class="hljs-string">"Location: https://vegancheck.me/en"</span>);
|
||||
<span class="hljs-params">...</span>
|
||||
<span class="hljs-keyword">header</span>(<span class="hljs-string">"Location: https://vegancheck.me/$lang"</span>);
|
||||
</code></pre>
|
||||
<p>Change <code>https://vegancheck.me</code> to your url.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>To make cache-control work, you need to change the following line in <a href="https://github.com/JokeNetwork/vegancheck.me/blob/main/includes/header.php#L15"><code>header.php:15</code></a> to your corresponding absolute path:</p>
|
||||
<pre><code class="lang-php">$<span class="hljs-built_in">string</span> = file_get_contents('/var/www/virtual/jake/vegancheck.<span class="hljs-keyword">me</span>/includes/versions.json');
|
||||
</code></pre>
|
||||
<p>Change <code>/var/www/virtual/jake/vegancheck.me/</code> to your absolute path.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<pre><code class="lang-bash">$ npm <span class="hljs-keyword">install</span></code></pre>
|
||||
<h2 id="configure-environment-variables">Start the service</h2>
|
||||
<p>In a local environment you can just run:</p>
|
||||
<pre><code class="lang-bash">$ npm run start</span></code></pre>
|
||||
<p>To build the service just run:</p>
|
||||
<pre><code class="lang-bash">$ npm run build</span></code></pre>
|
||||
<p>You can then run the code in a normal Node.js production environment (Like with the help of <a href="http://supervisord.org">supervisord</a>).</p>
|
||||
<h2 id="use-of-icons">Use of icons</h2>
|
||||
<ul>
|
||||
<li>The VeganCheck.me Logo and the app icons are free to use under the terms of the <a href="https://github.com/JokeNetwork/vegancheck.me/blob/main/LICENSE">MIT License</a>.</li>
|
||||
|
@ -112,7 +75,7 @@
|
|||
<li><a href="https://jokenetwork.de/vegancheck-peta-api">VeganCheck.me PETA API at JokeNetwork</a></li>
|
||||
</ul>
|
||||
<footer class="border-top">
|
||||
<p class="color-fg-muted mt-2">© 2022 <a href="//vegancheck.me">VeganCheck.me</a> - Licensed under <a href="https://github.com/JokeNetwork/vegancheck.me/blob/main/LICENSE">MIT</a></p>
|
||||
<p class="color-fg-muted mt-2">© 2023 <a href="//vegancheck.me">VeganCheck.me</a> - Licensed under <a href="https://github.com/JokeNetwork/vegancheck.me/blob/main/LICENSE">MIT</a></p>
|
||||
</footer>
|
||||
</div>
|
||||
</body>
|
||||
|
|
111
docs/localization.html
Normal file
|
@ -0,0 +1,111 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" data-color-mode="dark" data-dark-theme="dark">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta charset="utf-8" />
|
||||
<title>VeganCheck.me Localization Status</title>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://unpkg.com/@primer/css@^20.2.4/dist/primer.css"
|
||||
/>
|
||||
<style>
|
||||
body {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 750px) {
|
||||
body {
|
||||
width: 95%;
|
||||
}
|
||||
img {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body class="m-5 mx-auto">
|
||||
<div class="markdown-body">
|
||||
<span class="branch-name">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 16 16"
|
||||
width="16"
|
||||
height="16"
|
||||
class="octicon octicon-git-branch"
|
||||
>
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
d="M11.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122V6A2.5 2.5 0 0110 8.5H6a1 1 0 00-1 1v1.128a2.251 2.251 0 11-1.5 0V5.372a2.25 2.25 0 111.5 0v1.836A2.492 2.492 0 016 7h4a1 1 0 001-1v-.628A2.25 2.25 0 019.5 3.25zM4.25 12a.75.75 0 100 1.5.75.75 0 000-1.5zM3.5 3.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0z"
|
||||
></path>
|
||||
</svg>
|
||||
main
|
||||
</span>
|
||||
<span class="Label mr-1 Label--success">Stable</span>
|
||||
<img
|
||||
width="80px"
|
||||
src="https://raw.githubusercontent.com/JokeNetwork/vegancheck.me/main/public/img/hero_icon.png"
|
||||
align="right"
|
||||
alt="VeganCheck Logo"
|
||||
/>
|
||||
<h1>Localization status</h1>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Language</th>
|
||||
<th>Language Code</th>
|
||||
<th>Translated</th>
|
||||
<th>Validated</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>English</td>
|
||||
<td><code>en</code></td>
|
||||
<td>100%</td>
|
||||
<td>✔︎ (Philip)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>German</td>
|
||||
<td><code>de</code></td>
|
||||
<td>100%</td>
|
||||
<td>✔︎ (Philip, Max)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>French</td>
|
||||
<td><code>fr</code></td>
|
||||
<td>100%</td>
|
||||
<td>✔︎ (Léa)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Spanish</td>
|
||||
<td><code>es</code></td>
|
||||
<td>100%</td>
|
||||
<td>✘</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="help-us-with-localization">Help us with localization</h2>
|
||||
<p>
|
||||
Localizations can be found in <code>src/locales</code>. All language
|
||||
files are in a <code>[countrycode].json</code> file. Please check our
|
||||
translations if there is already one localization file available in the
|
||||
language you are speaking. Otherwise, please create a new json file and
|
||||
duplicate the contents of the <code>en.json</code> file and translate
|
||||
the strings to your language.
|
||||
</p>
|
||||
|
||||
<footer class="border-top">
|
||||
<p class="color-fg-muted mt-2">
|
||||
© 2023 <a href="//vegancheck.me">VeganCheck.me</a> - Licensed
|
||||
under
|
||||
<a
|
||||
href="https://github.com/JokeNetwork/vegancheck.me/blob/main/LICENSE"
|
||||
>MIT</a
|
||||
>
|
||||
</p>
|
||||
</footer>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,3 +0,0 @@
|
|||
<?php
|
||||
require_once("../main.php");
|
||||
?>
|
|
@ -1,73 +0,0 @@
|
|||
<style>
|
||||
body {
|
||||
margin: 0
|
||||
}
|
||||
|
||||
.container {
|
||||
color: #000;
|
||||
background: #fff;
|
||||
font-family: -apple-system, BlinkMacSystemFont, Roboto, "Segoe UI", "Fira Sans", "Avenir", "Helvetica Neue", "Lucida Grande", sans-serif;
|
||||
height: 100vh;
|
||||
text-align: center;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center
|
||||
}
|
||||
|
||||
a {
|
||||
font-size: 12px;
|
||||
font-weight: normal;
|
||||
line-height: inherit;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
text-transform: uppercase;
|
||||
color: #797786;
|
||||
text-decoration: none;
|
||||
fill: #797786;
|
||||
transition: ease-in-out .3s;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #000;
|
||||
fill: #000;
|
||||
}
|
||||
|
||||
h1 {
|
||||
display: inline-block;
|
||||
margin: 0;
|
||||
line-height: 50px;
|
||||
font-size: 24px;
|
||||
font-weight: 500;
|
||||
vertical-align: top;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 14px;
|
||||
font-weight: normal;
|
||||
line-height: inherit;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
</style>
|
||||
<div class="container">
|
||||
<div>
|
||||
<h1>Error 403 <svg width="20px" height="20px" version="1.1" viewBox="0 0 1200 1200" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m991.12 991.12c-104.47 104.47-243.37 162.01-391.12 162.01s-286.65-57.535-391.12-162.01c-104.47-104.47-162.01-243.37-162.01-391.12s57.535-286.65 162.01-391.12c104.47-104.47 243.37-162.01 391.12-162.01s286.65 57.535 391.12 162.01c104.47 104.47 162.01 243.37 162.01 391.12s-57.535 286.65-162.01 391.12m33.148-815.38c-113.33-113.33-264-175.74-424.27-175.74s-310.94 62.41-424.26 175.74c-113.33 113.32-175.74 264-175.74 424.26s62.41 310.94 175.74 424.26c113.32 113.33 264 175.74 424.26 175.74s310.94-62.41 424.27-175.74c113.32-113.32 175.73-264 175.73-424.26s-62.41-310.94-175.73-424.26m-615.45 378.4c41.43 0 75.141-33.707 75.141-75.137 0-41.434-33.711-75.141-75.141-75.141-41.434 0-75.141 33.707-75.141 75.141 0 41.43 33.707 75.137 75.141 75.137m384.2 0c41.43 0 75.137-33.707 75.137-75.137 0-41.434-33.707-75.141-75.137-75.141-41.434 0-75.141 33.707-75.141 75.141 0 41.43 33.707 75.137 75.141 75.137m36.641 223.15c-39.16-39.785-110.64-87.211-228.74-87.211s-189.58 47.426-228.74 87.211c-42.898 43.578-57.363 87.645-57.961 89.5-3.9375 12.285 2.8086 25.398 15.082 29.395 12.27 3.9922 25.477-2.7305 29.523-14.984 0.12109-0.36328 12.465-36.875 48.328-72.602 47.719-47.539 112.91-71.645 193.77-71.645 80.855 0 146.05 24.105 193.77 71.645 35.859 35.727 48.207 72.238 48.293 72.504 3.1914 9.9492 12.398 16.289 22.312 16.289 2.375 0 4.7852-0.36328 7.1641-1.125 12.324-3.9531 19.113-17.152 15.16-29.477-0.59375-1.8555-15.059-45.922-57.957-89.5" fill-rule="evenodd" /> </svg></h1>
|
||||
<h2>You are not allowed to access this page.</h2>
|
||||
<p><a href="#" onclick="location.reload();"><svg width="10px" height="10px" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m83.332 39.582v-20.832l-7.293 7.293c-6.457-7.0859-15.832-11.461-26.039-11.461-19.582 0-35.418 15.836-35.418 35.418s15.832 35.418 35.418 35.418c10 0 18.957-4.168 25.418-10.832l-5.832-6.043c-4.793 5.207-11.879 8.5391-19.586 8.5391-15 0-27.082-12.082-27.082-27.082s12.082-27.082 27.082-27.082c7.918 0 15.207 3.543 20.207 8.957l-7.707 7.707z" /> </svg> Reload page</a> | <a href="https://stats.uptimerobot.com/LY1gRuP5j6"><svg width="10px" height="10px" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
|
||||
<g>
|
||||
<path d="m39.25 74.5c7.7461 0.003906 15.277-2.543 21.43-7.25l3.9102 4.1719-1.2617 1.2617v-0.003906c-0.14062 0.14062-0.25391 0.30469-0.32812 0.49219v0.19141-0.003906c-0.039062 0.12109-0.0625 0.24609-0.070312 0.37109-0.003907 0.074219-0.003907 0.14453 0 0.21875 0.007812 0.11719 0.03125 0.23047 0.070312 0.33984 0.039062 0.074219 0.082031 0.14453 0.12891 0.21094 0.042969 0.097656 0.10156 0.1875 0.17188 0.26953l15 16c1.6875 1.7891 4.0391 2.8086 6.5 2.8203 3.6562 0.003906 6.9453-2.2305 8.2891-5.6289 1.3477-3.4023 0.47656-7.2812-2.1914-9.7812l-16-15c-0.085938-0.070313-0.17969-0.12891-0.27734-0.17969-0.066406-0.042969-0.13281-0.082031-0.19922-0.12109-0.12109-0.042968-0.24609-0.066406-0.37109-0.070312-0.0625-0.003906-0.12891-0.003906-0.19141 0-0.14062 0.007812-0.27734 0.035156-0.41016 0.082031h-0.14844c-0.18359 0.074219-0.35156 0.1875-0.49219 0.32812l-1.2695 1.2695-4.1719-3.9102h0.003906c6.4922-8.5156 8.7734-19.523 6.1992-29.922-2.5742-10.398-9.7227-19.066-19.441-23.574-9.7188-4.5078-20.953-4.3672-30.555 0.38672-9.6016 4.7539-16.527 13.602-18.836 24.062-2.3086 10.461 0.25 21.402 6.957 29.754 6.707 8.3555 16.844 13.215 27.555 13.215zm34-7.4883 0.66016-0.66016 15 14c1.7695 1.6523 2.3516 4.2148 1.4727 6.4727-0.88281 2.2539-3.0508 3.7422-5.4727 3.7539-1.6367 0.011719-3.1992-0.66797-4.3086-1.8672l-14-15zm-3.8281-0.42188-2.6992 2.6992-3.1602-3.3711 2.4375-2.4883zm-30.172-59.82c8.5859-0.003906 16.82 3.4062 22.895 9.4766 6.0742 6.0703 9.4844 14.305 9.4844 22.891 0.003906 8.5859-3.4102 16.82-9.4805 22.891-6.0703 6.0742-14.305 9.4844-22.891 9.4844-8.5859-0.003907-16.82-3.4141-22.891-9.4883-6.0703-6.0703-9.4805-14.309-9.4766-22.895 0.011719-8.5781 3.4219-16.805 9.4883-22.871 6.0664-6.0664 14.293-9.4766 22.871-9.4883z" />
|
||||
<path d="m23.379 39.672 2.4102-6.3281 2.5781 16.891 0.003906-0.003906c0.10938 0.69141 0.68359 1.2148 1.3828 1.2617 0.69922 0.046874 1.3359-0.39844 1.5352-1.0703l7.7109-26.633 6.1016 28.77c0.125 0.61328 0.62109 1.082 1.2383 1.1719h0.21875c0.54688 0.019531 1.0625-0.26172 1.3398-0.73047l6.9102-12.352h9.582c0.82812 0 1.5-0.67188 1.5-1.5 0-0.82813-0.67188-1.5-1.5-1.5h-10.461c-0.54297 0.007812-1.043 0.30078-1.3086 0.77344l-5.3906 9.5781-6.5117-30.691c-0.13672-0.67188-0.72266-1.1602-1.4102-1.1797-0.6875-0.027344-1.3047 0.41797-1.5 1.082l-7.5 25.84-2.4102-15.789c-0.10547-0.68359-0.66016-1.2031-1.3477-1.2656s-1.3242 0.35156-1.5508 1.0039l-4 10.629h-8.3398c-0.82812 0-1.5 0.67188-1.5 1.5s0.67188 1.5 1.5 1.5h9.3398c0.61328-0.007812 1.1602-0.38672 1.3789-0.95703z" />
|
||||
</g>
|
||||
</svg> Status Page</a> | <a href="https://twitter.com/vegancheckme"><svg width="10px" height="10px" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
|
||||
<g>
|
||||
<path d="m94.504 24.969c-0.29297-0.69922-1.0039-1.1445-1.7539-1.0898l-13.824 0.83203c-3.4961-5.5625-8.4766-9.0703-14.016-9.0703-8.3477 0-18.031 5.1992-19.293 19.574-3.0742-1.5195-8.7969-3.6055-17.602-4.0352-2.6992-0.13281-5.3359-0.76172-7.8359-1.8711-3.0508-1.3555-5.3672-3.0234-6.7031-4.8281-0.43359-0.58594-1.1836-0.85547-1.8828-0.66797-0.70703 0.18359-1.2305 0.77734-1.3242 1.4961-0.097656 0.75781-2.3047 18.707 7.0977 29.605 2.8789 3.3398 6.5273 5.6406 10.891 6.8867-3.5977 1.543-7.9922 3.9453-11.934 7.5547-0.039063 0.03125-3.9375 3.25-8.7422 4.5391-0.78906-0.19922-1.6523 0.16797-2.0352 0.93359-0.44141 0.88281-0.085937 1.9531 0.79688 2.3945 0.25391 0.125 14.375 7.0312 31.355 7.0312 13.551 0 28.918-4.3945 40.512-20.133 3.7539-5.0977 5.8203-12.316 5.8203-20.324 0-2.4727-0.23828-4.8633-0.64844-7.1523l10.676-9.6641c0.55859-0.50391 0.73828-1.3125 0.44531-2.0117zm-19.172 37.035c-10.172 13.812-24.539 20.051-42.691 18.57-8.4336-0.69141-15.785-2.9844-20.227-4.6602 3.5781-1.6523 6.0742-3.7109 6.2578-3.8672 7.7383-7.0781 17.594-9.168 17.695-9.1875 0.89062-0.18359 1.5039-1.0078 1.418-1.9141-0.082031-0.90625-0.83594-1.6055-1.7422-1.6211-6.8438-0.125-12.211-2.3906-15.961-6.7305-5.9297-6.8672-6.6094-17.406-6.5-23.012 1.4336 1.1055 3.1523 2.1055 5.1484 2.9922 2.9023 1.2891 5.9688 2.0195 9.1094 2.1719 12.617 0.61719 18.273 4.8711 18.32 4.9062 0.53516 0.42188 1.2656 0.50391 1.8789 0.20703 0.61328-0.29688 1.0078-0.91797 1.0117-1.5977 0.074219-14.047 8.2422-19.051 15.859-19.051 4.5664 0 8.6641 3.1445 11.512 8.1172 0.007813 0.015625 0.019531 0.03125 0.027344 0.046875 2.4844 4.3594 4.0117 10.105 4.0117 16.422 0 7.1484-1.8711 13.785-5.1289 18.207zm7.1328-29.34c-0.46094-1.5742-1.0156-3.0742-1.6602-4.4844l7.0859-0.42578z" />
|
||||
<path d="m64.555 28.375c-0.054688-0.10547-0.10547-0.21484-0.16016-0.30469-0.070312-0.089843-0.14453-0.19531-0.23438-0.26953-0.16016-0.16016-0.35547-0.30469-0.57031-0.39453-0.66016-0.26953-1.4648-0.10547-1.9453 0.39453-0.089843 0.070313-0.16016 0.17969-0.23438 0.26953-0.054687 0.089844-0.10547 0.19531-0.16016 0.30469-0.035156 0.10547-0.070312 0.23047-0.089844 0.33984-0.035156 0.10547-0.035156 0.23047-0.035156 0.33984 0 0.25 0.035156 0.46484 0.125 0.69531 0.089844 0.21484 0.23047 0.41016 0.39453 0.57031 0.070313 0.089844 0.16016 0.16016 0.26953 0.23047 0.089844 0.054688 0.19531 0.10547 0.30469 0.16016 0.10547 0.035156 0.23047 0.070312 0.33984 0.10547 0.10547 0.019532 0.23047 0.019532 0.33984 0.019532 0.25 0 0.46484-0.035157 0.69531-0.125 0.21484-0.089844 0.41016-0.21484 0.57031-0.39063 0.16016-0.16016 0.30469-0.35937 0.39453-0.57031 0.089844-0.23047 0.125-0.44531 0.125-0.69531 0-0.10547 0-0.23438-0.035156-0.33984-0.023438-0.10938-0.058594-0.23438-0.09375-0.33984z" />
|
||||
</g>
|
||||
</svg> Twitter </a></p>
|
||||
</div>
|
||||
</div>
|
|
@ -1,56 +0,0 @@
|
|||
<?php
|
||||
include_once('../includes/header.php');
|
||||
?>
|
||||
<style>
|
||||
.form h2, p, b, ul, li {
|
||||
text-align: left;
|
||||
-webkit-hyphens: auto;
|
||||
-moz-hyphens: auto;
|
||||
-ms-hyphens: auto;
|
||||
hyphens: auto;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container top">
|
||||
<div id="main">
|
||||
<div class="form">
|
||||
<a href="javascript:history.back();" class="icon-left-open back"></a>
|
||||
<a href="//vegancheck.me"><img src="../img/VeganCheck.svg" alt="Logo"></a><br>
|
||||
<h2>Error 404.</h2>
|
||||
<p>This page does not exist.</p>
|
||||
<p>You can visit our <a href="https://stats.uptimerobot.com/LY1gRuP5j6">status page</a> or check in on us on <a href="https://twitter.com/vegancheckme">Twitter</a> to see if there are any current issues.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<nav class="nav">
|
||||
<div class="flex-container">
|
||||
<div class="flex-item">
|
||||
<a href="/">
|
||||
<span class="icon icon-vegancheck"></span>
|
||||
<span class="menu-item">Home</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="flex-item">
|
||||
<a href="/ingredients">
|
||||
<span class="icon icon-ingredients"></span>
|
||||
<span class="menu-item"><?php echo L::ingredients_shorttitle; ?></span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="flex-item">
|
||||
<a href="/more">
|
||||
<span class="icon icon-ellipsis"></span>
|
||||
<span class="menu-item"><?php echo L::more_more; ?></span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<?php
|
||||
include_once('includes/footer.php');
|
||||
?>
|
||||
</body>
|
||||
</html>
|
|
@ -1,3 +0,0 @@
|
|||
<?php
|
||||
require_once("../main.php");
|
||||
?>
|
|
@ -1,3 +0,0 @@
|
|||
<?php
|
||||
require_once("../main.php");
|
||||
?>
|
|
@ -1,18 +0,0 @@
|
|||
<?php
|
||||
require('/var/www/virtual/jake/vegancheck.me/vendor/autoload.php');
|
||||
$headers = array(
|
||||
'Authorization' => 'baystmuv-vi-1.0 os=ios, key=9d9e8972-ff15-4943-8fea-117b5a973c61',
|
||||
'Content-Type' => 'application/json'
|
||||
);
|
||||
$data = '{"food":{"rows": 10000}}';
|
||||
$response = Requests::post('https://lebensmittelwarnung.api.proxy.bund.dev/verbraucherschutz/baystmuv-verbraucherinfo/rest/api/warnings/merged',
|
||||
$headers, $data);
|
||||
|
||||
$warnings = $response->body;
|
||||
|
||||
$jsonData = $warnings;
|
||||
file_put_contents('warnings.json', $jsonData);
|
||||
|
||||
echo "Success";
|
||||
|
||||
?>
|
|
@ -1,45 +0,0 @@
|
|||
<div class="modal_view animatedfaster fadeInUp" id="installation">
|
||||
<div class="modal_close" id="modal_close"><a class="btn-dark" data-dismiss="modal">×</a></div>
|
||||
<span class="center">
|
||||
<img src="../img/pwainstall_img.svg" class="heading_img">
|
||||
<h1><?php echo L::prompt_install; ?></h1>
|
||||
</span>
|
||||
<p><?php echo L::prompt_info; ?> <svg viewBox="0 0 90 90" version="1.1" xmlns="http://www.w3.org/2000/svg" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;width:.8rem;height:.8rem;" fill="#ccc">
|
||||
<g id="_12-add--new--plus--square" serif:id="12-add,-new,-plus,-square" transform="matrix(2.49151,0,0,2.49151,-14.7849,-14.7849)">
|
||||
<path id="Shape" d="M37,6C39.689,6 42,8.179 42,11L42,37C42,39.689 39.831,42 37,42L11,42C8.311,42 6,39.788 6,37L6,11C6,8.311 8.169,6 11,6L37,6ZM11,8C9.402,8 8,9.276 8,11L8,37C8,38.598 9.289,40 11,40L37,40C38.598,40 40,38.738 40,37L40,11C40,9.402 38.718,8 37,8L11,8ZM24,15C24.513,15 25,15.404 25,16L25,23L32,23C32.552,23 33,23.448 33,24C33,24.513 32.561,25 32,25L25,25L25,32C25,32.552 24.552,33 24,33C23.487,33 23,32.59 23,32L23,25L16,25C15.448,25 15,24.552 15,24C15,23.487 15.426,23 16,23L23,23L23,16C23,15.448 23.448,15 24,15Z" style="fill-rule:nonzero;"/>
|
||||
</g>
|
||||
</svg>
|
||||
</p>
|
||||
</div>
|
||||
<div id="pwainstall">
|
||||
<div class="flex-container">
|
||||
<div class="flex-item" id="pwaclose">
|
||||
×
|
||||
</div>
|
||||
<div class="flex-item">
|
||||
<img src="../img/maskable_icon.png">
|
||||
</div>
|
||||
<div class="flex-item">
|
||||
<span class="heading">VeganCheck.me</span>
|
||||
<span class="subheading"><?php echo L::meta_title; ?></span>
|
||||
</div>
|
||||
<div class="flex-item">
|
||||
<span class="button" data-target="installation" data-toggle="modal"><?php echo L::prompt_get; ?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="../node_modules/jquery/dist/jquery.min.js"></script>
|
||||
<script src="../js/BarcodeScanner.min.js"></script>
|
||||
<script src="../js/app.js?v=<?php echo $versions->js; ?>"></script>
|
||||
<?php
|
||||
if (isset($_COOKIE['log']) && $_COOKIE['log'] == "Yes"){
|
||||
print_r('<script async src="https://analytics.vegancheck.me/ackee.js" data-ackee-server="https://analytics.vegancheck.me" data-ackee-domain-id="77898809-adfe-4573-a05f-88cd663f0fb5" data-ackee-opts=\'{ "detailed": true }\'></script>');
|
||||
}
|
||||
elseif (isset($_COOKIE['log']) && $_COOKIE['log'] == "No"){
|
||||
print_r('<script async src="https://analytics.vegancheck.me/ackee.js" data-ackee-server="https://analytics.vegancheck.me" data-ackee-domain-id="77898809-adfe-4573-a05f-88cd663f0fb5"></script>');
|
||||
}
|
||||
else{
|
||||
print_r('<script async src="https://analytics.vegancheck.me/ackee.js" data-ackee-server="https://analytics.vegancheck.me" data-ackee-domain-id="77898809-adfe-4573-a05f-88cd663f0fb5" data-ackee-opts=\'{ "detailed": true }\'></script>');
|
||||
}
|
||||
?>
|
|
@ -1,69 +0,0 @@
|
|||
<?php
|
||||
require('/var/www/virtual/jake/vegancheck.me/vendor/autoload.php');
|
||||
$i18n = new i18n('/var/www/virtual/jake/vegancheck.me/l10n/{LANGUAGE}.json', '/var/www/virtual/jake/vegancheck.me/langcache/', 'en');
|
||||
$str = trim("$_SERVER[REQUEST_URI]", '/');
|
||||
if (isset($_COOKIE['lang'])){
|
||||
$i18n->setForcedLang($_COOKIE['lang']);
|
||||
}
|
||||
else {
|
||||
if ($str == "en" || $str == "de" || $str == "fr" || $str == "es" || $str == "nl" || $str == "es" || $str == "zh"){
|
||||
$i18n->setForcedLang($str);
|
||||
setcookie("lang", $str, 0,'/');
|
||||
}
|
||||
}
|
||||
$i18n->init();
|
||||
$string = file_get_contents('/var/www/virtual/jake/vegancheck.me/includes/versions.json');
|
||||
$versions = json_decode($string);
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<!-- VeganCheck.me is Open Source
|
||||
Check the project out on GitHub:
|
||||
https://vegc.net/repo
|
||||
-->
|
||||
<html lang="<?php echo L::meta_lang; ?>">
|
||||
<head>
|
||||
<title><?php echo L::meta_title; ?></title>
|
||||
<meta charset="UTF-8">
|
||||
|
||||
<meta name="description" content="<?php echo L::meta_description; ?>">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
||||
|
||||
<meta property="og:title" content="<?php echo L::meta_title; ?>">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="https://vegancheck.me">
|
||||
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:image" content="https://vegancheck.me/img/icon-512x512.png?v=<?php echo $versions->img; ?>">
|
||||
<meta name="twitter:image:alt" content="VeganCheck.me">
|
||||
|
||||
<link rel="shortcut icon" type="image/x-icon" href="../favicon.ico?v=<?php echo $versions->img; ?>">
|
||||
<link rel="apple-touch-icon" href="../img/icon.png?v=<?php echo $versions->img; ?>">
|
||||
|
||||
<link rel="manifest" href="../img/site.webmanifest?v=<?php echo $versions->manifest; ?>">
|
||||
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="msapplication-starturl" content="/">
|
||||
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#7f8fa6">
|
||||
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#141414">
|
||||
|
||||
<link rel="alternate" href="https://vegancheck.me/de" hreflang="de">
|
||||
<link rel="alternate" href="https://vegancheck.me/en" hreflang="en">
|
||||
<link rel="alternate" href="https://vegancheck.me/es" hreflang="es">
|
||||
<link rel="alternate" href="https://vegancheck.me/fr" hreflang="fr">
|
||||
<link rel="alternate" href="https://vegancheck.me/nl" hreflang="nl">
|
||||
<link rel="alternate" href="https://vegancheck.me/zh" hreflang="zh">
|
||||
|
||||
<meta name="application-name" content="VeganCheck">
|
||||
<meta name="apple-mobile-web-app-title" content="VeganCheck">
|
||||
<link rel="apple-touch-startup-image" media="screen and (device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="../img/splash_screens/iPhone_14_Plus__iPhone_13_Pro_Max__iPhone_12_Pro_Max_portrait.png?v=<?php echo $versions->img; ?>">
|
||||
<link rel="apple-touch-startup-image" media="screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="../img/splash_screens/iPhone_13_mini__iPhone_12_mini__iPhone_11_Pro__iPhone_XS__iPhone_X_portrait.png?v=<?php echo $versions->img; ?>">
|
||||
<link rel="apple-touch-startup-image" media="screen and (device-width: 393px) and (device-height: 852px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="../img/splash_screens/iPhone_14_Pro_portrait.png?v=<?php echo $versions->img; ?>">
|
||||
<link rel="apple-touch-startup-image" media="screen and (device-width: 430px) and (device-height: 932px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="../img/splash_screens/iPhone_14_Pro_Max_portrait.png?v=<?php echo $versions->img; ?>">
|
||||
<link rel="apple-touch-startup-image" media="screen and (device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="../img/splash_screens/iPhone_14__iPhone_13_Pro__iPhone_13__iPhone_12_Pro__iPhone_12_portrait.png?v=<?php echo $versions->img; ?>">
|
||||
<link rel="apple-touch-startup-image" media="screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="../img/splash_screens/iPhone_11__iPhone_XR_portrait.png?v=<?php echo $versions->img; ?>">
|
||||
<link rel="apple-touch-startup-image" media="screen and (device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="../img/splash_screens/iPhone_8_Plus__iPhone_7_Plus__iPhone_6s_Plus__iPhone_6_Plus_portrait.png?v=<?php echo $versions->img; ?>">
|
||||
<link rel="apple-touch-startup-image" media="screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="../img/splash_screens/iPhone_11_Pro_Max__iPhone_XS_Max_portrait.png?v=<?php echo $versions->img; ?>">
|
||||
<link rel="apple-touch-startup-image" media="screen and (device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="../img/splash_screens/iPhone_8__iPhone_7__iPhone_6s__iPhone_6__4.7__iPhone_SE_portrait.png?v=<?php echo $versions->img; ?>">
|
||||
|
||||
<link href="../css/style.min.css?v=<?php echo $versions->css; ?>" rel="stylesheet">
|
3347
includes/isvegan.php
|
@ -1,71 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* function prettyPrint JSON
|
||||
* @author Kendall Hopkins
|
||||
* @uri https://stackoverflow.com/a/9776726/16673108
|
||||
* @license CC-BY-SA 3.0
|
||||
*/
|
||||
|
||||
function prettyPrint( $json )
|
||||
{
|
||||
$result = '';
|
||||
$level = 0;
|
||||
$in_quotes = false;
|
||||
$in_escape = false;
|
||||
$ends_line_level = NULL;
|
||||
$json_length = strlen( $json );
|
||||
|
||||
for( $i = 0; $i < $json_length; $i++ ) {
|
||||
$char = $json[$i];
|
||||
$new_line_level = NULL;
|
||||
$post = "";
|
||||
if( $ends_line_level !== NULL ) {
|
||||
$new_line_level = $ends_line_level;
|
||||
$ends_line_level = NULL;
|
||||
}
|
||||
if ( $in_escape ) {
|
||||
$in_escape = false;
|
||||
} else if( $char === '"' ) {
|
||||
$in_quotes = !$in_quotes;
|
||||
} else if( ! $in_quotes ) {
|
||||
switch( $char ) {
|
||||
case '}': case ']':
|
||||
$level--;
|
||||
$ends_line_level = NULL;
|
||||
$new_line_level = $level;
|
||||
break;
|
||||
|
||||
case '{': case '[':
|
||||
$level++;
|
||||
case ',':
|
||||
$ends_line_level = $level;
|
||||
break;
|
||||
|
||||
case ':':
|
||||
$post = " ";
|
||||
break;
|
||||
|
||||
case " ": case "\t": case "\n": case "\r":
|
||||
$char = "";
|
||||
$ends_line_level = $new_line_level;
|
||||
$new_line_level = NULL;
|
||||
break;
|
||||
}
|
||||
} else if ( $char === '\\' ) {
|
||||
$in_escape = true;
|
||||
}
|
||||
if( $new_line_level !== NULL ) {
|
||||
$result .= "\n".str_repeat( "\t", $new_line_level );
|
||||
}
|
||||
$result .= $char.$post;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
$data = file_get_contents('warnings.json');
|
||||
echo prettyPrint($data);
|
||||
die();
|
||||
|
||||
?>
|
|
@ -1,7 +0,0 @@
|
|||
{
|
||||
"app": "2.2.0",
|
||||
"css": "4.0.45",
|
||||
"js": "1.1.0",
|
||||
"manifest": "2.0.0",
|
||||
"img": "3.0.0"
|
||||
}
|
16
index.php
|
@ -1,16 +0,0 @@
|
|||
<?php
|
||||
require('vendor/autoload.php');
|
||||
$i18n = new i18n('l10n/{LANGUAGE}.json', 'langcache/', 'en');
|
||||
$i18n->init();
|
||||
$supportedLanguages=['en','de', 'fr', 'es', 'nl', 'zh'];
|
||||
$lang = $i18n->getAppliedLang();
|
||||
|
||||
if(!in_array($lang,$supportedLanguages)){
|
||||
header("Location: https://vegancheck.me/en");
|
||||
die();
|
||||
}
|
||||
else {
|
||||
header("Location: https://vegancheck.me/$lang");
|
||||
die();
|
||||
}
|
||||
?>
|
108
ingredients.php
|
@ -1,108 +0,0 @@
|
|||
<?php
|
||||
include_once('includes/header.php');
|
||||
?>
|
||||
</head>
|
||||
|
||||
<body id="top">
|
||||
<nav class="nav">
|
||||
<div class="flex-container">
|
||||
<div class="flex-item">
|
||||
<a href="/">
|
||||
<span class="icon icon-vegancheck"></span>
|
||||
<span class="menu-item">Home</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="flex-item active">
|
||||
<span class="icon icon-ingredients"></span>
|
||||
<span class="menu-item"><?php echo L::ingredients_shorttitle; ?></span>
|
||||
</div>
|
||||
<div class="flex-item">
|
||||
<a href="../more">
|
||||
<span class="icon icon-ellipsis"></span>
|
||||
<span class="menu-item"><?php echo L::more_more; ?></span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="rotate">
|
||||
<img src="../img/rotatedevice.svg" alt="<?php echo L::other_rotate; ?>">
|
||||
<h1><?php echo L::other_rotate; ?></h1>
|
||||
</div>
|
||||
|
||||
<div class="modal_view animatedfaster fadeInUp" id="processed">
|
||||
<div class="modal_close"><a class="btn-dark" data-dismiss="modal">×</a></div>
|
||||
<span class="center">
|
||||
<img src="../img/computed_image.svg" class="heading_img">
|
||||
<h1><?php echo L::modal_processed; ?></h1>
|
||||
</span>
|
||||
<p><?php echo L::modal_processed_desc; ?></p>
|
||||
</div>
|
||||
|
||||
<div class="modal_view animatedfaster fadeInUp" id="license">
|
||||
<div class="modal_close"><a class="btn-dark" data-dismiss="modal">×</a></div>
|
||||
<span class="center">
|
||||
<img src="../img/license_img.svg" class="heading_img">
|
||||
<h1><?php echo L::modal_licenses; ?></h1>
|
||||
</span>
|
||||
<p><?php echo L::modal_licenses_desc; ?></p>
|
||||
<p>
|
||||
© VeganCheck.me Contributors and Hamed Montazeri, licensed under <a href="https://github.com/JokeNetwork/vegan-ingredients-api/blob/master/LICENSE">MIT License</a>, sourced from <a href="https://www.veganpeace.com/ingredients/ingredients.htm">VeganPeace</a>, <a href="https://www.peta.org/living/food/animal-ingredients-list/">PETA</a> and <a href="http://www.veganwolf.com/animal_ingredients.htm">The VEGAN WOLF</a>.
|
||||
</div>
|
||||
<noscript>
|
||||
<div class="noscript">
|
||||
<h3>VeganCheck.me only works properly with Javascript enabled. <a href="https://www.enable-javascript.com">Learn how to enable Javascript here</a>.</h3>
|
||||
</div>
|
||||
</noscript>
|
||||
|
||||
<video id="video" autoplay playsinline style="width: 100%; height: 100%; position: absolute; z-index:9999; left:0; top:0; display:none;" soda-loaded="true" ></video>
|
||||
<div id="controls" style="display:none;">
|
||||
<span id="close">
|
||||
<div class="flex-container">
|
||||
<div class="flex-item"><span id="close_ocr" class="icon-left-open"></span></div>
|
||||
<div class="flex-item middle">(Experimental) Scan text</div>
|
||||
<div class="flex-item"></div>
|
||||
</div>
|
||||
</span>
|
||||
<canvas id="canvas" style="display: none;"></canvas>
|
||||
<div id="background"></div>
|
||||
</div>
|
||||
<div class="cam_btn" id="click-photo" style="display:none;"><span class="icon-camera"></span></div>
|
||||
|
||||
|
||||
<div class="container top" id="mainpage">
|
||||
<div id="main">
|
||||
<div class="form ingredients" id="resscroll">
|
||||
<img src="../img/VeganCheck.svg?v=<?php echo $versions->img; ?>" alt="Logo" class="logo">
|
||||
<h2><?php echo L::ingredients_title; ?></h2>
|
||||
<p><?php echo L::ingredients_subtitle; ?> - <?php echo L::ingredients_placeholder; ?></p>
|
||||
<form action="../ingredients_script.php">
|
||||
<fieldset>
|
||||
<legend><?php echo L::ingredients_placeholder; ?></legend>
|
||||
<span class="btn_ocr" id="ocr" role="button" tabindex="0"><span class="icon-camera"></span></span>
|
||||
<textarea id="ingredients" name="ingredients" placeholder="<?php echo L::ingredients_placeholder; ?>" autofocus></textarea>
|
||||
<button name="checkingredients" aria-label="<?php echo L::form_submit; ?>" role="button"><span class="icon-right-open"></span></button>
|
||||
</fieldset>
|
||||
</form>
|
||||
<div class="animated fadeIn timeout" id="wait" style="display:none;"><span>.</span><span>.</span><span>.</span></div>
|
||||
<div class="timeout animated fadeIn" style="display:none;"><?php echo L::other_timeout; ?><span>.</span><span>.</span><span>.</span></div>
|
||||
<div class="timeout-final animated fadeIn" style="display:none;"><?php echo L::other_timeoutfinal; ?></div>
|
||||
<div id="result"> </div>
|
||||
</div>
|
||||
<footer>
|
||||
<p><?php echo L::footer_credits; ?></p>
|
||||
<?php if(date('m')=="01"){echo '<a href="https://veganuary.com/try-vegan/"><img src="../img/veganuary.svg" alt="We are taking part in Veganuary" class="labels"></a>';} ?>
|
||||
<a href="https://vegancheck.me"><img src="../img/VeganCheck_text.svg" alt="VeganCheck.me Logo" class="labels"></a>
|
||||
<a href="https://github.com/jokenetwork/vegancheck.me"><img src="../img/opensource.svg" alt="Open Source" class="labels"></a>
|
||||
<a href="https://www.thegreenwebfoundation.org/green-web-check/?url=https%3A%2F%2Fvegancheck.me"><img src="../img/greenhosted.svg" alt="Hosted Green" class="labels"></a>
|
||||
<a href="https://iplantatree.org/user/VeganCheck.me"><img src="../img/treelabel.svg" alt="We plant trees. We're carbon neutral." class="labels"></a>
|
||||
</footer>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src='js/tesseract.min.js'></script>
|
||||
<?php
|
||||
include_once('includes/footer.php');
|
||||
?>
|
||||
</body>
|
||||
</html>
|
|
@ -1,98 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* VeganCheck.me Script
|
||||
* @author Philip Brembeck
|
||||
* @license MIT License
|
||||
* @copyright (C) 2022 Philip Brembeck
|
||||
* @copyright (C) 2022 JokeNetwork
|
||||
* @copyright (C) 2022 VeganCheck.me Contributors
|
||||
* @link https://vegc.net/license
|
||||
*
|
||||
*/
|
||||
|
||||
require ('vendor/autoload.php');
|
||||
|
||||
// Initialize Localization
|
||||
$i18n = new i18n('/var/www/virtual/jake/vegancheck.me/l10n/{LANGUAGE}.json', '/var/www/virtual/jake/vegancheck.me/langcache/', 'en');
|
||||
$i18n->init();
|
||||
$dotenv = Dotenv\Dotenv::createImmutable('/var/www/virtual/jake/');
|
||||
$dotenv->load();
|
||||
|
||||
$input1 = str_replace(',', ', ', $_POST['ingredients']);
|
||||
$input = preg_replace('~[\r\n]+~', '', $input1);
|
||||
|
||||
function translate($targetlang, $text) {
|
||||
$deeplauth = $_ENV['DEEPL_AUTH'];
|
||||
$headers = array('Content-Disposition' => 'form-data', 'Authorization' => 'DeepL-Auth-Key '.$deeplauth.'');
|
||||
$data = array('target_lang' => $targetlang, 'text' => $text);
|
||||
return Requests::post('https://api-free.deepl.com/v2/translate', $headers, $data);
|
||||
}
|
||||
|
||||
// Textfield is empty
|
||||
if (empty($input) || preg_match('/[^a-zA-Z0-9-:äöüÄÖÜéèêëėàáâæãåāôòóõœōçćčñńßśšŚŠÉÈÊËĖÀÁÂÆÃÅĀÇĆČÛÙÚŪûùúū., ]+/', $input))
|
||||
{
|
||||
print_r('<span class="animated fadeIn"><div class="resultborder">' . L::ingredients_error .'</div></span>');
|
||||
}
|
||||
|
||||
// Textfield is not empty
|
||||
else
|
||||
{
|
||||
$translation = translate('en', $input);
|
||||
$tr = json_decode($translation->body);
|
||||
if($translation->status_code == "200"){
|
||||
$ingredients = $tr->translations[0]->text;
|
||||
$originlang = $tr->translations[0]->detected_source_language;
|
||||
}
|
||||
else {
|
||||
$ingredients = $input;
|
||||
}
|
||||
|
||||
$url = 'https://python.cldsi.de/v0/ingredients/'.$ingredients;
|
||||
$headers = array('Content-Type' => 'text/plain');
|
||||
$response = Requests::get($url, $headers);
|
||||
$product = json_decode($response->body);
|
||||
if($product->data->vegan == "false"){
|
||||
print_r('<div class="animated fadeIn"><div class="resultborder">');
|
||||
print_r('<div class="Grid">
|
||||
<div class="Grid-cell description"><b>Vegan</b></div>
|
||||
<div class="Grid-cell icons"><span class="non-vegan icon-cancel"></span></div>
|
||||
</div>');
|
||||
|
||||
foreach ($product->data->flagged as $node) {
|
||||
if(isset($originlang)){
|
||||
$translation = translate($originlang, $node);
|
||||
$tr = json_decode($translation->body);
|
||||
if($translation->status_code == "200"){
|
||||
$i = $tr->translations[0]->text;
|
||||
}
|
||||
else {
|
||||
$i = $node;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$i = $node;
|
||||
}
|
||||
print_r('
|
||||
<div class="Grid">
|
||||
<div class="Grid-cell description">'.ucfirst($i).'</div>
|
||||
<div class="Grid-cell icons"><span class="non-vegan icon-cancel"></span></div>
|
||||
</div></span>');
|
||||
}
|
||||
|
||||
print_r('<span class="source">'. L::results_datasource .' <a href="https://www.veganpeace.com/ingredients/ingredients.htm">VeganPeace</a>, <a href="https://www.peta.org/living/food/animal-ingredients-list/">PETA</a> '.L::ingredients_and.' <a href="http://www.veganwolf.com/animal_ingredients.htm">The VEGAN WOLF</a><sup data-target="license" data-toggle="modal">?</sup><br>'.L::ingredients_translated.' <a href="https://deepl.com">DeepL</a><br>'. L::results_processed . '<sup data-target="processed" data-toggle="modal">?</sup></span>');
|
||||
print_r('</div></div>');
|
||||
}
|
||||
elseif($product->data->vegan == "true"){
|
||||
print_r('<div class="animated fadeIn"><div class="resultborder">');
|
||||
print_r('<div class="Grid">
|
||||
<div class="Grid-cell description"><b>Vegan</b></div>
|
||||
<div class="Grid-cell icons"><span class="vegan icon-ok"></span></div>
|
||||
</div>');
|
||||
print_r('<span class="source">'. L::results_datasource .' <a href="https://www.veganpeace.com/ingredients/ingredients.htm">VeganPeace</a>, <a href="https://www.peta.org/living/food/animal-ingredients-list/">PETA</a> '.L::ingredients_and.' <a href="http://www.veganwolf.com/animal_ingredients.htm">The VEGAN WOLF</a><sup data-target="license" data-toggle="modal">?</sup><br>'. L::results_processed . '<sup data-target="processed" data-toggle="modal">?</sup></span>');
|
||||
print_r('</div></div>');
|
||||
}
|
||||
else {
|
||||
print_r('<span class="animated fadeIn"><div class="resultborder">' . L::ingredients_error .'</div></span>');
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -1,341 +0,0 @@
|
|||
/**
|
||||
* CallBacks:
|
||||
* __________________________________________________________________________________
|
||||
* All the callback function should have one parameter:
|
||||
* function(result){};
|
||||
* And the result parameter will contain an array of objects that look like BarcodeScanner.
|
||||
* result = [{Format: the barcode type, Value: the value of the barcode}];
|
||||
* __________________________________________________________________________________
|
||||
*
|
||||
* You can use either the set functions or just access the properties directly to set callback or
|
||||
* other properties. Just always remember to call Init() before starting to decode something never mess
|
||||
* around with the SupportedFormats property.
|
||||
*
|
||||
*/
|
||||
BarcodeScanner = {
|
||||
Config : {
|
||||
// Set to false if the decoder should look for one barcode and then stop. Increases performance.
|
||||
Multiple : true,
|
||||
|
||||
// The formats that the decoder will look for.
|
||||
DecodeFormats : ["Code128","Code93","Code39","EAN-13", "2Of5", "Inter2Of5", "Codabar"],
|
||||
|
||||
// ForceUnique just must makes sure that the callback function isn't repeatedly called
|
||||
// with the same barcode. Especially in the case of a video stream.
|
||||
ForceUnique: true,
|
||||
|
||||
// Set to true if information about the localization should be recieved from the worker.
|
||||
LocalizationFeedback: false,
|
||||
|
||||
// Set to true if checking orientation of the image should be skipped.
|
||||
// Checking orientation takes a bit of time for larger images, so if
|
||||
// you are sure that the image orientation is 1 you should skip it.
|
||||
SkipOrientation : false
|
||||
},
|
||||
SupportedFormats : ["Code128","Code93","Code39","EAN-13", "2Of5", "Inter2Of5", "Codabar"],// Don't touch.
|
||||
ScanCanvas : null, // Don't touch the canvas either.
|
||||
ScanContext : null,
|
||||
SquashCanvas : document.createElement("canvas"),
|
||||
ImageCallback : null, // Callback for the decoding of an image.
|
||||
streamCallback : null, // Callback for the decoding of a video.
|
||||
LocalizationCallback : null, // Callback for localization.
|
||||
Stream : null, // The actual video.
|
||||
DecodeStreamActive : false, // Will be set to false when StopStreamDecode() is called.
|
||||
Decoded : [], // Used to enfore the ForceUnique property.
|
||||
DecoderWorker : new Worker("../js/DecoderWorker.js"),
|
||||
OrientationCallback : null,
|
||||
// Always call the Init().
|
||||
init : function() {
|
||||
BarcodeScanner.ScanCanvas = BarcodeScanner.FixCanvas(document.createElement("canvas"));
|
||||
BarcodeScanner.ScanCanvas.width = 640;
|
||||
BarcodeScanner.ScanCanvas.height = 480;
|
||||
BarcodeScanner.ScanContext = BarcodeScanner.ScanCanvas.getContext("2d");
|
||||
},
|
||||
|
||||
// Value should be true or false.
|
||||
SetRotationSkip : function(value) {
|
||||
BarcodeScanner.Config.SkipOrientation = value;
|
||||
},
|
||||
// Sets the callback function for the image decoding.
|
||||
SetImageCallback : function(callBack) {
|
||||
BarcodeScanner.ImageCallback = callBack;
|
||||
},
|
||||
|
||||
// Sets the callback function for the video decoding.
|
||||
setStreamCallback : function(callBack) {
|
||||
BarcodeScanner.streamCallback = callBack;
|
||||
},
|
||||
|
||||
// Sets callback for localization, the callback function should take one argument.
|
||||
// This will be an array with objects with format.
|
||||
// {x, y, width, height}
|
||||
// This represents a localization rectangle.
|
||||
// The rectangle comes from a 320, 240 area i.e the search canvas.
|
||||
SetLocalizationCallback : function(callBack) {
|
||||
BarcodeScanner.LocalizationCallback = callBack;
|
||||
BarcodeScanner.Config.LocalizationFeedback = true;
|
||||
},
|
||||
|
||||
// Set to true if LocalizationCallback is set and you would like to
|
||||
// receive the feedback or false if
|
||||
SwitchLocalizationFeedback : function(bool) {
|
||||
BarcodeScanner.Config.LocalizationFeedback = bool;
|
||||
},
|
||||
|
||||
// Switches for changing the Multiple property.
|
||||
DecodeSingleBarcode : function() {
|
||||
BarcodeScanner.Config.Multiple = false;
|
||||
},
|
||||
DecodeMultiple : function() {
|
||||
BarcodeScanner.Config.Multiple = true;
|
||||
},
|
||||
|
||||
// Sets the formats to decode, formats should be an array of a subset of the supported formats.
|
||||
SetDecodeFormats : function(formats) {
|
||||
BarcodeScanner.Config.DecodeFormats = [];
|
||||
for(var i = 0; i < formats.length; i++) {
|
||||
if(BarcodeScanner.SupportedFormats.indexOf(formats[i]) != -1) {
|
||||
BarcodeScanner.Config.DecodeFormats.push(formats[i]);
|
||||
}
|
||||
}
|
||||
if(BarcodeScanner.Config.DecodeFormats.length == 0) {
|
||||
BarcodeScanner.Config.DecodeFormats = BarcodeScanner.SupportedFormats.slice();
|
||||
}
|
||||
},
|
||||
|
||||
// Removes a list of formats from the formats to decode.
|
||||
SkipFormats : function(formats) {
|
||||
for(var i = 0; i < formats.length; i++) {
|
||||
var index = BarcodeScanner.Config.DecodeFormats.indexOf(formats[i]);
|
||||
if(index >= 0) {
|
||||
BarcodeScanner.Config.DecodeFormats.splice(index,1);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// Adds a list of formats to the formats to decode.
|
||||
AddFormats : function(formats) {
|
||||
for(var i = 0; i < formats.length; i++) {
|
||||
if(BarcodeScanner.SupportedFormats.indexOf(formats[i]) != -1) {
|
||||
if(BarcodeScanner.Config.DecodeFormats.indexOf(formats[i]) == -1) {
|
||||
BarcodeScanner.Config.DecodeFormats.push(formats[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// The callback function for image decoding used internally by BarcodeScanner.
|
||||
BarcodeScannerImageCallback : function(e) {
|
||||
if(e.data.success == "localization") {
|
||||
if(BarcodeScanner.Config.LocalizationFeedback) {
|
||||
BarcodeScanner.LocalizationCallback(e.data.result);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if(e.data.success == "orientationData") {
|
||||
BarcodeScanner.OrientationCallback(e.data.result);
|
||||
return;
|
||||
}
|
||||
var filteredData = [];
|
||||
for(var i = 0; i < e.data.result.length; i++) {
|
||||
if(BarcodeScanner.Decoded.indexOf(e.data.result[i].Value) == -1 || BarcodeScanner.Config.ForceUnique == false) {
|
||||
filteredData.push(e.data.result[i]);
|
||||
if(BarcodeScanner.Config.ForceUnique) BarcodeScanner.Decoded.push(e.data.result[i].Value);
|
||||
}
|
||||
}
|
||||
BarcodeScanner.ImageCallback(filteredData);
|
||||
BarcodeScanner.Decoded = [];
|
||||
},
|
||||
|
||||
// The callback function for stream decoding used internally by BarcodeScanner.
|
||||
BarcodeScannerStreamCallback : function(e) {
|
||||
if(e.data.success == "localization") {
|
||||
if(BarcodeScanner.Config.LocalizationFeedback) {
|
||||
BarcodeScanner.LocalizationCallback(e.data.result);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if(e.data.success && BarcodeScanner.DecodeStreamActive) {
|
||||
var filteredData = [];
|
||||
for(var i = 0; i < e.data.result.length; i++) {
|
||||
if(BarcodeScanner.Decoded.indexOf(e.data.result[i].Value) == -1 || BarcodeScanner.ForceUnique == false) {
|
||||
filteredData.push(e.data.result[i]);
|
||||
if(BarcodeScanner.ForceUnique) BarcodeScanner.Decoded.push(e.data.result[i].Value);
|
||||
}
|
||||
}
|
||||
if(filteredData.length > 0) {
|
||||
BarcodeScanner.streamCallback(filteredData);
|
||||
}
|
||||
}
|
||||
if(BarcodeScanner.DecodeStreamActive) {
|
||||
BarcodeScanner.ScanContext.drawImage(BarcodeScanner.Stream,0,0,BarcodeScanner.ScanCanvas.width,BarcodeScanner.ScanCanvas.height);
|
||||
BarcodeScanner.DecoderWorker.postMessage({
|
||||
scan : BarcodeScanner.ScanContext.getImageData(0,0,BarcodeScanner.ScanCanvas.width,BarcodeScanner.ScanCanvas.height).data,
|
||||
scanWidth : BarcodeScanner.ScanCanvas.width,
|
||||
scanHeight : BarcodeScanner.ScanCanvas.height,
|
||||
multiple : BarcodeScanner.Config.Multiple,
|
||||
decodeFormats : BarcodeScanner.Config.DecodeFormats,
|
||||
cmd : "normal",
|
||||
rotation : 1,
|
||||
});
|
||||
|
||||
}
|
||||
if(!BarcodeScanner.DecodeStreamActive) {
|
||||
BarcodeScanner.Decoded = [];
|
||||
}
|
||||
},
|
||||
|
||||
// The image decoding function, image is a data source for an image or an image element.
|
||||
DecodeImage : function(image) {
|
||||
if(image instanceof Image || image instanceof HTMLImageElement)
|
||||
{
|
||||
image.exifdata = false;
|
||||
if(image.complete) {
|
||||
if(BarcodeScanner.Config.SkipOrientation) {
|
||||
BarcodeScanner.BarcodeScannerDecodeImage(image,1,"");
|
||||
} else {
|
||||
EXIF.getData(image, function(exifImage) {
|
||||
var orientation = EXIF.getTag(exifImage,"Orientation");
|
||||
var sceneType = EXIF.getTag(exifImage,"SceneCaptureType");
|
||||
if(typeof orientation != 'number') orientation = 1;
|
||||
BarcodeScanner.BarcodeScannerDecodeImage(exifImage,orientation,sceneType);
|
||||
});
|
||||
}
|
||||
} else {
|
||||
var img = new Image();
|
||||
img.onload = function() {
|
||||
if(BarcodeScanner.Config.SkipOrientation) {
|
||||
BarcodeScanner.BarcodeScannerDecodeImage(img,1,"");
|
||||
} else {
|
||||
EXIF.getData(this, function(exifImage) {
|
||||
var orientation = EXIF.getTag(exifImage,"Orientation");
|
||||
var sceneType = EXIF.getTag(exifImage,"SceneCaptureType");
|
||||
if(typeof orientation != 'number') orientation = 1;
|
||||
BarcodeScanner.BarcodeScannerDecodeImage(exifImage,orientation,sceneType);
|
||||
});
|
||||
}
|
||||
};
|
||||
img.src = image.src;
|
||||
}
|
||||
} else {
|
||||
var img = new Image();
|
||||
img.onload = function() {
|
||||
if(BarcodeScanner.Config.SkipOrientation) {
|
||||
BarcodeScanner.BarcodeScannerDecodeImage(img,1,"");
|
||||
} else {
|
||||
EXIF.getData(this, function(exifImage) {
|
||||
var orientation = EXIF.getTag(exifImage,"Orientation");
|
||||
var sceneType = EXIF.getTag(exifImage,"SceneCaptureType");
|
||||
if(typeof orientation != 'number') orientation = 1;
|
||||
BarcodeScanner.BarcodeScannerDecodeImage(exifImage,orientation,sceneType);
|
||||
});
|
||||
}
|
||||
};
|
||||
img.src = image;
|
||||
}
|
||||
},
|
||||
|
||||
// Starts the decoding of a stream, the stream is a video not a blob i.e it's an element.
|
||||
DecodeStream : function(stream) {
|
||||
BarcodeScanner.Stream = stream;
|
||||
BarcodeScanner.DecodeStreamActive = true;
|
||||
BarcodeScanner.DecoderWorker.onmessage = BarcodeScanner.BarcodeScannerStreamCallback;
|
||||
BarcodeScanner.ScanContext.drawImage(stream,0,0,BarcodeScanner.ScanCanvas.width,BarcodeScanner.ScanCanvas.height);
|
||||
BarcodeScanner.DecoderWorker.postMessage({
|
||||
scan : BarcodeScanner.ScanContext.getImageData(0,0,BarcodeScanner.ScanCanvas.width,BarcodeScanner.ScanCanvas.height).data,
|
||||
scanWidth : BarcodeScanner.ScanCanvas.width,
|
||||
scanHeight : BarcodeScanner.ScanCanvas.height,
|
||||
multiple : BarcodeScanner.Config.Multiple,
|
||||
decodeFormats : BarcodeScanner.Config.DecodeFormats,
|
||||
cmd : "normal",
|
||||
rotation : 1,
|
||||
});
|
||||
},
|
||||
|
||||
// Stops the decoding of a stream.
|
||||
StopStreamDecode : function() {
|
||||
BarcodeScanner.DecodeStreamActive = false;
|
||||
BarcodeScanner.Decoded = [];
|
||||
},
|
||||
|
||||
BarcodeScannerDecodeImage : function (image,orientation,sceneCaptureType) {
|
||||
if(orientation == 8 || orientation == 6) {
|
||||
if(sceneCaptureType == "Landscape" && image.width > image.height) {
|
||||
orientation = 1;
|
||||
BarcodeScanner.ScanCanvas.width = 640;
|
||||
BarcodeScanner.ScanCanvas.height = 480;
|
||||
} else {
|
||||
BarcodeScanner.ScanCanvas.width = 480;
|
||||
BarcodeScanner.ScanCanvas.height = 640;
|
||||
}
|
||||
} else {
|
||||
BarcodeScanner.ScanCanvas.width = 640;
|
||||
BarcodeScanner.ScanCanvas.height = 480;
|
||||
}
|
||||
BarcodeScanner.DecoderWorker.onmessage = BarcodeScanner.BarcodeScannerImageCallback;
|
||||
BarcodeScanner.ScanContext.drawImage(image,0,0,BarcodeScanner.ScanCanvas.width,BarcodeScanner.ScanCanvas.height);
|
||||
BarcodeScanner.Orientation = orientation;
|
||||
BarcodeScanner.DecoderWorker.postMessage({
|
||||
scan : BarcodeScanner.ScanContext.getImageData(0,0,BarcodeScanner.ScanCanvas.width,BarcodeScanner.ScanCanvas.height).data,
|
||||
scanWidth : BarcodeScanner.ScanCanvas.width,
|
||||
scanHeight : BarcodeScanner.ScanCanvas.height,
|
||||
multiple : BarcodeScanner.Config.Multiple,
|
||||
decodeFormats : BarcodeScanner.Config.DecodeFormats,
|
||||
cmd : "normal",
|
||||
rotation : orientation,
|
||||
postOrientation : BarcodeScanner.PostOrientation
|
||||
});
|
||||
},
|
||||
|
||||
DetectVerticalSquash : function (img) {
|
||||
var ih = img.naturalHeight;
|
||||
var canvas = BarcodeScanner.SquashCanvas;
|
||||
canvas.width = 1;
|
||||
canvas.height = ih;
|
||||
var ctx = canvas.getContext('2d');
|
||||
ctx.drawImage(img, 0, 0);
|
||||
try {
|
||||
var data = ctx.getImageData(0, 0, 1, ih).data;
|
||||
} catch (err) {
|
||||
console.log("Cannot check verticalSquash: CORS?");
|
||||
return 1;
|
||||
}
|
||||
var sy = 0;
|
||||
var ey = ih;
|
||||
var py = ih;
|
||||
while (py > sy) {
|
||||
var alpha = data[(py - 1) * 4 + 3];
|
||||
if (alpha === 0) {
|
||||
ey = py;
|
||||
} else {
|
||||
sy = py;
|
||||
}
|
||||
py = (ey + sy) >> 1;
|
||||
}
|
||||
var ratio = (py / ih);
|
||||
return (ratio===0)?1:ratio;
|
||||
},
|
||||
|
||||
FixCanvas : function (canvas)
|
||||
{
|
||||
var ctx = canvas.getContext('2d');
|
||||
var drawImage = ctx.drawImage;
|
||||
ctx.drawImage = function(img, sx, sy, sw, sh, dx, dy, dw, dh)
|
||||
{
|
||||
var vertSquashRatio = 1;
|
||||
if (Boolean(img) && img.nodeName == 'IMG')
|
||||
{
|
||||
vertSquashRatio = BarcodeScanner.DetectVerticalSquash(img);
|
||||
sw || (sw = img.naturalWidth);
|
||||
sh || (sh = img.naturalHeight);
|
||||
}
|
||||
if (arguments.length == 9)
|
||||
drawImage.call(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio);
|
||||
else if (typeof sw != 'undefined')
|
||||
drawImage.call(ctx, img, sx, sy, sw, sh / vertSquashRatio);
|
||||
else
|
||||
drawImage.call(ctx, img, sx, sy);
|
||||
};
|
||||
return canvas;
|
||||
}
|
||||
};
|
1
js/BarcodeScanner.min.js
vendored
2079
js/DecoderWorker.js
840
js/app.js
|
@ -1,840 +0,0 @@
|
|||
/*!
|
||||
* VeganCheck.me app.js
|
||||
* https://vegancheck.me
|
||||
* https://isitvegan.io
|
||||
* Git-Repo: https://vegc.net/repo
|
||||
*
|
||||
* Includes JavaScript Only Barcode_Reader (JOB) by Eddie Larsson
|
||||
* https://github.com/EddieLa/BarcodeReader
|
||||
*
|
||||
* Copyright JokeNetwork and contributors
|
||||
* Released under the MIT license
|
||||
* https://vegc.net/license
|
||||
*
|
||||
*/
|
||||
|
||||
const version = "2.2.0";
|
||||
|
||||
function setupLiveReader(resultElement) {
|
||||
// Scroll to top
|
||||
window.location.hash = '#top';
|
||||
|
||||
// Create scanner-container
|
||||
let container = document.createElement('div')
|
||||
container.className = 'eanscanner'
|
||||
container.style.position = 'absolute'
|
||||
container.style.zIndex = '999'
|
||||
container.style.width = '100%'
|
||||
container.style.height = '100%'
|
||||
container.style.left = '0'
|
||||
container.style.top = '0'
|
||||
let canvas = document.createElement('canvas')
|
||||
let video = document.createElement('video')
|
||||
let context = canvas.getContext('2d')
|
||||
canvas.style.position = 'absolute'
|
||||
container.appendChild(canvas)
|
||||
document.body.insertBefore(container, resultElement)
|
||||
|
||||
// Define camera facingMode once
|
||||
let camera = 'environment'
|
||||
|
||||
// Flip camera button
|
||||
document.getElementById('flipbutton').onclick = function() {
|
||||
if (camera == 'environment') {
|
||||
camera = 'user'
|
||||
} else if (camera == 'user') {
|
||||
camera = 'environment'
|
||||
} else {
|
||||
camera = 'environment'
|
||||
}
|
||||
|
||||
// End stream and restart
|
||||
initendStream();
|
||||
startStream();
|
||||
};
|
||||
|
||||
// Start the stream
|
||||
startStream();
|
||||
|
||||
function startStream() {
|
||||
document.getElementById('result').style.display = 'none';
|
||||
|
||||
// Scroll to top
|
||||
window.location.hash = '#top';
|
||||
|
||||
// Check for the facingMode
|
||||
if (camera == 'environment' || camera == 'user') {
|
||||
var constraints = {
|
||||
audio: false,
|
||||
video: {
|
||||
width: window.innerWidth * window.devicePixelRatio,
|
||||
height: window.innerHeight * window.devicePixelRatio,
|
||||
aspectRatio: { ideal: (window.innerHeight) / window.innerWidth },
|
||||
focusMode: 'continuous',
|
||||
facingMode: camera
|
||||
}
|
||||
};
|
||||
} else {
|
||||
camera = 'environment'
|
||||
var constraints = {
|
||||
audio: false,
|
||||
video: {
|
||||
width: window.innerWidth * window.devicePixelRatio,
|
||||
height: window.innerHeight * window.devicePixelRatio,
|
||||
aspectRatio: { ideal: (window.innerHeight) / window.innerWidth },
|
||||
focusMode: 'continuous',
|
||||
facingMode: camera
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
navigator.mediaDevices.getUserMedia(constraints).then(stream => {
|
||||
const track = stream.getVideoTracks()[0];
|
||||
BarcodeScanner.init()
|
||||
let closer = document.getElementById('controls')
|
||||
let btnclose = document.getElementById('closebtn')
|
||||
let barcodeicon = document.getElementById('barcodeicon')
|
||||
closer.style.display = 'inline-block'
|
||||
|
||||
// Torch/Flash on Android
|
||||
const btn = document.getElementById('torch');
|
||||
btn.addEventListener('click', function() {
|
||||
track.applyVideoConstraints({
|
||||
advanced: [{ torch: powerOn }]
|
||||
});
|
||||
})
|
||||
|
||||
function endStream() {
|
||||
track.stop();
|
||||
}
|
||||
initendStream = endStream;
|
||||
|
||||
|
||||
// When barcode is detected
|
||||
BarcodeScanner.streamCallback = function(result) {
|
||||
document.getElementById('barcode').value = result[0].Value
|
||||
barcodeicon.style.color = "#10ac84";
|
||||
barcodeicon.style.opacity = "1";
|
||||
setTimeout(function() {
|
||||
BarcodeScanner.StopStreamDecode()
|
||||
video.pause()
|
||||
stream.getTracks()[0].stop()
|
||||
container.classList.add('fadeOut')
|
||||
closer.classList.add('fadeOut')
|
||||
barcodeicon.style.color = "#fff";
|
||||
barcodeicon.style.opacity = "0.4";
|
||||
}, 300);
|
||||
setTimeout(function() {
|
||||
container.classList.remove('fadeOut')
|
||||
closer.classList.remove('fadeOut')
|
||||
container.style.display = 'none'
|
||||
closer.style.display = 'none'
|
||||
}, 500);
|
||||
|
||||
// Auto submit barcode
|
||||
document.getElementsByTagName('button')[0].click();
|
||||
}
|
||||
|
||||
// Close stream when button is clicked
|
||||
btnclose.onclick = function(close) {
|
||||
BarcodeScanner.StopStreamDecode()
|
||||
video.pause()
|
||||
stream.getTracks()[0].stop()
|
||||
container.classList.add('fadeOut')
|
||||
closer.classList.add('fadeOut')
|
||||
setTimeout(function() {
|
||||
container.classList.remove('fadeOut')
|
||||
closer.classList.remove('fadeOut')
|
||||
container.style.display = 'none'
|
||||
closer.style.display = 'none'
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
video.setAttribute('autoplay', '')
|
||||
video.setAttribute('playsinline', '')
|
||||
video.setAttribute('style', 'width: 100%; height: 100%;')
|
||||
video.srcObject = stream
|
||||
|
||||
container.appendChild(video)
|
||||
video.onloadedmetadata = function(e) {
|
||||
video.play()
|
||||
BarcodeScanner.DecodeStream(video)
|
||||
}
|
||||
}).catch(function(err) {})
|
||||
}
|
||||
document.getElementById('result').style.display = 'block';
|
||||
}
|
||||
|
||||
// Close modal on escape-key press
|
||||
$(document).on('keyup', function(e) {
|
||||
if (e.key == "Escape") $('.modal_close').click();
|
||||
if (e.key == "Escape") $('#closebtn').click();
|
||||
});
|
||||
|
||||
// Submit if parameter EAN is filled
|
||||
$(document).ready(function() {
|
||||
if (window.location.href.indexOf("ean") > -1) {
|
||||
document.getElementsByTagName('button')[0].click();
|
||||
}
|
||||
});
|
||||
|
||||
// Disable all results
|
||||
$("#RSFound").css("display", "none");
|
||||
$("#RSNotFound").css("display", "none");
|
||||
$("#RSInvalid").css("display", "none");
|
||||
|
||||
// submit.js
|
||||
$('button[name="submit"]').on("click", function (e) {
|
||||
$("#RSFound").css("display", "none");
|
||||
$("#RSNotFound").css("display", "none");
|
||||
$("#RSInvalid").css("display", "none");
|
||||
e.preventDefault();
|
||||
$(".timeout-final").css("display", "none");
|
||||
let barcode = $('input[name="barcode"]').val();
|
||||
$.ajax({
|
||||
url: "https://api.vegancheck.me/v0/product/" + barcode,
|
||||
type: "POST",
|
||||
timeout: 10000,
|
||||
error: function (xhr, statusText, err) {
|
||||
if (xhr.status == 404) {
|
||||
$("#RSInvalid").css("display", "block");
|
||||
} else {
|
||||
$(".timeout").css("display", "none");
|
||||
$(".timeout-final").css("display", "block");
|
||||
}
|
||||
},
|
||||
success: function (result) {
|
||||
if (result.status == 200) {
|
||||
let productname =
|
||||
result.product.productname === "n/a"
|
||||
? "?"
|
||||
: result.product.productname;
|
||||
let vegan =
|
||||
result.product.vegan === "true"
|
||||
? "<span class='vegan icon-ok'></span>"
|
||||
: result.product.vegan === "false"
|
||||
? "<span class='non-vegan icon-cancel'></span>"
|
||||
: "<span class='unknown icon-help'></span>";
|
||||
let vegetarian =
|
||||
result.product.vegetarian === "true"
|
||||
? "<span class='vegan icon-ok'></span>"
|
||||
: result.product.vegetarian === "false"
|
||||
? "<span class='non-vegan icon-cancel'></span>"
|
||||
: "<span class='unknown icon-help'></span>";
|
||||
let animaltestfree =
|
||||
result.product.animaltestfree === "true"
|
||||
? "<span class='vegan icon-ok'></span>"
|
||||
: result.product.animaltestfree === "false"
|
||||
? "<span class='non-vegan icon-cancel'></span>"
|
||||
: "n/a";
|
||||
let palmoil =
|
||||
result.product.palmoil === "true"
|
||||
? "<span class='non-vegan icon-cancel'></span>"
|
||||
: result.product.palmoil === "false"
|
||||
? "<span class='vegan icon-ok'></span>"
|
||||
: "<span class='unknown icon-help'></span>";
|
||||
let nutriscore = result.product.nutriscore;
|
||||
let grade =
|
||||
result.product.grade === "n/a"
|
||||
? "<span class='unknown icon-help'></span>"
|
||||
: result.product.grade;
|
||||
|
||||
if (nutriscore === "n/a") {
|
||||
nutriscore = '<span class="unknown icon-help"></span>';
|
||||
} else if (nutriscore === "a") {
|
||||
nutriscore = '<span class="nutri_a icon-a"></span>';
|
||||
} else if (nutriscore === "b") {
|
||||
nutriscore = '<span class="nutri_b icon-b"></span>';
|
||||
} else if (nutriscore === "c") {
|
||||
nutriscore = '<span class="nutri_c icon-c"></span>';
|
||||
} else if (nutriscore === "d") {
|
||||
nutriscore = '<span class="nutri_d icon-d"></span>';
|
||||
} else if (nutriscore === "e") {
|
||||
nutriscore = '<span class="nutri_e icon-e"></span>';
|
||||
}
|
||||
|
||||
if (grade === "n/a") {
|
||||
grade = '<span class="unknown icon-help"></span>';
|
||||
} else if (grade === "A") {
|
||||
grade = '<span class="nutri_a icon-a"></span>';
|
||||
} else if (grade === "B") {
|
||||
grade = '<span class="nutri_b icon-b"></span>';
|
||||
} else if (grade === "C") {
|
||||
grade = '<span class="nutri_c icon-c"></span>';
|
||||
} else if (grade === "D") {
|
||||
grade = '<span class="nutri_d icon-d"></span>';
|
||||
} else if (grade === "A+") {
|
||||
grade = '<span class="nutri_a">A+</span>';
|
||||
} else if (grade === "Not eligible") {
|
||||
grade = '<span class="non-vegan icon-cancel"></span>';
|
||||
}
|
||||
|
||||
let api = result.sources.api;
|
||||
let baseuri = result.sources.baseuri;
|
||||
|
||||
$("#RSFound").css("display", "block");
|
||||
|
||||
$(".name").html(productname);
|
||||
$(".RSVegan").html(vegan);
|
||||
$(".RSVegetarian").html(vegetarian);
|
||||
$(".RSPalmoil").html(palmoil);
|
||||
$(".RSNutriscore").html(nutriscore);
|
||||
$(".RSGrade").html(grade);
|
||||
if (animaltestfree === "n/a") {
|
||||
$(".Crueltyfree").css("display", "none");
|
||||
} else {
|
||||
$(".RSAnimaltestfree").html(animaltestfree);
|
||||
}
|
||||
$(".RSSource").html(api);
|
||||
$(".RSSource").attr("href", baseuri);
|
||||
} else {
|
||||
$("#RSNotFound").css("display", "block");
|
||||
}
|
||||
$("html, body").animate(
|
||||
{
|
||||
scrollTop: $("#resscroll").offset().top,
|
||||
},
|
||||
900,
|
||||
"swing"
|
||||
);
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
// Scroll to result
|
||||
self.location.href = '#resscroll';
|
||||
|
||||
// Share button init
|
||||
if (document.getElementById("share")) {
|
||||
const title = document.title;
|
||||
const text = document.getElementById('name_sh').innerHTML + " - Checked using VeganCheck";
|
||||
const ean = document.getElementById('barcode').value;
|
||||
const url = "https://vegancheck.me/en/?ean=" + ean;
|
||||
|
||||
if (navigator.share == undefined) {
|
||||
document.getElementById("share").setAttribute("data-toggle", "modal");
|
||||
document.getElementById("share").setAttribute("data-target", "sharemodal");
|
||||
document.getElementById("share").removeAttribute("onclick");
|
||||
|
||||
// Copy
|
||||
document.getElementById("copy").addEventListener('click', function handleClick() {
|
||||
navigator.clipboard.writeText(text + ": " + url);
|
||||
document.querySelector('.btn-dark').click();
|
||||
});
|
||||
|
||||
// Twitter
|
||||
document.getElementById("twitter").addEventListener('click', function handleClick() {
|
||||
window.location = `https://twitter.com/intent/tweet?url=https://vegancheck.me/en/?ean=${encodeURI(ean)}&text=${encodeURI(text)}`;
|
||||
document.querySelector('.btn-dark').click();
|
||||
});
|
||||
|
||||
// WhatsApp
|
||||
document.getElementById("whatsapp").addEventListener('click', function handleClick() {
|
||||
window.location = `whatsapp://send?text=https://vegancheck.me/en/?ean=${encodeURI(ean)}` + ` ` + `${encodeURI(text)}`;
|
||||
document.querySelector('.btn-dark').click();
|
||||
});
|
||||
|
||||
// Facebook
|
||||
document.getElementById("facebook").addEventListener('click', function handleClick() {
|
||||
window.location = `https://www.facebook.com/sharer/sharer.php?u=https://vegancheck.me/en/?ean=${encodeURI(ean)}`;
|
||||
document.querySelector('.btn-dark').click();
|
||||
});
|
||||
|
||||
// Message
|
||||
document.getElementById("message").addEventListener('click', function handleClick() {
|
||||
window.location = `sms:&body=https://vegancheck.me/en/?ean=${encodeURI(ean)}` + ` ` + `${encodeURI(text)}`;
|
||||
document.querySelector('.btn-dark').click();
|
||||
});
|
||||
|
||||
// E-Mail
|
||||
document.getElementById("email").addEventListener('click', function handleClick() {
|
||||
window.location = `mailto:?body="https://vegancheck.me/en/ean=${ean}"&subject=${text}`;
|
||||
document.querySelector('.btn-dark').click();
|
||||
});
|
||||
|
||||
// Telegram
|
||||
document.getElementById("telegram").addEventListener('click', function handleClick() {
|
||||
window.location = `https://telegram.me/share/url?url=https://vegancheck.me/en/?ean=${encodeURI(ean)}&text=${encodeURI(text)}`;
|
||||
document.querySelector('.btn-dark').click();
|
||||
});
|
||||
|
||||
|
||||
|
||||
} else {
|
||||
document.getElementById("share").addEventListener('click', function handleClick() {
|
||||
navigator.share({
|
||||
title,
|
||||
text,
|
||||
ean,
|
||||
url
|
||||
})
|
||||
.catch(err => "");
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Ingredient checker
|
||||
// submit.js
|
||||
$('button[name="checkingredients"]').on('click', function(e) {
|
||||
e.preventDefault();
|
||||
$(".timeout-final").css("display", "none");
|
||||
$.ajax({
|
||||
url: '../ingredients_script.php',
|
||||
type: 'POST',
|
||||
timeout: 8000,
|
||||
data: {
|
||||
ingredients: $('textarea[name="ingredients"]').val(),
|
||||
lang: $('input[name="lang"]').val()
|
||||
},
|
||||
error: function() {
|
||||
$(".timeout").css("display", "none");
|
||||
$(".timeout-final").css("display", "block");
|
||||
},
|
||||
success: function(result) {
|
||||
$('#result').html(result);
|
||||
$('html, body').animate({
|
||||
scrollTop: $('#resscroll').offset().top
|
||||
}, 900, 'swing');
|
||||
|
||||
// Scroll to result
|
||||
self.location.href = '#resscroll';
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
if (document.getElementById("shortcut")) {
|
||||
let shortcut = document.getElementById('shortcut');
|
||||
let mainpage = document.getElementById('mainpage');
|
||||
|
||||
// Only show shortcut if PWA is not installed
|
||||
if (window.matchMedia('(display-mode: standalone)').matches) {
|
||||
shortcut.style.display = 'none';
|
||||
mainpage.classList.add('top');
|
||||
}
|
||||
|
||||
// Only show shortcut on iOS
|
||||
var isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
|
||||
if (!isIOS) {
|
||||
shortcut.style.display = 'none';
|
||||
mainpage.classList.add('top');
|
||||
}
|
||||
|
||||
// Don't show shortcut if the shortcut is already executed
|
||||
if (window.location.href.indexOf("shortcut") > -1) {
|
||||
shortcut.style.display = 'none';
|
||||
mainpage.classList.add('top');
|
||||
}
|
||||
}
|
||||
|
||||
// PWA Prompt Display
|
||||
if (document.getElementById("installation")) {
|
||||
function setCookie(name, value, days) {
|
||||
var expires = "";
|
||||
if (days) {
|
||||
var date = new Date();
|
||||
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
|
||||
expires = "; expires=" + date.toUTCString();
|
||||
}
|
||||
document.cookie = name + "=" + (value || "") + expires + "; path=/";
|
||||
}
|
||||
|
||||
function getCookie(name) {
|
||||
var nameEQ = name + "=";
|
||||
var ca = document.cookie.split(';');
|
||||
for (var i = 0; i < ca.length; i++) {
|
||||
var c = ca[i];
|
||||
while (c.charAt(0) == ' ') c = c.substring(1, c.length);
|
||||
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
document.getElementById("pwaclose").onclick = function() {
|
||||
setCookie('pwa_install', 'true', 180);
|
||||
document.getElementById("pwainstall").style.display = 'none';
|
||||
}
|
||||
|
||||
if ((getCookie('pwa_install') == "true") || (window.matchMedia('(display-mode: standalone)').matches) || (!isIOS) || (window.location.href.indexOf("shortcut") > -1)) {
|
||||
document.getElementById("pwainstall").style.display = 'none';
|
||||
} else if (isIOS) {
|
||||
document.getElementById("pwainstall").style.display = 'block';
|
||||
} else {
|
||||
document.getElementById("pwainstall").style.display = 'none';
|
||||
}
|
||||
}
|
||||
|
||||
// Donation Modal
|
||||
if (document.getElementById("donationmodal")) {
|
||||
document.getElementById("option_monthly").onclick = function() {
|
||||
document.getElementById("option_kofi").classList.remove("active");
|
||||
document.getElementById("option_once").classList.remove("active");
|
||||
document.getElementById("option_gh").classList.remove("active");
|
||||
document.getElementById("option_stripe").classList.remove("active");
|
||||
document.getElementById("option_monthly").classList.add("active");
|
||||
document.getElementById("once").checked = false;
|
||||
document.getElementById("monthly").checked = true;
|
||||
document.getElementById("gh").checked = false;
|
||||
document.getElementById("stripe").checked = false;
|
||||
document.getElementById("kofi").checked = false;
|
||||
document.getElementById('supportbtn').setAttribute('href', 'https://www.paypal.com/donate/?hosted_button_id=J7TEA8GBPN536');
|
||||
document.getElementById('supportbtn').innerHTML = '<span class="icon-paypal"></span> Donate with PayPal';
|
||||
document.getElementById('vendor').innerHTML = 'PayPal';
|
||||
}
|
||||
document.getElementById("option_once").onclick = function() {
|
||||
document.getElementById("option_kofi").classList.remove("active");
|
||||
document.getElementById("option_monthly").classList.remove("active");
|
||||
document.getElementById("option_gh").classList.remove("active");
|
||||
document.getElementById("option_stripe").classList.remove("active");
|
||||
document.getElementById("option_once").classList.add("active");
|
||||
document.getElementById("once").checked = true;
|
||||
document.getElementById("monthly").checked = false;
|
||||
document.getElementById("gh").checked = false;
|
||||
document.getElementById("stripe").checked = false;
|
||||
document.getElementById("kofi").checked = false;
|
||||
document.getElementById('supportbtn').setAttribute('href', 'https://www.paypal.com/donate/?hosted_button_id=J7TEA8GBPN536');
|
||||
document.getElementById('supportbtn').innerHTML = '<span class="icon-paypal"></span> Donate with PayPal';
|
||||
document.getElementById('vendor').innerHTML = 'PayPal';
|
||||
}
|
||||
document.getElementById("option_gh").onclick = function() {
|
||||
document.getElementById("option_kofi").classList.remove("active");
|
||||
document.getElementById("option_monthly").classList.remove("active");
|
||||
document.getElementById("option_once").classList.remove("active");
|
||||
document.getElementById("option_stripe").classList.remove("active");
|
||||
document.getElementById("option_gh").classList.add("active");
|
||||
document.getElementById("gh").checked = true;
|
||||
document.getElementById("monthly").checked = false;
|
||||
document.getElementById("once").checked = false;
|
||||
document.getElementById("stripe").checked = false;
|
||||
document.getElementById("kofi").checked = false;
|
||||
document.getElementById('supportbtn').setAttribute('href', 'https://github.com/sponsors/philipbrembeck');
|
||||
document.getElementById('supportbtn').innerHTML = '<span class="icon-github-circled"></span> Sponsor on GitHub';
|
||||
document.getElementById('vendor').innerHTML = 'GitHub';
|
||||
}
|
||||
document.getElementById("option_stripe").onclick = function() {
|
||||
document.getElementById("option_kofi").classList.remove("active");
|
||||
document.getElementById("option_monthly").classList.remove("active");
|
||||
document.getElementById("option_once").classList.remove("active");
|
||||
document.getElementById("option_gh").classList.remove("active");
|
||||
document.getElementById("option_stripe").classList.add("active");
|
||||
document.getElementById("stripe").checked = true;
|
||||
document.getElementById("monthly").checked = false;
|
||||
document.getElementById("once").checked = false;
|
||||
document.getElementById("gh").checked = false;
|
||||
document.getElementById("kofi").checked = false;
|
||||
document.getElementById('supportbtn').setAttribute('href', 'https://donate.stripe.com/3cs5mzgy42jd2645kk');
|
||||
document.getElementById('supportbtn').innerHTML = '<span class="icon-credit-card-alt"></span> Donate with Stripe';
|
||||
document.getElementById('vendor').innerHTML = 'Stripe';
|
||||
}
|
||||
document.getElementById("option_kofi").onclick = function() {
|
||||
document.getElementById("option_monthly").classList.remove("active");
|
||||
document.getElementById("option_once").classList.remove("active");
|
||||
document.getElementById("option_gh").classList.remove("active");
|
||||
document.getElementById("option_stripe").classList.remove("active");
|
||||
document.getElementById("option_kofi").classList.add("active");
|
||||
document.getElementById("kofi").checked = true;
|
||||
document.getElementById("stripe").checked = false;
|
||||
document.getElementById("monthly").checked = false;
|
||||
document.getElementById("once").checked = false;
|
||||
document.getElementById("gh").checked = false;
|
||||
document.getElementById('supportbtn').setAttribute('href', 'https://ko-fi.com/vegancheck');
|
||||
document.getElementById('supportbtn').innerHTML = '<svg viewBox="0 0 25 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;width:1em;margin-right: 0.2em;text-align: center;text-transform: none;line-height: 1em;margin-left: 0.2em;"><g id="ArtBoard1" transform="matrix(0.964946,0,0,0.898431,0.0552102,-7.08779)"><rect x="-0.057" y="7.889" width="24.977" height="17.024" style="fill:none;"/><clipPath id="_clip1"><rect x="-0.057" y="7.889" width="24.977" height="17.024"/></clipPath><g clip-path="url(#_clip1)"><g transform="matrix(1.03633,0,0,1.11305,0.0143001,3.06776)"><path d="M23.881,8.948C23.108,4.863 19.022,4.355 19.022,4.355L0.723,4.355C0.119,4.355 0.044,5.153 0.044,5.153C0.044,5.153 -0.038,12.477 0.022,16.975C0.186,19.399 2.608,19.647 2.608,19.647C2.608,19.647 10.875,19.624 14.574,19.598C17.012,19.172 17.257,17.032 17.232,15.864C21.584,16.104 24.654,13.033 23.881,8.948ZM12.819,12.459C11.573,13.912 8.808,16.435 8.808,16.435C8.808,16.435 8.687,16.554 8.498,16.458C8.422,16.401 8.39,16.368 8.39,16.368C7.947,15.927 5.022,13.319 4.356,12.414C3.647,11.449 3.315,9.714 4.265,8.704C5.216,7.694 7.27,7.618 8.628,9.111C8.628,9.111 10.193,7.329 12.096,8.148C14,8.968 13.928,11.159 12.819,12.459ZM18.992,12.937C18.064,13.053 17.31,12.965 17.31,12.965L17.31,7.284L19.08,7.284C19.08,7.284 21.051,7.835 21.051,9.922C21.051,11.835 20.066,12.589 18.992,12.937Z" style="fill:white;fill-rule:nonzero;"/></g></g></g></svg> Donate with Ko-Fi';
|
||||
document.getElementById('vendor').innerHTML = 'Ko-Fi.com';
|
||||
}
|
||||
}
|
||||
|
||||
// Initialize SW
|
||||
if ('serviceWorker' in navigator) {
|
||||
window.addEventListener('load', function() {
|
||||
navigator.serviceWorker.register('../sw.js');
|
||||
});
|
||||
}
|
||||
|
||||
// Spinner while AJAX request
|
||||
let $loading = $('#spinner').hide();
|
||||
$(document)
|
||||
.ajaxStart(function() {
|
||||
$('.logo').addClass('spinner');
|
||||
})
|
||||
.ajaxStop(function() {
|
||||
$('.logo').removeClass('spinner');
|
||||
});
|
||||
|
||||
// "Timeout"-Warning
|
||||
let ajaxLoadTimeout;
|
||||
$(document).ajaxStart(function() {
|
||||
ajaxLoadTimeout = setTimeout(function() {
|
||||
$(".timeout").css("display", "block");
|
||||
}, 1500);
|
||||
|
||||
}).ajaxSuccess(function() {
|
||||
clearTimeout(ajaxLoadTimeout);
|
||||
$(".timeout").css("display", "none");
|
||||
});
|
||||
|
||||
// Check if user is offline
|
||||
window.addEventListener('offline', function(e) { window.location.href = "/offline"; });
|
||||
|
||||
|
||||
// OCR Reader
|
||||
let camera_button = document.querySelector("#ocr");
|
||||
let video = document.querySelector("#video");
|
||||
let close = document.querySelector("#close_ocr");
|
||||
let click_button = document.querySelector("#click-photo");
|
||||
let canvas = document.querySelector("#canvas");
|
||||
|
||||
const width = 500;
|
||||
let height = 0;
|
||||
let streaming = false;
|
||||
let tracks;
|
||||
|
||||
if (document.getElementById("ocr")) {
|
||||
camera_button.addEventListener('click', async function() {
|
||||
const constraints = {
|
||||
audio: false,
|
||||
video: {
|
||||
width: window.innerWidth * window.devicePixelRatio,
|
||||
height: window.innerHeight * window.devicePixelRatio,
|
||||
aspectRatio: { ideal: (window.innerHeight) / window.innerWidth },
|
||||
focusMode: 'continuous',
|
||||
facingMode: 'environment'
|
||||
}
|
||||
}
|
||||
let stream = await navigator.mediaDevices.getUserMedia(constraints);
|
||||
video.srcObject = stream;
|
||||
const mediaStream = video.srcObject;
|
||||
tracks = mediaStream.getTracks();
|
||||
document.getElementById("controls").style.display = "block";
|
||||
video.style.display = "block";
|
||||
click_button.style.display = "block";
|
||||
});
|
||||
|
||||
function stopBothVideoAndAudio(stream) {
|
||||
streaming = false;
|
||||
tracks[0].stop();
|
||||
click_button.innerHTML = "<span class='timeout' style='color:#FFF;'><span>.</span><span>.</span><span>.</span></span>";
|
||||
setTimeout(() => {
|
||||
document.getElementById("controls").style.display = "none";
|
||||
video.style.display = "none";
|
||||
click_button.style.display = "none";
|
||||
click_button.innerHTML = '<span class="icon-camera" id="click-photo"></span>';
|
||||
}, 500);
|
||||
}
|
||||
|
||||
video.addEventListener(
|
||||
"canplay",
|
||||
(ev) => {
|
||||
if (!streaming) {
|
||||
height = (video.videoHeight / video.videoWidth) * width;
|
||||
video.setAttribute("width", width);
|
||||
video.setAttribute("height", height);
|
||||
canvas.setAttribute("width", width);
|
||||
canvas.setAttribute("height", height);
|
||||
streaming = true;
|
||||
}
|
||||
},
|
||||
false
|
||||
);
|
||||
|
||||
close.addEventListener('click', function() {
|
||||
stopBothVideoAndAudio();
|
||||
});
|
||||
|
||||
click_button.addEventListener('click', function() {
|
||||
const context = canvas.getContext("2d");
|
||||
if (width && height) {
|
||||
canvas.width = width;
|
||||
canvas.height = height;
|
||||
context.drawImage(video, 0, 0, width, height);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
$("#click-photo").click(function() {
|
||||
stopBothVideoAndAudio();
|
||||
let img = canvas.toDataURL("image/png");
|
||||
startRecognize(img);
|
||||
});
|
||||
|
||||
// Start recognition
|
||||
function startRecognize(img) {
|
||||
recognizeFile(img);
|
||||
}
|
||||
|
||||
function progressUpdate(packet) {
|
||||
if (packet.status == 'recognizing text') {
|
||||
document.getElementById('wait').style.display = "block";
|
||||
stopBothVideoAndAudio();
|
||||
}
|
||||
|
||||
|
||||
if (packet.status == 'done') {
|
||||
document.getElementById('ingredients').value = packet.data.text.replace(/\n\s*\n/g, '')
|
||||
document.getElementById('wait').style.display = "none"
|
||||
stopBothVideoAndAudio();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function recognizeFile(file) {
|
||||
$("#log").empty();
|
||||
const corePath = window.navigator.userAgent.indexOf("Edge") > -1 ?
|
||||
'js/tesseract-core.asm.js' :
|
||||
'js/tesseract-core.wasm.js';
|
||||
|
||||
|
||||
const worker = new Tesseract.TesseractWorker({
|
||||
corePath,
|
||||
});
|
||||
|
||||
worker.recognize(file, "eng")
|
||||
.progress(function(packet) {
|
||||
console.info(packet)
|
||||
progressUpdate(packet)
|
||||
|
||||
})
|
||||
.then(function(data) {
|
||||
console.log(data)
|
||||
progressUpdate({ status: 'done', data: data })
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// OLED function
|
||||
if (localStorage.getItem("oled") === "true") {
|
||||
if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
||||
document.documentElement.setAttribute("data-theme", "oled");
|
||||
document.querySelector('meta[name="theme-color"][media="(prefers-color-scheme: dark)"]').setAttribute("content", "#000");
|
||||
if (document.getElementById("oled-switch")) {
|
||||
document.getElementById('oled-switch').checked = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (document.getElementById("oled-switch")) {
|
||||
let oled = document.getElementById('oled-switch');
|
||||
let info = document.getElementById('cookieinfo');
|
||||
let error = document.getElementById('oledinfo');
|
||||
|
||||
error.style.display = "none";
|
||||
|
||||
oled.onclick = function() {
|
||||
if (localStorage.getItem("oled") === "false" || localStorage.getItem("oled") === null) {
|
||||
if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
||||
document.documentElement.setAttribute("data-theme", "oled");
|
||||
document.querySelector('meta[name="theme-color"][media="(prefers-color-scheme: dark)"]').setAttribute("content", "#000");
|
||||
localStorage.setItem('oled', 'true');
|
||||
error.style.display = "none";
|
||||
info.style.display = "block";
|
||||
} else {
|
||||
oled.checked = false;
|
||||
oled.classList.add("animated");
|
||||
oled.classList.add("shake");
|
||||
info.style.display = "none";
|
||||
error.style.display = "block";
|
||||
error.classList.add("animated");
|
||||
error.classList.add("fadeIn");
|
||||
setTimeout(() => {
|
||||
oled.classList.remove("animated");
|
||||
oled.classList.remove("shake");
|
||||
}, 300);
|
||||
}
|
||||
} else {
|
||||
localStorage.clear();
|
||||
document.documentElement.removeAttribute("data-theme");
|
||||
document.querySelector('meta[name="theme-color"][media="(prefers-color-scheme: dark)"]').setAttribute("content", "#141414");
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// Modal
|
||||
document.addEventListener('click', function(e) {
|
||||
e = e || window.event;
|
||||
let target = e.target || e.srcElement;
|
||||
|
||||
if (target.hasAttribute('data-toggle') && target.getAttribute('data-toggle') == 'modal') {
|
||||
if (target.hasAttribute('data-target')) {
|
||||
let m_ID = target.getAttribute('data-target');
|
||||
let modal = document.getElementById(m_ID);
|
||||
document.getElementById(m_ID).classList.add('open');
|
||||
document.getElementById("mainpage").classList.remove("modalIsClosed");
|
||||
document.getElementById("mainpage").classList.add("modalIsOpen");
|
||||
e.preventDefault();
|
||||
|
||||
modal.addEventListener("touchstart", startTouch, false);
|
||||
modal.addEventListener("touchmove", moveTouch, false);
|
||||
|
||||
// Swipe Up / Down / Left / Right
|
||||
let initialX = null;
|
||||
let initialY = null;
|
||||
|
||||
function startTouch(e) {
|
||||
initialX = e.touches[0].clientX;
|
||||
initialY = e.touches[0].clientY;
|
||||
};
|
||||
|
||||
function moveTouch(e) {
|
||||
if (initialX === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (initialY === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
let currentX = e.touches[0].clientX;
|
||||
let currentY = e.touches[0].clientY;
|
||||
|
||||
let diffX = initialX - currentX;
|
||||
let diffY = initialY - currentY;
|
||||
|
||||
if (Math.abs(diffX) < Math.abs(diffY)) {
|
||||
// sliding vertically
|
||||
if (diffY < 0) {
|
||||
document.querySelector('.btn-dark').click();
|
||||
}
|
||||
}
|
||||
|
||||
initialX = null;
|
||||
initialY = null;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// Close modal window with 'data-dismiss' attribute or when the backdrop is clicked
|
||||
if ((target.hasAttribute('data-dismiss') && target.getAttribute('data-dismiss') == 'modal') || target.classList.contains('modalIsOpen') || target.classList.contains('form')) {
|
||||
let modal = document.querySelector('[class="modal_view animatedfaster fadeInUp open"]');
|
||||
modal.classList.add("fadeOutDown");
|
||||
setTimeout(() => {
|
||||
document.getElementById("mainpage").classList.remove("modalIsOpen");
|
||||
document.getElementById("mainpage").classList.add("modalIsClosed");
|
||||
modal.classList.remove("fadeOutDown");
|
||||
modal.classList.add("fadeInUp");
|
||||
modal.classList.remove('open');
|
||||
}, 200);
|
||||
e.preventDefault();
|
||||
}
|
||||
}, false);
|
||||
|
||||
document.body.addEventListener('keydown', (e) => {
|
||||
if (e.key === 'Escape') {
|
||||
document.querySelector('.btn-dark').click();
|
||||
}
|
||||
});
|
||||
|
||||
// Inform about updates
|
||||
if (document.getElementById("version")) {
|
||||
fetch("https://vegancheck.me/includes/versions.json").then((r) => {
|
||||
r.text()
|
||||
.then((d) => {
|
||||
let content = d;
|
||||
let json = JSON.parse(content);
|
||||
if (json.app == version) {
|
||||
document.getElementById("version").innerHTML = "Version: v" + json.app;
|
||||
} else {
|
||||
document.getElementById("version").innerHTML = "Version: v" + version + " - Update to v" + json.app;
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
2
js/jquery.min.js
vendored
22
js/submit.js
|
@ -1,22 +0,0 @@
|
|||
/**
|
||||
* @author Philip Brembeck
|
||||
* @version 0.0.1
|
||||
* @license MIT
|
||||
* @url https://vegc.net/license
|
||||
*/
|
||||
|
||||
$('button[name="submit"]').on('click', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
$.ajax({
|
||||
url: 'script.php',
|
||||
type: 'POST',
|
||||
data: {
|
||||
barcode: $('input[name="barcode"]').val(),
|
||||
lang: $('input[name="lang"]').val()
|
||||
},
|
||||
success: function(result) {
|
||||
$('#result').html(result);
|
||||
}
|
||||
});
|
||||
});
|
16
js/tesseract.min.js
vendored
114
l10n/de.json
|
@ -1,114 +0,0 @@
|
|||
{
|
||||
"meta":
|
||||
{
|
||||
"lang": "de",
|
||||
"title": "Ist es Vegan? - Vegan Check",
|
||||
"description": "Du bist dir unsicher, ob ein Produkt vegan ist oder nicht? Mit VeganCheck.me kannst du direkt beim Einkaufen den Barcode von einem Artikel scannen und \u00fcberpr\u00fcfen, ob es vegan ist oder nicht und das ohne viele andere unn\u00f6tige Informationen! Probiere es jetzt aus!"
|
||||
},
|
||||
"form":
|
||||
{
|
||||
"scanbarcode": "Barcode scannen",
|
||||
"enterbarcode": "Barcode eingeben",
|
||||
"submit": "Absenden"
|
||||
},
|
||||
"footer":
|
||||
{
|
||||
"share_text": "Gef\u00e4llt dir VeganCheck?",
|
||||
"share": "Teilen",
|
||||
"credits": "Mit <i class=\"icon-heart\"><\/i> gemacht von <a href=\"https:\/\/philipbrembeck.com\">Philip Brembeck<\/a> & <a href=\"https:\/\/jokenetwork.de\">JokeNetwork<\/a>",
|
||||
"legal": "<a href=\"..\/privacy-policy\">Datenschutzerkl\u00e4rung<\/a> \/ <a href=\"..\/tos\">Nutzungsbedingungen<\/a> \/ <a href=\"..\/impressum\">Impressum<\/a> \/ <a href=\"\/\/jokenetwork.de\/vegancheck-api\">API<\/a>"
|
||||
},
|
||||
"layover":
|
||||
{
|
||||
"close": "Scanner schlie\u00dfen"
|
||||
},
|
||||
"prompt": {
|
||||
"close": "Schließen",
|
||||
"install": "VeganCheck.me installieren",
|
||||
"desc": "Installiere VeganCheck und scanne immer und überall Produkte und überprüfe, ob Sie vegan sind!",
|
||||
"info": "Tippe auf <svg class='pwa-install-prompt__guide__icon' viewBox='0 0 128 128' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'><title>Teilen</title><path fill='#007AFF' d='M48.883,22.992L61.146,10.677L61.146,78.282C61.146,80.005 62.285,81.149 64,81.149C65.715,81.149 66.854,80.005 66.854,78.282L66.854,10.677L79.117,22.992C79.693,23.57 80.256,23.853 81.114,23.853C81.971,23.853 82.534,23.57 83.11,22.992C84.25,21.848 84.25,20.125 83.11,18.981L65.997,1.794C65.715,1.511 65.421,1.215 65.139,1.215C64.563,0.932 63.718,0.932 62.861,1.215C62.579,1.498 62.285,1.498 62.003,1.794L44.89,18.981C43.75,20.125 43.75,21.848 44.89,22.992C46.029,24.149 47.744,24.149 48.883,22.992ZM103.936,35.32L81.114,35.32L81.114,41.053L103.936,41.053L103.936,121.27L24.064,121.27L24.064,41.053L46.886,41.053L46.886,35.32L24.064,35.32C20.928,35.32 18.355,37.904 18.355,41.053L18.355,121.27C18.355,124.419 20.928,127.003 24.064,127.003L103.936,127.003C107.072,127.003 109.645,124.419 109.645,121.27L109.645,41.053C109.645,37.891 107.072,35.32 103.936,35.32Z'/></svg>und dann Zum Home-Bildschirm.",
|
||||
"get": "Laden"
|
||||
},
|
||||
"other":
|
||||
{
|
||||
"offline": "Du bist offline. VeganCheck.me funktioniert nur mit einer aktiven Internet-Verbindung.",
|
||||
"reload": "Erneut versuchen",
|
||||
"rotate": "Bitte drehe dein Ger\u00e4t.",
|
||||
"timeout": "Die Abfrage dauert l\u00e4nger als gew\u00f6hnlich",
|
||||
"timeoutfinal": "Die Abfrage hat zu lange gedauert. Bitte versuche es erneut."
|
||||
},
|
||||
"results":
|
||||
{
|
||||
"invalid": "Das Barcode-Feld darf nicht leer sein und keine Sonderzeichen enthalten.",
|
||||
"invalidscan": "Mit diesem Barcode stimmt etwas nicht.",
|
||||
"notindb": "Dieses Produkt haben wir noch nicht in unserer Datenbank.",
|
||||
"add": "Willst du es hinzuf\u00fcgen?",
|
||||
"addonoff": "Lebensmittel hinzuf\u00fcgen",
|
||||
"addonobf": "Kosemtika hinzuf\u00fcgen",
|
||||
"or": "oder",
|
||||
"missinginfo": "Zu diesem Produkt haben wir noch zu wenige Infos.",
|
||||
"addinfo": "Willst du Infos hinzuf\u00fcgen?",
|
||||
"editonoff": "Dieses Produkt bearbeiten bei OpenFoodFacts",
|
||||
"vegan": "Vegan",
|
||||
"notvegetarian": "Nicht vegetarisch",
|
||||
"vegetarian": "Vegetarisch",
|
||||
"unknown": "unbekannt",
|
||||
"containspalmoil": "Enth\u00e4lt Palm\u00f6l",
|
||||
"nopalmoil": "Kein Palm\u00f6l",
|
||||
"palmoilunknown": "Palm\u00f6l-Inhalt unbekannt",
|
||||
"notvegan": "Nicht vegan",
|
||||
"tweettext": "%20ist%20nicht%20vegan!%20-%20Gepr\u00fcft%20mit%20",
|
||||
"tweettextvegan": "%20ist%20vegan!%20-%20Gepr\u00fcft%20mit%20",
|
||||
"edit": "\u00c4ndern",
|
||||
"reporterror": "Fehler melden",
|
||||
"animaltestfree": "Tierversuchsfrei",
|
||||
"checkingredients": "Die Inhaltsstoffe des Produktes wurden automatisch verarbeitet und gepr\u00fcft. Bitte \u00fcberpr\u00fcfen Sie die Inhaltsstoffe selbst, um sicher zu gehen.",
|
||||
"datasource": "Datenquelle:",
|
||||
"processed": "Automatisch berechnet"
|
||||
},
|
||||
"modal":
|
||||
{
|
||||
"palmoil": "Palm\u00f6l",
|
||||
"palmoil_desc": "Palm\u00f6l hat extrem sch\u00e4dliche Auswirkungen auf den Planeten. Es ist die Hauptursache f\u00fcr die Abholzung einiger der artenreichsten W\u00e4lder und zerst\u00f6rt die nat\u00fcrlichen Lebensr\u00e4ume von bereits gef\u00e4hrdeten Tieren. Aus diesem Grund empfehlen wir, keine Produkte zu kaufen, die Palm\u00f6l enthalten. Leider gibt es immer noch viele Produkte, die Palm\u00f6l enthalten.",
|
||||
"nutriscore_desc": "Der Nutriscore zeigt das N\u00e4hrwertprofil eines Produktes in Ampelform an. Der Nutriscore gilt jedoch nicht als genau und sollte nicht als Referenz verwendet werden, weil er immer auf der Basis von 100g/100ml des Produktes berechnet wird.\n Weitere Informationen sind bei <a href=\"https:\/\/algorithmwatch.org\/en\/nutriscore\/\">Algorithmwatch<\/a> (Englisch) zu finden.",
|
||||
"processed": "Automatisch berechnet",
|
||||
"processed_desc": "Diese Meldung bedeutet, dass die Inhaltsstoffe des Produkts von der <a href=\"https:\/\/github.com\/JokeNetwork\/vegan-ingredients-api\">VeganCheck.me Ingredients API<\/a> gepr\u00fcft und automatisch als vegan oder nicht-vegan klassifiziert wurden.<br>\nDie Zutaten stammen jeweils von der angegebenen Quelle.<br>\nWir erheben keinerlei Anspruch auf Richtigkeit oder Aktualit\u00e4t der Inhaltsstoffe oder der Bewertungskriterien.<br>\nManchmal ver\u00e4ndern Hersteller die Inhaltsstoffe ihres Produktes so, dass es nicht mehr vegan ist, zum Beispiel durch Zugabe von Milchpulver.<br>\nBitte \u00fcberpr\u00fcfen Sie die Inhaltsstoffe des Produkts, um sicherzugehen.",
|
||||
"licenses": "Lizenzen",
|
||||
"licenses_desc": "VeganCheck.me benutzt verschiedene Datenquellen, um Informationen über ein Produkt zu sammeln. Diese Informationen stehen unter den nachfolgenden Lizenzen:",
|
||||
"licenses_copyrights": "© OpenFoodFacts Contributors, licensed under <a href=\"https:\/\/opendatacommons.org\/licenses\/odbl\/1.0\/\">Open Database License<\/a> and <a href=\"https:\/\/opendatacommons.org\/licenses\/dbcl\/1.0\/\">Database Contents License<\/a>.<br>\r\n Brocade.io Contributors, licensed under <a href=\"https:\/\/creativecommons.org\/publicdomain\/zero\/1.0\/\">Creative-Commons Zero<\/a>.<br>\r\n © Open EAN\/GTIN Database Contributors, licensed under <a href=\"https:\/\/www.gnu.org\/licenses\/fdl-1.3.html\">GNU FDL<\/a>."
|
||||
},
|
||||
"ingredients":
|
||||
{
|
||||
"shorttitle": "Zutatencheck",
|
||||
"title": "Zutatenliste Vegan Check",
|
||||
"subtitle": "Prüfe, ob die Inhaltsstoffe eines Produkts vegan sind!",
|
||||
"placeholder": "Zutaten kommagetrennt eingeben",
|
||||
"error": "Die Zutatenliste darf nicht leer sein oder Sonderzeichen enthalten und muss durch Kommata getrennt sein!",
|
||||
"translated": "Übersetzt mit",
|
||||
"and": "und"
|
||||
},
|
||||
"more":
|
||||
{
|
||||
"more": "Mehr",
|
||||
"supportus": "Kauf uns einen Kaffee",
|
||||
"tos": "Nutzungsbedingungen",
|
||||
"privacypolicy": "Datenschutzerklärung",
|
||||
"api": "API Dokumentation",
|
||||
"imprint": "Impressum",
|
||||
"oled": {
|
||||
"cookiewarning": "Dies setzt einen Cookie",
|
||||
"error": "Aktiviere den Dark-Mode auf deinem Gerät!"
|
||||
},
|
||||
"donate": {
|
||||
"once": "Einmalig",
|
||||
"monthly": "Monatlich",
|
||||
"via": "via",
|
||||
"month": "Monat",
|
||||
"vendor": "Der Bezahlprozess wird auf <span id=\"vendor\">PayPal<\/span> abgeschlossen."
|
||||
},
|
||||
"follow": "Folge uns"
|
||||
},
|
||||
"language": "Diese Seite ist nur auf Deutsch und Englisch verfügbar.",
|
||||
"germanonly": "Diese Seite ist nur auf Deutsch verfügbar.",
|
||||
"tos": "<p><b>Nutzung der Seite \"VeganCheck.me\"<\/b><\/p><p>Die Nutzung der Seite \"VeganCheck.me\" erfolgt kostenlos. Die entgeltliche Weitergabe der Inhalte oder unserer Services ist untersagt. Automatisierte Abfragen sind ebenfalls untersagt und dürfen nur mittels der <a href=\"https:\/\/jokenetwork.de\/vegancheck-api\">API<\/a> erfolgen.<br> Wir behalten uns vor, unsere Services jederzeit zu ändern, zu reduzieren, zu erweitern oder zu deaktivieren.<\/p><p><b>Verarbeitung eingegebener Texte und Nummern<\/b><\/p><p>Auf unserer Website können in Textfeldern Barcodes oder Zutaten eines Produktes eingegeben werden. Dies ist notwendig, um unseren Dienst im vollem Umfang zur Verfügung zu stellen. Die Eingabe erfolgt freiwillig.<br>In die benannten Textfelder dürfen nur Barcodes oder Zutaten eingegeben werden, die Eingabe oder Übermittlung von personenbezogenen Daten jeglicher Art ist untersagt.<\/p><p>Personenbezogene Daten sind alle Informationen, die sich auf eine identifizierte oder identifizierbare lebende Person beziehen. Verschiedene Teilinformationen, die gemeinsam zur Identifizierung einer bestimmten Person führen können, stellen ebenfalls personenbezogene Daten dar.<sup><a href=\"https:\/\/ec.europa.eu\/info\/law\/law-topic\/data-protection\/reform\/what-personal-data_de\">?<\/a><\/sup><\/p><p><b>Haftungsausschluss<\/b><\/p><p>Wir übernehmen keine Haftung für die Richtigkeit der angebotenen Produktinformationen und Zutatenlisten und für die Verfügbarkeit unseres Dienstes.<\/p>"
|
||||
}
|
69
l10n/de.php
|
@ -1,69 +0,0 @@
|
|||
<?php
|
||||
$langArray = array(
|
||||
"meta" => array(
|
||||
"lang" => "de",
|
||||
"title" => "Ist es Vegan? - Vegan Check",
|
||||
"description" => "Du bist dir unsicher, ob ein Produkt vegan ist oder nicht? Mit VeganCheck.me kannst du direkt beim Einkaufen den Barcode von einem Artikel scannen und überprüfen, ob es vegan ist oder nicht und das ohne viele andere unnötige Informationen! Probiere es jetzt aus!"
|
||||
),
|
||||
"form" => array(
|
||||
"scanbarcode" => "Barcode scannen",
|
||||
"enterbarcode" => "Barcode eingeben",
|
||||
"submit" => "Absenden"
|
||||
),
|
||||
"footer" => array(
|
||||
"share_text" => "Gefällt dir VeganCheck?",
|
||||
"share" => "Teilen",
|
||||
"credits" => 'Mit <i class="icon-vegancheck"></i> gemacht von <a href="https://philipbrembeck.com">Philip Brembeck</a> & <a href="https://jokenetwork.de">JokeNetwork</a>',
|
||||
"legal" => '<a href="../privacy-policy">Datenschutzerklärung</a> / <a href="../impressum">Impressum</a> / <a href="//github.com/JokeNetwork/vegancheck.me/wiki">API</a>'
|
||||
),
|
||||
"layover" => array(
|
||||
"close" => "Scanner schließen"
|
||||
),
|
||||
"other" => array(
|
||||
"offline" => "Du bist offline. VeganCheck.me funktioniert nur mit einer aktiven Internet-Verbindung.",
|
||||
"reload" => "Erneut versuchen",
|
||||
"rotate" => "Bitte drehe dein Gerät.",
|
||||
"timeout" => "Die Abfrage dauert länger als gewöhnlich",
|
||||
"timeoutfinal" => "Die Abfrage hat zu lange gedauert. Bitte versuche es erneut."
|
||||
),
|
||||
"results" => array(
|
||||
"invalid" => "Das Barcode-Feld darf nicht leer sein und keine Sonderzeichen enthalten.",
|
||||
"invalidscan" => "Mit diesem Barcode stimmt etwas nicht.",
|
||||
"notindb" => "Dieses Produkt haben wir noch nicht in unserer Datenbank.",
|
||||
"add" => "Willst du es hinzufügen?",
|
||||
"addonoff" => "Lebensmittel hinzufügen",
|
||||
"addonobf" => "Kosemtika hinzufügen",
|
||||
"or" => "oder",
|
||||
"missinginfo" => "Zu diesem Produkt haben wir noch zu wenige Infos.",
|
||||
"addinfo" => "Willst du Infos hinzufügen?",
|
||||
"editonoff" => "Dieses Produkt bearbeiten bei OpenFoodFacts",
|
||||
"vegan" => "Vegan",
|
||||
"notvegetarian" => "Nicht vegetarisch",
|
||||
"vegetarian" => "Vegetarisch",
|
||||
"unknown" => "unbekannt",
|
||||
"containspalmoil" => "Enthält Palmöl",
|
||||
"nopalmoil" => "Kein Palmöl",
|
||||
"palmoilunknown" => "Palmöl-Inhalt unbekannt",
|
||||
"notvegan" => "Nicht vegan",
|
||||
"tweettext" => "%20ist%20nicht%20vegan!%20-%20Geprüft%20mit%20",
|
||||
"tweettextvegan" => "%20ist%20vegan!%20-%20Geprüft%20mit%20",
|
||||
"edit" => "Ändern",
|
||||
"reporterror" => "Fehler melden",
|
||||
"animaltestfree" => "Tierversuchsfrei",
|
||||
"checkingredients" => "Die Inhaltsstoffe des Produktes wurden automatisch verarbeitet und geprüft. Bitte überprüfen Sie die Inhaltsstoffe selbst, um sicher zu gehen.",
|
||||
"datasource" => "Datenquelle:",
|
||||
"processed" => "Automatisch berechnet"
|
||||
),
|
||||
"modal" => array(
|
||||
"palmoil" => "Palmöl",
|
||||
"palmoil_desc" => "Palmöl hat extrem schädliche Auswirkungen auf den Planeten. Es ist die Hauptursache für die Abholzung einiger der artenreichsten Wälder und zerstört die natürlichen Lebensräume von bereits gefährdeten Tieren. Aus diesem Grund empfehlen wir, keine Produkte zu kaufen, die Palmöl enthalten. Leider gibt es immer noch viele Produkte, die Palmöl enthalten.",
|
||||
"nutriscore_desc" => "Der Nutriscore zeigt das Nährwertprofil eines Produktes in Ampelform an. Der Nutriscore gilt jedoch nicht als genau und sollte nicht als Referenz verwendet werden.",
|
||||
"processed" => "Automatisch berechnet",
|
||||
"processed_desc" => 'Diese Meldung bedeutet, dass die Inhaltsstoffe des Produkts von der <a href="https://github.com/JokeNetwork/vegan-ingredients-api">VeganCheck.me Ingredients API</a> geprüft und automatisch als vegan oder nicht-vegan klassifiziert wurden.<br>
|
||||
Die Zutaten stammen jeweils von der angegebenen Quelle.<br>
|
||||
Wir erheben keinerlei Anspruch auf Richtigkeit oder Aktualität der Inhaltsstoffe oder der Bewertungskriterien.<br>
|
||||
Manchmal verändern Hersteller die Inhaltsstoffe ihres Produktes so, dass es nicht mehr vegan ist, zum Beispiel durch Zugabe von Milchpulver.<br>
|
||||
Bitte überprüfen Sie die Inhaltsstoffe des Produkts, um sicherzugehen.'
|
||||
)
|
||||
);
|
||||
?>
|
114
l10n/en.json
|
@ -1,114 +0,0 @@
|
|||
{
|
||||
"meta":
|
||||
{
|
||||
"lang": "en",
|
||||
"title": "Is it Vegan? - Vegan Check",
|
||||
"description": "Are you unsure whether a product is vegan or not? With VeganCheck.me you can scan the bar code of an item while shopping and check whether it is vegan or not and that without a lot of other unnecessary information! Try it out now!"
|
||||
},
|
||||
"form":
|
||||
{
|
||||
"scanbarcode": "Scan barcode",
|
||||
"enterbarcode": "Enter product barcode",
|
||||
"submit": "Submit"
|
||||
},
|
||||
"footer":
|
||||
{
|
||||
"share_text": "Do you like VeganCheck?",
|
||||
"share": "Share",
|
||||
"credits": "Made with <i class=\"icon-heart\"><\/i> by <a href=\"https:\/\/philipbrembeck.com\">Philip Brembeck<\/a> & <a href=\"https:\/\/jokenetwork.de\">JokeNetwork<\/a>",
|
||||
"legal": "<a href=\"..\/privacy-policy\">Privacy Policy<\/a> \/ <a href=\"..\/tos\">Terms of use<\/a> \/ <a href=\"..\/impressum\">Imprint<\/a> \/ <a href=\"\/\/jokenetwork.de\/vegancheck-api\">API<\/a>"
|
||||
},
|
||||
"layover":
|
||||
{
|
||||
"close": "Close scanner"
|
||||
},
|
||||
"prompt": {
|
||||
"close": "Close",
|
||||
"install": "Install VeganCheck.me",
|
||||
"desc": "Install VeganCheck and always scan products and check if they're vegan!",
|
||||
"info": "Just tap on <svg class='pwa-install-prompt__guide__icon' viewBox='0 0 128 128' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'><title>Share</title><path fill='#007AFF' d='M48.883,22.992L61.146,10.677L61.146,78.282C61.146,80.005 62.285,81.149 64,81.149C65.715,81.149 66.854,80.005 66.854,78.282L66.854,10.677L79.117,22.992C79.693,23.57 80.256,23.853 81.114,23.853C81.971,23.853 82.534,23.57 83.11,22.992C84.25,21.848 84.25,20.125 83.11,18.981L65.997,1.794C65.715,1.511 65.421,1.215 65.139,1.215C64.563,0.932 63.718,0.932 62.861,1.215C62.579,1.498 62.285,1.498 62.003,1.794L44.89,18.981C43.75,20.125 43.75,21.848 44.89,22.992C46.029,24.149 47.744,24.149 48.883,22.992ZM103.936,35.32L81.114,35.32L81.114,41.053L103.936,41.053L103.936,121.27L24.064,121.27L24.064,41.053L46.886,41.053L46.886,35.32L24.064,35.32C20.928,35.32 18.355,37.904 18.355,41.053L18.355,121.27C18.355,124.419 20.928,127.003 24.064,127.003L103.936,127.003C107.072,127.003 109.645,124.419 109.645,121.27L109.645,41.053C109.645,37.891 107.072,35.32 103.936,35.32Z'/></svg>then Add to Home Screen.",
|
||||
"get": "Get"
|
||||
},
|
||||
"other":
|
||||
{
|
||||
"offline": "You are currently offline. VeganCheck.me only works with a functioning internet-connection.",
|
||||
"reload": "Reload",
|
||||
"rotate": "Please turn your device",
|
||||
"timeout": "This takes longer than usual",
|
||||
"timeoutfinal": "The request took too long. Please try again."
|
||||
},
|
||||
"results":
|
||||
{
|
||||
"invalid": "Barcode cannot be empty or include special characters.",
|
||||
"invalidscan": "This barcode is invalid.",
|
||||
"notindb": "This product is not in our database yet.",
|
||||
"add": "Do you want to add it?",
|
||||
"addonoff": "add food",
|
||||
"addonobf": "add cosemtics",
|
||||
"or": "or",
|
||||
"missinginfo": "We do not have enough info on this product yet.",
|
||||
"addinfo": "Want to add info?",
|
||||
"editonoff": "Edit this product at OpenFoodFacts",
|
||||
"vegan": "Vegan",
|
||||
"notvegetarian": "Not vegetarian",
|
||||
"vegetarian": "Vegetarian",
|
||||
"unknown": "unknown",
|
||||
"containspalmoil": "Contains palmoil",
|
||||
"nopalmoil": "No palmoil",
|
||||
"palmoilunknown": "Palmoil unknown",
|
||||
"notvegan": "Not vegan",
|
||||
"tweettext": "%20is%20not%20vegan!%20-%Checked%with%20",
|
||||
"tweettextvegan": "+is+vegan!+-+Checked+with",
|
||||
"edit": "Edit",
|
||||
"reporterror": "Report an issue",
|
||||
"animaltestfree": "Cruelty-Free",
|
||||
"checkingredients": "The products ingredients were processed and checked automatically. Please check the ingredients yourself to be sure.",
|
||||
"datasource": "Data source:",
|
||||
"processed": "Computed automatically"
|
||||
},
|
||||
"modal":
|
||||
{
|
||||
"palmoil": "Palm-oil",
|
||||
"palmoil_desc": "Palm-oil has an extremly harmful impact on the planet. It is the major driver of deforestation of some of the most biodiverse forests, destroying the natural habitats of already endangered animals. Because of this, we'd recommend to not buy any products that contain palm-oil. Sadly, there are still many products out there which include palm oil.",
|
||||
"nutriscore_desc": "The Nutriscore indicates the nutritional profile of a product in traffic light form. However, the Nutriscore is not considered accurate and should not be used as a reference.",
|
||||
"processed": "Computed automatically",
|
||||
"processed_desc": "This message means that the ingredients of the product have been checked by the <a href=\"https:\/\/github.com\/JokeNetwork\/vegan-ingredients-api\">VeganCheck.me Ingredients API<\/a> and have been automatically classified as vegan or non-vegan.<br> \nThe ingredients are provided in each case by the indicated source.<br>\nWe do not make any claims about the accuracy or timeliness of the ingredients or the review criteria.<br>\nSometimes manufacturers change the ingredients of their product so that it is no longer vegan, for example by adding milk powder.<br>\nPlease double check the ingredients of the product to be sure.",
|
||||
"licenses": "Licenses",
|
||||
"licenses_desc": "VeganCheck.me uses different databases and APIs to gather information about a product. The information is licensed under the following licenses:",
|
||||
"licenses_copyrights": "© OpenFoodFacts Contributors, licensed under <a href=\"https:\/\/opendatacommons.org\/licenses\/odbl\/1.0\/\">Open Database License<\/a> and <a href=\"https:\/\/opendatacommons.org\/licenses\/dbcl\/1.0\/\">Database Contents License<\/a>.<br>\r\n Brocade.io Contributors, licensed under <a href=\"https:\/\/creativecommons.org\/publicdomain\/zero\/1.0\/\">Creative-Commons Zero<\/a>.<br>\r\n © Open EAN\/GTIN Database Contributors, licensed under <a href=\"https:\/\/www.gnu.org\/licenses\/fdl-1.3.html\">GNU FDL<\/a>."
|
||||
},
|
||||
"ingredients":
|
||||
{
|
||||
"shorttitle": "Ingredient-check",
|
||||
"title": "Vegan Ingredient Checker",
|
||||
"subtitle": "Check if the Ingredients of a product are vegan!",
|
||||
"placeholder": "Enter ingredients comma seperated",
|
||||
"error": "Ingredients-list cannot be empty or include special characters and have to be comma seperated!",
|
||||
"translated": "Translated with",
|
||||
"and": "and"
|
||||
},
|
||||
"more":
|
||||
{
|
||||
"more": "More",
|
||||
"supportus": "Buy us a coffee",
|
||||
"tos": "Terms of service",
|
||||
"privacypolicy": "Privacy policy",
|
||||
"api": "API documentation",
|
||||
"imprint": "Legal notice",
|
||||
"oled": {
|
||||
"cookiewarning": "This sets a cookie",
|
||||
"error": "Enable dark-mode on your device!"
|
||||
},
|
||||
"donate": {
|
||||
"once": "Once",
|
||||
"monthly": "Monthly",
|
||||
"via": "via",
|
||||
"month": "month",
|
||||
"vendor": "The payment process will be completed on <span id=\"vendor\">PayPal<\/span>."
|
||||
},
|
||||
"follow": "Follow us"
|
||||
},
|
||||
"language": "This page is only available in English and German.",
|
||||
"germanonly": "This page is only available in German.",
|
||||
"tos": "<p><b>Use of \"VeganCheck.me\"<\/b><\/p><p>The use of the site \"VeganCheck.me\" is free of charge. The distribution of the contents or our services against payment is strictly prohibited. Automated queries are also prohibited and may only be performed using the <a href=\"https:\/\/jokenetwork.de\/vegancheck-api\">API<\/a>.<br> We reserve the right to change, reduce, expand or disable our services at any time.<\/p><p><b>Processing of entered texts and numbers<\/b><\/p><p>On our website, barcodes or ingredients of a product can be entered in text fields. This is necessary to provide our service in its entirety. The data entry is completely voluntary.<br>Only barcodes or ingredients may be entered in the named text fields; the entry or transmission of personal data of any kind is strictly prohibited.<\/p><p>Personal data is any information that relates to an identified or identifiable living individual. Different pieces of information, which collected together can lead to the identification of a particular person, also constitute personal data.<sup><a href=\"https:\/\/ec.europa.eu\/info\/law\/law-topic\/data-protection\/reform\/what-personal-data_en\">?<\/a><\/sup><\/p><p><b>Disclaimer<\/b><\/p><p>We assume no liability for the accuracy of the product information and ingredient lists offered and for the availability of our service.<\/p>"
|
||||
}
|
69
l10n/en.php
|
@ -1,69 +0,0 @@
|
|||
<?php
|
||||
$langArray = array(
|
||||
"meta" => array(
|
||||
"lang" => "en",
|
||||
"title" => "Is it Vegan? - Vegan Check",
|
||||
"description" => "Are you unsure whether a product is vegan or not? With VeganCheck.me you can scan the bar code of an item while shopping and check whether it is vegan or not and that without a lot of other unnecessary information! Try it out now!"
|
||||
),
|
||||
"form" => array(
|
||||
"scanbarcode" => "Scan barcode",
|
||||
"enterbarcode" => "Enter product barcode",
|
||||
"submit" => "Submit"
|
||||
),
|
||||
"footer" => array(
|
||||
"share_text" => "Do you like VeganCheck?",
|
||||
"share" => "Share",
|
||||
"credits" => 'Made with <i class="icon-vegancheck"></i> by <a href="https://philipbrembeck.com">Philip Brembeck</a> & <a href="https://jokenetwork.de">JokeNetwork</a>',
|
||||
"legal" => '<a href="../privacy-policy">Privacy Policy</a> / <a href="../impressum">Imprint</a> / <a href="//github.com/JokeNetwork/vegancheck.me/wiki">API</a>'
|
||||
),
|
||||
"layover" => array(
|
||||
"close" => "Close scanner"
|
||||
),
|
||||
"other" => array(
|
||||
"offline" => "You are currently offline. VeganCheck.me only works with a functioning internet-connection.",
|
||||
"reload" => "Reload",
|
||||
"rotate" => "Please turn your device",
|
||||
"timeout" => "This takes longer than usual",
|
||||
"timeoutfinal" => "The request took too long. Please try again."
|
||||
),
|
||||
"results" => array(
|
||||
"invalid" => "Barcode cannot be empty or include special characters.",
|
||||
"invalidscan" => "This barcode is invalid.",
|
||||
"notindb" => "This product is not in our database yet.",
|
||||
"add" => "Do you want to add it?",
|
||||
"addonoff" => "add food",
|
||||
"addonobf" => "add cosemtics",
|
||||
"or" => "or",
|
||||
"missinginfo" => "We do not have enough info on this product yet.",
|
||||
"addinfo" => "Want to add info?",
|
||||
"editonoff" => "Edit this product at OpenFoodFacts",
|
||||
"vegan" => "Vegan",
|
||||
"notvegetarian" => "Not vegetarian",
|
||||
"vegetarian" => "Vegetarian",
|
||||
"unknown" => "unknown",
|
||||
"containspalmoil" => "Contains palmoil",
|
||||
"nopalmoil" => "No palmoil",
|
||||
"palmoilunknown" => "Palmoil unknown",
|
||||
"notvegan" => "Not vegan",
|
||||
"tweettext" => "%20is%20not%20vegan!%20-%Checked%with%20",
|
||||
"tweettextvegan" => "+is+vegan!+-+Checked+with",
|
||||
"edit" => "Edit",
|
||||
"reporterror" => "Report an issue",
|
||||
"animaltestfree" => "Not tested on animals",
|
||||
"checkingredients" => "The products ingredients were processed and checked automatically. Please check the ingredients yourself to be sure.",
|
||||
"datasource" => "Data source:",
|
||||
"processed" => "Computed automatically"
|
||||
),
|
||||
"modal" => array(
|
||||
"palmoil" => "Palm-oil",
|
||||
"palmoil_desc" => "Palm-oil has an extremly harmful impact on the planet. It is the major driver of deforestation of some of the most biodiverse forests, destroying the natural habitats of already endangered animals. Because of this, we'd recommend to not buy any products that contain palm-oil. Sadly, there are still many products out there which include palm oil.",
|
||||
"nutriscore_desc" => "The Nutriscore indicates the nutritional profile of a product in traffic light form. However, the Nutriscore is not considered accurate and should not be used as a reference.",
|
||||
"processed" => "Computed automatically",
|
||||
"processed_desc" => 'This message means that the ingredients of the product have been checked by the <a href="https://github.com/JokeNetwork/vegan-ingredients-api">VeganCheck.me Ingredients API</a> and have been automatically classified as vegan or non-vegan.<br>
|
||||
The ingredients are provided in each case by the indicated source.<br>
|
||||
We do not make any claims about the accuracy or timeliness of the ingredients or the review criteria.<br>
|
||||
Sometimes manufacturers change the ingredients of their product so that it is no longer vegan, for example by adding milk powder.<br>
|
||||
Please double check the ingredients of the product to be sure.'
|
||||
)
|
||||
);
|
||||
?>
|
114
l10n/es.json
|
@ -1,114 +0,0 @@
|
|||
{
|
||||
"meta":
|
||||
{
|
||||
"lang": "es",
|
||||
"title": "\u00bfEs vegano? - Vegan Check",
|
||||
"description": "\u00bfNo est\u00e1s seguro de si un producto es vegano o no? Con VeganCheck.me puedes escanear el c\u00f3digo de barras de un art\u00edculo mientras compras y comprobar si es vegano o no, \u00a1y eso sin mucha otra informaci\u00f3n innecesaria! Pru\u00e9balo ahora!"
|
||||
},
|
||||
"form":
|
||||
{
|
||||
"scanbarcode": "Escanear c\u00f3digo de barras",
|
||||
"enterbarcode": "Introduzca el c\u00f3digo de barras del producto",
|
||||
"submit": "Enviar"
|
||||
},
|
||||
"footer":
|
||||
{
|
||||
"share_text": "\u00bfTe gusta VeganCheck?",
|
||||
"share": "Compartir",
|
||||
"credits": "Hecho con <i class=\"icon-heart\"><\/i> por <a href=\"https:\/\/philipbrembeck.com\">Philip Brembeck<\/a> & <a href=\"https:\/\/jokenetwork.de\">JokeNetwork<\/a>",
|
||||
"legal": "<a href=\"..\/privacy-policy\">Pol\u00edtica de privacidad<\/a> \/ <a href=\"..\/tos\">Condiciones de uso<\/a> \/ <a href=\"..\/impressum\">aviso legal<\/a> \/ <a href=\"\/\/jokenetwork.de\/vegancheck-api\">API<\/a>"
|
||||
},
|
||||
"layover":
|
||||
{
|
||||
"close": "Cerrar esc\u00e1ner"
|
||||
},
|
||||
"prompt": {
|
||||
"close": "Cerrar",
|
||||
"install": "Instalar VeganCheck.me",
|
||||
"desc": "Instala VeganCheck y analiza siempre los productos y comprueba si son veganos",
|
||||
"info": "Sólo tienes que tocar en <svg class='pwa-install-prompt__guide__icon' viewBox='0 0 128 128' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'><title>Compartir</title><path fill='#007AFF' d='M48.883,22.992L61.146,10.677L61.146,78.282C61.146,80.005 62.285,81.149 64,81.149C65.715,81.149 66.854,80.005 66.854,78.282L66.854,10.677L79.117,22.992C79.693,23.57 80.256,23.853 81.114,23.853C81.971,23.853 82.534,23.57 83.11,22.992C84.25,21.848 84.25,20.125 83.11,18.981L65.997,1.794C65.715,1.511 65.421,1.215 65.139,1.215C64.563,0.932 63.718,0.932 62.861,1.215C62.579,1.498 62.285,1.498 62.003,1.794L44.89,18.981C43.75,20.125 43.75,21.848 44.89,22.992C46.029,24.149 47.744,24.149 48.883,22.992ZM103.936,35.32L81.114,35.32L81.114,41.053L103.936,41.053L103.936,121.27L24.064,121.27L24.064,41.053L46.886,41.053L46.886,35.32L24.064,35.32C20.928,35.32 18.355,37.904 18.355,41.053L18.355,121.27C18.355,124.419 20.928,127.003 24.064,127.003L103.936,127.003C107.072,127.003 109.645,124.419 109.645,121.27L109.645,41.053C109.645,37.891 107.072,35.32 103.936,35.32Z'/></svg> entonces Añadir a la pantalla de inicio.",
|
||||
"get": "Ver"
|
||||
},
|
||||
"other":
|
||||
{
|
||||
"offline": "Actualmente est\u00e1s desconectado. VeganCheck.me s\u00f3lo funciona con una conexi\u00f3n a Internet en funcionamiento.",
|
||||
"reload": "Intenta de nuevo",
|
||||
"rotate": "Por favor, gire su dispositivo",
|
||||
"timeout": "Esto tarda m\u00e1s de lo normal",
|
||||
"timeoutfinal": "La consulta ha tardado demasiado. Por favor, int\u00e9ntalo de nuevo."
|
||||
},
|
||||
"results":
|
||||
{
|
||||
"invalid": "El c\u00f3digo de barras no puede estar vac\u00edo ni incluir caracteres especiales.",
|
||||
"invalidscan": "Este c\u00f3digo de barras no es v\u00e1lido.",
|
||||
"notindb": "Este producto a\u00fan no est\u00e1 en nuestra base de datos",
|
||||
"add": "\u00bfQuiere a\u00f1adirlo?",
|
||||
"addonoff": "A\u00f1adir comida",
|
||||
"addonobf": "add cosemtics",
|
||||
"or": "o",
|
||||
"missinginfo": "Todav\u00eda no tenemos suficiente informaci\u00f3n sobre este producto.",
|
||||
"addinfo": "\u00bfQuieres a\u00f1adir informaci\u00f3n?",
|
||||
"editonoff": "Editar este producto en OpenFoodFacts",
|
||||
"vegan": "Vegano",
|
||||
"notvegetarian": "Non vegetariano",
|
||||
"vegetarian": "Vegetariano",
|
||||
"unknown": "Desconocido",
|
||||
"containspalmoil": "Contiene Palmoil",
|
||||
"nopalmoil": "No contiene Palmoil",
|
||||
"palmoilunknown": "Palmoil desconocido",
|
||||
"notvegan": "No es vegano",
|
||||
"tweettext": "%20no%20es%20vegano!%20-%20Comprobado%20con%20",
|
||||
"tweettextvegan": "%20es%20vegano!%20-%20Comprobado%20con%20",
|
||||
"edit": "Editar",
|
||||
"reporterror": "Informar de un problema",
|
||||
"animaltestfree": "Sin crueldad",
|
||||
"checkingredients": "Los ingredientes del producto se han procesado y comprobado autom\u00e1ticamente. Compruebe usted mismo los ingredientes para estar seguro.",
|
||||
"datasource": "Fuente de datos:",
|
||||
"processed": "Calculado autom\u00e1ticamente"
|
||||
},
|
||||
"modal":
|
||||
{
|
||||
"palmoil": "Aceite de palma",
|
||||
"palmoil_desc": "El aceite de palma tiene un impacto extremadamente perjudicial para el planeta. Es el principal impulsor de la deforestaci\u00f3n de algunos de los bosques m\u00e1s biodiversos, destruyendo los h\u00e1bitats naturales de animales ya amenazados. Por ello, recomendamos no comprar ning\u00fan producto que contenga aceite de palma. Lamentablemente, todav\u00eda hay muchos productos que incluyen aceite de palma.",
|
||||
"nutriscore_desc": "El Nutriscore indica el perfil nutricional de un producto en forma de sem\u00e1foro. Sin embargo, el Nutriscore no se considera exacto y no debe utilizarse como referencia.",
|
||||
"processed": "Calculado autom\u00e1ticamente",
|
||||
"processed_desc": "Este mensaje significa que los ingredientes del producto han sido verificados por la <a href=\"https:\/\/github.com\/JokeNetwork\/vegan-ingredients-api\">VeganCheck.me Ingredients API<\/a> y se han clasificado autom\u00e1ticamente como vegano o no vegano.<br>\nLos ingredientes son proporcionados en cada caso por la fuente indicada.<br>\nNo hacemos ninguna afirmaci\u00f3n sobre la precisi\u00f3n o la puntualidad de los ingredientes o los criterios de revisi\u00f3n.<br>\nA veces, los fabricantes cambian los ingredientes de su producto para que ya no sea vegano, por ejemplo, a\u00f1adiendo leche en polvo.<br>\nVerifique dos veces los ingredientes del producto para estar seguro.",
|
||||
"licenses": "Licencias",
|
||||
"licenses_desc": "VeganCheck.me utiliza varias fuentes de datos para recoger informaci\u00F3n sobre un producto. Esta informaci\u00F3n est\u00E1 bajo las siguientes licencias:",
|
||||
"licenses_copyrights": "© OpenFoodFacts Contributors, licensed under <a href=\"https:\/\/opendatacommons.org\/licenses\/odbl\/1.0\/\">Open Database License<\/a> and <a href=\"https:\/\/opendatacommons.org\/licenses\/dbcl\/1.0\/\">Database Contents License<\/a>.<br>\r\n Brocade.io Contributors, licensed under <a href=\"https:\/\/creativecommons.org\/publicdomain\/zero\/1.0\/\">Creative-Commons Zero<\/a>.<br>\r\n © Open EAN\/GTIN Database Contributors, licensed under <a href=\"https:\/\/www.gnu.org\/licenses\/fdl-1.3.html\">GNU FDL<\/a>."
|
||||
},
|
||||
"ingredients":
|
||||
{
|
||||
"shorttitle": "Ingredientes Comprobar",
|
||||
"title": "Verificador de ingredientes veganos",
|
||||
"subtitle": "Compruebe si los ingredientes de un producto son veganos.",
|
||||
"placeholder": "Introduzca los ingredientes separados por comas",
|
||||
"error": "La lista de ingredientes no puede estar vacía ni incluir caracteres especiales y tiene que estar separada por comas.",
|
||||
"translated": "Traducido con",
|
||||
"and": "y"
|
||||
},
|
||||
"more":
|
||||
{
|
||||
"more": "Más",
|
||||
"supportus": "Invítenos a un café",
|
||||
"tos": "Condiciones de servicio",
|
||||
"privacypolicy": "Política de privacidad",
|
||||
"api": "Documentación de la API",
|
||||
"imprint": "Aviso legal",
|
||||
"oled": {
|
||||
"cookiewarning": "Esto establece una cookie",
|
||||
"error": "¡Activa el modo oscuro en tu dispositivo!"
|
||||
},
|
||||
"donate": {
|
||||
"once": "una vez",
|
||||
"monthly": "mensual",
|
||||
"via": "vía",
|
||||
"month": "mes",
|
||||
"vendor": "El proceso de pago se completará en <span id=\"vendor\">PayPal</span>."
|
||||
},
|
||||
"follow": "Siga con nosotros"
|
||||
},
|
||||
"language": "Esta página sólo está disponible en inglés y alemán",
|
||||
"germanonly": "Esta página sólo está disponible en alemán",
|
||||
"tos": "<p><b>Use of \"VeganCheck.me\"<\/b><\/p><p>The use of the site \"VeganCheck.me\" is free of charge. The distribution of the contents or our services against payment is strictly prohibited. Automated queries are also prohibited and may only be performed using the <a href=\"https:\/\/jokenetwork.de\/vegancheck-api\">API<\/a>.<br> We reserve the right to change, reduce, expand or disable our services at any time.<\/p><p><b>Processing of entered texts and numbers<\/b><\/p><p>On our website, barcodes or ingredients of a product can be entered in text fields. This is necessary to provide our service in its entirety. The data entry is completely voluntary.<br>Only barcodes or ingredients may be entered in the named text fields; the entry or transmission of personal data of any kind is strictly prohibited.<\/p><p>Personal data is any information that relates to an identified or identifiable living individual. Different pieces of information, which collected together can lead to the identification of a particular person, also constitute personal data.<sup><a href=\"https:\/\/ec.europa.eu\/info\/law\/law-topic\/data-protection\/reform\/what-personal-data_en\">?<\/a><\/sup><\/p><p><b>Disclaimer<\/b><\/p><p>We assume no liability for the accuracy of the product information and ingredient lists offered and for the availability of our service.<\/p>"
|
||||
}
|
69
l10n/es.php
|
@ -1,69 +0,0 @@
|
|||
<?php
|
||||
$langArray = array(
|
||||
"meta" => array(
|
||||
"lang" => "es",
|
||||
"title" => "¿Es vegano? - Vegan Check",
|
||||
"description" => "¿No estás seguro de si un producto es vegano o no? Con VeganCheck.me puedes escanear el código de barras de un artículo mientras compras y comprobar si es vegano o no, ¡y eso sin mucha otra información innecesaria! Pruébalo ahora!"
|
||||
),
|
||||
"form" => array(
|
||||
"scanbarcode" => "Escanear código de barras",
|
||||
"enterbarcode" => "Introduzca el código de barras del producto",
|
||||
"submit" => "Enviar"
|
||||
),
|
||||
"footer" => array(
|
||||
"share_text" => "¿Te gusta VeganCheck?",
|
||||
"share" => "Compartir",
|
||||
"credits" => 'Hecho con <i class="icon-vegancheck"></i> por <a href="https://philipbrembeck.com">Philip Brembeck</a> & <a href="https://jokenetwork.de">JokeNetwork</a>',
|
||||
"legal" => '<a href="../privacy-policy">Política de privacidad</a> / <a href="../impressum">aviso legal</a> / <a href="//github.com/JokeNetwork/vegancheck.me/wiki">API</a>'
|
||||
),
|
||||
"layover" => array(
|
||||
"close" => "Cerrar escáner"
|
||||
),
|
||||
"other" => array(
|
||||
"offline" => "Actualmente estás desconectado. VeganCheck.me sólo funciona con una conexión a Internet en funcionamiento.",
|
||||
"reload" => "Intenta de nuevo",
|
||||
"rotate" => "Por favor, gire su dispositivo",
|
||||
"timeout" => "Esto tarda más de lo normal",
|
||||
"timeoutfinal" => "La consulta ha tardado demasiado. Por favor, inténtalo de nuevo."
|
||||
),
|
||||
"results" => array(
|
||||
"invalid" => "El código de barras no puede estar vacío ni incluir caracteres especiales.",
|
||||
"invalidscan" => "Este código de barras no es válido.",
|
||||
"notindb" => "Este producto aún no está en nuestra base de datos",
|
||||
"add" => "¿Quiere añadirlo?",
|
||||
"addonoff" => "Añadir comida",
|
||||
"addonobf" => "add cosemtics",
|
||||
"or" => "o",
|
||||
"missinginfo" => "Todavía no tenemos suficiente información sobre este producto.",
|
||||
"addinfo" => "¿Quieres añadir información?",
|
||||
"editonoff" => "Editar este producto en OpenFoodFacts",
|
||||
"vegan" => "Vegano",
|
||||
"notvegetarian" => "Non vegetariano",
|
||||
"vegetarian" => "Vegetariano",
|
||||
"unknown" => "Desconocido",
|
||||
"containspalmoil" => "Contiene Palmoil",
|
||||
"nopalmoil" => "No contiene Palmoil",
|
||||
"palmoilunknown" => "Palmoil desconocido",
|
||||
"notvegan" => "No es vegano",
|
||||
"tweettext" => "%20no%20es%20vegano!%20-%20Comprobado%20con%20",
|
||||
"tweettextvegan" => "%20es%20vegano!%20-%20Comprobado%20con%20",
|
||||
"edit" => "Editar",
|
||||
"reporterror" => "Informar de un problema",
|
||||
"animaltestfree" => "No probado en animales",
|
||||
"checkingredients" => "Los ingredientes del producto se han procesado y comprobado automáticamente. Compruebe usted mismo los ingredientes para estar seguro.",
|
||||
"datasource" => "Fuente de datos:",
|
||||
"processed" => "Calculado automáticamente"
|
||||
),
|
||||
"modal" => array(
|
||||
"palmoil" => "Aceite de palma",
|
||||
"palmoil_desc" => "El aceite de palma tiene un impacto extremadamente perjudicial para el planeta. Es el principal impulsor de la deforestación de algunos de los bosques más biodiversos, destruyendo los hábitats naturales de animales ya amenazados. Por ello, recomendamos no comprar ningún producto que contenga aceite de palma. Lamentablemente, todavía hay muchos productos que incluyen aceite de palma.",
|
||||
"nutriscore_desc" => "El Nutriscore indica el perfil nutricional de un producto en forma de semáforo. Sin embargo, el Nutriscore no se considera exacto y no debe utilizarse como referencia.",
|
||||
"processed" => "Calculado automáticamente",
|
||||
"processed_desc" => 'Este mensaje significa que los ingredientes del producto han sido verificados por la <a href="https://github.com/JokeNetwork/vegan-ingredients-api">VeganCheck.me Ingredients API</a> y se han clasificado automáticamente como vegano o no vegano.<br>
|
||||
Los ingredientes son proporcionados en cada caso por la fuente indicada.<br>
|
||||
No hacemos ninguna afirmación sobre la precisión o la puntualidad de los ingredientes o los criterios de revisión.<br>
|
||||
A veces, los fabricantes cambian los ingredientes de su producto para que ya no sea vegano, por ejemplo, añadiendo leche en polvo.<br>
|
||||
Verifique dos veces los ingredientes del producto para estar seguro.'
|
||||
)
|
||||
);
|
||||
?>
|
114
l10n/fr.json
|
@ -1,114 +0,0 @@
|
|||
{
|
||||
"meta":
|
||||
{
|
||||
"lang": "fr",
|
||||
"title": "Est-ce que c'est v\u00e9g\u00e9talien ? - Vegan Check",
|
||||
"description": "Tu n'es pas s\u00fbr qu'un produit soit v\u00e9gane ou non ? Avec VeganCheck.me, tu peux scanner le code-barres d'un article directement lors de tes achats et v\u00e9rifier s'il est v\u00e9g\u00e9talien ou non, et ce sans avoir \u00e0 fournir beaucoup d'autres informations inutiles ! Essaye-le maintenant!"
|
||||
},
|
||||
"form":
|
||||
{
|
||||
"scanbarcode": "Scanner le code-barres",
|
||||
"enterbarcode": "Saisir le code-barres",
|
||||
"submit": "Envoyer"
|
||||
},
|
||||
"footer":
|
||||
{
|
||||
"share_text": "Aimez-vous VeganCheck ?",
|
||||
"share": "Share",
|
||||
"credits": "R\u00e9alis\u00e9 avec <i class=\"icon-heart\"><\/i> par <a href=\"https:\/\/philipbrembeck.com\">Philip Brembeck<\/a> & <a href=\"https:\/\/jokenetwork.de\">JokeNetwork<\/a>",
|
||||
"legal": "<a href=\"..\/privacy-policy\">D\u00e9claration de confidentialit\u00e9<\/a> \/ <a href=\"..\/tos\">Conditions d'utilisation<\/a> \/ <a href=\"..\/impressum\">Mentions l\u00e9gales<\/a> \/ <a href=\"\/\/jokenetwork.de\/vegancheck-api\">API<\/a>"
|
||||
},
|
||||
"layover":
|
||||
{
|
||||
"close": "Fermer le scanner"
|
||||
},
|
||||
"prompt": {
|
||||
"close": "Close",
|
||||
"install": "Installer VeganCheck.me",
|
||||
"desc": "Installez VeganCheck et scannez toujours les produits pour vérifier s'ils sont végétaliens !",
|
||||
"info": "Il suffit de taper sur <svg class='pwa-install-prompt__guide__icon' viewBox='0 0 128 128' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'><title>Share</title><path fill='#007AFF' d='M48.883,22.992L61.146,10.677L61.146,78.282C61.146,80.005 62.285,81.149 64,81.149C65.715,81.149 66.854,80.005 66.854,78.282L66.854,10.677L79.117,22.992C79.693,23.57 80.256,23.853 81.114,23.853C81.971,23.853 82.534,23.57 83.11,22.992C84.25,21.848 84.25,20.125 83.11,18.981L65.997,1.794C65.715,1.511 65.421,1.215 65.139,1.215C64.563,0.932 63.718,0.932 62.861,1.215C62.579,1.498 62.285,1.498 62.003,1.794L44.89,18.981C43.75,20.125 43.75,21.848 44.89,22.992C46.029,24.149 47.744,24.149 48.883,22.992ZM103.936,35.32L81.114,35.32L81.114,41.053L103.936,41.053L103.936,121.27L24.064,121.27L24.064,41.053L46.886,41.053L46.886,35.32L24.064,35.32C20.928,35.32 18.355,37.904 18.355,41.053L18.355,121.27C18.355,124.419 20.928,127.003 24.064,127.003L103.936,127.003C107.072,127.003 109.645,124.419 109.645,121.27L109.645,41.053C109.645,37.891 107.072,35.32 103.936,35.32Z'/></svg> alors Ajouter à l'écran d'accueil.",
|
||||
"get": "Télécharger"
|
||||
},
|
||||
"other":
|
||||
{
|
||||
"offline": "Vous \u00eates actuellement hors ligne. VeganCheck.me ne fonctionne qu'avec une connexion internet en \u00e9tat de marche.",
|
||||
"reload": "R\u00e9essayer",
|
||||
"rotate": "Veuillez tourner votre appareil.",
|
||||
"timeout": "Cela prend plus de temps que d'habitude",
|
||||
"timeoutfinal": "La requ\u00eate a dur\u00e9 trop longtemps. Veuillez r\u00e9essayer."
|
||||
},
|
||||
"results":
|
||||
{
|
||||
"invalid": "Le champ du code-barres ne doit pas \u00eatre vide et ne doit pas contenir de caract\u00e8res sp\u00e9ciaux",
|
||||
"invalidscan": "Il y a un probl\u00e8me avec ce code-barres",
|
||||
"notindb": "Nous n'avons pas encore ce produit dans notre base de donn\u00e9es",
|
||||
"add": "Voulez-vous l'ajouter ?",
|
||||
"addonoff": "Ajouter des aliments",
|
||||
"addonobf": "ajouter des cosm\u00e9tiques",
|
||||
"or": "ou",
|
||||
"missinginfo": "Nous n'avons pas encore assez d'informations sur ce produit",
|
||||
"addinfo": "Voulez-vous ajouter des infos ?",
|
||||
"editonoff": "Modifier ce produit sur OpenFoodFacts'",
|
||||
"vegan": "Vegan",
|
||||
"notvegetarian": "Non v\u00e9g\u00e9tarien",
|
||||
"vegetarian": "V\u00e9g\u00e9tarien",
|
||||
"unknown": "inconnu",
|
||||
"containspalmoil": "Contient de l'huile de palme",
|
||||
"nopalmoil": "Pas d'huile de palme",
|
||||
"palmoilunknown": "Contenu d'huile de palme inconnu",
|
||||
"notvegan": "Non v\u00e9g\u00e9talien",
|
||||
"tweettext": "%20n'est%20pas%20v\u00e9g\u00e9talien%20!%20-%20Contr\u00f4l\u00e9%avec%20",
|
||||
"tweettextvegan": "%20est%20vegan!%20-%20Contr\u00f4l\u00e9%20avec%20",
|
||||
"edit": "\u00c9diter",
|
||||
"reporterror": "Signaler un probl\u00e8me",
|
||||
"animaltestfree": "Sans cruaut\u00e9",
|
||||
"checkingredients": "Les ingr\u00e9dients du produit ont \u00e9t\u00e9 trait\u00e9s et contr\u00f4l\u00e9s automatiquement. Veuillez v\u00e9rifier vous-m\u00eame les ingr\u00e9dients pour vous en assurer.",
|
||||
"datasource": "Source des donn\u00e9es:",
|
||||
"processed": "Calcul\u00e9 automatiquement"
|
||||
},
|
||||
"modal":
|
||||
{
|
||||
"palmoil": "Huile de palme",
|
||||
"palmoil_desc": "L'huile de palme a un impact extr\u00eamement n\u00e9faste sur la plan\u00e8te. Elle est le principal moteur de la d\u00e9forestation de certaines des for\u00eats les plus riches en biodiversit\u00e9, d\u00e9truisant les habitats naturels d'animaux d\u00e9j\u00e0 menac\u00e9s. C'est pourquoi nous vous recommandons de ne pas acheter de produits contenant de l'huile de palme. Malheureusement, il existe encore de nombreux produits qui contiennent de l'huile de palme.",
|
||||
"nutriscore_desc": "Le Nutriscore indique le profil nutritionnel d'un produit sous forme de feux tricolores. Cependant, le Nutriscore n'est pas consid\u00e9r\u00e9 comme pr\u00e9cis et ne doit pas \u00eatre utilis\u00e9 comme une r\u00e9f\u00e9rence.",
|
||||
"processed": "Calcul\u00e9 automatiquement",
|
||||
"processed_desc": "Ce message signifie que les ingr\u00e9dients du produit ont \u00e9t\u00e9 v\u00e9rifi\u00e9s par <a href=\"https:\/\/github.com\/JokeNetwork\/vegan-ingredients-api\">VeganCheck.me Ingredients API<\/a> et ont \u00e9t\u00e9 automatiquement class\u00e9s comme v\u00e9g\u00e9talien ou non v\u00e9g\u00e9talien.<br>\nLes ingr\u00e9dients sont fournis dans chaque cas par la source indiqu\u00e9e.<br>\nNous ne faisons aucune d\u00e9claration quant \u00e0 l'exactitude ou \u00e0 l'actualit\u00e9 des ingr\u00e9dients ou des crit\u00e8res d'examen.<br>\nParfois, les fabricants modifient les ingr\u00e9dients de leur produit pour qu'il ne soit plus v\u00e9g\u00e9talien, par exemple en ajoutant du lait en poudre.<br>\nVeuillez v\u00e9rifier les ingr\u00e9dients du produit pour \u00eatre s\u00fbr.",
|
||||
"licenses": "Licences",
|
||||
"licenses_desc": "VeganCheck.me utilise diff\u00E9rentes sources de donn\u00E9es pour collecter des informations sur un produit. Ces informations sont soumises aux licences suivantes :",
|
||||
"licenses_copyrights": "© OpenFoodFacts Contributors, licensed under <a href=\"https:\/\/opendatacommons.org\/licenses\/odbl\/1.0\/\">Open Database License<\/a> and <a href=\"https:\/\/opendatacommons.org\/licenses\/dbcl\/1.0\/\">Database Contents License<\/a>.<br>\r\n Brocade.io Contributors, licensed under <a href=\"https:\/\/creativecommons.org\/publicdomain\/zero\/1.0\/\">Creative-Commons Zero<\/a>.<br>\r\n © Open EAN\/GTIN Database Contributors, licensed under <a href=\"https:\/\/www.gnu.org\/licenses\/fdl-1.3.html\">GNU FDL<\/a>."
|
||||
},
|
||||
"ingredients":
|
||||
{
|
||||
"shorttitle": "Vérification des ingrédients",
|
||||
"title": "V\u00e9rificateur d'ingrédients v\u00e9g\u00e9taliens",
|
||||
"subtitle": "V\u00e9rifiez si les ingr\u00e9dients d'un produit sont v\u00e9g\u00e9taliens !",
|
||||
"placeholder": "Entrez les ingr\u00e9dients séparés par des virgules",
|
||||
"error": "La liste des ingr\u00e9dients ne peut \u00eatre vide ou inclure des caract\u00e8res sp\u00e9ciaux et doit \u00eatre s\u00e9par\u00e9e par des virgules !",
|
||||
"translated": "Traduit avec",
|
||||
"and": "et"
|
||||
},
|
||||
"more":
|
||||
{
|
||||
"more": "Plus de",
|
||||
"supportus": "Achetez-nous un café",
|
||||
"tos": "Conditions d'utilisation",
|
||||
"privacypolicy": "Politique de confidentialité",
|
||||
"api": "Documentation de l'API",
|
||||
"imprint": "Mentions légales",
|
||||
"oled" : {
|
||||
"cookiewarning" : "Ceci définit un cookie",
|
||||
"error" : "Activez le mode sombre sur votre appareil !"
|
||||
},
|
||||
"donate" : {
|
||||
"once" : "Une fois",
|
||||
"monthly" : "Mensuel",
|
||||
"via" : "via",
|
||||
"month" : "mois",
|
||||
"vendor" : "Le processus de paiement sera effectué sur <span id=\"vendor\">PayPal."
|
||||
},
|
||||
"follow": "Suivez-nous"
|
||||
},
|
||||
"language" : "Cette page est uniquement disponible en anglais et en allemand.",
|
||||
"germanonly" : "Cette page n'est disponible qu'en allemand.",
|
||||
"tos": "<p><b>Use of \"VeganCheck.me\"<\/b><\/p><p>The use of the site \"VeganCheck.me\" is free of charge. The distribution of the contents or our services against payment is strictly prohibited. Automated queries are also prohibited and may only be performed using the <a href=\"https:\/\/jokenetwork.de\/vegancheck-api\">API<\/a>.<br> We reserve the right to change, reduce, expand or disable our services at any time.<\/p><p><b>Processing of entered texts and numbers<\/b><\/p><p>On our website, barcodes or ingredients of a product can be entered in text fields. This is necessary to provide our service in its entirety. The data entry is completely voluntary.<br>Only barcodes or ingredients may be entered in the named text fields; the entry or transmission of personal data of any kind is strictly prohibited.<\/p><p>Personal data is any information that relates to an identified or identifiable living individual. Different pieces of information, which collected together can lead to the identification of a particular person, also constitute personal data.<sup><a href=\"https:\/\/ec.europa.eu\/info\/law\/law-topic\/data-protection\/reform\/what-personal-data_en\">?<\/a><\/sup><\/p><p><b>Disclaimer<\/b><\/p><p>We assume no liability for the accuracy of the product information and ingredient lists offered and for the availability of our service.<\/p>"
|
||||
}
|
69
l10n/fr.php
|
@ -1,69 +0,0 @@
|
|||
<?php
|
||||
$langArray = array(
|
||||
"meta" => array(
|
||||
"lang" => "fr",
|
||||
"title" => "Est-ce que c'est végétalien ? - Vegan Check",
|
||||
"description" => "Tu n'es pas sûr qu'un produit soit végane ou non ? Avec VeganCheck.me, tu peux scanner le code-barres d'un article directement lors de tes achats et vérifier s'il est végétalien ou non, et ce sans avoir à fournir beaucoup d'autres informations inutiles ! Essaye-le maintenant!"
|
||||
),
|
||||
"form" => array(
|
||||
"scanbarcode" => "Scanner le code-barres",
|
||||
"enterbarcode" => "Saisir le code-barres",
|
||||
"submit" => "Envoyer"
|
||||
),
|
||||
"footer" => array(
|
||||
"share_text" => "Aimez-vous VeganCheck ?",
|
||||
"share" => "Share",
|
||||
"credits" => 'Réalisé avec <i class="icon-vegancheck"></i> par <a href="https://philipbrembeck.com">Philip Brembeck</a> & <a href="https://jokenetwork.de">JokeNetwork</a>',
|
||||
"legal" => '<a href="../privacy-policy">Déclaration de confidentialité</a> / <a href="../impressum">Mentions légales</a> / <a href="//github.com/JokeNetwork/vegancheck.me/wiki">API</a>'
|
||||
),
|
||||
"layover" => array(
|
||||
"close" => "Fermer le scanner"
|
||||
),
|
||||
"other" => array(
|
||||
"offline" => "Vous êtes actuellement hors ligne. VeganCheck.me ne fonctionne qu'avec une connexion internet en état de marche.",
|
||||
"reload" => "Réessayer",
|
||||
"rotate" => "Veuillez tourner votre appareil.",
|
||||
"timeout" => "Cela prend plus de temps que d'habitude",
|
||||
"timeoutfinal" => "La requête a duré trop longtemps. Veuillez réessayer."
|
||||
),
|
||||
"results" => array(
|
||||
"invalid" => "Le champ du code-barres ne doit pas être vide et ne doit pas contenir de caractères spéciaux",
|
||||
"invalidscan" => "Il y a un problème avec ce code-barres",
|
||||
"notindb" => "Nous n'avons pas encore ce produit dans notre base de données",
|
||||
"add" => "Voulez-vous l'ajouter ?",
|
||||
"addonoff" => "Ajouter des aliments",
|
||||
"addonobf" => "ajouter des cosmétiques",
|
||||
"or" => "ou",
|
||||
"missinginfo" => "Nous n'avons pas encore assez d'informations sur ce produit",
|
||||
"addinfo" => "Voulez-vous ajouter des infos ?",
|
||||
"editonoff" => "Modifier ce produit sur OpenFoodFacts'",
|
||||
"vegan" => "Vegan",
|
||||
"notvegetarian" => "Non végétarien",
|
||||
"vegetarian" => "Végétarien",
|
||||
"unknown" => "inconnu",
|
||||
"containspalmoil" => "Contient de l'huile de palme",
|
||||
"nopalmoil" => "Pas d'huile de palme",
|
||||
"palmoilunknown" => "Contenu d'huile de palme inconnu",
|
||||
"notvegan" => "Non végétalien",
|
||||
"tweettext" => "%20n'est%20pas%20végétalien%20!%20-%20Contrôlé%avec%20",
|
||||
"tweettextvegan" => "%20est%20vegan!%20-%20Contrôlé%20avec%20",
|
||||
"edit" => "Éditer",
|
||||
"reporterror" => "Signaler un problème",
|
||||
"animaltestfree" => "Non testé sur les animaux",
|
||||
"checkingredients" => "Les ingrédients du produit ont été traités et contrôlés automatiquement. Veuillez vérifier vous-même les ingrédients pour vous en assurer.",
|
||||
"datasource" => "Source des données:",
|
||||
"processed" => "Calculé automatiquement"
|
||||
),
|
||||
"modal" => array(
|
||||
"palmoil" => "Huile de palme",
|
||||
"palmoil_desc" => "L'huile de palme a un impact extrêmement néfaste sur la planète. Elle est le principal moteur de la déforestation de certaines des forêts les plus riches en biodiversité, détruisant les habitats naturels d'animaux déjà menacés. C'est pourquoi nous vous recommandons de ne pas acheter de produits contenant de l'huile de palme. Malheureusement, il existe encore de nombreux produits qui contiennent de l'huile de palme.",
|
||||
"nutriscore_desc" => "Le Nutriscore indique le profil nutritionnel d'un produit sous forme de feux tricolores. Cependant, le Nutriscore n'est pas considéré comme précis et ne doit pas être utilisé comme une référence.",
|
||||
"processed" => "Calculé automatiquement",
|
||||
"processed_desc" => "Ce message signifie que les ingrédients du produit ont été vérifiés par <a href=\"https://github.com/JokeNetwork/vegan-ingredients-api\">VeganCheck.me Ingredients API</a> et ont été automatiquement classés comme végétalien ou non végétalien.<br>
|
||||
Les ingrédients sont fournis dans chaque cas par la source indiquée.<br>
|
||||
Nous ne faisons aucune déclaration quant à l'exactitude ou à l'actualité des ingrédients ou des critères d'examen.<br>
|
||||
Parfois, les fabricants modifient les ingrédients de leur produit pour qu'il ne soit plus végétalien, par exemple en ajoutant du lait en poudre.<br>
|
||||
Veuillez vérifier les ingrédients du produit pour être sûr."
|
||||
)
|
||||
);
|
||||
?>
|
114
l10n/nl.json
|
@ -1,114 +0,0 @@
|
|||
{
|
||||
"meta":
|
||||
{
|
||||
"lang": "nl",
|
||||
"title": "Is het veganistisch? - Vegan Check",
|
||||
"description": "U weet niet zeker of een product veganistisch is of niet? Met VeganCheck.me kun je tijdens het winkelen direct de streepjescode van een artikel scannen en controleren of het veganistisch is of niet en dat zonder een heleboel andere overbodige informatie! Probeer het nu uit!"
|
||||
},
|
||||
"form":
|
||||
{
|
||||
"scanbarcode": "Scan barcode",
|
||||
"enterbarcode": "barcode invoeren",
|
||||
"submit": "Verzenden"
|
||||
},
|
||||
"footer":
|
||||
{
|
||||
"share_text": "Vind je VeganCheck leuk?",
|
||||
"share": "Delen",
|
||||
"credits": "Gemaakt met <i class=\"icon-heart\"><\/i> door <a href=\"https:\/\/philipbrembeck.com\">Philip Brembeck<\/a> & <a href=\"https:\/\/jokenetwork.de\">JokeNetwork<\/a>",
|
||||
"legal": "<a href=\"..\/privacy-policy\">Privacy<\/a> \/ <a href=\"..\/tos\">Gebruiksvoorwaarden<\/a> \/ <a href=\"..\/impressum\">Imprint<\/a> \/ <a href=\"\/\/jokenetwork.de\/vegancheck-api\">API<\/a>"
|
||||
},
|
||||
"layover":
|
||||
{
|
||||
"close": "Scanner sluiten"
|
||||
},
|
||||
"prompt": {
|
||||
"close": "Close",
|
||||
"install": "Installeer VeganCheck.me",
|
||||
"desc": "Installeer VeganCheck en scan altijd producten en controleer of ze veganistisch zijn!",
|
||||
"info": "Tik gewoon op <svg class='pwa-install-prompt__guide__icon' viewBox='0 0 128 128' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'><title>Delen</title><path fill='#007AFF' d='M48.883,22.992L61.146,10.677L61.146,78.282C61.146,80.005 62.285,81.149 64,81.149C65.715,81.149 66.854,80.005 66.854,78.282L66.854,10.677L79.117,22.992C79.693,23.57 80.256,23.853 81.114,23.853C81.971,23.853 82.534,23.57 83.11,22.992C84.25,21.848 84.25,20.125 83.11,18.981L65.997,1.794C65.715,1.511 65.421,1.215 65.139,1.215C64.563,0.932 63.718,0.932 62.861,1.215C62.579,1.498 62.285,1.498 62.003,1.794L44.89,18.981C43.75,20.125 43.75,21.848 44.89,22.992C46.029,24.149 47.744,24.149 48.883,22.992ZM103.936,35.32L81.114,35.32L81.114,41.053L103.936,41.053L103.936,121.27L24.064,121.27L24.064,41.053L46.886,41.053L46.886,35.32L24.064,35.32C20.928,35.32 18.355,37.904 18.355,41.053L18.355,121.27C18.355,124.419 20.928,127.003 24.064,127.003L103.936,127.003C107.072,127.003 109.645,124.419 109.645,121.27L109.645,41.053C109.645,37.891 107.072,35.32 103.936,35.32Z'/></svg> dan Toevoegen aan beginscherm.",
|
||||
"get": "Get"
|
||||
},
|
||||
"other":
|
||||
{
|
||||
"offline": "U bent momenteel offline. VeganCheck.me werkt alleen met een functionerende internetverbinding.",
|
||||
"reload": "Probeer opnieuw",
|
||||
"rotate": "Draai uw apparaat.",
|
||||
"timeout": "Dit duurt langer dan normaal",
|
||||
"timeoutfinal": "De query duurde te lang. Probeer het nog eens."
|
||||
},
|
||||
"results":
|
||||
{
|
||||
"invalid": "Het barcodeveld mag niet leeg zijn en mag geen speciale tekens bevatten.",
|
||||
"invalidscan": "Er is iets mis met deze barcode.",
|
||||
"notindb": "We hebben dit product nog niet in onze database.",
|
||||
"add": "Wilt u het toevoegen?",
|
||||
"addonoff": "Voeg voedsel toe",
|
||||
"addonobf": "cosemtics toevoegen",
|
||||
"or": "of",
|
||||
"missinginfo": "We hebben nog niet genoeg info over dit product.",
|
||||
"addinfo": "Wilt u info toevoegen?",
|
||||
"editonoff": "Verander het product op OpenFoodFacts",
|
||||
"vegan": "Veganistisch",
|
||||
"notvegetarian": "Niet vegetarisch",
|
||||
"vegetarian": "Vegetarisch",
|
||||
"unknown": "onbekend",
|
||||
"containspalmoil": "Bevat palmolie",
|
||||
"nopalmoil": "Geen palmolie",
|
||||
"palmoilunknown": "Palmoliegehalte onbekend",
|
||||
"notvegan": "Niet veganistisch",
|
||||
"tweettext": "%20is%20niet%20veganistisch%20-%20Getest%20met%20",
|
||||
"tweettextvegan": "%20is%20veganistisch!%20-%20Getest%20met%20",
|
||||
"edit": "Bewerking",
|
||||
"reporterror": "Meld een probleem",
|
||||
"animaltestfree": "Dierproefvrij",
|
||||
"checkingredients": "De ingredi\u00ebnten van het product zijn automatisch verwerkt en gecontroleerd. Controleer voor de zekerheid zelf de ingredi\u00ebnten.",
|
||||
"datasource": "Gegevensbron:",
|
||||
"processed": "Automatisch berekend"
|
||||
},
|
||||
"modal":
|
||||
{
|
||||
"palmoil": "Palmolie",
|
||||
"palmoil_desc": "Palmolie heeft een zeer schadelijke invloed op de planeet. Het is de drijvende kracht achter de ontbossing van enkele van de meest biodiverse bossen, en vernietigt de natuurlijke habitat van reeds bedreigde dieren. Daarom raden we je aan geen producten te kopen die palmolie bevatten. Helaas zijn er nog steeds veel producten op de markt die palmolie bevatten.",
|
||||
"nutriscore_desc": "De Nutriscore geeft het voedingsprofiel van een product aan in stoplichtvorm. De Nutriscore wordt echter niet als nauwkeurig beschouwd en mag niet als referentie worden gebruikt.",
|
||||
"processed": "Automatisch berekend",
|
||||
"processed_desc": "Dit bericht betekent dat de ingredi\u00ebnten van het product zijn gecontroleerd door de <a href=\"https:\/\/github.com\/JokeNetwork\/vegan-ingredients-api\">VeganCheck.me Ingredients API<\/a> en automatisch zijn geclassificeerd als veganistisch of niet-veganistisch.<br>\nDe ingredi\u00ebnten worden telkens geleverd door de aangegeven bron.<br>\nWe doen geen uitspraken over de nauwkeurigheid of tijdigheid van de ingredi\u00ebnten of de beoordelingscriteria.<br>\nSoms veranderen fabrikanten de ingredi\u00ebnten van hun product zodat het niet meer vegan is, bijvoorbeeld door melkpoeder toe te voegen.<br>\nControleer voor de zekerheid de ingredi\u00ebnten van het product.",
|
||||
"licenses": "Vergunningen",
|
||||
"licenses_desc": "VeganCheck.me gebruikt verschillende gegevensbronnen om informatie over een product te verzamelen. Deze informatie is beschikbaar onder de volgende licenties:",
|
||||
"licenses_copyrights": "© OpenFoodFacts Contributors, licensed under <a href=\"https:\/\/opendatacommons.org\/licenses\/odbl\/1.0\/\">Open Database License<\/a> and <a href=\"https:\/\/opendatacommons.org\/licenses\/dbcl\/1.0\/\">Database Contents License<\/a>.<br>\r\n Brocade.io Contributors, licensed under <a href=\"https:\/\/creativecommons.org\/publicdomain\/zero\/1.0\/\">Creative-Commons Zero<\/a>.<br>\r\n © Open EAN\/GTIN Database Contributors, licensed under <a href=\"https:\/\/www.gnu.org\/licenses\/fdl-1.3.html\">GNU FDL<\/a>."
|
||||
},
|
||||
"ingredients":
|
||||
{
|
||||
"shorttitle": "Ingrediënten Controle",
|
||||
"title": "Vegan Ingredient Checker",
|
||||
"subtitle": "Controleer of de Ingrediënten van een product veganistisch zijn!",
|
||||
"placeholder": "Voer ingrediënten kommagescheiden in.",
|
||||
"error": "Ingredients-list kan niet leeg zijn of speciale tekens bevatten en moet met komma's gescheiden zijn!",
|
||||
"translated": "Vertaald met",
|
||||
"and": "en"
|
||||
},
|
||||
"more":
|
||||
{
|
||||
"more": "Meer",
|
||||
"supportus": "Koop ons een koffie",
|
||||
"tos": "Algemene voorwaarden",
|
||||
"privacypolicy": "Privacy",
|
||||
"api": "API-documentatie",
|
||||
"imprint": "Juridische kennisgeving",
|
||||
"oled": {
|
||||
"cookiewarning": "Dit stelt een cookie in.",
|
||||
"error": "Schakel dark-mode in op uw apparaat!"
|
||||
},
|
||||
"donate": {
|
||||
"once": "Eenmaal",
|
||||
"monthly": "Maandelijks",
|
||||
"via": "via",
|
||||
"month": "Maand",
|
||||
"vendor": "Het betalingsproces wordt voltooid op <span id=\"vendor\">PayPal</span>."
|
||||
},
|
||||
"follow": "Volg ons"
|
||||
},
|
||||
"language": "Deze pagina is alleen beschikbaar in het Engels en Duits.",
|
||||
"germanonly": "Deze pagina is alleen beschikbaar in het Duits.",
|
||||
"tos": "<p><b>Use of \"VeganCheck.me\"<\/b><\/p><p>The use of the site \"VeganCheck.me\" is free of charge. The distribution of the contents or our services against payment is strictly prohibited. Automated queries are also prohibited and may only be performed using the <a href=\"https:\/\/jokenetwork.de\/vegancheck-api\">API<\/a>.<br> We reserve the right to change, reduce, expand or disable our services at any time.<\/p><p><b>Processing of entered texts and numbers<\/b><\/p><p>On our website, barcodes or ingredients of a product can be entered in text fields. This is necessary to provide our service in its entirety. The data entry is completely voluntary.<br>Only barcodes or ingredients may be entered in the named text fields; the entry or transmission of personal data of any kind is strictly prohibited.<\/p><p>Personal data is any information that relates to an identified or identifiable living individual. Different pieces of information, which collected together can lead to the identification of a particular person, also constitute personal data.<sup><a href=\"https:\/\/ec.europa.eu\/info\/law\/law-topic\/data-protection\/reform\/what-personal-data_en\">?<\/a><\/sup><\/p><p><b>Disclaimer<\/b><\/p><p>We assume no liability for the accuracy of the product information and ingredient lists offered and for the availability of our service.<\/p>"
|
||||
}
|
69
l10n/nl.php
|
@ -1,69 +0,0 @@
|
|||
<?php
|
||||
$langArray = array(
|
||||
"meta" => array(
|
||||
"lang" => "nl",
|
||||
"title" => "Is het veganistisch? - Vegan Check",
|
||||
"description" => "U weet niet zeker of een product veganistisch is of niet? Met VeganCheck.me kun je tijdens het winkelen direct de streepjescode van een artikel scannen en controleren of het veganistisch is of niet en dat zonder een heleboel andere overbodige informatie! Probeer het nu uit!"
|
||||
),
|
||||
"form" => array(
|
||||
"scanbarcode" => "Scan barcode",
|
||||
"enterbarcode" => "barcode invoeren",
|
||||
"submit" => "Verzenden"
|
||||
),
|
||||
"footer" => array(
|
||||
"share_text" => "Vind je VeganCheck leuk?",
|
||||
"share" => "Delen",
|
||||
"credits" => 'Gemaakt met <i class="icon-vegancheck"></i> door <a href="https://philipbrembeck.com">Philip Brembeck</a> & <a href="https://jokenetwork.de">JokeNetwork</a>',
|
||||
"legal" => '<a href="../privacy-policy">Privacy</a> / <a href="../impressum">Imprint</a> / <a href="//github.com/JokeNetwork/vegancheck.me/wiki">API</a>'
|
||||
),
|
||||
"layover" => array(
|
||||
"close" => "Scanner sluiten"
|
||||
),
|
||||
"other" => array(
|
||||
"offline" => "U bent momenteel offline. VeganCheck.me werkt alleen met een functionerende internetverbinding.",
|
||||
"reload" => "Probeer opnieuw",
|
||||
"rotate" => "Draai uw apparaat.",
|
||||
"timeout" => "Dit duurt langer dan normaal",
|
||||
"timeoutfinal" => "De query duurde te lang. Probeer het nog eens."
|
||||
),
|
||||
"results" => array(
|
||||
"invalid" => "Het barcodeveld mag niet leeg zijn en mag geen speciale tekens bevatten.",
|
||||
"invalidscan" => "Er is iets mis met deze barcode.",
|
||||
"notindb" => "We hebben dit product nog niet in onze database.",
|
||||
"add" => "Wilt u het toevoegen?",
|
||||
"addonoff" => "Voeg voedsel toe",
|
||||
"addonobf" => "cosemtics toevoegen",
|
||||
"or" => "of",
|
||||
"missinginfo" => "We hebben nog niet genoeg info over dit product.",
|
||||
"addinfo" => "Wilt u info toevoegen?",
|
||||
"editonoff" => "Verander het product op OpenFoodFacts",
|
||||
"vegan" => "Veganistisch",
|
||||
"notvegetarian" => "Niet vegetarisch",
|
||||
"vegetarian" => "Vegetarisch",
|
||||
"unknown" => "onbekend",
|
||||
"containspalmoil" => "Bevat palmolie",
|
||||
"nopalmoil" => "Geen palmolie",
|
||||
"palmoilunknown" => "Palmoliegehalte onbekend",
|
||||
"notvegan" => "Niet veganistisch",
|
||||
"tweettext" => "%20is%20niet%20veganistisch%20-%20Getest%20met%20",
|
||||
"tweettextvegan" => "%20is%20veganistisch!%20-%20Getest%20met%20",
|
||||
"edit" => "Bewerking",
|
||||
"reporterror" => "Meld een probleem",
|
||||
"animaltestfree" => "Niet getest op dieren",
|
||||
"checkingredients" => "De ingrediënten van het product zijn automatisch verwerkt en gecontroleerd. Controleer voor de zekerheid zelf de ingrediënten.",
|
||||
"datasource" => "Gegevensbron:",
|
||||
"processed" => "Automatisch berekend"
|
||||
),
|
||||
"modal" => array(
|
||||
"palmoil" => "Palmolie",
|
||||
"palmoil_desc" => "Palmolie heeft een zeer schadelijke invloed op de planeet. Het is de drijvende kracht achter de ontbossing van enkele van de meest biodiverse bossen, en vernietigt de natuurlijke habitat van reeds bedreigde dieren. Daarom raden we je aan geen producten te kopen die palmolie bevatten. Helaas zijn er nog steeds veel producten op de markt die palmolie bevatten.",
|
||||
"nutriscore_desc" => "De Nutriscore geeft het voedingsprofiel van een product aan in stoplichtvorm. De Nutriscore wordt echter niet als nauwkeurig beschouwd en mag niet als referentie worden gebruikt.",
|
||||
"processed" => "Automatisch berekend",
|
||||
"processed_desc" => "Dit bericht betekent dat de ingrediënten van het product zijn gecontroleerd door de <a href=\"https://github.com/JokeNetwork/vegan-ingredients-api\">VeganCheck.me Ingredients API</a> en automatisch zijn geclassificeerd als veganistisch of niet-veganistisch.<br>
|
||||
De ingrediënten worden telkens geleverd door de aangegeven bron.<br>
|
||||
We doen geen uitspraken over de nauwkeurigheid of tijdigheid van de ingrediënten of de beoordelingscriteria.<br>
|
||||
Soms veranderen fabrikanten de ingrediënten van hun product zodat het niet meer vegan is, bijvoorbeeld door melkpoeder toe te voegen.<br>
|
||||
Controleer voor de zekerheid de ingrediënten van het product."
|
||||
)
|
||||
);
|
||||
?>
|
|
@ -1,77 +0,0 @@
|
|||
<!--
|
||||
Thank you for helping translating VeganCheck.me!
|
||||
|
||||
After translating, please delete this comment.
|
||||
Feel free to add your name/GitHub URI to "Translated by:".
|
||||
|
||||
-->
|
||||
<?php
|
||||
|
||||
// Translated by:
|
||||
|
||||
$langArray = array(
|
||||
"meta" => array(
|
||||
"lang" => "en", // Please add your language-code (2 letters only)
|
||||
"title" => "Is it Vegan? - Vegan Check",
|
||||
"description" => "Are you unsure whether a product is vegan or not? With VeganCheck.me you can scan the bar code of an item while shopping and check whether it is vegan or not and that without a lot of other unnecessary information! Try it out now!"
|
||||
),
|
||||
"form" => array(
|
||||
"scanbarcode" => "Scan barcode",
|
||||
"enterbarcode" => "Enter product barcode",
|
||||
"submit" => "Submit"
|
||||
),
|
||||
"footer" => array(
|
||||
"credits" => 'Made with <i class="icon-vegancheck"></i> by <a href="https://philipbrembeck.com">Philip Brembeck</a> & <a href="https://jokenetwork.de">JokeNetwork</a>',
|
||||
"legal" => '<a href="../privacy-policy">Privacy Policy</a> / <a href="../impressum">Imprint</a> / <a href="//github.com/JokeNetwork/vegancheck.me/wiki">API</a>'
|
||||
),
|
||||
"layover" => array(
|
||||
"close" => "Close scanner"
|
||||
),
|
||||
"other" => array(
|
||||
"offline" => "You are currently offline. VeganCheck.me only works with a functioning internet-connection.",
|
||||
"reload" => "Reload",
|
||||
"rotate" => "Please turn your device",
|
||||
"timeout" => "This takes longer than usual",
|
||||
"timeoutfinal" => "The request took too long. Please try again."
|
||||
),
|
||||
"results" => array(
|
||||
"invalid" => "Barcode cannot be empty or include special characters.",
|
||||
"invalidscan" => "This barcode is invalid.",
|
||||
"notindb" => "This product is not in our database yet.",
|
||||
"add" => "Do you want to add it?",
|
||||
"addonoff" => "add food",
|
||||
"addonobf" => "add cosemtics",
|
||||
"or" => "or",
|
||||
"missinginfo" => "We do not have enough info on this product yet.",
|
||||
"addinfo" => "Want to add info?",
|
||||
"editonoff" => "Edit this product at OpenFoodFacts",
|
||||
"vegan" => "Vegan",
|
||||
"notvegetarian" => "Not vegetarian",
|
||||
"vegetarian" => "Vegetarian",
|
||||
"unknown" => "unknown",
|
||||
"containspalmoil" => "Contains palmoil",
|
||||
"nopalmoil" => "No palmoil",
|
||||
"palmoilunknown" => "Palmoil unknown",
|
||||
"notvegan" => "Not vegan",
|
||||
"tweettext" => "%20is%20not%20vegan!%20-%Checked%with%20",
|
||||
"tweettextvegan" => "+is+vegan!+-+Checked+with",
|
||||
"edit" => "Edit",
|
||||
"reporterror" => "Report an issue",
|
||||
"animaltestfree" => "Not tested on animals",
|
||||
"checkingredients" => "The products ingredients were processed and checked automatically. Please check the ingredients yourself to be sure.",
|
||||
"datasource" => "Data source:",
|
||||
"processed" => "Computed automatically"
|
||||
),
|
||||
"modal" => array(
|
||||
"palmoil" => "Palm-oil",
|
||||
"palmoil_desc" => "Palm-oil has an extremly harmful impact on the planet. It is the major driver of deforestation of some of the most biodiverse forests, destroying the natural habitats of already endangered animals. Because of this, we'd recommend to not buy any products that contain palm-oil. Sadly, there are still many products out there which include palm oil.",
|
||||
"nutriscore_desc" => "The Nutriscore indicates the nutritional profile of a product in traffic light form. However, the Nutriscore is not considered accurate and should not be used as a reference.",
|
||||
"processed" => "Computed automatically",
|
||||
"processed_desc" => 'This message means that the ingredients of the product have been checked by the <a href="https://github.com/JokeNetwork/vegan-ingredients-api">VeganCheck.me Ingredients API</a> and have been automatically classified as vegan or non-vegan.<br>
|
||||
The ingredients are provided in each case by the indicated source.<br>
|
||||
We do not make any claims about the accuracy or timeliness of the ingredients or the review criteria.<br>
|
||||
Sometimes manufacturers change the ingredients of their product so that it is no longer vegan, for example by adding milk powder.<br>
|
||||
Please double check the ingredients of the product to be sure.'
|
||||
)
|
||||
);
|
||||
?>
|
114
l10n/zh.json
|
@ -1,114 +0,0 @@
|
|||
{
|
||||
"meta":
|
||||
{
|
||||
"lang": "cn",
|
||||
"title": "它是素食吗?- 素食检查",
|
||||
"description": "你是否不确定一件产品是否是素食者?有了VeganCheck.me,你可以在购物时扫描商品的条形码,检查它是否是素食者,而且没有很多其他不必要的信息!现在就试试吧。现在就试试吧!"
|
||||
},
|
||||
"form":
|
||||
{
|
||||
"scanbarcode": "扫描条码",
|
||||
"enterbarcode": "输入条形码",
|
||||
"submit": "提交"
|
||||
},
|
||||
"footer":
|
||||
{
|
||||
"share_text": "你喜欢VeganCheck吗",
|
||||
"share": "分享",
|
||||
"credits": "由 <a href=\"https:\/\/philipbrembeck.com\">Philip Brembeck</a> & <a href=\"https:\/\/jokenetwork.de\">JokeNetwork</a> 制作的 <i class=\"icon-heart\"><\/i>",
|
||||
"legal": "<a href=\"..\/privacy-policy\">隐私政策<\/a> \/ <a href=\"..\/tos\">使用条款<\/a> \/ <a href=\"..\/impressum\">版本说明<\/a> \/ <a href=\"\/\/jokenetwork.de\/vegancheck-api\">API<\/a>"
|
||||
},
|
||||
"layover":
|
||||
{
|
||||
"close": "关闭扫描仪"
|
||||
},
|
||||
"prompt": {
|
||||
"close": "关闭",
|
||||
"install": "安装 VeganCheck.me",
|
||||
"desc": "安装VeganCheck,经常扫描产品并检查它们是否是素食者",
|
||||
"info": "Just tap on <svg class='pwa-install-prompt__guide__icon' viewBox='0 0 128 128' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'><title>Share</title><path fill='#007AFF' d='M48.883,22.992L61.146,10.677L61.146,78.282C61.146,80.005 62.285,81.149 64,81.149C65.715,81.149 66.854,80.005 66.854,78.282L66.854,10.677L79.117,22.992C79.693,23.57 80.256,23.853 81.114,23.853C81.971,23.853 82.534,23.57 83.11,22.992C84.25,21.848 84.25,20.125 83.11,18.981L65.997,1.794C65.715,1.511 65.421,1.215 65.139,1.215C64.563,0.932 63.718,0.932 62.861,1.215C62.579,1.498 62.285,1.498 62.003,1.794L44.89,18.981C43.75,20.125 43.75,21.848 44.89,22.992C46.029,24.149 47.744,24.149 48.883,22.992ZM103.936,35.32L81.114,35.32L81.114,41.053L103.936,41.053L103.936,121.27L24.064,121.27L24.064,41.053L46.886,41.053L46.886,35.32L24.064,35.32C20.928,35.32 18.355,37.904 18.355,41.053L18.355,121.27C18.355,124.419 20.928,127.003 24.064,127.003L103.936,127.003C107.072,127.003 109.645,124.419 109.645,121.27L109.645,41.053C109.645,37.891 107.072,35.32 103.936,35.32Z'/></svg>then Add to Home Screen.",
|
||||
"get": "获取"
|
||||
},
|
||||
"other":
|
||||
{
|
||||
"offline": "您目前处于离线状态。VeganCheck.me 只在互联网连接正常的情况下工作。",
|
||||
"reload": "重新加载",
|
||||
"rotate": "请旋转你的设备",
|
||||
"timeout": "这需要比平时更长的时间",
|
||||
"timeoutfinal": "请求时间过长。请再试一次。"
|
||||
},
|
||||
"results":
|
||||
{
|
||||
"invalid": "条形码不能为空或包括特殊字符。",
|
||||
"invalidscan": "这个条形码是无效的。",
|
||||
"notindb": "这个产品在我们的数据库中还没有。",
|
||||
"add": "你想添加产品吗?",
|
||||
"addonoff": "添加食物",
|
||||
"addonobf": "添加化妆品",
|
||||
"or": "或",
|
||||
"missinginfo": "我们还没有关于这个产品的足够信息。",
|
||||
"addinfo": "想添加信息吗?",
|
||||
"editonoff": "在OpenFoodFacts编辑该产品",
|
||||
"vegan": "素食主义者",
|
||||
"notvegetarian": "不是素食者",
|
||||
"vegetarian": "素食者",
|
||||
"unknown": "不详",
|
||||
"containspalmoil": "含有棕榈油",
|
||||
"nopalmoil": "不使用棕榈油",
|
||||
"palmoilunknown": "棕榈油未知",
|
||||
"notvegan": "不是素食主义者",
|
||||
"tweettext": "%20is%20not%20vegan!%20-%Checked%with%20",
|
||||
"tweettextvegan": "+is+vegan!+-+Checked+with",
|
||||
"edit": "编辑",
|
||||
"reporterror": "报告一个问题",
|
||||
"animaltestfree": "不受虐待",
|
||||
"checkingredients": "产品的成分是自动处理和检查的。请自行检查成分以确定。",
|
||||
"datasource": "数据来源",
|
||||
"processed": "自动计算的"
|
||||
},
|
||||
"modal":
|
||||
{
|
||||
"palmoil": "棕榈油",
|
||||
"palmoil_desc": "棕榈油对地球有着极其有害的影响。它是砍伐一些生物多样性最丰富的森林的主要动力,破坏了已经濒临灭绝的动物的自然栖息地。正因为如此,我们建议不要购买任何含有棕榈油的产品。可悲的是,现在仍有许多产品含有棕榈油。",
|
||||
"nutriscore_desc": "Nutriscore以交通灯的形式表示产品的营养状况。然而,Nutriscore被认为是不准确的,不应作为一种参考。",
|
||||
"processed": "自动计算的",
|
||||
"processed_desc": "这条信息意味着产品的成分已经被<a href=\"https:\//github.com\/JokeNetwork/vegan-ingredients-api\">VeganCheck.me Ingredients API</a>检查。它已被自动归类为素食或非素食。<br> \n每个案例中的成分都是由指定的来源提供的。 <br>\n我们不对成分或审查标准的准确性或及时性做任何声明。<br>\n有时制造商会改变产品的成分,使其不再是素食者,例如加入奶粉。<br>/n 请仔细检查产品的成分以确定。",
|
||||
"licenses": "许可证",
|
||||
"licenses_desc": "VeganCheck.me使用不同的数据库和API来收集产品的信息。这些信息是在以下许可证下授权的。",
|
||||
"licenses_copyrights": "© OpenFoodFacts Contributors, licensed under <a href=\"https:\/\/opendatacommons.org\/licenses\/odbl\/1.0\/\">Open Database License<\/a> and <a href=\"https:\/\/opendatacommons.org\/licenses\/dbcl\/1.0\/\">Database Contents License<\/a>.<br>\r\n Brocade.io Contributors, licensed under <a href=\"https:\/\/creativecommons.org\/publicdomain\/zero\/1.0\/\">Creative-Commons Zero<\/a>.<br>\r\n © Open EAN\/GTIN Database Contributors, licensed under <a href=\"https:\/\/www.gnu.org\/licenses\/fdl-1.3.html\">GNU FDL<\/a>."
|
||||
},
|
||||
"ingredients":
|
||||
{
|
||||
"shorttitle": "成分检查",
|
||||
"title": "纯素食成分检查器",
|
||||
"subtitle": "检查一个产品的成分是否是素食者!",
|
||||
"placeholder": "输入以逗号隔开的成分",
|
||||
"error": "成分列表不能为空,也不能包括特殊字符,必须用逗号隔开。",
|
||||
"translated": "译文:用",
|
||||
"and": "和"
|
||||
},
|
||||
"more":
|
||||
{
|
||||
"more": "更多",
|
||||
"supportus": "请我们喝咖啡",
|
||||
"tos": "服务条款",
|
||||
"privacypolicy": "隐私政策",
|
||||
"api": "API文件",
|
||||
"imprint": "法律通知",
|
||||
"oled": {
|
||||
"cookiewarning": "这设置了一个cookie",
|
||||
"error": "在您的设备上启用黑暗模式"
|
||||
},
|
||||
"donate": {
|
||||
"once": "一次",
|
||||
"monthly": "每月",
|
||||
"via": "通过",
|
||||
"month": "モナト",
|
||||
"vendor": "付款过程在<span id=\"vendor\">PayPal<\/span>上完成"
|
||||
},
|
||||
"follow": "关注我们"
|
||||
},
|
||||
"language": "这个页面只有英语和德语版本。",
|
||||
"germanonly": "这个页面只有德语版。",
|
||||
"tos": "<p><b>Use of \"VeganCheck.me\"<\/b><\/p><p>The use of the site \"VeganCheck.me\" is free of charge. The distribution of the contents or our services against payment is strictly prohibited. Automated queries are also prohibited and may only be performed using the <a href=\"https:\/\/jokenetwork.de\/vegancheck-api\">API<\/a>.<br> We reserve the right to change, reduce, expand or disable our services at any time.<\/p><p><b>Processing of entered texts and numbers<\/b><\/p><p>On our website, barcodes or ingredients of a product can be entered in text fields. This is necessary to provide our service in its entirety. The data entry is completely voluntary.<br>Only barcodes or ingredients may be entered in the named text fields; the entry or transmission of personal data of any kind is strictly prohibited.<\/p><p>Personal data is any information that relates to an identified or identifiable living individual. Different pieces of information, which collected together can lead to the identification of a particular person, also constitute personal data.<sup><a href=\"https:\/\/ec.europa.eu\/info\/law\/law-topic\/data-protection\/reform\/what-personal-data_en\">?<\/a><\/sup><\/p><p><b>Disclaimer<\/b><\/p><p>We assume no liability for the accuracy of the product information and ingredient lists offered and for the availability of our service.<\/p>"
|
||||
}
|
201
main.php
|
@ -1,201 +0,0 @@
|
|||
<?php
|
||||
include_once('includes/header.php');
|
||||
?>
|
||||
</head>
|
||||
|
||||
<body id="top">
|
||||
<nav class="nav">
|
||||
<div class="flex-container">
|
||||
<div class="flex-item active">
|
||||
<span class="icon icon-vegancheck"></span>
|
||||
<span class="menu-item">Home</span>
|
||||
</div>
|
||||
<div class="flex-item">
|
||||
<a href="/ingredients">
|
||||
<span class="icon icon-ingredients"></span>
|
||||
<span class="menu-item"><?php echo L::ingredients_shorttitle; ?></span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="flex-item">
|
||||
<a href="/more">
|
||||
<span class="icon icon-ellipsis"></span>
|
||||
<span class="menu-item"><?php echo L::more_more; ?></span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="rotate">
|
||||
<img src="../img/rotatedevice.svg" alt="<?php echo L::other_rotate; ?>">
|
||||
<h1><?php echo L::other_rotate; ?></h1>
|
||||
</div>
|
||||
|
||||
<div class="modal_view animatedfaster fadeInUp" id="nutriscore">
|
||||
<div class="modal_close"><a class="btn-dark" data-dismiss="modal">×</a></div>
|
||||
<span class="center">
|
||||
<img src="../img/nutriscore_image.svg" class="heading_img">
|
||||
<h1>Nutriscore</h1>
|
||||
</span>
|
||||
<p><?php echo L::modal_nutriscore_desc; ?></p>
|
||||
</div>
|
||||
|
||||
<div class="modal_view animatedfaster fadeInUp" id="palmoil">
|
||||
<div class="modal_close"><a class="btn-dark" data-dismiss="modal">×</a></div>
|
||||
<span class="center">
|
||||
<img src="../img/palmoil_img.svg" class="heading_img">
|
||||
<h1><?php echo L::modal_palmoil; ?></h1>
|
||||
</span>
|
||||
<p><?php echo L::modal_palmoil_desc; ?></p>
|
||||
</div>
|
||||
|
||||
<div class="modal_view animatedfaster fadeInUp" id="processed">
|
||||
<div class="modal_close"><a class="btn-dark" data-dismiss="modal">×</a></div>
|
||||
<span class="center">
|
||||
<img src="../img/computed_image.svg" class="heading_img">
|
||||
<h1><?php echo L::modal_processed; ?></h1>
|
||||
</span>
|
||||
<p><?php echo L::modal_processed_desc; ?></p>
|
||||
</div>
|
||||
<div class="modal_view animatedfaster fadeInUp" id="license">
|
||||
<div class="modal_close"><a class="btn-dark" data-dismiss="modal">×</a></div>
|
||||
<span class="center">
|
||||
<img src="../img/license_img.svg" class="heading_img">
|
||||
<h1><?php echo L::modal_licenses; ?></h1>
|
||||
</span>
|
||||
<p><?php echo L::modal_licenses_desc; ?></p>
|
||||
<p>
|
||||
© OpenFoodFacts Contributors, licensed under <a href="https://opendatacommons.org/licenses/odbl/1.0/">Open Database License</a> and <a href="https://opendatacommons.org/licenses/dbcl/1.0/">Database Contents License</a>.<br>
|
||||
Brocade.io Contributors, licensed under <a href="https://creativecommons.org/publicdomain/zero/1.0/">Creative-Commons Zero</a>.<br>
|
||||
© Open EAN/GTIN Database Contributors, licensed under <a href="https://www.gnu.org/licenses/fdl-1.3.html">GNU FDL</a>.<br>
|
||||
© VeganCheck.me Contributors and Hamed Montazeri, licensed under <a href="https://github.com/JokeNetwork/vegan-ingredients-api/blob/master/LICENSE">MIT License</a>, sourced from <a href="https://www.veganpeace.com/ingredients/ingredients.htm">VeganPeace</a>, <a href="https://www.peta.org/living/food/animal-ingredients-list/">PETA</a> and <a href="http://www.veganwolf.com/animal_ingredients.htm">The VEGAN WOLF</a>.<br>
|
||||
© VeganCheck.me Contributors, sourced from © <a href="https://crueltyfree.peta.org">PETA (Beauty without Bunnies)</a>.
|
||||
</div>
|
||||
<div class="modal_view animatedfaster fadeInUp" id="sharemodal">
|
||||
<div class="modal_close"><a class="btn-dark" data-dismiss="modal">×</a></div>
|
||||
<h2><?php echo L::footer_share; ?></h2>
|
||||
<div class="share-btn" id="copy">
|
||||
<span class="share-text">Copy</span>
|
||||
<span class="share-icon icon-docs"></span>
|
||||
</div>
|
||||
<div class="share-btn" id="twitter">
|
||||
<span class="share-text">Share on Twitter</span>
|
||||
<span class="share-icon icon-twitter"></span>
|
||||
</div>
|
||||
<div class="share-btn" id="whatsapp">
|
||||
<span class="share-text">Share on WhatsApp</span>
|
||||
<span class="share-icon icon-whatsapp"></span>
|
||||
</div>
|
||||
<div class="share-btn" id="telegram">
|
||||
<span class="share-text">Share on Telegram</span>
|
||||
<span class="share-icon icon-telegram"></span>
|
||||
</div>
|
||||
<div class="share-btn" id="facebook">
|
||||
<span class="share-text">Share on Facebook</span>
|
||||
<span class="share-icon icon-facebook"></span>
|
||||
</div>
|
||||
<div class="share-btn" id="message">
|
||||
<span class="share-text">Share as message</span>
|
||||
<span class="share-icon icon-chat"></span>
|
||||
</div>
|
||||
<div class="share-btn" id="email">
|
||||
<span class="share-text">Share via e-mail</span>
|
||||
<span class="share-icon icon-mail"></span>
|
||||
</div>
|
||||
</div>
|
||||
<noscript>
|
||||
<div class="noscript">
|
||||
<h3>VeganCheck.me only works properly with Javascript enabled. <a href="https://www.enable-javascript.com">Learn how to enable Javascript here</a>.</h3>
|
||||
</div>
|
||||
</noscript>
|
||||
<div class="container" id="mainpage">
|
||||
<div id="main">
|
||||
<div class="form" id="resscroll">
|
||||
<img src="../img/VeganCheck.svg?v=<?php echo $versions->img; ?>" alt="Logo" class="logo">
|
||||
<form action="../script.php">
|
||||
<fieldset>
|
||||
<legend><?php echo L::form_enterbarcode; ?></legend>
|
||||
<span class="btn_scan" onclick="setupLiveReader()" aria-label="<?php echo L::form_scanbarcode; ?>" role="button" tabindex="0"><span class="icon-barcode"></span></span>
|
||||
<input type="number" id="barcode" name="barcode" placeholder="<?php echo L::form_enterbarcode.'"'; if(isset($_GET['ean'])){echo 'value="'.$_GET['ean'].'"';}?> autofocus>
|
||||
<button name="submit" aria-label="<?php echo L::form_submit; ?>" role="button"><span class="icon-right-open"></span></button>
|
||||
</fieldset>
|
||||
</form>
|
||||
<div class="timeout animated fadeIn" style="display:none;"><?php echo L::other_timeout; ?><span>.</span><span>.</span><span>.</span></div>
|
||||
<div class="timeout-final animated fadeIn" style="display:none;"><?php echo L::other_timeoutfinal; ?></div>
|
||||
|
||||
<div id="result">
|
||||
<div class="animated fadeIn resultborder" id="RSFound">
|
||||
<span class="unknown">
|
||||
<span class="name" id="name_sh"></span>
|
||||
</span>
|
||||
<span id="result_sh"><div class="Grid">
|
||||
<div class="Grid-cell description"><?php echo L::results_vegan; ?></div>
|
||||
<div class="Grid-cell icons RSVegan"></div>
|
||||
</div></span><div class="Grid">
|
||||
<div class="Grid-cell description"><?php echo L::results_vegetarian; ?></div>
|
||||
<div class="Grid-cell icons RSVegetarian"></div>
|
||||
</div><div class="Grid">
|
||||
<div class="Grid-cell description"><?php echo L::modal_palmoil; ?><sup data-target="palmoil" data-toggle="modal">?</sup></div>
|
||||
<div class="Grid-cell icons RSPalmoil"></div>
|
||||
</div>
|
||||
<div class="Grid Crueltyfree">
|
||||
<div class="Grid-cell description"><?php echo L::results_animaltestfree; ?></div>
|
||||
<div class="Grid-cell icons RSAnimaltestfree"></div>
|
||||
</div>
|
||||
<div class="Grid">
|
||||
<div class="Grid-cell description">Nutriscore<sup data-target="nutriscore" data-toggle="modal">?</sup></div>
|
||||
<div class="Grid-cell icons RSNutriscore"></div>
|
||||
</div>
|
||||
<div class="Grid">
|
||||
<div class="Grid-cell description">Grade</div>
|
||||
<div class="Grid-cell icons RSGrade"></div>
|
||||
</div>
|
||||
<span class="source"><?php echo L::results_datasource;?> <a href="" class="RSSource" target="_blank"></a><sup data-target="license" data-toggle="modal">?</sup></span>
|
||||
<span class="button" id="share">Teilen</span>
|
||||
</div>
|
||||
<div class="animated fadeIn resultborder" id="RSNotFound"><span><?php echo L::results_notindb; ?></span><p class="missing"><?php echo L::results_add; ?> <a href="https://world.openfoodfacts.org/cgi/product.pl" target="_blank">Lebensmittel hinzufügen</a> oder <a href="https://world.openbeautyfacts.org/cgi/product.pl" target="_blank">Kosemtika hinzufügen</a>.</p>
|
||||
</div>
|
||||
<div class="animated fadeIn resultborder" id="RSInvalid"><span><?php echo L::results_invalidscan; ?></span></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<footer>
|
||||
<p><?php echo L::footer_credits; ?></p>
|
||||
<?php if(date('m')=="01"){echo '<a href="https://veganuary.com/try-vegan/"><img src="../img/veganuary.svg" alt="We are taking part in Veganuary" class="labels"></a>';} ?>
|
||||
<a href="https://vegancheck.me"><img src="../img/VeganCheck_text.svg" alt="VeganCheck.me Logo" class="labels"></a>
|
||||
<a href="https://github.com/jokenetwork/vegancheck.me"><img src="../img/opensource.svg" alt="Open Source" class="labels"></a>
|
||||
<a href="https://www.thegreenwebfoundation.org/green-web-check/?url=https%3A%2F%2Fvegancheck.me"><img src="../img/greenhosted.svg" alt="Hosted Green" class="labels"></a>
|
||||
<a href="https://iplantatree.org/user/VeganCheck.me"><img src="../img/treelabel.svg" alt="We plant trees. We're carbon neutral." class="labels"></a>
|
||||
</footer>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="shortcut">
|
||||
<div class="flex-container">
|
||||
<div class="flex-item">
|
||||
<img src="../img/shortcuts.png">
|
||||
</div>
|
||||
<div class="flex-item">
|
||||
<span class="heading">Shortcuts</span>
|
||||
<span class="subheading">Open in the shortcuts app</span>
|
||||
</div>
|
||||
<div class="flex-item">
|
||||
<a href="https://shareshortcuts.com/download/2224-vegancheck.html"> <span class="button">Open</span></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="controls" style="display:none;">
|
||||
<span id="close">
|
||||
<div class="flex-container">
|
||||
<div class="flex-item"><span id="closebtn" class="icon-left-open"></span><span id="torch"></span></div>
|
||||
<div class="flex-item"><span class="icon-flipcamera" id="flipbutton"></span></div>
|
||||
</div>
|
||||
</span>
|
||||
<span id="barcodeicon"><span class="icon-barcode"></span></span>
|
||||
<div id="background"></div>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
include_once('includes/footer.php');
|
||||
?>
|
||||
</body>
|
||||
</html>
|
137
more.php
|
@ -1,137 +0,0 @@
|
|||
<?php
|
||||
include_once('includes/header.php');
|
||||
?>
|
||||
<style>
|
||||
.form h2, p {
|
||||
text-align: left;
|
||||
-webkit-hyphens: auto;
|
||||
-moz-hyphens: auto;
|
||||
-ms-hyphens: auto;
|
||||
hyphens: auto;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<nav class="nav">
|
||||
<div class="flex-container">
|
||||
<div class="flex-item">
|
||||
<a href="/">
|
||||
<span class="icon icon-vegancheck"></span>
|
||||
<span class="menu-item">Home</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="flex-item">
|
||||
<a href="/ingredients">
|
||||
<span class="icon icon-ingredients"></span>
|
||||
<span class="menu-item"><?php echo L::ingredients_shorttitle; ?></span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="flex-item active">
|
||||
<span class="icon icon-ellipsis"></span>
|
||||
<span class="menu-item"><?php echo L::more_more; ?></span>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="modal_view animatedfaster fadeInUp" id="donationmodal">
|
||||
<div class="modal_close" id="modal_close" ><a class="btn-dark" data-dismiss="modal">×</a></div>
|
||||
<span class="center">
|
||||
<img src="img/donate_img.svg" class="heading_img">
|
||||
<h1><?php echo L::more_supportus; ?></h1>
|
||||
</span>
|
||||
<div class="option active" id="option_once">
|
||||
<input class="form-check-input" type="radio" name="flexRadioDefault" id="once" checked>
|
||||
<span class="muted"><?php echo L::more_donate_once; ?> <?php echo L::more_donate_via; ?> PayPal</span>
|
||||
<span class="price">1-15€</span>
|
||||
</div>
|
||||
<div class="option" id="option_kofi">
|
||||
<input class="form-check-input" type="radio" name="flexRadioDefault" id="kofi">
|
||||
<span class="muted"><?php echo L::more_donate_once; ?> <?php echo L::more_donate_via; ?> Ko-Fi</span>
|
||||
<span class="price">1-50€</span>
|
||||
</div>
|
||||
<div class="option" id="option_monthly" style="display:none;">
|
||||
<input class="form-check-input" type="radio" name="flexRadioDefault" id="monthly">
|
||||
<span class="muted"><?php echo L::more_donate_monthly; ?></span>
|
||||
<span class="price">1-15€/<?php echo L::more_donate_month; ?></span>
|
||||
</div>
|
||||
<div class="option" id="option_stripe">
|
||||
<input class="form-check-input" type="radio" name="flexRadioDefault" id="stripe">
|
||||
<span class="muted"><?php echo L::more_donate_once; ?> <?php echo L::more_donate_via; ?> Stripe</span>
|
||||
<span class="price">1-100€</span>
|
||||
</div>
|
||||
<div class="option" id="option_gh">
|
||||
<input class="form-check-input" type="radio" name="flexRadioDefault" id="gh">
|
||||
<span class="muted"><?php echo L::more_donate_monthly; ?> <?php echo L::more_donate_via; ?> GitHub</span>
|
||||
<span class="price">1-100$/<?php echo L::more_donate_month; ?></span>
|
||||
</div>
|
||||
<div class="center donate">
|
||||
<a href="https://www.paypal.com/donate/?hosted_button_id=J7TEA8GBPN536" class="button" id="supportbtn"><span class="icon-paypal"></span> Donate with PayPal</a>
|
||||
<span class="info"><?php echo L::more_donate_vendor; ?></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal_view animatedfaster fadeInUp" id="followmodal">
|
||||
<div class="modal_close" id="modal_close"><a class="btn-dark" data-dismiss="modal">×</a></div>
|
||||
<span class="center">
|
||||
<img src="img/follow_img.svg" class="heading_img" alt="Follow us">
|
||||
<h1><?php echo L::more_follow; ?></h1>
|
||||
</span>
|
||||
<a href="https://veganism.social/@vegancheck" rel="me" class="menu twitter">
|
||||
<span class="label">Mastodon</span>
|
||||
<div class="social-icon"><span class="icon-mastodon"></span></div>
|
||||
</a>
|
||||
<a href="https://instagram.com/vegancheck.me" class="menu">
|
||||
<span class="label">Instagram</span>
|
||||
<div class="social-icon"><span class="icon-instagram"></span></div>
|
||||
</a>
|
||||
<a href="https://facebook.com/vegancheck.me" class="menu facebook">
|
||||
<span class="label">Facebook</span>
|
||||
<div class="social-icon"><span class="icon-facebook"></span></div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="container top" id="mainpage">
|
||||
<div id="main">
|
||||
<div class="form">
|
||||
<div class="Grid links">
|
||||
<div class="Grid-cell description" data-target="donationmodal" data-toggle="modal"><?php echo L::more_supportus; ?></div>
|
||||
<div class="Grid-cell icons"><span class="unknown icon-right-open" data-target="donationmodal" data-toggle="modal"></span></div>
|
||||
</div>
|
||||
<div class="Grid links">
|
||||
<div class="Grid-cell description" data-target="followmodal" data-toggle="modal"><?php echo L::more_follow; ?></div>
|
||||
<div class="Grid-cell icons"><span class="unknown icon-right-open" data-target="followmodal" data-toggle="modal"></span></div>
|
||||
</div>
|
||||
<a href="tos" class="Grid links">
|
||||
<div class="Grid-cell description"><?php echo L::more_tos; ?></div>
|
||||
<div class="Grid-cell icons"><span class="unknown icon-right-open"></span></div>
|
||||
</a>
|
||||
<a href="privacy-policy" class="Grid links">
|
||||
<div class="Grid-cell description"><?php echo L::more_privacypolicy; ?></div>
|
||||
<div class="Grid-cell icons"><span class="unknown icon-right-open"></span></div>
|
||||
</a>
|
||||
<a href="https://jokenetwork.de/vegancheck-api" class="Grid links">
|
||||
<div class="Grid-cell description"><?php echo L::more_api; ?></div>
|
||||
<div class="Grid-cell icons"><span class="unknown icon-right-open"></span></div>
|
||||
</a>
|
||||
<a href="impressum" class="Grid links">
|
||||
<div class="Grid-cell description"><?php echo L::more_imprint; ?></div>
|
||||
<div class="Grid-cell icons"><span class="unknown icon-right-open"></span></div>
|
||||
</a>
|
||||
<span class="Grid switcher">
|
||||
<div class="Grid-cell description">
|
||||
OLED-Mode
|
||||
<span class="info" id="cookieinfo"><?php echo L::more_oled_cookiewarning; ?></span>
|
||||
<span class="info" id="oledinfo"><?php echo L::more_oled_error; ?></span>
|
||||
</div>
|
||||
<div class="Grid-cell icons"><input class="switch" id="oled-switch" type="checkbox"></div>
|
||||
</span>
|
||||
</div>
|
||||
<span id="version" class="info"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
include_once('includes/footer.php');
|
||||
?>
|
||||
</body>
|
||||
</html>
|
14
next.config.js
Normal file
|
@ -0,0 +1,14 @@
|
|||
const withPWA = require('next-pwa')({
|
||||
dest: 'public',
|
||||
swSrc: 'service-worker.js'
|
||||
})
|
||||
|
||||
/** @type {import('next').NextConfig} */
|
||||
|
||||
module.exports = withPWA({
|
||||
reactStrictMode: true,
|
||||
i18n: {
|
||||
locales: ['de', 'en', 'fr', 'es'],
|
||||
defaultLocale: 'en',
|
||||
}
|
||||
})
|
|
@ -1,3 +0,0 @@
|
|||
<?php
|
||||
require_once("../main.php");
|
||||
?>
|
18
offline.php
|
@ -1,18 +0,0 @@
|
|||
<?php
|
||||
include_once('includes/header.php');
|
||||
?>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container top">
|
||||
<div id="main">
|
||||
<div class="form">
|
||||
<a href="//vegancheck.me"><img src="img/VeganCheck.svg?v=<?php echo $versions->img; ?>" alt="Logo"></a><br>
|
||||
<h3><?php echo L::other_offline; ?></h3>
|
||||
<p><a href="/"><?php echo L::other_reload; ?></a></p>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
window.addEventListener('online', function(e) { window.location.href = "/"; });
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
6075
package-lock.json
generated
26
package.json
|
@ -1,9 +1,25 @@
|
|||
{
|
||||
"name": "VeganCheck",
|
||||
"version": "1.2.0",
|
||||
"description": "VeganCheck.me is a Progressive Web App, which scans EAN/UPC-Codes and tells you if a product is vegan or not using a javascript-only barcode-scanner and API by OpenFoodFacts.",
|
||||
"name": "vegancheck",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
"build": "next build",
|
||||
"start": "next start",
|
||||
"lint": "next lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"barcode-reader": "^1.6.1",
|
||||
"jquery": "^3.6.3"
|
||||
"@next/font": "13.1.6",
|
||||
"@types/node": "18.13.0",
|
||||
"@types/react": "18.0.27",
|
||||
"@types/react-dom": "18.0.10",
|
||||
"next": "13.1.6",
|
||||
"next-intl": "^2.10.2",
|
||||
"next-pwa": "^5.6.0",
|
||||
"quagga": "^0.12.1",
|
||||
"react": "18.2.0",
|
||||
"react-dom": "18.2.0",
|
||||
"sass": "^1.58.0",
|
||||
"typescript": "4.9.5"
|
||||
}
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 4.1 MiB After Width: | Height: | Size: 4.1 MiB |
Before Width: | Height: | Size: 4.4 MiB After Width: | Height: | Size: 4.4 MiB |
Before Width: | Height: | Size: 3 KiB After Width: | Height: | Size: 3 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 5.8 MiB After Width: | Height: | Size: 5.8 MiB |
Before Width: | Height: | Size: 3.1 MiB After Width: | Height: | Size: 3.1 MiB |
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
33
public/img/grade_img.svg
Normal file
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg width="100%" height="100%" viewBox="0 0 500 500" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||
<g transform="matrix(1.1163,0,0,1.1163,-50.2241,-55.3977)">
|
||||
<circle cx="269.481" cy="273.385" r="220.162" style="fill:white;"/>
|
||||
</g>
|
||||
<g transform="matrix(2.69793,0,0,2.69793,114.734,114.892)">
|
||||
<path d="M55.469,35.938L32.031,35.938C31.172,35.938 30.469,36.641 30.469,37.501C30.469,38.36 31.172,39.063 32.031,39.063L55.469,39.063C56.328,39.063 57.032,38.36 57.032,37.501C57.032,36.641 56.328,35.938 55.469,35.938Z" style="fill:url(#_Linear1);fill-rule:nonzero;"/>
|
||||
<path d="M55.469,54.688L32.031,54.688C31.172,54.688 30.469,55.391 30.469,56.251C30.469,57.11 31.172,57.813 32.031,57.813L55.469,57.813C56.328,57.813 57.032,57.11 57.032,56.251C57.032,55.391 56.328,54.688 55.469,54.688Z" style="fill:url(#_Linear2);fill-rule:nonzero;"/>
|
||||
<path d="M55.469,73.438L32.031,73.438C31.172,73.438 30.469,74.141 30.469,75.001C30.469,75.86 31.172,76.563 32.031,76.563L55.469,76.563C56.328,76.563 57.032,75.86 57.032,75.001C57.032,74.141 56.328,73.438 55.469,73.438Z" style="fill:url(#_Linear3);fill-rule:nonzero;"/>
|
||||
<path d="M26.875,52.031C26.25,51.406 25.313,51.406 24.688,52.031L19.375,57.187L17.5,55.312C16.875,54.687 15.859,54.687 15.313,55.312C14.688,55.937 14.688,56.953 15.313,57.5L18.281,60.469C18.359,60.469 18.359,60.547 18.438,60.547L18.516,60.625C18.594,60.625 18.594,60.703 18.672,60.703C18.75,60.703 18.75,60.781 18.828,60.781C18.906,60.781 18.984,60.859 18.984,60.859L19.766,60.859C19.844,60.859 19.922,60.859 19.922,60.781C20,60.781 20,60.703 20.078,60.703C20.156,60.703 20.156,60.625 20.234,60.625C20.313,60.625 20.313,60.547 20.313,60.547C20.391,60.547 20.391,60.469 20.469,60.469L26.875,54.219C27.5,53.672 27.5,52.656 26.875,52.031Z" style="fill:url(#_Linear4);fill-rule:nonzero;"/>
|
||||
<path d="M26.875,33.281C26.25,32.656 25.313,32.656 24.688,33.281L19.375,38.437L17.5,36.562C16.875,35.937 15.859,35.937 15.313,36.562C14.688,37.187 14.688,38.203 15.313,38.75L18.281,41.719C18.359,41.797 18.359,41.797 18.438,41.797L18.516,41.875C18.594,41.875 18.594,41.953 18.672,41.953L18.75,42.031C18.828,42.031 18.906,42.109 18.906,42.109L19.688,42.109C19.766,42.109 19.844,42.109 19.844,42.031C19.922,42.031 19.922,41.953 20,41.953C20.078,41.953 20.078,41.875 20.156,41.875L20.234,41.797C20.313,41.797 20.313,41.719 20.391,41.719L26.797,35.469C27.5,34.922 27.5,33.906 26.875,33.281Z" style="fill:url(#_Linear5);fill-rule:nonzero;"/>
|
||||
<path d="M24.688,70.781L19.376,75.937L17.501,74.062C16.876,73.437 15.86,73.437 15.313,74.062C14.688,74.687 14.688,75.703 15.313,76.25L18.282,79.219C18.36,79.219 18.36,79.297 18.438,79.297L18.516,79.375C18.594,79.375 18.594,79.453 18.672,79.453C18.751,79.453 18.751,79.531 18.829,79.531C18.907,79.531 18.985,79.609 18.985,79.609L19.766,79.609C19.844,79.609 19.922,79.609 19.922,79.531C20.001,79.531 20.001,79.453 20.079,79.453C20.157,79.453 20.157,79.375 20.235,79.375C20.313,79.375 20.313,79.297 20.313,79.297C20.391,79.297 20.391,79.219 20.469,79.219L26.875,72.969C27.5,72.344 27.5,71.406 26.875,70.781C26.329,70.156 25.313,70.156 24.688,70.781Z" style="fill:url(#_Linear6);fill-rule:nonzero;"/>
|
||||
<path d="M65,30.469C67.031,28.75 68.438,26.407 68.906,23.828C69.922,18.985 68.594,13.985 65.391,10.234C62.109,6.563 57.344,4.531 52.422,4.844C50.39,4.922 48.437,5.625 46.875,6.953C46.25,7.5 46.172,8.516 46.797,9.141C47.343,9.766 48.359,9.844 48.984,9.219C50,8.359 51.328,7.891 52.656,7.891C59.609,7.422 65.625,12.578 66.094,19.532C66.172,20.704 66.094,21.954 65.86,23.126C65.547,25.001 64.531,26.719 63.125,27.969C61.406,29.219 59.297,30.001 57.188,30.157C53.75,30.391 50.469,28.829 48.516,26.016C46.25,23.126 45.625,19.297 46.875,15.86C47.188,14.923 48.203,13.36 49.375,13.204C50.235,13.126 50.86,12.345 50.703,11.485C50.547,10.626 49.844,10.001 48.984,10.157C45.547,10.548 44.063,14.376 43.906,14.845C42.344,19.298 43.047,24.22 45.938,27.97C48.359,31.329 52.266,33.282 56.407,33.36L57.344,33.36C60.157,33.126 62.813,32.188 65,30.47L65,30.469Z" style="fill:url(#_Linear7);fill-rule:nonzero;"/>
|
||||
<path d="M61.328,16.328L60.547,16.328C60.312,16.406 60.156,16.406 60.078,16.406L60.078,18.281L58.359,18.281C58.359,18.437 58.281,18.594 58.281,18.75L58.281,19.531C58.281,19.687 58.281,19.844 58.359,20L60.078,20L60.078,21.875C60.391,21.953 60.625,21.953 60.937,21.953L61.328,21.953C61.484,21.953 61.641,21.875 61.797,21.875L61.797,20L63.516,20C63.516,19.844 63.594,19.687 63.594,19.531L63.594,18.75C63.594,18.594 63.516,18.437 63.516,18.281L61.719,18.281L61.719,16.406C61.562,16.406 61.406,16.406 61.328,16.328Z" style="fill:url(#_Linear8);fill-rule:nonzero;"/>
|
||||
<path d="M100,51.562C99.219,49.687 97.266,48.906 95.625,48.203C94.766,47.89 93.984,47.499 93.203,46.953C92.656,46.249 92.188,45.39 91.953,44.531C91.25,42.812 90.469,40.937 88.594,40.156C86.797,39.374 84.922,40.156 83.203,40.859C82.344,41.249 81.406,41.562 80.469,41.64C79.531,41.562 78.594,41.249 77.734,40.859C76.094,40.156 74.219,39.374 72.344,40.156C70.469,40.937 69.688,42.89 68.984,44.531C68.672,45.39 68.281,46.171 67.734,46.953C67.031,47.499 66.172,47.968 65.312,48.203C63.672,48.906 61.719,49.687 60.937,51.562C60.156,53.359 60.937,55.234 61.641,56.953C62.031,57.812 62.344,58.75 62.422,59.687C62.344,60.624 62.031,61.562 61.641,62.421C60.937,64.062 60.156,65.937 60.937,67.812C61.719,69.687 63.672,70.468 65.312,71.171C66.172,71.484 66.953,71.875 67.734,72.421C68.281,73.125 68.75,73.984 68.984,74.843C69.062,75.078 69.219,75.312 69.297,75.625L63.359,95.391C63.125,96.25 63.594,97.109 64.375,97.344C64.844,97.5 65.312,97.422 65.703,97.187L70.234,94.297L72.422,99.219C72.656,99.766 73.203,100.156 73.828,100.156L73.906,100.156C74.531,100.078 75.078,99.687 75.312,99.062L80.39,82.109L85.468,99.062C85.625,99.687 86.25,100.156 86.875,100.156L86.953,100.156C87.578,100.156 88.125,99.766 88.359,99.219L90.546,94.297L95.078,97.187C95.781,97.656 96.796,97.422 97.265,96.719C97.5,96.328 97.578,95.859 97.421,95.391L91.484,75.625C91.562,75.39 91.718,75.156 91.796,74.843C92.109,73.984 92.5,73.203 93.046,72.421C93.75,71.875 94.609,71.406 95.468,71.171C97.187,70.468 99.062,69.687 99.843,67.812C100.625,66.015 99.843,64.14 99.14,62.421C98.75,61.562 98.437,60.625 98.359,59.687C98.437,58.75 98.75,57.812 99.14,56.953C99.921,55.234 100.703,53.359 100,51.562L100,51.562ZM73.594,93.906L72.422,91.172C72.11,90.39 71.172,90 70.391,90.39C70.313,90.39 70.235,90.468 70.157,90.468L67.657,92.109L71.641,78.671C72.344,79.14 73.125,79.374 73.985,79.374C75.313,79.296 76.563,78.905 77.735,78.359C77.891,78.28 78.125,78.202 78.282,78.124L73.594,93.906ZM90.782,90.547C90.079,90.078 89.063,90.312 88.595,91.015C88.516,91.093 88.516,91.172 88.516,91.25L87.344,93.984L82.657,78.281C82.813,78.359 83.048,78.437 83.204,78.516C84.844,79.219 86.719,80 88.594,79.219C88.829,79.141 89.141,78.984 89.376,78.828L93.36,92.266L90.782,90.547ZM96.329,63.516C96.798,64.609 97.266,65.859 97.032,66.484C96.72,67.188 95.548,67.656 94.298,68.125C93.048,68.516 91.876,69.219 90.86,70.078C90.001,71.094 89.298,72.266 88.907,73.516C88.438,74.688 87.891,75.938 87.266,76.25C86.641,76.484 85.391,76.016 84.298,75.547C83.048,74.922 81.72,74.609 80.391,74.531C79.063,74.609 77.735,75 76.485,75.547C75.391,76.016 74.141,76.484 73.516,76.25C72.813,75.938 72.345,74.766 71.876,73.516C71.485,72.266 70.782,71.094 69.923,70.078C68.907,69.219 67.735,68.516 66.485,68.125C65.313,67.656 64.063,67.109 63.751,66.484C63.516,65.859 63.985,64.609 64.454,63.516C65.079,62.266 65.391,60.938 65.47,59.609C65.391,58.281 65.001,56.953 64.454,55.703C63.985,54.609 63.516,53.359 63.751,52.734C64.063,52.031 65.235,51.563 66.485,51.094C67.735,50.703 68.907,50 69.923,49.141C70.782,48.125 71.485,46.953 71.876,45.703C72.345,44.531 72.891,43.281 73.516,42.969C73.673,42.891 73.751,42.891 73.907,42.891C74.766,43.047 75.704,43.281 76.485,43.672C77.735,44.297 79.063,44.609 80.391,44.688C81.719,44.609 83.048,44.219 84.298,43.672C85.391,43.203 86.641,42.734 87.266,42.969C87.969,43.281 88.438,44.453 88.907,45.703C89.298,46.953 90.001,48.125 90.86,49.141C91.876,50 93.048,50.703 94.298,51.094C95.469,51.563 96.719,52.109 97.032,52.734C97.266,53.359 96.798,54.609 96.329,55.703C95.704,56.953 95.391,58.281 95.313,59.609C95.391,61.016 95.782,62.344 96.329,63.516L96.329,63.516Z" style="fill:url(#_Linear9);fill-rule:nonzero;"/>
|
||||
<path d="M80.469,48.672C74.453,48.672 69.531,53.594 69.531,59.61C69.531,65.626 74.453,70.548 80.469,70.548C86.485,70.548 91.407,65.626 91.407,59.61C91.407,53.594 86.485,48.672 80.469,48.672ZM80.469,67.422C76.172,67.422 72.656,63.906 72.656,59.609C72.656,55.313 76.172,51.797 80.469,51.797C84.766,51.797 88.281,55.313 88.281,59.609C88.281,63.984 84.766,67.422 80.469,67.422Z" style="fill:url(#_Linear10);fill-rule:nonzero;"/>
|
||||
<path d="M4.609,93.75L60.625,93.75L61.563,90.625L4.61,90.625C3.829,90.625 3.125,90 3.125,89.141L3.125,4.61C3.125,3.75 3.75,3.125 4.61,3.125L68.907,3.125C69.688,3.125 70.391,3.75 70.391,4.61L70.391,37.735C71.329,37.188 72.422,36.797 73.516,36.719L73.516,4.61C73.438,2.032 71.407,0.001 68.829,0.001L4.61,0.001C2.032,0.001 0,2.032 0,4.61L0,89.219C0,91.719 2.032,93.75 4.61,93.75L4.609,93.75Z" style="fill:url(#_Linear11);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<defs>
|
||||
<linearGradient id="_Linear1" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1.20652,98.9054,-98.9054,-1.20652,35.7593,0.61421)"><stop offset="0" style="stop-color:rgb(217,139,255);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(79,56,166);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear2" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1.20652,98.9054,-98.9054,-1.20652,35.7593,0.61421)"><stop offset="0" style="stop-color:rgb(217,139,255);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(79,56,166);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear3" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1.20652,98.9054,-98.9054,-1.20652,35.7593,0.61421)"><stop offset="0" style="stop-color:rgb(217,139,255);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(79,56,166);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear4" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1.20652,98.9054,-98.9054,-1.20652,35.7593,0.61421)"><stop offset="0" style="stop-color:rgb(217,139,255);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(79,56,166);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear5" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1.20652,98.9054,-98.9054,-1.20652,35.7593,0.61421)"><stop offset="0" style="stop-color:rgb(217,139,255);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(79,56,166);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear6" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1.20652,98.9054,-98.9054,-1.20652,35.7593,0.61421)"><stop offset="0" style="stop-color:rgb(217,139,255);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(79,56,166);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear7" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1.20652,98.9054,-98.9054,-1.20652,35.7593,0.61421)"><stop offset="0" style="stop-color:rgb(217,139,255);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(79,56,166);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear8" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1.20652,98.9054,-98.9054,-1.20652,35.7593,0.61421)"><stop offset="0" style="stop-color:rgb(217,139,255);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(79,56,166);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear9" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1.20652,98.9054,-98.9054,-1.20652,35.7593,0.61421)"><stop offset="0" style="stop-color:rgb(217,139,255);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(79,56,166);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear10" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1.20652,98.9054,-98.9054,-1.20652,35.7593,0.61421)"><stop offset="0" style="stop-color:rgb(217,139,255);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(79,56,166);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear11" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1.20652,98.9054,-98.9054,-1.20652,35.7593,0.61421)"><stop offset="0" style="stop-color:rgb(217,139,255);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(79,56,166);stop-opacity:1"/></linearGradient>
|
||||
</defs>
|
||||
</svg>
|
After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 7.1 KiB |
Before Width: | Height: | Size: 151 KiB After Width: | Height: | Size: 151 KiB |
Before Width: | Height: | Size: 657 KiB After Width: | Height: | Size: 657 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 144 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 144 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 6.9 KiB |
1
public/img/pwa_share.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg class="pwa-install-prompt__guide__icon" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><title>Teilen</title><path fill="#007AFF" d="M48.883,22.992L61.146,10.677L61.146,78.282C61.146,80.005 62.285,81.149 64,81.149C65.715,81.149 66.854,80.005 66.854,78.282L66.854,10.677L79.117,22.992C79.693,23.57 80.256,23.853 81.114,23.853C81.971,23.853 82.534,23.57 83.11,22.992C84.25,21.848 84.25,20.125 83.11,18.981L65.997,1.794C65.715,1.511 65.421,1.215 65.139,1.215C64.563,0.932 63.718,0.932 62.861,1.215C62.579,1.498 62.285,1.498 62.003,1.794L44.89,18.981C43.75,20.125 43.75,21.848 44.89,22.992C46.029,24.149 47.744,24.149 48.883,22.992ZM103.936,35.32L81.114,35.32L81.114,41.053L103.936,41.053L103.936,121.27L24.064,121.27L24.064,41.053L46.886,41.053L46.886,35.32L24.064,35.32C20.928,35.32 18.355,37.904 18.355,41.053L18.355,121.27C18.355,124.419 20.928,127.003 24.064,127.003L103.936,127.003C107.072,127.003 109.645,124.419 109.645,121.27L109.645,41.053C109.645,37.891 107.072,35.32 103.936,35.32Z"></path></svg>
|
After Width: | Height: | Size: 1 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |