diff --git a/.gitlab/development-values.yaml b/.gitlab/development-values.yaml index 79a91f517659cc4da7469e51aab67d05f610f851..87e1498ecdcccc89753317722b69faf48373b2eb 100644 --- a/.gitlab/development-values.yaml +++ b/.gitlab/development-values.yaml @@ -25,7 +25,7 @@ ingress: annotations: cert-manager.io/cluster-issuer: letsencrypt-prod nginx.ingress.kubernetes.io/configuration-snippet: | - more_set_headers "Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; script-src-elem 'self' 'unsafe-inline'; script-src-attr 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; style-src-elem 'self' 'unsafe-inline'; style-src-attr 'self' 'unsafe-inline'; img-src 'self'; font-src 'self'; connect-src 'self'; media-src; object-src; prefetch-src; child-src; frame-src 'self'; worker-src; frame-ancestors 'self' https://scripts.zdv.uni-mainz.de; form-action 'self'; base-uri; manifest-src; plugin-types; report-uri; report-to"; + more_set_headers "Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; script-src-elem 'self' 'unsafe-inline'; script-src-attr 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; style-src-elem 'self' 'unsafe-inline'; style-src-attr 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; media-src; object-src; prefetch-src; child-src; frame-src 'self'; worker-src; frame-ancestors 'self' https://scripts.zdv.uni-mainz.de; form-action 'self'; base-uri; manifest-src; plugin-types; report-uri; report-to"; more_set_headers "X-Frame-Options: sameorigin"; more_set_headers "X-Content-Type-Options: nosniff"; more_set_headers "ReferrerPolicy: origin"; diff --git a/.gitlab/production-values.yaml b/.gitlab/production-values.yaml index 294b2cfc1d2be43870bc69f3f6568a621a843e87..aba1efca1f27d03a0580741da64a7ccd7dc31fb6 100644 --- a/.gitlab/production-values.yaml +++ b/.gitlab/production-values.yaml @@ -25,7 +25,7 @@ ingress: annotations: cert-manager.io/cluster-issuer: letsencrypt-prod nginx.ingress.kubernetes.io/configuration-snippet: | - more_set_headers "Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; script-src-elem 'self' 'unsafe-inline'; script-src-attr 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; style-src-elem 'self' 'unsafe-inline'; style-src-attr 'self' 'unsafe-inline'; img-src 'self'; font-src 'self'; connect-src 'self'; media-src; object-src; prefetch-src; child-src; frame-src 'self'; worker-src; frame-ancestors 'self' https://scripts.zdv.uni-mainz.de; form-action 'self'; base-uri; manifest-src; plugin-types; report-uri; report-to"; + more_set_headers "Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; script-src-elem 'self' 'unsafe-inline'; script-src-attr 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; style-src-elem 'self' 'unsafe-inline'; style-src-attr 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; media-src; object-src; prefetch-src; child-src; frame-src 'self'; worker-src; frame-ancestors 'self' https://scripts.zdv.uni-mainz.de; form-action 'self'; base-uri; manifest-src; plugin-types; report-uri; report-to"; more_set_headers "X-Frame-Options: sameorigin"; more_set_headers "X-Content-Type-Options: nosniff"; more_set_headers "ReferrerPolicy: origin"; diff --git a/.gitlab/review-apps-values.yaml b/.gitlab/review-apps-values.yaml index ac869bc42b7ef0b5e240fed2fad08c93292da833..8c4d37f43474dd7b4c48be7dea6b9df228c51d26 100644 --- a/.gitlab/review-apps-values.yaml +++ b/.gitlab/review-apps-values.yaml @@ -6,7 +6,7 @@ ingress: kubernetes.io/tls-acme: "false" nginx.ingress.kubernetes.io/ssl-redirect: "false" nginx.ingress.kubernetes.io/configuration-snippet: | - more_set_headers "Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; script-src-elem 'self' 'unsafe-inline'; script-src-attr 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; style-src-elem 'self' 'unsafe-inline'; style-src-attr 'self' 'unsafe-inline'; img-src 'self'; font-src 'self'; connect-src 'self'; media-src; object-src; prefetch-src; child-src; frame-src 'self'; worker-src; frame-ancestors 'self' https://scripts.zdv.uni-mainz.de; form-action 'self'; base-uri; manifest-src; plugin-types; report-uri; report-to"; + more_set_headers "Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; script-src-elem 'self' 'unsafe-inline'; script-src-attr 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; style-src-elem 'self' 'unsafe-inline'; style-src-attr 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; media-src; object-src; prefetch-src; child-src; frame-src 'self'; worker-src; frame-ancestors 'self' https://scripts.zdv.uni-mainz.de; form-action 'self'; base-uri; manifest-src; plugin-types; report-uri; report-to"; more_set_headers "X-Frame-Options: sameorigin"; more_set_headers "X-Content-Type-Options: nosniff"; more_set_headers "ReferrerPolicy: origin"; @@ -20,4 +20,4 @@ service: commonName: "" externalPort: 80 internalPort: 80 -deploymentApiVersion: apps/v1 \ No newline at end of file +deploymentApiVersion: apps/v1 diff --git a/app/Http/Controllers/MetaGerSearch.php b/app/Http/Controllers/MetaGerSearch.php index 55589b09cd032fcb5454049a6deb038bf6ff6d43..60fc655f1faa5e6362f7d6f447983598eeaa8664 100644 --- a/app/Http/Controllers/MetaGerSearch.php +++ b/app/Http/Controllers/MetaGerSearch.php @@ -143,7 +143,13 @@ class MetaGerSearch extends Controller $counter = $registry->getOrRegisterCounter('metager', 'query_counter', 'counts total number of search queries', []); $counter->inc(); - return $resultpage; + // Splitting the response return into multiple parts. + // This might speed up page view time for users with slow network + $responseArray = str_split($resultpage->render(), 1024); + foreach ($responseArray as $responsePart) { + echo ($responsePart); + flush(); + } } public function searchTimings(Request $request, MetaGer $metager) diff --git a/app/Http/Middleware/BrowserVerification.php b/app/Http/Middleware/BrowserVerification.php index fa0d3c433adc6af10269b129233f60c5e99e17f1..e4cf55ed133386d3b90819c63e10950ebca968d5 100644 --- a/app/Http/Middleware/BrowserVerification.php +++ b/app/Http/Middleware/BrowserVerification.php @@ -16,6 +16,11 @@ class BrowserVerification */ public function handle($request, Closure $next) { + ini_set('zlib.output_compression', 'Off'); + ini_set('output_buffering', 'Off'); + ini_set('output_handler', ''); + ob_end_clean(); + $bvEnabled = config("metager.metager.browserverification_enabled"); if (empty($bvEnabled) || !$bvEnabled) { return $next($request); @@ -37,11 +42,6 @@ class BrowserVerification header('Content-type: text/html; charset=utf-8'); header('X-Accel-Buffering: no'); - ini_set('zlib.output_compression', 'Off'); - ini_set('output_buffering', 'Off'); - ini_set('output_handler', ''); - - ob_end_clean(); $key = md5($request->ip() . microtime(true)); @@ -51,6 +51,9 @@ class BrowserVerification $answer = boolval(Redis::connection("cache")->blpop($key, 2)); if ($answer === true) { + echo (view('layouts.resultpage.resources')->render()); + flush(); + $request->request->add(["headerPrinted" => true]); return $next($request); } diff --git a/app/MetaGer.php b/app/MetaGer.php index 4f0964b0d9556317cc0da3a374400ca373f6ecfc..0c53bd95bac952991f94c3552e6853db68c49835 100644 --- a/app/MetaGer.php +++ b/app/MetaGer.php @@ -899,7 +899,6 @@ class MetaGer public function parseFormData(Request $request) { - # Sichert, dass der request in UTF-8 formatiert ist if ($request->input('encoding', 'utf8') !== "utf8") { # In früheren Versionen, als es den Encoding Parameter noch nicht gab, wurden die Daten in ISO-8859-1 übertragen @@ -909,6 +908,8 @@ class MetaGer } $request->replace($input); } + $this->headerPrinted = $request->input("headerPrinted", false); + $request->request->remove("headerPrinted"); $this->url = $request->url(); $this->fullUrl = $request->fullUrl(); # Zunächst überprüfen wir die eingegebenen Einstellungen: @@ -1827,6 +1828,11 @@ class MetaGer return $this->framed; } + public function isHeaderPrinted() + { + return $this->headerPrinted; + } + /** * Used by JS result loader to restore MetaGer Object of previous request */ diff --git a/public/img/circle.svg b/public/img/circle.svg deleted file mode 100644 index f358f95db432beacb80d61dca97ffd2407c37e1d..0000000000000000000000000000000000000000 --- a/public/img/circle.svg +++ /dev/null @@ -1,45 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - id="svg10" - xml:space="preserve" - viewBox="0 0 220.37333 532.56525" - version="1.1" - height="100" - width="100" - sodipodi:docname="schloss-circle (Kopie).svg" - inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"><sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="835" - inkscape:window-height="480" - id="namedview9" - showgrid="false" - inkscape:zoom="2.36" - inkscape:cx="50" - inkscape:cy="50" - inkscape:window-x="0" - inkscape:window-y="0" - inkscape:window-maximized="0" - inkscape:current-layer="svg10" /><defs - id="defs14" /><metadata - id="metadata2"><rdf:RDF><cc:Work - rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><circle - style="fill:#dce9ea;fill-opacity:1;stroke:none;stroke-width:206.61856079;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path829" - cx="110.18674" - cy="266.28262" - r="261.09451" /></svg> \ No newline at end of file diff --git a/public/img/heart.svg b/public/img/heart.svg index 976e870c2e454e5fffecca462c9760bb0379a65a..7711385d97a09091379ee510c632a9ea3e94fe03 100644 --- a/public/img/heart.svg +++ b/public/img/heart.svg @@ -8,14 +8,14 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="100" - height="100" + width="87.514915" + height="74.832336" version="1.1" - viewBox="0 0 220.37333 532.56525" + viewBox="0 0 192.85953 398.53102" xml:space="preserve" id="svg10" - sodipodi:docname="heart1.svg" - inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"><defs + sodipodi:docname="heart.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"><defs id="defs14"><linearGradient y2="13.229791" x2="-258.68027" @@ -39,24 +39,31 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="1920" - inkscape:window-height="1043" + inkscape:window-width="1853" + inkscape:window-height="1052" id="namedview12" showgrid="true" - inkscape:zoom="4.1904558" - inkscape:cx="-44.522884" - inkscape:cy="46.562439" - inkscape:window-x="0" + inkscape:zoom="5.9261994" + inkscape:cx="24.973612" + inkscape:cy="51.225424" + inkscape:window-x="1987" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="g8" - inkscape:snap-global="false"><inkscape:grid + inkscape:snap-global="false" + inkscape:pagecheckerboard="true" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0"><inkscape:grid type="xygrid" - id="grid814" /></sodipodi:namedview><metadata + id="grid814" + originx="-7.7961125" + originy="-21.2647" /></sodipodi:namedview><metadata id="metadata2"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><g - transform="matrix(6.4131855,0,0,-6.4131855,-1916.4883,528.78427)" + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><g + transform="matrix(6.4131855,0,0,-6.4131855,-1935.3288,416.0147)" id="g8"><g transform="matrix(2.0600602,0,0,-1.954417,280.47242,579.78551)" id="layer1"><g diff --git a/public/img/leaf.svg b/public/img/leaf.svg index 5a5409f9e9bf06f295a59df6df0b97e1969ee784..57b6beb6517986fe66131863786ffee1e82e866f 100644 --- a/public/img/leaf.svg +++ b/public/img/leaf.svg @@ -7,14 +7,14 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="100" - height="100" + width="55.492058" + height="82.674423" version="1.1" - viewBox="0 0 220.37333 532.56525" + viewBox="0 0 122.2897 440.29525" xml:space="preserve" id="svg10" - sodipodi:docname="leaf-circle (Kopie).svg" - inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"><defs + sodipodi:docname="leaf.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"><defs id="defs14" /><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" @@ -24,24 +24,31 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="1920" - inkscape:window-height="1043" + inkscape:window-width="1853" + inkscape:window-height="1052" id="namedview12" showgrid="true" inkscape:zoom="4.1904558" - inkscape:cx="-54.062277" - inkscape:cy="47.529687" - inkscape:window-x="0" + inkscape:cx="-11.99155" + inkscape:cy="16.161859" + inkscape:window-x="1987" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="g8" - inkscape:snap-global="false"><inkscape:grid + inkscape:snap-global="false" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" + inkscape:pagecheckerboard="true"><inkscape:grid type="xygrid" - id="grid814" /></sodipodi:namedview><metadata + id="grid814" + originx="-20.293288" + originy="-46.134978" /></sodipodi:namedview><metadata id="metadata2"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><g - transform="matrix(6.4131855,0,0,-6.4131855,-1916.4883,528.78427)" + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><g + transform="matrix(6.4131855,0,0,-6.4131855,-1965.5301,482.64928)" id="g8"><g id="g832" transform="matrix(0.28404362,0,0,-0.28404362,279.85327,42.585989)"><path diff --git a/public/img/lock.svg b/public/img/lock.svg index 42d095301c4288d665e023bcac7a7c0affcac05e..454efb5d9c9edafb6f3fd3c3e0e8143e498f3a4c 100644 --- a/public/img/lock.svg +++ b/public/img/lock.svg @@ -9,12 +9,12 @@ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" id="svg10" xml:space="preserve" - viewBox="0 0 220.37333 532.56525" + viewBox="0 0 146.21562 379.52535" version="1.1" - height="100" - width="100" - sodipodi:docname="schloss-circle (Kopie).svg" - inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"><sodipodi:namedview + height="71.263634" + width="66.349052" + sodipodi:docname="lock.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" @@ -23,22 +23,27 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="835" - inkscape:window-height="480" + inkscape:window-width="1853" + inkscape:window-height="1025" id="namedview9" showgrid="false" inkscape:zoom="2.36" - inkscape:cx="50" - inkscape:cy="50" - inkscape:window-x="657" - inkscape:window-y="142" - inkscape:window-maximized="0" - inkscape:current-layer="svg10" /><defs + inkscape:cx="43.037691" + inkscape:cy="35.631816" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg10" + inkscape:pagecheckerboard="true" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" /><defs id="defs14" /><metadata id="metadata2"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><g - transform="matrix(0.73467465,0,0,-0.73467465,-2213.372,542.23873)" + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><g + transform="matrix(0.73467465,0,0,-0.73467465,-2250.4508,465.71878)" id="g6"><path inkscape:connector-curvature="0" d="M 2938.0555,633.9116 V 484.97095 h 44.8207 c 17.6217,0 26.4293,9.32884 26.4293,27.72849 v 50.95035 h 223.6567 c 65.32,0 97.9767,-34.70539 97.9767,-101.93432 V 406.296 h -321.6334 l 0.01,-33.63645 c 0,-18.30913 -8.8917,-27.72332 -26.4293,-27.72332 h -60.6639 v -91.04444 c 0,-91.04444 45.5233,-136.56988 137.5572,-136.56988 h 182.0953 c 106.8749,0 161.3114,55.41883 161.3114,165.26902 V 468.6374 c 0,109.84956 -54.4365,165.26903 -161.3114,165.26903 z m 187.3981,-288.97667 h 48.3449 c 32.5663,0 44.9564,-16.72026 44.9564,-47.91683 v -72.93772 c 0,-24.77063 -12.4225,-37.6154 -36.7049,-37.6154 h -24.942 c -21.0361,0 -31.6544,12.44836 -31.6544,37.16079 v 121.30852" diff --git a/public/img/rainbow.svg b/public/img/rainbow.svg index e26a33040927533b675169ce642bc2a54868a035..8b712130bbd4fc5bc029093c177a03148aad09fa 100644 --- a/public/img/rainbow.svg +++ b/public/img/rainbow.svg @@ -9,11 +9,11 @@ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" id="svg841" version="1.1" - viewBox="0 0 26.458337 26.458333" - height="100" - width="100" - sodipodi:docname="regenbogen.svg" - inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"> + viewBox="0 0 25.675195 12.754608" + height="48.206394" + width="97.040092" + sodipodi:docname="rainbow.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"> <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" @@ -23,22 +23,27 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="1848" - inkscape:window-height="1016" + inkscape:window-width="1853" + inkscape:window-height="1052" id="namedview9" showgrid="false" - inkscape:zoom="9.1218969" - inkscape:cx="67.30092" - inkscape:cy="61.688054" - inkscape:window-x="1992" - inkscape:window-y="27" + inkscape:zoom="4.5609485" + inkscape:cx="13.629792" + inkscape:cy="35.445092" + inkscape:window-x="1987" + inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="layer1" units="px" inkscape:snap-bbox="true" inkscape:bbox-paths="true" inkscape:bbox-nodes="true" - inkscape:snap-page="true" /> + inkscape:snap-page="true" + inkscape:pagecheckerboard="true" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" /> <defs id="defs835" /> <metadata @@ -54,7 +59,7 @@ </rdf:RDF> </metadata> <g - transform="translate(-32.311191,-90.813991)" + transform="translate(-32.702761,-97.665854)" id="layer1"> <g id="g833" diff --git a/public/img/story-plugin.svg b/public/img/story-plugin.svg index 7fab3f4c937d8d4dd4ff8d15b048fae7f6a165fe..74a9ef9b43f115091f3cc3dcd4f8ff7509c7a7de 100644 --- a/public/img/story-plugin.svg +++ b/public/img/story-plugin.svg @@ -10,13 +10,13 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="100" - height="100" - viewBox="0 0 26.458333 26.458334" + width="90.115059" + height="90.112923" + viewBox="0 0 23.842942 23.842378" version="1.1" id="svg8" sodipodi:docname="story-plugin.svg" - inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" + inkscape:version="0.92.3 (2405546, 2018-03-11)" inkscape:export-filename="/home/kim/plug-in.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> @@ -84,26 +84,32 @@ inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="5.6" - inkscape:cx="48.848772" - inkscape:cy="45.250218" + inkscape:cx="9.5354997" + inkscape:cy="35.92842" inkscape:document-units="mm" inkscape:current-layer="layer1" showgrid="true" units="px" inkscape:snap-global="true" - inkscape:window-width="1920" - inkscape:window-height="1043" - inkscape:window-x="0" + inkscape:window-width="1853" + inkscape:window-height="1052" + inkscape:window-x="1987" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:snap-bbox="true" inkscape:bbox-paths="false" inkscape:bbox-nodes="true" inkscape:snap-bbox-edge-midpoints="false" - inkscape:snap-nodes="false"> + inkscape:snap-nodes="false" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0"> <inkscape:grid type="xygrid" - id="grid843" /> + id="grid843" + originx="-1.2924751" + originy="-1.2930437" /> </sodipodi:namedview> <metadata id="metadata5"> @@ -121,7 +127,7 @@ inkscape:label="Ebene 1" inkscape:groupmode="layer" id="layer1" - transform="translate(0,-270.54165)"> + transform="translate(-1.2924751,-271.86456)"> <g transform="matrix(0.39999991,0,0,0.39999991,14.552083,163.64793)" id="g850" @@ -247,12 +253,11 @@ <path inkscape:connector-curvature="0" d="M 2938.0555,633.9116 V 484.97095 h 44.8207 c 17.6217,0 26.4293,9.32884 26.4293,27.72849 v 50.95035 h 223.6567 c 65.32,0 97.9767,-34.70539 97.9767,-101.93432 V 406.296 h -321.6334 l 0.01,-33.63645 c 0,-18.30913 -8.8917,-27.72332 -26.4293,-27.72332 h -60.6639 v -91.04444 c 0,-91.04444 45.5233,-136.56988 137.5572,-136.56988 h 182.0953 c 106.8749,0 161.3114,55.41883 161.3114,165.26902 V 468.6374 c 0,109.84956 -54.4365,165.26903 -161.3114,165.26903 z m 187.3981,-288.97667 h 48.3449 c 32.5663,0 44.9564,-16.72026 44.9564,-47.91683 v -72.93772 c 0,-24.77063 -12.4225,-37.6154 -36.7049,-37.6154 h -24.942 c -21.0361,0 -31.6544,12.44836 -31.6544,37.16079 v 121.30852" - fill="#00000" id="path4" - style="stroke-width:0.64666831;fill:#ffffff;fill-opacity:1" /> + style="fill:#ffffff;fill-opacity:1;stroke-width:0.64666831" /> </g> <rect - style="fill:none;fill-opacity:1;stroke:#dce9ea;stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:2.39999999,2.39999999;stroke-opacity:1;paint-order:normal;stroke-dashoffset:7.19199997" + style="fill:none;fill-opacity:1;stroke:#dce9ea;stroke-width:0.80000001;stroke-miterlimit:4;stroke-dasharray:2.39999999, 2.39999999;stroke-dashoffset:7.19199991;stroke-opacity:1;paint-order:normal" id="rect28-62-3" width="10.583333" height="10.583323" diff --git a/resources/lang/de/mg-story.php b/resources/lang/de/mg-story.php index 785ee9856cd3c58989b12cf20331fc35c8767f75..9a9f5ad13b75e61b63cbd2680393f1c363b9d0d5 100644 --- a/resources/lang/de/mg-story.php +++ b/resources/lang/de/mg-story.php @@ -20,10 +20,10 @@ return [ 'ngo.p' => 'Metager wird getragen vom gemeinnützigen SUMA-EV, Verein für freien Wissenszugang. Unterstützen Sie uns, indem Sie spenden oder Mitglied werden. Mitglieder suchen auf Metager werbefrei.', 'btn-mg-code' => 'Metager-Quellcode', 'btn-mg-algorithm' => 'Unser Algorithmus', - 'diversity.p' => 'Metager schützt gegen Zensur, indem es Ergebnisse vieler Suchmaschinen kombiert. Unsere Algorithmen sind transparent und für jeden einsehbar.<br>Der Quellcode ist frei und Open Source.', + 'diversity.p' => 'Metager schützt gegen Zensur, indem es Ergebnisse vieler Suchmaschinen kombiniert. Unsere Algorithmen sind transparent und für jeden einsehbar.<br>Der Quellcode ist frei und Open Source.', 'btn-more' => 'Mehr dazu', - 'eco.p' => 'Wir achten auf die Nachhaltigkeit und den Resourcenverbrauch unserer Dienste. Wir verwenden nur Strom aus regenerativen Energiequellen.<br>Vom Server bis zur Kaffeemaschine.', + 'eco.p' => 'Wir achten auf die Nachhaltigkeit und den Ressourcenverbrauch unserer Dienste. Wir verwenden nur Strom aus regenerativen Energiequellen.<br>Vom Server bis zur Kaffeemaschine.', 'plugin.title' => 'Jetzt MetaGer installieren', 'plugin.btn-add' => 'MetaGer-Plugin hinzufügen', 'plugin.btn-app' => 'MetaGer-App', diff --git a/resources/lang/en/mg-story.php b/resources/lang/en/mg-story.php index 01c27e179b51ad766b0bf18fcc4f06eaca9b6038..e9c97c82c683c7e9021bf767cac279f7be9dacc6 100644 --- a/resources/lang/en/mg-story.php +++ b/resources/lang/en/mg-story.php @@ -12,7 +12,7 @@ return [ 'eco.image.alt' => 'green leaf', 'btn-about-us' => 'About Us', 'btn-data-protection' => 'Privacy Policy', - 'privacy.p' => 'With us you have full control over your data. We don\'t track. We don\'t save. Stay protected with our anonymous proxy.', + 'privacy.p' => 'By using MetaGer you retain full control over your data. Our anonymizing proxy, keeps you protected even when you continue surfing. We don\'t track.', 'btn-SUMA-EV' => 'SUMA-EV', 'btn-donate' => 'Donation Form', 'btn-member' => 'Member Form', diff --git a/resources/lang/es/mg-story.php b/resources/lang/es/mg-story.php new file mode 100644 index 0000000000000000000000000000000000000000..fcf6f99c0654d2908cab204a9c8166802fbbbc7d --- /dev/null +++ b/resources/lang/es/mg-story.php @@ -0,0 +1,34 @@ +<?php + +return [ + 'four-reasons' => 'Cuatro razones para usar MetaGer', + 'privacy.image.alt' => 'cerradura de seguridad', + 'privacy.title' => 'Privacidad garantizada', + 'ngo.title' => 'Organización sin ánimo de lucro', + 'ngo.image.alt' => 'corazón', + 'diversity.title' => 'Diversos y libres', + 'diversity.image.alt' => 'Arco iris', + 'eco.title' => '100% electricidad verde', + 'eco.image.alt' => 'hoja verde', + 'btn-about-us' => 'sobre nosotros', + 'btn-data-protection' => 'Protección de Datos', + 'privacy.p' => 'Con nosotros, usted conserva el control total sobre sus datos. Con la función de apertura anónima, permanece protegido incluso cuando continúa navegando. <br> No rastreamos.', + 'btn-SUMA-EV' => 'El SUMA-EV', + 'btn-donate' => 'Formulario de donación', + 'btn-member' => 'Solicitud de membresÃa', + 'btn-member-advantage' => 'membresÃa', + 'ngo.p' => 'Metager cuenta con el apoyo de la asociación sin fines de lucro SUMA-EV, asociación de libre acceso al conocimiento. Apóyenos donando o convirtiéndose en miembro. Los miembros buscan sin publicidad en Metager.', + 'btn-mg-code' => 'Código fuente de Metager', + 'btn-mg-algorithm' => 'Nuestro algoritmo', + 'diversity.p' => 'Metager protege contra la censura combinando resultados de muchos motores de búsqueda. Nuestros algoritmos son transparentes y todos pueden verlos. <br> El código fuente es gratuito y de código abierto.', + + 'btn-more' => 'Más sobre esto', + 'eco.p' => 'Prestamos atención a la sostenibilidad y el consumo de recursos de nuestros servicios. Solo utilizamos electricidad de fuentes renovables. <br> Del servidor a la cafetera.', + 'plugin.title' => 'Instale MetaGer ahora', + 'plugin.btn-add' => 'Agregar el complemento MetaGer', + 'plugin.btn-app' => 'Aplicación MetaGer', + 'plugin.image.alt' => 'Aplicaciones de Metager', + 'plugin.p' => 'Con nuestro complemento puede configurar MetaGer como el motor de búsqueda predeterminado. Y con la aplicación puede usar MetaGer cómodamente en su teléfono inteligente.', + 'btn-about-us' => 'sobre nosotros', + +]; diff --git a/resources/less/metager/startpage-only.less b/resources/less/metager/startpage-only.less index 7765eb9c8ef246a114f761685ff6808522eebde6..5c3b247d2941105155e380384757f5095d3ad5d9 100644 --- a/resources/less/metager/startpage-only.less +++ b/resources/less/metager/startpage-only.less @@ -1,3 +1,5 @@ +@clippathHeight: 30px; + :root { // the default is for screensizes bigger than 12000px --screen-mobile: 550px; --screen-extrasmall: 760px; @@ -39,7 +41,7 @@ display: grid; border-width: 1px; padding: 10px; - border-radius: 15px; + border-radius: 8px; max-width: 300px; justify-items: center; grid-template-columns: 25% 25% 25% 25% ; @@ -75,16 +77,22 @@ grid-row-start: 3; } -#scroll-link img, #scroll-link picture { //creates the circle around the story-icons - max-width: 40px; - max-height: 40px; - grid-row-start: 3; - background-image: url("/img/circle.svg"); - background-position: center; - background-size: cover; - padding: 7px; - margin: -7px; +#scroll-link > a:not(.four-reasons) { + display: flex; + justify-content: center; + align-items: center; + width: 48px; + height: 48px; + padding: 4px; + border-radius: 50%; + background-color: rgb(220, 233, 234); + &>img { + object-fit: contain; + max-width: 60%; + max-height: 60%; + } } + a.four-reasons { // sets the '4 reasons to use MetaGer' link grid-area: scr-link; color: black; @@ -115,11 +123,16 @@ footer { position: relative; align-items:center; min-height: 70vh; + padding-bottom: @clippathHeight; + padding-top: @clippathHeight; + margin-top: -@clippathHeight; } #story-container > section > h1 { //sets the heading for all sections grid-area: heading; font-size: 80px; + margin: 0; + padding: 0 16px; } #story-container > section > p { // sets all paragraphs for all sections @@ -131,19 +144,23 @@ footer { } #story-container > section .story-icon { // sets all icons for all sections grid-area: story-icon; - padding: 20px; - text-align: right; + padding: 16px; + text-align: center; } .story-icon img { // defines the story-icons in the sections height: 150px; max-height: 300px; max-width: 300px; - width:100%; + width:150px; object-fit: contain; } +footer { + background-color: transparent; +} + // following lines set the background and heading color of each section #story-privacy { background-color: #EEEEEE; @@ -152,6 +169,7 @@ footer { #story-ngo { grid-area: "icn-ngo"; background-color: #ffffff; + clip-path: polygon(0 0, 40% 0, 50% @clippathHeight, 60% 0, 100% 0, 100% 100%, 0 100%); } #story-ngo > h1 { @@ -161,6 +179,7 @@ footer { #story-diversity { grid-area: "icn-diversity"; background-color: #edfdff; + clip-path: polygon(0 0, 40% 0, 50% @clippathHeight, 60% 0, 100% 0, 100% 100%, 0 100%); } #story-diversity > h1 { @@ -170,6 +189,7 @@ footer { #story-eco { grid-area: "icn-eco"; background-color: rgb(227, 255, 233); + clip-path: polygon(0 0, 40% 0, 50% @clippathHeight, 60% 0, 100% 0, 100% 100%, 0 100%); } #story-eco > h1 { @@ -180,6 +200,8 @@ footer { } #story-container #story-plugin { min-height: 60vh; + background-color: white; + clip-path: polygon(0 0, 40% 0, 50% @clippathHeight, 60% 0, 100% 0, 100% 100%, 0 100%); } .story-links { @@ -189,7 +211,13 @@ footer { padding: 0px; list-style: none; gap: 2em; - + &>li { + min-width: 150px; + &>a { + display: block; + text-align: center; + } + } } a.story-button { // sets the story-button for all sections padding: 12px; @@ -226,11 +254,11 @@ html{ } div#story-container p{ font-size: 25px; - padding-left: 15px; + padding-left: 16px; padding-right: 10vw; } #story-container > section { - grid-template-columns: 150px auto; + grid-template-columns: 132px auto; grid-template-areas: ". ." "story-icon heading" @@ -241,17 +269,17 @@ html{ } .story-icon img { - height: 150px; - width: 150px; + height: 100px; + width: 100px; } #story-container > section .story-icon { - padding: 0px; + text-align: left; } .story-links { grid-area: story-links; display: flex; - padding: 15px; + padding: 16px; list-style: none; gap: 1em; font-size: 10px; @@ -262,6 +290,21 @@ html{ #story-container #story-plugin { min-height: 50vh; } + + #story-ngo { + clip-path: polygon(0 0, 30% 0, 50% @clippathHeight, 70% 0, 100% 0, 100% 100%, 0 100%); + } + + #story-diversity { + clip-path: polygon(0 0, 30% 0, 50% @clippathHeight, 70% 0, 100% 0, 100% 100%, 0 100%); + } + + #story-eco { + clip-path: polygon(0 0, 30% 0, 50% @clippathHeight, 70% 0, 100% 0, 100% 100%, 0 100%); + } + #story-container #story-plugin { + clip-path: polygon(0 0, 30% 0, 50% @clippathHeight, 70% 0, 100% 0, 100% 100%, 0 100%); + } } @media screen and (min-width: 1000px) and (max-width:1200px) { // changes the layout for screen sizes between 1000px and 12000px @@ -270,13 +313,13 @@ html{ } div#story-container p{ font-size: 25px; - padding-left: 15px; + padding-left: 8px; padding-right: 10vw; } .story-links { grid-area: story-links; display: flex; - padding: 15px; + padding: 8px; list-style: none; gap: 1em; } @@ -298,11 +341,11 @@ html{ } div#story-container p{ font-size: 20px; - padding-left: 15px; + padding-left: 8px; padding-right: 10vw; } #story-container > section { - grid-template-columns: 80px auto; + grid-template-columns: 66px auto; grid-template-areas: ". ." "story-icon heading" @@ -312,19 +355,20 @@ html{ min-height: 80vh; } - .story-icon img { - height: 80px; - width: 80px; + #story-container > section .story-icon { + padding: 8px; } - #story-container > section .story-icon { - padding: 0px; + .story-icon img { + height: 50px; + width: 50px; } + .story-links { grid-area: story-links; display: flex; align-items: stretch; - padding: 15px; + padding: 8px; list-style: none; gap: 20px; font-size: 5px; @@ -350,11 +394,11 @@ html{ } div#story-container p{ font-size: 30px; - padding-left: 15px; + padding-left: 16px; padding-right: 10vw; } #story-container > section { - grid-template-columns: 80px auto; + grid-template-columns: 112px auto; grid-template-areas: ". ." "story-icon heading" @@ -369,14 +413,11 @@ html{ width: 80px; } - #story-container > section .story-icon { - padding: 0px; - } .story-links { grid-area: story-links; display: flex; align-items: stretch; - padding: 15px; + padding: 16px; list-style: none; gap: 20px; font-size: 5px; @@ -389,6 +430,7 @@ html{ #story-container #story-plugin > h1 { font-size:35px; } + #story-container #story-plugin { min-height: 80vh; } diff --git a/resources/views/index.blade.php b/resources/views/index.blade.php index 0960b7c119c86ec8a5e783fc74746a36ebbda1b6..f80e77a03d4f6964ffcea3d7eb4ce27cf6cbe3ec 100644 --- a/resources/views/index.blade.php +++ b/resources/views/index.blade.php @@ -26,7 +26,7 @@ <div id="story-container"> <section id="story-privacy"> <h1>{{ trans('mg-story.privacy.title') }}</h1> - <ul class="story-links"> + <ul class="story-links"> <li><a class="story-button" href="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), "about") }}">{{ trans('mg-story.btn-about-us') }}</a></li> <li><a class="story-button" href="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), "datenschutz") }}">{{ trans('mg-story.btn-data-protection') }}</a></li> </ul> @@ -52,7 +52,7 @@ <h1>{{ trans('mg-story.diversity.title') }}</h1> <ul class="story-links"> <li><a class="story-button" href="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), "about") }}">{{ trans('mg-story.btn-about-us') }}</a></li> - <li><a class="story-button" href="https://gitlab.metager.de/open-source/MetaGer" target="_blank">{{ trans('mg-story.btn-mg-code') }}</a></li> + <li><a class="story-button" href="https://gitlab.metager.de/open-source/MetaGer" target="_blank"><nobr>{{ trans('mg-story.btn-mg-code') }}</nobr></a></li> <!--<li><a class="story-button" href="https://metager.de/about">{{ trans('mg-story.btn-mg-algorithm') }}</a></li>--> </ul> <figure class="story-icon"> @@ -60,7 +60,7 @@ </figure> <p>{!! trans('mg-story.diversity.p') !!}</p> </section> - + <section id="story-eco"> <h1>{{ trans('mg-story.eco.title') }}</h1> <ul class="story-links"> @@ -80,11 +80,11 @@ <figure class="story-icon"> <picture> <source media="(max-width: 760px)" srcset="/img/App.svg"> - <img src="/img/story-plugin.svg" alt="{{ trans('mg-story.plugin.image.alt') }}"> + <img src="/img/story-plugin.svg" alt="{{ trans('mg-story.plugin.image.alt') }}"> </picture> </figure> <p>{{ trans('mg-story.plugin.p') }}</p> </section> - </div> + </div> @endsection diff --git a/resources/views/layouts/resultPage.blade.php b/resources/views/layouts/resultPage.blade.php index 4180f17b55ea6c73469fb78b584f439c3b096935..55c5df2edefb5a7735d7a9a135a04797b5a1d94a 100644 --- a/resources/views/layouts/resultPage.blade.php +++ b/resources/views/layouts/resultPage.blade.php @@ -1,10 +1,8 @@ -@if(empty(config("metager.metager.browserverification_enabled")) || !config("metager.metager.browserverification_enabled")) +@if(!$metager->isHeaderPrinted()) <!DOCTYPE html> <html lang="{!! trans('staticPages.meta.language') !!}"> <head> <meta charset="utf-8"> -@endif - <title>{{ $eingabe }} - MetaGer</title> <link href="/favicon.ico" rel="icon" type="image/x-icon" /> <link href="/favicon.ico" rel="shortcut icon" type="image/x-icon" /> <link rel="apple-touch-icon" href="/img/apple/touch-icon.png"> @@ -16,6 +14,14 @@ <link rel="apple-touch-icon" sizes="144x144" href="/img/apple/touch-icon-144.png"> <link rel="apple-touch-icon" sizes="152x152" href="/img/apple/touch-icon-152.png"> <link rel="apple-touch-icon" sizes="180x180" href="/img/apple/touch-icon-180.png"> + <link rel="search" type="application/opensearchdescription+xml" title="{!! trans('resultPage.opensearch') !!}" href="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), action('StartpageController@loadPlugin')) }}"> + <link href="/fonts/liberationsans/stylesheet.css" rel="stylesheet"> + <link type="text/css" rel="stylesheet" href="{{ mix('css/fontawesome.css') }}" /> + <link type="text/css" rel="stylesheet" href="{{ mix('css/fontawesome-solid.css') }}" /> + <link type="text/css" rel="stylesheet alternate" href="{{ mix('css/themes/metager-dark.css') }}" title="MetaGer Dark"/> + <link type="text/css" rel="stylesheet" href="{{ mix('css/themes/metager.css') }}" title="MetaGer"/> +@endif + <title>{{ $eingabe }} - MetaGer</title> <meta content="width=device-width, initial-scale=1.0, user-scalable=no" name="viewport" /> <meta name="p" content="{{ getmypid() }}" /> <meta name="q" content="{{ $eingabe }}" /> @@ -23,12 +29,6 @@ <meta name="mm" content="{{ $metager->getVerificationId() }}" /> <meta name="mn" content="{{ $metager->getVerificationCount() }}" /> <meta name="searchkey" content="{{ $metager->getSearchUid() }}" /> - <link rel="search" type="application/opensearchdescription+xml" title="{!! trans('resultPage.opensearch') !!}" href="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), action('StartpageController@loadPlugin')) }}"> - <link href="/fonts/liberationsans/stylesheet.css" rel="stylesheet"> - <link type="text/css" rel="stylesheet" href="{{ mix('css/fontawesome.css') }}" /> - <link type="text/css" rel="stylesheet" href="{{ mix('css/fontawesome-solid.css') }}" /> - <link type="text/css" rel="stylesheet alternate" href="{{ mix('css/themes/metager-dark.css') }}" title="MetaGer Dark"/> - <link type="text/css" rel="stylesheet" href="{{ mix('css/themes/metager.css') }}" title="MetaGer"/> <meta name="referrer" content="origin"> <meta name="age-meta-label" content="age=18"/> @include('parts.utility') diff --git a/resources/views/layouts/resultpage/resources.blade.php b/resources/views/layouts/resultpage/resources.blade.php new file mode 100644 index 0000000000000000000000000000000000000000..827b5b286292e9308fc4b4bbb9e74d39fe810fd2 --- /dev/null +++ b/resources/views/layouts/resultpage/resources.blade.php @@ -0,0 +1,17 @@ + <link href="/favicon.ico" rel="icon" type="image/x-icon" /> + <link href="/favicon.ico" rel="shortcut icon" type="image/x-icon" /> + <link rel="apple-touch-icon" href="/img/apple/touch-icon.png"> + <link rel="apple-touch-icon" sizes="57x57" href="/img/apple/touch-icon-57.png"> + <link rel="apple-touch-icon" sizes="72x72" href="/img/apple/touch-icon-72.png"> + <link rel="apple-touch-icon" sizes="76x76" href="/img/apple/touch-icon-76.png"> + <link rel="apple-touch-icon" sizes="114x114" href="/img/apple/touch-icon-114.png"> + <link rel="apple-touch-icon" sizes="120x120" href="/img/apple/touch-icon-120.png"> + <link rel="apple-touch-icon" sizes="144x144" href="/img/apple/touch-icon-144.png"> + <link rel="apple-touch-icon" sizes="152x152" href="/img/apple/touch-icon-152.png"> + <link rel="apple-touch-icon" sizes="180x180" href="/img/apple/touch-icon-180.png"> + <link rel="search" type="application/opensearchdescription+xml" title="{!! trans('resultPage.opensearch') !!}" href="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), action('StartpageController@loadPlugin')) }}"> + <link href="/fonts/liberationsans/stylesheet.css" rel="stylesheet"> + <link type="text/css" rel="stylesheet" href="{{ mix('css/fontawesome.css') }}" /> + <link type="text/css" rel="stylesheet" href="{{ mix('css/fontawesome-solid.css') }}" /> + <link type="text/css" rel="stylesheet alternate" href="{{ mix('css/themes/metager-dark.css') }}" title="MetaGer Dark"/> + <link type="text/css" rel="stylesheet" href="{{ mix('css/themes/metager.css') }}" title="MetaGer"/> diff --git a/tests/Browser/Pages/HomePage.php b/tests/Browser/Pages/HomePage.php index d08f8ec0c0fbf5f7bda2218a8ed9a1eb8c24eb7b..6a5619bc2fca7c50d2857aaa121b6bd710b53a31 100644 --- a/tests/Browser/Pages/HomePage.php +++ b/tests/Browser/Pages/HomePage.php @@ -28,21 +28,24 @@ class HomePage extends Page $browser->assertPathIs($this->url()) ->waitForText("Garantierte Privatsphäre", 1) ->assertTitle('MetaGer - Mehr als eine Suchmaschine') + ->assertSee("Gemeinnütziger Verein") ->assertSee("Vielfältig & Frei") ->assertSee("100% Ökostrom") - ->assertSee("Gemeinnütziger Verein") + ->assertSee("Jetzt MetaGer installieren") ->switchLanguage("English") ->waitForText("Guaranteed Privacy", 1) ->assertTitle('MetaGer: Privacy Protected Search & Find') + ->assertSee("Run by a Nonprofit Organization") ->assertSee("Diverse & Free") - ->assertSee("100 % renewable energy") - ->assertSee("Nonprofit organization") + ->assertSee("100% Renewable Energy") + ->assertSee("Install MetaGer Now") ->switchLanguage("Español") ->waitForText("Privacidad garantizada", 1) ->assertTitle('MetaGer: Buscar & encontrar seguro, proteger la privacidad') - ->assertSee("Diversa y libre") - ->assertSee("EnergÃa 100% renovable") ->assertSee("Organización sin ánimo de lucro") + ->assertSee("Diversos y libres") + ->assertSee("100% electricidad verde") + ->assertSee("Instale MetaGer ahora") ->switchLanguage("Deutsch"); }