Commit 39df8348 authored by Dominik Hebeler's avatar Dominik Hebeler
Browse files

Merge branch '1153-flip-some-bits-minor-style-fixes' into 'development'

Resolve "Flip some bits: minor style fixes"

Closes #1153

See merge request !1916
parents 34d9981e a53e95c4
......@@ -82,7 +82,7 @@ class RequestFetcher extends Command
$answersRead = $status[0];
$messagesLeft = $status[1];
$newJobs = $this->checkNewJobs($operationsRunning, $messagesLeft);
if ($newJobs === 0 && $answersRead === 0) {
usleep(10 * 1000);
}
......@@ -188,11 +188,11 @@ class RequestFetcher extends Command
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_USERAGENT => $job["useragent"],
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_CONNECTTIMEOUT => 2,
CURLOPT_CONNECTTIMEOUT => 8,
CURLOPT_MAXCONNECTS => 500,
CURLOPT_LOW_SPEED_LIMIT => 50000,
CURLOPT_LOW_SPEED_TIME => 5,
CURLOPT_TIMEOUT => 7,
CURLOPT_LOW_SPEED_TIME => 10,
CURLOPT_TIMEOUT => 10,
));
if (!empty($job["curlopts"])) {
......@@ -201,7 +201,7 @@ class RequestFetcher extends Command
if (!empty($this->proxyhost) && !empty($this->proxyport)) {
curl_setopt($ch, CURLOPT_PROXY, $this->proxyhost);
if(!empty($this->proxyuser) && !empty($this->proxypassword)){
if (!empty($this->proxyuser) && !empty($this->proxypassword)) {
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $this->proxyuser . ":" . $this->proxypassword);
}
curl_setopt($ch, CURLOPT_PROXYPORT, $this->proxyport);
......@@ -228,6 +228,6 @@ class RequestFetcher extends Command
public function sig_handler($sig)
{
$this->shouldRun = false;
echo("Terminating Process\n");
echo ("Terminating Process\n");
}
}
......@@ -6,6 +6,7 @@ namespace App\Models;
/* Die Klasse Result sammelt alle Informationen über ein einzelnes Suchergebnis.
* Die Results werden von den Suchmaschinenspezifischen Parser-Skripten erstellt.
*/
class Result
{
public $provider; # Die Engine von der das Suchergebnis kommt
......@@ -20,7 +21,7 @@ class Result
public $sourceRank; # Das Ranking für dieses Suchergebnis von der Seite, die es geliefert hat (implizit durch Ergebnisreihenfolge: 20 - Position in Ergebnisliste)
public $partnershop; # Ist das Ergebnis von einem Partnershop? (bool)
public $image; # Ein Vorschaubild für das Suchergebnis (als URL)
public $imageDimensions; # Ein Array in welchem wenn verfügbar Breite/Höhe des Bildes gespeichert sind ["width" => ..., "height" => ...]
public $proxyLink; # Der Link für die Seite über unseren Proxy-Service
public $engineBoost = 1; # Der Boost für den Provider des Suchergebnisses
public $valid = true; # Ob das Ergebnis noch gültig ist (bool)
......@@ -78,6 +79,7 @@ class Result
$this->rank = 0;
$this->partnershop = isset($additionalInformation["partnershop"]) ? $additionalInformation["partnershop"] : false;
$this->image = isset($additionalInformation["image"]) ? $additionalInformation["image"] : "";
$this->imageDimensions = isset($additionalInformation["imagedimensions"]) ? $additionalInformation["imagedimensions"] : [];
$this->price = isset($additionalInformation["price"]) ? $additionalInformation["price"] : 0;
$this->price_text = $this->price_to_text($this->price);
$this->additionalInformation = $additionalInformation;
......@@ -186,7 +188,8 @@ class Result
$tmpEingabe = preg_replace($regex, "", $tmpEingabe);
}
foreach (str_split($tmpEingabe) as $char) {
if (!$char
if (
!$char
|| !$tmpEingabe
|| strlen($tmpEingabe) === 0
|| strlen($char) === 0
......@@ -246,8 +249,10 @@ class Result
public function isValid(\App\MetaGer $metager)
{
# Perönliche Host und Domain Blacklist
if (in_array(strtolower($this->strippedHost), $metager->getUserHostBlacklist())
|| in_array(strtolower($this->strippedDomain), $metager->getUserDomainBlacklist())) {
if (
in_array(strtolower($this->strippedHost), $metager->getUserHostBlacklist())
|| in_array(strtolower($this->strippedDomain), $metager->getUserDomainBlacklist())
) {
return false;
}
......@@ -256,7 +261,6 @@ class Result
if (strpos(strtolower($this->link), $word)) {
return false;
}
}
# Allgemeine URL und Domain Blacklist
......@@ -273,7 +277,7 @@ class Result
}
// Possibly remove description
if($this->isDescriptionBlackListed($metager)){
if ($this->isDescriptionBlackListed($metager)) {
$this->descr = "";
}
......@@ -322,14 +326,14 @@ class Result
public function isBlackListed(\App\MetaGer $metager)
{
if (($this->strippedHost !== "" && (in_array($this->strippedHost, $metager->getDomainBlacklist()) ||
in_array($this->strippedLink, $metager->getUrlBlacklist()))) ||
in_array($this->strippedLink, $metager->getUrlBlacklist()))) ||
($this->strippedHostAnzeige !== "" && (in_array($this->strippedHostAnzeige, $metager->getDomainBlacklist()) ||
in_array($this->strippedLinkAnzeige, $metager->getUrlBlacklist())))) {
in_array($this->strippedLinkAnzeige, $metager->getUrlBlacklist())))
) {
return true;
} else {
return false;
}
}
public function isDescriptionBlackListed(\App\MetaGer $metager)
......@@ -381,9 +385,9 @@ class Result
$proxyUrl = "https://proxy.metager.de/";
if(!empty($parts["host"])){
if (!empty($parts["host"])) {
$proxyUrl .= $parts["host"];
if(!empty($parts["path"])){
if (!empty($parts["path"])) {
$proxyUrl .= "/" . rawurlencode(trim($parts["path"], "/"));
}
}
......@@ -490,7 +494,8 @@ class Result
*
* @return Sanitized version of the text
*/
private function sanitizeText($text){
private function sanitizeText($text)
{
$target = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '!', '?', '.', ',', '"', "'"];
$specialList = [
'serifBold' => ['𝐚', '𝐛', '𝐜', '𝐝', '𝐞', '𝐟', '𝐠', '𝐡', '𝐢', '𝐣', '𝐤', '𝐥', '𝐦', '𝐧', '𝐨', '𝐩', '𝐪', '𝐫', '𝐬', '𝐭', '𝐮', '𝐯', '𝐰', '𝐱', '𝐲', '𝐳', '𝐀', '𝐁', '𝐂', '𝐃', '𝐄', '𝐅', '𝐆', '𝐇', '𝐈', '𝐉', '𝐊', '𝐋', '𝐌', '𝐍', '𝐎', '𝐏', '𝐐', '𝐑', '𝐒', '𝐓', '𝐔', '𝐕', '𝐖', '𝐗', '𝐘', '𝐙', '𝟎', '𝟏', '𝟐', '𝟑', '𝟒', '𝟓', '𝟔', '𝟕', '𝟖', '𝟗', '❗', '❓', '.', ',', '"', "'"],
......
......@@ -34,13 +34,18 @@ class BingBilder extends Searchengine
$link,
$anzeigeLink,
$descr,
$this->engine->{"display-name"}, $this->engine->homepage,
$this->engine->{"display-name"},
$this->engine->homepage,
$this->counter,
['image' => $image]
[
'image' => $image,
'imagedimensions' => [
"width" => $result->width,
"height" => $result->height
]
]
);
}
} catch (\Exception $e) {
Log::error("A problem occurred parsing results from $this->name:");
Log::error($e->getMessage());
......@@ -64,12 +69,50 @@ class BingBilder extends Searchengine
$newEngine->{"get-parameter"}->offset = $nextOffset;
$next = new BingBilder($this->name, $newEngine, $metager);
$this->next = $next;
} catch (\Exception $e) {
Log::error("A problem occurred parsing results from $this->name:");
Log::error($e->getMessage());
return;
}
}
public static function generateThumbnailUrl(\App\Models\Result $result)
{
$url = $result->image;
// all images get cropped to a width of 400 px
// We will calculate the height after cropping
// All Images in a row get 250px
// If the height after cropping is a multiple of that plus the gap between rows
// we will allow the image to span up to three rows
$newWidth = 400;
$newHeight = 250;
$heightMultiplier = 1; // Can be 1..3 in the end
$gapPixels = 8;
$width = $result->imageDimensions["width"];
$height = $result->imageDimensions["height"];
$heightAfterCrop = $height * (400 / $width);
$heightMultiplier = max(1, min(3, floor($heightAfterCrop / 250)));
$newHeight = $newHeight * $heightMultiplier + (($heightMultiplier - 1) * $gapPixels);
$requestDataBing = [
"w" => $newWidth,
"h" => $newHeight,
"c" => 7, // Smart Cropping
];
$requestDataBing = http_build_query($requestDataBing, "", "&", PHP_QUERY_RFC3986);
$url .= "&" . $requestDataBing;
$requestData = [];
$requestData["url"] = $url;
$link = action('Pictureproxy@get', $requestData);
return [
"link" => $link,
"height-multiplier" => $heightMultiplier
];
}
}
......@@ -2,7 +2,7 @@
return [
'head.1' => 'MetaGer Apps',
'disclaimer.1' => 'Aktuell können wir unsere Apps nur für Android Geräte zur Verfügung stellen. Apple macht es uns leider zu schwer. Wir bitten hierfür um Verständnis.',
'disclaimer.1' => 'Aktuell können wir unsere Apps nur für Android Geräte zur Verfügung stellen.',
'head.2' => 'MetaGer App',
'metager.1' => 'Diese App bringt die volle Power unserer Suchmaschine auf ihr Smartphone. Durchsuchen Sie das Internet unter Wahrung ihrer Privatsphäre mit nur einem Fingerwisch.',
'metager.2' => 'Sie können die App für unsere Suche entweder über F-Droid oder den Google Playstore installieren, oder sie datengeschützt manuell von unserem Server auf ihrem Smartphone installieren.',
......
<?php
return [
'headline.1' => 'Ihre Spende für SUMA-EV und MetaGer',
'headline.1' => 'Ihre Spende',
'headline.2' => 'Mit Ihrer Spende unterstützen Sie den Erhalt und die Weiterentwicklung der unabhängigen Suchmaschine metager.de und die Arbeit des gemeinnützigen Trägervereins SUMA-EV. <a href=":aboutlink" rel="noopener" target=_blank>Mehr erfahren</a> und <a href=":beitrittlink" target="_blank" rel="noopener">Mitglied werden.</a>.',
'headline.3' => 'Welchen Betrag möchten Sie spenden?',
......@@ -51,7 +51,7 @@ return [
'lastschrift.10' => 'Ihre Daten werden über eine verschlüsselte Verbindung zu uns übertragen und können von Dritten nicht mitgelesen werden. SUMA-EV verwendet Ihre Daten ausschlie&szlig;lich für die Spendenabrechnung; Ihre Daten werden nicht weitergegeben. Spenden an den SUMA-EV sind steuerlich absetzbar, da der Verein vom Finanzamt Hannover Nord als gemeinnützig anerkannt ist, eingetragen in das Vereinsregister beim Amtsgericht Hannover unter VR200033.',
'lastschrift.private' => 'Privatperson:',
'lastschrift.company' => 'Firma:',
'paypal.1' => 'Mit einem Klick auf Spenden werden Sie zu Paypal weitergeleitet.',
......
<?php
return [
"head.1" => "MetaGer Apps",
"disclaimer.1" => "At this time we only have an Android version of our App. Unfortunately Apple makes life difficult for us. Thank you for your understanding.",
"head.2" => "MetaGer App",
"metager.1" => "This App brings the full Metager power to your smartphone. Search the web with one touch while preserving your privacy.",
"metager.2" => "There are two ways to get our App: install via the Google Playstore or (better for your privacy) get it directly from our server.",
"metager.playstore" => "Google Playstore",
"head.1" => "MetaGer Apps",
"disclaimer.1" => "At this time we only have an Android version of our App.",
"head.2" => "MetaGer App",
"metager.1" => "This App brings the full Metager power to your smartphone. Search the web with one touch while preserving your privacy.",
"metager.2" => "There are two ways to get our App: install via the Google Playstore or (better for your privacy) get it directly from our server.",
"metager.playstore" => "Google Playstore",
'metager.fdroid' => 'F-Droid Store',
"metager.manuell" => "Manual Installation",
"head.3" => "MetaGer Maps App",
"maps.playstore" => "Google Playstore",
"maps.1" => "This App provides a native integration of <a href=\"https://maps.metager.de\" target=\"_blank\">MetaGer Maps</a> (powered by <a href=\"https://www.openstreetmap.de/\" target=\"_blank\">Openstreetmap</a>) on your mobile Android device.",
"maps.2" => "Therefore, the route planner and the navigation service is running very fast on your smartphone. The app is faster compared against the use in a mobile web browser. And there are some more advantages- check it out!",
"maps.3" => "After the first start you will be asked for the following permissions:",
"maps.list.1" => "Access to positioning data => With GPS activated we can provide better search results. With this you get access to the step-by-step navigation. <b> Of course, we don't store any of your data and we don't give any of your data to third persons.</b>",
"maps.list.2" => "Access to images, media and files on the device => This permit is necessary for the automated update of the App. If there is a newer version it can be stored in your download archive and will be installed automatically. Without this permission you have to do a manual installation every time there is an update.",
"head.4" => "Installation",
"installation.1" => "Just click Google Playstore to be directed to the store and then choose \"install\" for the installation.",
"installation.2" => "Please follow these steps for a manual installation:",
"list.1" => "Open the settings menu to allow the installation: Settings => System => Security. Please check \"Unknown Sources\" there.",
"list.2" => "Please use \"Manual Installation\" here to download the file.",
"list.3" => "Now open the file on your device. This will install the App."
"metager.manuell" => "Manual Installation",
"head.3" => "MetaGer Maps App",
"maps.playstore" => "Google Playstore",
"maps.1" => "This App provides a native integration of <a href=\"https://maps.metager.de\" target=\"_blank\">MetaGer Maps</a> (powered by <a href=\"https://www.openstreetmap.de/\" target=\"_blank\">Openstreetmap</a>) on your mobile Android device.",
"maps.2" => "Therefore, the route planner and the navigation service is running very fast on your smartphone. The app is faster compared against the use in a mobile web browser. And there are some more advantages- check it out!",
"maps.3" => "After the first start you will be asked for the following permissions:",
"maps.list.1" => "Access to positioning data => With GPS activated we can provide better search results. With this you get access to the step-by-step navigation. <b> Of course, we don't store any of your data and we don't give any of your data to third persons.</b>",
"maps.list.2" => "Access to images, media and files on the device => This permit is necessary for the automated update of the App. If there is a newer version it can be stored in your download archive and will be installed automatically. Without this permission you have to do a manual installation every time there is an update.",
"head.4" => "Installation",
"installation.1" => "Just click Google Playstore to be directed to the store and then choose \"install\" for the installation.",
"installation.2" => "Please follow these steps for a manual installation:",
"list.1" => "Open the settings menu to allow the installation: Settings => System => Security. Please check \"Unknown Sources\" there.",
"list.2" => "Please use \"Manual Installation\" here to download the file.",
"list.3" => "Now open the file on your device. This will install the App."
];
<?php
return [
"headline.1" => "Your Donation for MetaGer to SUMA-EV",
"headline.1" => "Your Donation",
"headline.2" => 'With your donation: you support maintenance and development of the independent search engine metager.org and its supporting association SUMA-EV. <a href=":aboutlink" rel="noopener" target=_blank>Read more</a> and <a href=":beitrittlink" target="_blank" rel="noopener">become a member.</a>',
'headline.3' => 'How much would you like to donate?',
'headline.4' => 'How frequent do you want to donate?',
'headline.5' => 'Choose a payment method',
......@@ -31,7 +31,7 @@ return [
'bankinfo.2.3' => 'Bank: GLS Gemeinschaftsbank, Bochum',
'bankinfo.2.4' => '(AN: 4075 0332 01, BC: 43060967)',
"bankinfo.3" => "If you wish to receive a donation receipt,\r\nplease specify your full adress and (if available)\r\nyour E-Mail adress on the money transfer form.",
"lastschrift.info" => "If you would like to donate by direct debit, please enter the information about the amount of the donation and your account information in the form below. We will then conveniently debit the specified account within the next 2 weeks.",
"lastschrift.info2" => "Unless otherwise specified by you under Regularity, a charge will only be made once.",
"lastschrift.1" => "Donate by Sepa direct debit",
......@@ -51,7 +51,7 @@ return [
"lastschrift.10" => "Your information is transmitted encrypted and is not read by a third party. SUMA-EV only uses your information for accounting; Your information is not passed on. Donations to the SUMA-EV are tax-deductible, because the association is recognized as charitable by the Finanzamt Hannover Nord (revenue board), listed in the register of associations, Amtsgericht Hannover under VR200033. A certificate for single donations above 300,-EUR is sent automatically (post address is required!). For donations below 300,-EUR an account current is enough for tax-deduction.",
"lastschrift.private" => "*As a Person:",
"lastschrift.company" => "*As a Business:",
'paypal.1' => 'You will be redirected where you can finalize your donation.',
......
<?php
return [
"head.1" => "Aplicaciones MetaGer",
"disclaimer.1" => "Actualmente solo podemos proporcionar nuestras aplicaciones para dispositivos Android. Desafortunadamente, Apple nos lo pone demasiado difícil. Rogamos su comprensión.",
"head.2" => "Aplicación MetaGer",
"metager.1" => "Con esta aplicación, obtiene toda la potencia de nuestro motor de búsqueda en su smartphone.\r\nBusque en Internet con solo deslizar un dedo mientras que mantiene su privacidad.",
"metager.2" => "Puede instalar la aplicación para nuestra búsqueda a través de Google Playstore o instalarla manualmente desde nuestro servidor en su smartphone, protegida de datos.",
"metager.playstore" => "Google Playstore",
"head.1" => "Aplicaciones MetaGer",
"disclaimer.1" => "Actualmente solo podemos proporcionar nuestras aplicaciones para dispositivos Android.",
"head.2" => "Aplicación MetaGer",
"metager.1" => "Con esta aplicación, obtiene toda la potencia de nuestro motor de búsqueda en su smartphone.\r\nBusque en Internet con solo deslizar un dedo mientras que mantiene su privacidad.",
"metager.2" => "Puede instalar la aplicación para nuestra búsqueda a través de Google Playstore o instalarla manualmente desde nuestro servidor en su smartphone, protegida de datos.",
"metager.playstore" => "Google Playstore",
'metager.fdroid' => 'F-Droid Store',
"metager.manuell" => "Instalación manual",
"head.3" => "Aplicación Maps MetaGer",
"maps.playstore" => "Google Playstore",
"maps.1" => "Esta aplicación ofrece una integración nativa de <a href=\"https://maps.metager.de\" target=\"_blank\"> MetaGer Maps</a>(con tecnología de <a href = \"https: //www.openstreetmap.de/\" target =\" _ blank\"> Openstreetmap</a>) en su dispositivo móvil Android.",
"maps.2" => "De este modo el servicio de mapas y navegación también funciona de manera óptima y rápida en su smartphone. La aplicación aumenta el rendimiento en comparación con el uso en el navegador móvil y ofrece algunas otras ventajas. ¡Intentalo!",
"maps.3" => "Después del primer inicio, la aplicación solicita los siguientes permisos:",
"maps.list.1" => "Acceso a datos de posición => Si el GPS está activado en su teléfono móvil, podemos mejorar sus resultados de búsqueda. Además habilita la función de navegación paso a paso.<b>Por supuesto, estos datos no se almacenan en ningún lugar y ciertamente no se transmiten a terceros.</b>",
"maps.list.2" => "Acceso a fotos, medios y archivos en el dispositivo => Esta autorización es necesaria para que esta aplicación pueda actualizarse sola. Si hay una nueva versión de la aplicación disponible, puede guardarla en su directorio de descarga y luego instalarla automáticamente desde allí. Si no desea otorgar este permiso, deberá reinstalar manualmente la aplicación cada vez que haya una actualización disponible.",
"head.4" => "Instalación",
"installation.1" => "Si desea instalar nuestra aplicación directamente desde Google Playstore, no necesita considerar nada más. Simplemente haga clic en el enlace \"Google Playstore\" para ser redirigido al App Store y haga clic en \"Instalar\".",
"installation.2" => "Si desea instalar nuestra aplicación manualmente (sin App Store), proceda de la siguiente manera:",
"list.1" => "Abra el menú de configuración para permitir la instalación: Configuración => Sistema => Seguridad. Marque la casilla junto a \"Fuentes desconocidas\".",
"list.2" => "Seleccione el enlace \"Instalación manual\" en esta página para descargar el archivo de instalación en su dispositivo móvil.",
"list.3" => "Abra el archivo descargado en su dispositivo móvil. Esto iniciará el proceso de instalación."
"metager.manuell" => "Instalación manual",
"head.3" => "Aplicación Maps MetaGer",
"maps.playstore" => "Google Playstore",
"maps.1" => "Esta aplicación ofrece una integración nativa de <a href=\"https://maps.metager.de\" target=\"_blank\"> MetaGer Maps</a>(con tecnología de <a href = \"https: //www.openstreetmap.de/\" target =\" _ blank\"> Openstreetmap</a>) en su dispositivo móvil Android.",
"maps.2" => "De este modo el servicio de mapas y navegación también funciona de manera óptima y rápida en su smartphone. La aplicación aumenta el rendimiento en comparación con el uso en el navegador móvil y ofrece algunas otras ventajas. ¡Intentalo!",
"maps.3" => "Después del primer inicio, la aplicación solicita los siguientes permisos:",
"maps.list.1" => "Acceso a datos de posición => Si el GPS está activado en su teléfono móvil, podemos mejorar sus resultados de búsqueda. Además habilita la función de navegación paso a paso.<b>Por supuesto, estos datos no se almacenan en ningún lugar y ciertamente no se transmiten a terceros.</b>",
"maps.list.2" => "Acceso a fotos, medios y archivos en el dispositivo => Esta autorización es necesaria para que esta aplicación pueda actualizarse sola. Si hay una nueva versión de la aplicación disponible, puede guardarla en su directorio de descarga y luego instalarla automáticamente desde allí. Si no desea otorgar este permiso, deberá reinstalar manualmente la aplicación cada vez que haya una actualización disponible.",
"head.4" => "Instalación",
"installation.1" => "Si desea instalar nuestra aplicación directamente desde Google Playstore, no necesita considerar nada más. Simplemente haga clic en el enlace \"Google Playstore\" para ser redirigido al App Store y haga clic en \"Instalar\".",
"installation.2" => "Si desea instalar nuestra aplicación manualmente (sin App Store), proceda de la siguiente manera:",
"list.1" => "Abra el menú de configuración para permitir la instalación: Configuración => Sistema => Seguridad. Marque la casilla junto a \"Fuentes desconocidas\".",
"list.2" => "Seleccione el enlace \"Instalación manual\" en esta página para descargar el archivo de instalación en su dispositivo móvil.",
"list.3" => "Abra el archivo descargado en su dispositivo móvil. Esto iniciará el proceso de instalación."
];
<?php
return [
"headline.1" => "Su donación para SUME-EV y MetaGer",
"headline.2" => "Con su donación, apoya el mantenimiento y desarrollo del motor de búsqueda independiente metager.de y la labor de la asociación patrocinadora sin fines de lucro SUMA-EV. \r\n<a href=\":aboutlink\" rel=\"noopener\" target=_blank>Obtenga más información</a> y <a href=\":beitrittlink\" target=\"_blank\" rel=\"noopener\"> conviértase en miembro. </a>.",
"headline.3" => "¿Qué cantidad desea donar?",
"headline.4" => "¿Con qué frecuencia desea donar?",
"headline.5" => "¿Cómo le gustaría donar?",
"headline.6" => "Datos de la cuenta bancaria",
"wunschbetrag" => "Cantidad deseada",
"wunschbetrag.placeholder" => "Importe en €",
"frequency" => "Frecuencia",
"frequency.once" => "Única vez",
"frequency.monthly" => "Mensual",
"frequency.quarterly" => "Trimestral",
"frequency.six-monthly" => "Semestral",
"frequency.annual" => "Anual",
"head.lastschrift" => "Domiciliación bancaria",
"ueberweisung" => "Transferencia bancaria",
"paypal" => "Paypal / tarjeta de crédito",
"bankinfo.1" => "Para donar a nuestra asociación patrocinadora SUMA-EV, solo necesita hacer una transferencia a la siguiente cuenta:",
"bankinfo.2" => "SUMA-EV",
"bankinfo.2.1" => "IBAN: DE64 4306 0967 4075 0332 01",
"bankinfo.2.2" => "BIC: GENODEM1GLS",
"bankinfo.2.3" => "Banco: GLS Gemeinschaftsbank, Bochum",
"bankinfo.2.4" => "(NDC: 4075 0332 01, Código: 43060967)",
"lastschrift.1" => "Donaciones mediante domiciliación bancaria electrónica:",
"lastschrift.2" => "Ingrese los detalles de su cuenta aquí. Luego, debitaremos su cuenta según sus indicaciones. Los campos que están marcados con \"*\" son obligatorios.",
"lastschrift.4" => "Su correo electrónico:",
"lastschrift.5" => "Su número de teléfono, para que podamos verificar su donación con una llamada telefónica si es necesario:",
"lastschrift.6" => "Su IBAN:",
"lastschrift.7" => "Su BIC: (Solo es necesario para transacciones desde otros países de la UE):",
"lastschrift.8.message" => "Aquí puede enviarnos un mensaje adicional si lo desea:",
"lastschrift.8.message.placeholder" => "Más información",
"lastschrift.10" => "Sus datos se nos transmiten a través de una conexión cifrada y no pueden ser leídos por terceros. SUMA-EV utiliza sus datos exclusivamente para la liquidación de donaciones; Nunca compartiremos sus datos. Las donaciones al SUMA-EV son deducibles de impuestos, ya que es una asociación sin fines de lucro y está reconocida como tal por la Oficina de Impuestos del Norte de Hanover e inscrita en el registro de asociaciones en el Tribunal de Distrito de Hanover bajo VR200033.",
"paypal.1" => "Con un clic en donar, será redirigido a PayPal.",
"submit" => "Donar",
"member.1" => "¿O prefiere hacerse socio?",
"member.2" => "No cuesta más y tiene muchas ventajas:",
"member.3" => "Uso de MetaGer sin publicidad ",
"member.4" => "Promoción del buscador MetaGer",
"member.5" => "Cuota de socio deducible de impuestos",
"member.6" => "Derechos de cogestión en la asociación",
"member.7" => "Formulario de aplicación",
"drucken" => "Imprimir",
"danke.title" => "¡¡Muchas gracias!! SUMA-EV ha recibido su notificación de donación para MetaGer.",
"danke.nachricht" => "Si ha proporcionado datos de contacto, pronto recibirá un mensaje personal.",
"danke.kontrolle" => "Hemos recibido el siguiente mensaje:",
"telefonnummer" => "Teléfono",
"iban" => "IBAN:",
"bic" => "BIC:",
"betrag" => "Cantidad",
"danke.message" => "Su mensaje",
"error.iban" => "El IBAN ingresado no parece ser correcto. No se envió el mensaje.",
"error.bic" => "El IBAN introducido no pertenece a ningún país del área SEPA. Necesitamos su BIC para una domiciliación bancaria.",
"error.amount" => "El monto de la donación ingresado no es válido. Corrija su entrada y vuelva a intentarlo.",
"error.frequency" => "La frecuencia ingresada para su donación no es válida.",
"headline.1" => "Su donación",
"headline.2" => "Con su donación, apoya el mantenimiento y desarrollo del motor de búsqueda independiente metager.de y la labor de la asociación patrocinadora sin fines de lucro SUMA-EV. \r\n<a href=\":aboutlink\" rel=\"noopener\" target=_blank>Obtenga más información</a> y <a href=\":beitrittlink\" target=\"_blank\" rel=\"noopener\"> conviértase en miembro. </a>.",
"headline.3" => "¿Qué cantidad desea donar?",
"headline.4" => "¿Con qué frecuencia desea donar?",
"headline.5" => "¿Cómo le gustaría donar?",
"headline.6" => "Datos de la cuenta bancaria",
"wunschbetrag" => "Cantidad deseada",
"wunschbetrag.placeholder" => "Importe en €",
"frequency" => "Frecuencia",
"frequency.once" => "Única vez",
"frequency.monthly" => "Mensual",
"frequency.quarterly" => "Trimestral",
"frequency.six-monthly" => "Semestral",
"frequency.annual" => "Anual",
"head.lastschrift" => "Domiciliación bancaria",
"ueberweisung" => "Transferencia bancaria",
"paypal" => "Paypal / tarjeta de crédito",
"bankinfo.1" => "Para donar a nuestra asociación patrocinadora SUMA-EV, solo necesita hacer una transferencia a la siguiente cuenta:",
"bankinfo.2" => "SUMA-EV",
"bankinfo.2.1" => "IBAN: DE64 4306 0967 4075 0332 01",
"bankinfo.2.2" => "BIC: GENODEM1GLS",
"bankinfo.2.3" => "Banco: GLS Gemeinschaftsbank, Bochum",
"bankinfo.2.4" => "(NDC: 4075 0332 01, Código: 43060967)",
"lastschrift.1" => "Donaciones mediante domiciliación bancaria electrónica:",
"lastschrift.2" => "Ingrese los detalles de su cuenta aquí. Luego, debitaremos su cuenta según sus indicaciones. Los campos que están marcados con \"*\" son obligatorios.",
"lastschrift.4" => "Su correo electrónico:",
"lastschrift.5" => "Su número de teléfono, para que podamos verificar su donación con una llamada telefónica si es necesario:",
"lastschrift.6" => "Su IBAN:",
"lastschrift.7" => "Su BIC: (Solo es necesario para transacciones desde otros países de la UE):",
"lastschrift.8.message" => "Aquí puede enviarnos un mensaje adicional si lo desea:",
"lastschrift.8.message.placeholder" => "Más información",
"lastschrift.10" => "Sus datos se nos transmiten a través de una conexión cifrada y no pueden ser leídos por terceros. SUMA-EV utiliza sus datos exclusivamente para la liquidación de donaciones; Nunca compartiremos sus datos. Las donaciones al SUMA-EV son deducibles de impuestos, ya que es una asociación sin fines de lucro y está reconocida como tal por la Oficina de Impuestos del Norte de Hanover e inscrita en el registro de asociaciones en el Tribunal de Distrito de Hanover bajo VR200033.",
"paypal.1" => "Con un clic en donar, será redirigido a PayPal.",
"submit" => "Donar",
"member.1" => "¿O prefiere hacerse socio?",
"member.2" => "No cuesta más y tiene muchas ventajas:",
"member.3" => "Uso de MetaGer sin publicidad ",
"member.4" => "Promoción del buscador MetaGer",
"member.5" => "Cuota de socio deducible de impuestos",
"member.6" => "Derechos de cogestión en la asociación",
"member.7" => "Formulario de aplicación",
"drucken" => "Imprimir",
"danke.title" => "¡¡Muchas gracias!! SUMA-EV ha recibido su notificación de donación para MetaGer.",
"danke.nachricht" => "Si ha proporcionado datos de contacto, pronto recibirá un mensaje personal.",
"danke.kontrolle" => "Hemos recibido el siguiente mensaje:",
"telefonnummer" => "Teléfono",
"iban" => "IBAN:",
"bic" => "BIC:",
"betrag" => "Cantidad",
"danke.message" => "Su mensaje",
"error.iban" => "El IBAN ingresado no parece ser correcto. No se envió el mensaje.",
"error.bic" => "El IBAN introducido no pertenece a ningún país del área SEPA. Necesitamos su BIC para una domiciliación bancaria.",
"error.amount" => "El monto de la donación ingresado no es válido. Corrija su entrada y vuelva a intentarlo.",
"error.frequency" => "La frecuencia ingresada para su donación no es válida.",
];
......@@ -5,7 +5,9 @@
@body-background-color-mobile: @background-color-mobile;
@a-hover-color: red;
html, body, * {
html,
body,
* {
font-family: @metager-font;
}
......@@ -36,7 +38,8 @@ body {
flex-direction: column;
margin: 0;
font-size: 1.0em;
@media(max-width: @screen-mobile){
@media(max-width: @screen-mobile) {
background-color: @body-background-color-mobile
}
}
......@@ -47,9 +50,15 @@ body {
flex-direction: column;
justify-content: center;
align-items: center;
margin-top: 50px;
padding: 0px 8px;
margin-top: 5rem;
padding: 0px;
@media(min-width: @screen-mobile) {
padding: 0px 8px;
}
overflow: hidden;
main {
width: 100%;
max-width: 1000px;
......@@ -64,15 +73,18 @@ body {
/* Scrollbox Style */
@scrollfade-color: white;
.scrollbox {
position: relative;
width: 100%;
max-width: @results-width-max;
.scrollfade-right {
background: -webkit-gradient(linear, right top, left top, from(@scrollfade-color), color-stop(fade(@scrollfade-color, 80%)), to(fade(@scrollfade-color, 0%)));
background: linear-gradient(to left, @scrollfade-color, fade(@scrollfade-color, 80%), fade(@scrollfade-color, 0%));
right: 1px;
}
.search-option-frame {
position: relative;
}
......@@ -81,13 +93,11 @@ body {
/* General font sizing */
@default-font-size: 15px;
.first-last-child-margin-fix() {
&:first-child {
margin-top: 0px;
}
&:last-child {
margin-bottom: 0px;
}
}
h1 {
......@@ -105,7 +115,7 @@ h3 {
.first-last-child-margin-fix;
}
.static-page-header{
.static-page-header {
text-align: center;
}
......@@ -137,9 +147,11 @@ body {
a {
font-size: 1em;
color: @link-color;
&:visited {
color: @link-color;
}
&:hover {
text-decoration: none;
color: @a-hover-color;
......@@ -162,23 +174,28 @@ i.fa {
#startpage-logo {
.logo;
border: 0;
display: flex;
justify-content: center;
margin: 0px 0px 45px 0px;
white-space: nowrap;
text-align: center;
@media(max-width: @screen-mobile){
@media(max-width: @screen-mobile) {
margin-bottom: 25px;
}
&>a {
.logo;
display: block;
width: fit-content;
text-decoration: none;
font-size: 2.7em;
@media(max-width: @screen-mobile) {