diff --git a/app/Http/Controllers/MetaGerSearch.php b/app/Http/Controllers/MetaGerSearch.php index 22289cad828c7a27ab621c1c9282239cdd9944cf..025be641dc3dff49d37d850274e470679da031fd 100644 --- a/app/Http/Controllers/MetaGerSearch.php +++ b/app/Http/Controllers/MetaGerSearch.php @@ -76,10 +76,21 @@ class MetaGerSearch extends Controller return response($responseContent); } + $quicktips = $metager->createQuicktips(); + if (!empty($timings)) { + $timings["createQuicktips"] = microtime(true) - $time; + } + # Suche für alle zu verwendenden Suchmaschinen als Job erstellen, # auf Ergebnisse warten und die Ergebnisse laden $metager->createSearchEngines($request, $timings); + # Versuchen die Ergebnisse der Quicktips zu laden + $quicktipResults = $quicktips->loadResults(); + if (!empty($timings)) { + $timings["loadResults"] = microtime(true) - $time; + } + $metager->startSearch($timings); $metager->waitForMainResults(); @@ -128,7 +139,7 @@ class MetaGerSearch extends Controller } # Die Ausgabe erstellen: - $resultpage = $metager->createView(); + $resultpage = $metager->createView($quicktipResults); if ($spamEntry !== null) { try { Cache::put('spam.' . $metager->getFokus() . "." . md5($spamEntry), $resultpage->render(), 604800); diff --git a/app/MetaGer.php b/app/MetaGer.php index 0a3be40d6add9ba73c0a2c905d69706d27f83df3..5834d96dfaa63a70e56ccb76c8f80b00a1fee560 100644 --- a/app/MetaGer.php +++ b/app/MetaGer.php @@ -135,7 +135,7 @@ class MetaGer } # Erstellt aus den gesammelten Ergebnissen den View - public function createView() + public function createView($quicktipResults = []) { # Hiermit werden die evtl. ausgewählten SuMas extrahiert, damit die Input-Boxen richtig gesetzt werden können $focusPages = []; @@ -175,7 +175,7 @@ class MetaGer ->with('apiAuthorized', $this->apiAuthorized) ->with('metager', $this) ->with('browser', (new Agent())->browser()) - ->with('quicktips', action('MetaGerSearch@quicktips', ["search" => $this->eingabe])) + ->with('quicktips', $quicktipResults) ->with('focus', $this->fokus) ->with('resultcount', count($this->results)); } @@ -248,7 +248,7 @@ class MetaGer ->with('apiAuthorized', $this->apiAuthorized) ->with('metager', $this) ->with('browser', (new Agent())->browser()) - ->with('quicktips', action('MetaGerSearch@quicktips', ["search" => $this->eingabe, "quotes" => $this->sprueche])) + ->with('quicktips', $quicktipResults) ->with('resultcount', count($this->results)) ->with('focus', $this->fokus); break; @@ -1213,6 +1213,15 @@ class MetaGer } } + public function createQuicktips() + { + # Die quicktips werden als job erstellt und zur Abarbeitung freigegeben + $quicktips = new \App\Models\Quicktips\Quicktips($this->q, LaravelLocalization::getCurrentLocale(), $this->getTime()); + return $quicktips; + } + + + private function anonymizeIp($ip) { if (str_contains($ip, ":")) { diff --git a/app/Models/Quicktips/Quicktips.php b/app/Models/Quicktips/Quicktips.php index 1210568fe193be1f0f8295598e6249d8627d0fba..976e3d4cc18b3c73207d7139ab9056729d59aa51 100644 --- a/app/Models/Quicktips/Quicktips.php +++ b/app/Models/Quicktips/Quicktips.php @@ -3,53 +3,55 @@ namespace App\Models\Quicktips; use Cache; -use LaravelLocalization; +use Illuminate\Foundation\Bus\DispatchesJobs; +use Illuminate\Support\Facades\Redis; use Log; class Quicktips { + use DispatchesJobs; private $quicktipUrl = "/1.1/quicktips.xml"; - private $results = []; const QUICKTIP_NAME = "quicktips"; - const CACHE_DURATION = 60 * 60; + const CACHE_DURATION = 60; private $hash; - public function __construct($search, $quotes) + public function __construct($search, $locale, $max_time) { - $locale = LaravelLocalization::getCurrentLocale(); if (env("APP_ENV") === "production") { $this->quicktipUrl = "https://quicktips.metager.de" . $this->quicktipUrl; } else { $this->quicktipUrl = "https://dev.quicktips.metager.de" . $this->quicktipUrl; } - $this->startSearch($search, $quotes, $locale); + $this->startSearch($search, $locale, $max_time); } - public function startSearch($search, $quotes, $locale) + public function startSearch($search, $locale, $max_time) { - $url = $this->quicktipUrl . "?search=" . $this->normalize_search($search) . "&locale=" . $locale . ""es=" . $quotes; + $url = $this->quicktipUrl . "?search=" . $this->normalize_search($search) . "&locale=" . $locale; $this->hash = md5($url); - $results = null; + if (!Cache::has($this->hash)) { + if (!Redis::exists($this->hash)) { - try { - if (!Cache::has($this->hash)) { - $results = file_get_contents($url); - Cache::put($this->hash, $results, Quicktips::CACHE_DURATION); - } else { - $results = Cache::get($this->hash); - } - } catch (\Exception $e) { - Log::error($e->getMessage()); - } + // Queue this search + $mission = [ + "resulthash" => $this->hash, + "url" => $url, + "useragent" => "", + "username" => null, + "password" => null, + "headers" => [], + "cacheDuration" => self::CACHE_DURATION, + "name" => "Quicktips", + ]; - if ($results === null) { - $results = file_get_contents($url); - } + $mission = json_encode($mission); - $this->results = $this->loadResults($results); + Redis::rpush(\App\MetaGer::FETCHQUEUE_KEY, $mission); + } + } } /** @@ -58,8 +60,9 @@ class Quicktips * 2. Parse the results * Returns an empty array if no results are found */ - public function loadResults($resultsRaw) + public function loadResults() { + $resultsRaw = $this->retrieveResults($this->hash); if ($resultsRaw) { $results = $this->parseResults($resultsRaw); return $results; @@ -72,8 +75,27 @@ class Quicktips { $body = null; + $startTime = microtime(true); + if (Cache::has($this->hash)) { - $body = Cache::get($this->hash); + return Cache::get($this->hash, false); + } + + while (microtime(true) - $startTime < 0.5) { + $body = Redis::rpoplpush($this->hash, $this->hash); + if ($body === false || $body === null) { + usleep(50 * 1000); + } else { + break; + } + } + + if ($body === false) { + return false; + } + + if ($body === "no-result") { + return false; } if ($body !== null) { @@ -176,9 +198,4 @@ class Quicktips { return urlencode($search); } - - public function getResults() - { - return $this->results; - } } diff --git a/resources/lang/de/hilfe.php b/resources/lang/de/hilfe.php index d7091d395166667733879fe21c56f0bbfd0a5675..4830f0e614255c6ef5c5871da6df1df18e6720ab 100644 --- a/resources/lang/de/hilfe.php +++ b/resources/lang/de/hilfe.php @@ -5,17 +5,19 @@ return [ "title" => 'MetaGer - Hilfe', "title.2" => 'Benutzung der Suchmaschine', + "startpage.title" => 'Die Startseite', + "startpage.info" => 'Die Sartseite beinhaltet das Suchfeld, oben rechts einen Button zum Aufrufen des Menus und unter dem Suchfeld einen Link, mit dem Sie MetaGer zu Ihrem Browser hinzufügen können. Im unteren Bereich finden Sie Informationen zu MetaGer und dem Trägerverein SUMA-EV.', "searchfield.title" => 'Das Suchfeld', "searchfield.info" => 'Das Suchfeld besteht aus mehreren Teilen:', - "searchfield.memberkey" => 'Dem Schlüsselsymbol (nur für Vereinsmitglieder): Hier können die Mitglieder des SUMA-EV Ihren Schlüssel eingeben, um die werbefreie Suche nutzen zu können. Sie wollen das auch? Werden Sie Mitglied: <a href = "/beitritt/">Beitrittsantrag</a>', - "searchfield.slot" => 'Dem Suchfeld: Geben Sie hier Ihren Suchbegriff ein.', - "searchfield.search" => 'Der Lupe: Starten Sie die Suche.', + "searchfield.memberkey" => 'dem Schlüsselsymbol (nur für Vereinsmitglieder): Hier können die Mitglieder des SUMA-EV Ihren Schlüssel eingeben, um die werbefreie Suche nutzen zu können. Sie wollen das auch? Werden Sie Mitglied: <a href = "/beitritt/">Beitrittsantrag</a>', + "searchfield.slot" => 'dem Suchfeld: Geben Sie hier Ihren Suchbegriff ein.', + "searchfield.search" => 'der Lupe: Starten Sie hier die Suche mit einem Klick oder drücken Sie "Enter".', "resultpage.title" => 'Die Ergebnisseite', - "resultpage.foci" => 'Unter dem Suchfeld sehen Sie nun 6 verschiedene Suchfoki (Web, Bilder…...), denen intern auch spezifische Suchmaschinen zugeordnet sind.', + "resultpage.foci" => 'Unter dem Suchfeld sehen Sie nun 6 verschiedene Suchfoki (drei im englischsprachigen Bereich) (Web, Bilder…...), denen intern auch spezifische Suchmaschinen zugeordnet sind.', "resultpage.choice" => 'Darunter sehen Sie zwei Punkte: gegebenenfalls „Filter“ sowie „Einstellungen“', "resultpage.filter" => 'Filter: Sie haben hier die Möglichkeit, Filtermöglichkeiten ein- und auszublenden und Filter anzuwenden. In jedem Suchfokus haben Sie hier andere Auswahlmöglichkeiten.', - "resultpage.settings" => 'Einstellungen: Hier können Sie dauerhafte Sucheinstellungen für Ihre MetaGer-Suche im aktuellen Fokus vornehmen. Sie können auch Suchmaschinen, die dem Fokus zugeordnet sind, an- und abwählen. Ihre Einstellungen werden mithilfe eines nicht personenbeziehbaren Klartextcookies gespeichert. Unter dem Punkt „Hinweis“ finden Sie einen Link, der Ihnen Ihre gesamten Einstellungen zeigt. Hier können Sie diese auch wieder mit einem Klick löschen.', + "resultpage.settings" => 'Einstellungen: Hier können Sie dauerhafte Sucheinstellungen für Ihre MetaGer-Suche im aktuellen Fokus vornehmen. Sie können auch Suchmaschinen, die dem Fokus zugeordnet sind, an- und abwählen. Ihre Einstellungen werden mithilfe eines nicht personenbeziehbaren Klartextcookies gespeichert. Unter dem Punkt „Hinweis“ finden Sie einen Link, der Ihnen Ihre gesamten Einstellungen zeigt. Hier können Sie diese auch wieder mit einem Klick löschen. Hier finden Sie auch einen Link, den Sie kopieren und als Bookmark speichern können. Wenn Sie das Bookmark später aufrufen, sind Ihre Einstellungen wieder parat. Außerdem haben Sie hier die Möglichkeit, sich eine persönliche Blacklist zusammenzustellen; Sie können damit also nicht nur Suchmaschinen, sonden auch spezielle Domains ausfiltern und sich damit eigene Suchsettings produzieren. Zu guter Letzt können Sie hier die Anzeige der Zitate an- und ausschalten. Sie erreichen die Einstellungsseite auch direkt über das Menu.', "stopworte.title" => 'Stoppworte', "stopworte.1" => "Wenn Sie unter den MetaGer-Suchergebnissen solche ausschließen wollen, in denen bestimmte Worte (Ausschlussworte / Stoppworte) vorkommen, dann erreichen Sie das, indem Sie diese Worte mit einem Minus versehen.", @@ -39,14 +41,14 @@ return [ "result.title" => 'Ergebnisse', "result.info.1" => 'Alle Ergebnisse werden in folgender Form ausgegeben:<p><div class="image-container"><img src="/img/hilfe-php-resultpic-01.png"></div></p>', - "result.info.open" => '"ÖFFNEN": Klicken Sie auf die Überschrift, den darunter stehenden Link (die URL) oder auch auf den Button "ÖFFNEN", um das Ergebnis zu öffnen. Ihre Browsereinstellungen bestimmen, ob dafür ein neuer TAB verwendet wird.', - "result.info.newtab" => '"IN NEUEM TAB ÖFFNEN" öffnet das Ergebnis auf jeden Fall in einem neuen TAB.', + "result.info.open" => '"ÖFFNEN": Klicken Sie auf die Überschrift, den darunter stehenden Link (die URL) oder auch auf den Button "ÖFFNEN", um das Ergebnis im selben TAB zu öffnen.', + "result.info.newtab" => '"IN NEUEM TAB ÖFFNEN" öffnet das Ergebnis in einem neuen TAB.', "result.info.anonym" => '"ANONYM ÖFFNEN" bewirkt, dass das Ergebnis unter dem Schutz unseres Proxys geöffnet wird. Einige Infos dazu finden Sie weiter unten auf dieser Seite.', "result.info.more" => 'MEHR: Wenn Sie hier klicken, dann erhalten Sie neue Optionen; das Aussehen des Ergebnisses ändert sich:<p><div class="image-container"><img src="/img/hilfe-php-resultpic-02.png"></div></p>', "result.info.2" => 'Die neuen Optionen sind:', "result.info.saveresult" => '"Ergebnis speichern" (Nur Desktopversion): Dieses Ergebnis wird in einem Sammeltab gespeichert. Der TAB erscheint rechts und bleibt über beliebig viele Suchen aktiv. (siehe <a href="#searchinsearch"> Suche in der Suche</a>)', "result.info.domainnewsearch" => '"Auf dieser Domain neu suchen": Auf der Domain des Ergebnisses wird "genauer nachgesehen".', - "result.info.hideresult" => '"ausblenden": Hiermit blenden Sie Ergebnisse dieser Domain aus. Sie können diesen Schalter auch direkt hinter Ihr Suchwort schreiben und auch verketten; ebenso ist ein "*" als Wildcard erlaubt. Sie können das zum Beispiel nutzen, indem Sie sich ein Suchergebnis mit den von Ihnen gewünschten Einschränkungen zusammenstellen. Dieses "speichern" Sie als Bookmark. Wenn Sie dieses Bookmark aufrufen, dann haben Sie sogleich Ihre Einstellungen verfügbar und müssen nur noch vorne Ihren Suchbegriff ändern.', + "result.info.hideresult" => '"ausblenden": Hiermit blenden Sie Ergebnisse dieser Domain aus. Sie können diesen Schalter auch direkt hinter Ihr Suchwort schreiben und auch verketten; ebenso ist ein "*" als Wildcard erlaubt. Siehe auch "Einstellungen" für eine dauerhafte Lösung.', 'urls.title' => 'URLs ausschließen', 'urls.explanation' => 'Sie können Suchergebnisse ausschließen, deren Ergebnislinks bestimmte Worte enthalten, indem Sie in ihrer Suche "-url:" verwenden.', 'urls.example.1' => 'Beispiel: Sie möchten keine Ergebnisse, bei denen im Ergebnislink das Wort "Hund" auftaucht:', diff --git a/resources/lang/de/plugin-page.php b/resources/lang/de/plugin-page.php index 5e2d5cc3f2566f06c472fc211a53230a3634bfeb..235f4dfc51354d7fcac95ba831838e5cf897a285 100644 --- a/resources/lang/de/plugin-page.php +++ b/resources/lang/de/plugin-page.php @@ -4,16 +4,16 @@ return [ 'open-modal' => 'MetaGer-Plugin hinzufügen', 'open-modal.title' => 'MetaGer zu Ihrem Browser hinzufügen', 'head.0' => 'Firefox installieren und MetaGer hinzufügen', - 'head.1' => 'MetaGer zum Firefox hinzufügen', - 'head.2' => 'MetaGer zum Chrome hinzufügen', - 'head.3' => 'MetaGer zum Opera hinzufügen', - 'head.4' => 'MetaGer zum Internet Explorer hinzufügen', - 'head.5' => 'MetaGer zum Microsoft Edge hinzufügen', - 'head.6' => 'MetaGer zum Safari hinzufügen', - 'head.7' => 'MetaGer zum Vivaldi hinzufügen', - 'head.8' => 'MetaGer zum Firefox Klar hinzufügen', - 'head.9' => 'MetaGer zum UCBrowser hinzufügen', - 'head.10' => 'Metager zum Samsung hinzufügen', + 'head.1' => 'MetaGer zu Firefox hinzufügen', + 'head.2' => 'MetaGer zu Chrome hinzufügen', + 'head.3' => 'MetaGer zu Opera hinzufügen', + 'head.4' => 'MetaGer zu Internet Explorer hinzufügen', + 'head.5' => 'MetaGer zu Microsoft Edge hinzufügen', + 'head.6' => 'MetaGer zu Safari hinzufügen', + 'head.7' => 'MetaGer zu Vivaldi hinzufügen', + 'head.8' => 'MetaGer zu Firefox Klar hinzufügen', + 'head.9' => 'MetaGer zu UCBrowser hinzufügen', + 'head.10' => 'Metager zu Samsung Internet hinzufügen', 'browser-download' => 'Firefox herunterladen', 'firefox-plugin' => 'MetaGer als Standardsuchmaschine mit Add-on einrichten', diff --git a/resources/lang/en/hilfe.php b/resources/lang/en/hilfe.php index 9fbdbf728ca4a2bc162194641525660d22d1993c..193ecaaac2004bc3d5db204fd1e0649670dbb573 100644 --- a/resources/lang/en/hilfe.php +++ b/resources/lang/en/hilfe.php @@ -5,6 +5,9 @@ return [ "title.2" => 'Use of the search engine', + "startpage.title" => 'The start page', + "startpage.info" => 'The start page contains the search field and a menu button in the upper right corner. There is a link below the search field which let you add MetaGer to your web browser. At last, at the bottom of the page there is some information about MetaGer and its supporting association, the SUMA-EV.', + "searchfield.title" => 'The search field', "searchfield.info" => 'The search field contains:', "searchfield.memberkey" => 'The key symbol (only SUMA-EV members): Members can enter a private key to use the "free-of-advertising" metager search. If you want this too, just become a member: <a href = "https://metager.org/beitritt">Membership form</a>', @@ -12,10 +15,13 @@ return [ "searchfield.search" => 'The magnifier: Start your search.', "resultpage.title" => 'The result page', - "resultpage.foci" => 'There are six different search focuses below the search field (Web, Pictures...). We assigned specific search engines to these focuses.', + "resultpage.foci" => 'There are three (six for the german branch) different search focuses below the search field (Web, Pictures and Shopping). We assigned specific search engines to these focuses.', "resultpage.choice" => 'Below these you have two links:', "resultpage.filter" => 'Filter: Toggle filters on / off and apply settings here. Each focus has its own assortment.', - "resultpage.settings" => 'Settings: Apply here your permanent settings for the current focus. You can select / unselect search engines here, too. Your settings are stored as non-personally identifiable cookies. Click "Overview" to see your settings. If settings have been stored you find a deletion button at the end of the page.', + "resultpage.settings" => 'Settings: Apply here your permanent settings for the current focus. You can select / unselect search engines here, too. Your settings are stored as non-personally identifiable cookies. Click "Overview" to see your settings. If settings have been stored you find a deletion button at the end of the page. The section "hints" offers a link to the cookie list and also a box with a link which is useful to copy and save as a bookmark. Using the bookmark you will have all settings working immediately. Further the section "Black List" let you exclude your entries from being used for searching. At last you may hide / unhide the citations here. There is also a menu entry to access the settings page.', + + + "stopworte.title" => "Exclude single words", "stopworte.1" => "If you want to exclude words within the search result, you have to put a \"-\" in front of that word", @@ -39,14 +45,14 @@ return [ "result.title" => 'Results', "result.info.1" => 'All results will look like this:<p><div class="image-container"><img src="/img/hilfe-php-resultpic-en-01.png"></div></p>', - "result.info.open" => '"OPEN": Click the headline, the link below (URL) or the "OPEN" button to open the result. This will be in the same or a new TAB due to your browser settings.', - "result.info.newtab" => '"OPEN IN NEW TAB" will open the result in a new TAB in any case.', + "result.info.open" => '"OPEN": Click the headline, the link below (URL) or the "OPEN" button to open the result in the same TAB.', + "result.info.newtab" => '"OPEN IN NEW TAB" will open the result in a new TAB.', "result.info.anonym" => '"OPEN ANONYMOUSLY": the page will be opened under the proxy protection. There is some information about the proxy further down here.', "result.info.more" => '"MORE": you will get more options, the result changes its appearance to:<p><div class="image-container"><img src="/img/hilfe-php-resultpic-en-02.png"></div></p>', "result.info.2" => 'The new options are:', "result.info.saveresult" => '"Save result in TAB" (Only desktop): The result will be stored in a new TAB. It´ s used for collecting results out of several searches. This TAB appears on the right side of your screen. (info: <a href="#searchinsearch"> Search in search</a>)', "result.info.domainnewsearch" => '"Start a new search on this domain": search only on this domain.', - "result.info.hideresult" => '"Hide": hide results from this domain. You can use this filter directly after your search words (e.g. my search words -site:*.wikipedia.org), filters can be concatenated and the wildcard "*" is allowed. Do one search with a filter and store it as a bookmark. Next time -using the bookmark- you have your settings active immediately.', + "result.info.hideresult" => '"Hide": hide results from this domain. You can use this filter directly after your search words (e.g. my search words -site:*.wikipedia.org), filters can be concatenated and the wildcard "*" is allowed. See also "Settings"', "urls.title" => "Exclude URLs", "urls.explanation" => "Use \"-url:\" to exclude search results containing specified words.", @@ -69,7 +75,7 @@ return [ "plugin.title" => "Browser-Plugin", "plugin.1" => "There is a MetaGer Plugin for most of the common web browsers. The plugin provides easy search from the web browsers search field. Find out more: <a href=\"/en/plugin\" rel=\"noopener\">MetaGer Plugin</a>.", - "suchwortassoziator.title" => "Finding connotations to searchwords", + "suchwortassoziator.title" => "MetaGer-Web-Associator", "suchwortassoziator.1" => 'Ask the <a href="/en/asso/" target="_blank" rel="noopener">MetaGer-Web-Assoziator</a> (Tools / Associator) to find connotations in a subject area. The service doesn't append upon any language because it uses webdocuments as a source. Therefore, you find any connotations to your used language and vice-versa.', "suchwortassoziator.2" => "Example: you want to know more about \"tick bites\" and its dangers but you forgot the technical terms around this issue. The \"Assoziator\" presents \"Borreliose\" and \"fsme\" among others.", "suchwortassoziator.3" => "Please let us know if something unsuitable appears. Please use our <a href=\"/en/kontakt/\" target=\"_blank\" rel=\"noopener\">contact form</a>.", diff --git a/resources/lang/en/plugin-page.php b/resources/lang/en/plugin-page.php index 3d34d49efe7f1fa37c5d7120213c3aad4e7edc18..c70c0a794829a62b277018922508a6cb7be062c1 100644 --- a/resources/lang/en/plugin-page.php +++ b/resources/lang/en/plugin-page.php @@ -3,6 +3,7 @@ return [ 'open-modal' => 'Install MetaGer-Plugin', 'open-modal.title' => 'Add the MetaGer-Plugin to your browser', + 'head.0' => 'Install Firefox and add MetaGer', "head.1" => "Add MetaGer to your Firefox", "head.2" => "Add MetaGer to your Chrome", "head.3" => "Add MetaGer to your Opera", @@ -11,6 +12,8 @@ return [ "head.6" => "Add MetaGer to your Safari", "head.7" => "Add Metager to your Vivaldi", "head.8" => "Add MetaGer to your Firefox Focus", + 'head.9' => 'Add MetaGer to your UCBrowser', + 'head.10' => 'Add MetaGer to your Samsung Internet', 'browser-download' => 'Download Firefox', 'firefox-plugin' => 'Set MetaGer as default search engine with add-on', @@ -21,7 +24,7 @@ return [ 'desktop-unable' => 'The browser you use does not offer to add MetaGer as (default) search engine, but you can download Firefox <a href="https://www.mozilla.org/en-US/firefox/new/" target="_blank" rel="noopener">here</a>, an open-source browser which provides the feature.', 'mobile-unable' => 'The browser you use does not offer to add MetaGer as (default) search engine, but you can download Firefox <a href="https://www.mozilla.org/en-US/firefox/mobile/" target="_blank" rel="noopener">here</a>, an open-source browser which provides the feature.', - 'desktop-unlisted' => 'We are not aware if the browser you use offers to add MetaGer as (default) search engine, but you can download Firefox <a href="https://www.mozilla.org/en-US/firefox/new/" target="_blank" rel="noopener">here</a>, an open-source browser which provides the feature.', - 'mobile-unlisted' => 'We are not aware if the browser you use offers to add MetaGer as (default) search engine, but you can download Firefox <a href="https://www.mozilla.org/en-US/firefox/mobile/" target="_blank" rel="noopener">here</a>, an open-source browser which provides the feature.', + 'desktop-notlisted' => 'We are not aware if the browser you use offers to add MetaGer as (default) search engine, but you can download Firefox <a href="https://www.mozilla.org/en-US/firefox/new/" target="_blank" rel="noopener">here</a>, an open-source browser which provides the feature.', + 'mobile-notlisted' => 'We are not aware if the browser you use offers to add MetaGer as (default) search engine, but you can download Firefox <a href="https://www.mozilla.org/en-US/firefox/mobile/" target="_blank" rel="noopener">here</a>, an open-source browser which provides the feature.', ]; diff --git a/resources/lang/es/app.php b/resources/lang/es/app.php new file mode 100644 index 0000000000000000000000000000000000000000..0c5f4101f444d7432596715af367417fb88bc770 --- /dev/null +++ b/resources/lang/es/app.php @@ -0,0 +1,24 @@ +<?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", + "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." +]; diff --git a/resources/lang/es/plugin-page.php b/resources/lang/es/plugin-page.php index 7ed5dd103b0461ab728d64a85749df553bb2434b..ad1e386e4490d9824fd12ea9b28d231ab10d5564 100644 --- a/resources/lang/es/plugin-page.php +++ b/resources/lang/es/plugin-page.php @@ -8,48 +8,8 @@ return [ "head.4" => "Añadir MetaGer a Internet Explorer", "head.5" => "Añadir MetaGer a Microsoft Edge", "head.6" => "Añadir MetaGer a Safari", - "firefox.1" => 'En su navegador, haga clic en "<i class =" fa fa-ellipsis-h "> </i>" en la esquina superior derecha de la barra de direcciones para abrir el menú de acción de la página y luego haga clic en "Agregar motor de búsqueda" ( ver foto)', - "firefox.2" => 'Abre la configuración de Firefox. Para esto, ingrese "about:preferences#search" en la barra de direcciones. En la sección "Motor de búsqueda predeterminado", seleccione MetaGer (ver imagen).', - "firefox.3" => "Instalar MetaGer como página de inico en el :browser", - "firefox.4" => "Hacer click arriba a la derecha en los tres barras horizontales en su navegador (Menú) y abre \"Preferencias\"", - "firefox.5" => "Introducir en el campo \"Pagina de inicio\" \"https:\\/\\/metager.de\"", - "chrome.1" => "Haga click en su Chrome arriba a la derecha <i class=\"fa fa-ellipsis-v\"></i> y en el subsecuente menú en \"Preferencias\", para abrir las preferencias de su Chrome.", - "chrome.2" => "In la área de la búsqueda hacer click en administrar motores de búsqueda ...", - "chrome.3" => "En la lista que se ve ahora, busca la entrada \"MetaGer\". Cloquease con el ratón sobre la entrada \"Establecer como predeterminado\"", - "chrome.4" => "Definir MetaGer como pagina de inicio en el :browser ", - "chrome.5" => "Hacer click arriba a la derecha en su navegador en <i class=\"fa fa-ellipsis-v\"></i> y abre \"Configuración\"", - "chrome.6" => "En la sección \"Al abrir el navegador ... \" seleccionar \"Abrir una página especifica\" y haga click en \"Establecer páginas\" ", - "chrome.7" => "Introduzca \"https:\\/\\/metager.de\" como URL en el campo \"Añadir una nueva página\" ", - "chrome.8" => "Nota: Todos los sitios web visibles aquí se abren ahora cuando inicia el navegador. Usted puede borrarlos, poniéndose con el ratón encima y hacer click en la \"x\" al lado derecha.", - "opera.1" => "Haga click <a href=\"/\" target=\"_blank\" rel=\"noopener\">a</a> para abrir MetaGer en una nueva pestaña.", - "opera.2" => "En la nueva pestaña haga click en la barra de la búsqueda con el botón derecha del ratón.", - "opera.3" => "Elige en el menú de contexto \"editar buscadores\" ", - "opera.4" => "En la ventana popup hacer click en \"Añadir buscador\"", - "opera.5" => "(Desafortunadamente ya no es posible en Opera poner buscadores nuevos como estandard, pero <a href=\"https://www.mozilla.org/de/firefox/new/\" target=\"_blank\" rel=\"noopener\">aquí</a>puede instalar un navegador de código abierto que soporta esto.)", - "opera.6" => "Hacer MetaGer la página de inicio en :browser", - "opera.7" => "Hacer click en el menú del navegador en \"Editar\"->\"Configuración\"", - "opera.8" => "En la sección \"Inicio\" seleccione \"Abrir una página especifica\" y después \"Definir página\"", - "opera.9" => "En el campo \"Introducir URL\" ponga \"https://metager.de\" y confirma con introducir", - "opera.10" => "Haga click en \"Confirmar\"", - "IE.1" => "Haga click en <a href=\"javascript:window.external.addSearchProvider($('link[rel=search]').attr('href'));\"></a>, para añadir MetaGer como búscador", - "IE.4" => "Haga click en su navegador arriba derecha en Extras", - "IE.5" => "Escoge el punto del menú \"Administrar extensiones\"", - "IE.6" => "Busca Tipos de Extensiones y haga click en \"Máquinas de búsqueda\" y después al lado derecho click en \"MetaGer\"", - "IE.7" => "Escoge el botón \"Definir como predeterminado\"", - "IE.8" => "Definir MetaGer como página de inicio en :browser ", - "IE.9" => "Haga click arriba derecha en <i class=\"fa fa-cog\"></i> y abre \"Opciones de internet\"", - "IE.10" => "Si quiere definir MetaGer como única página de inicio, marca todo el texto en el campo del texto y reemplázalo por \"https://metager.de\"", - "IE.11" => "Haga click en \"Aceptar\"", - "edge.1" => "Haga click en su navegador arriba derecha en Extras (", - "edge.2" => ") y selecciona \"Configuración\"", - "edge.3" => "Haga scroll hacia abajo y haga click en \"Mostrar configuración avanzada\"", - "edge.4" => "Haga scroll de nuevo hacia abajo llegando al \"Buscar en la barra de direcciones con\" y haga click en \"Cambiar\"", - "edge.5" => "Selecciona \"MetaGer: Sicher suchen & finden...\" y clickea en \"Definir com predeterminado\"", - "edge.6" => "Hacer MetaGer la página de inicio en :browser", - "edge.7" => "Haga click arriba derecha en el navegador en <i class=\"fa fa-ellipsis-h\"></i> y abre \"Configuraciones\"", - "edge.8" => "Selecciona en la sección \"Abrir con\" el ítem \"Página específica\"", - "edge.9" => "En el menú de cascada selecciona \"Definido por el usuario\"", - "edge.10" => "En la área abajo ponga \"https://metager.de\" en el campo \"Introducir URL\" y haga click en el símbolo \"+\"", - "edge.11" => "Borra todas las entradas, que no quiere abrir al inicio (p.ej. about:start), haciendo click en el pequeño \"x\" a la derecha.", - "safari.1" => "No pueden añadir otras motores de busqueda alternativas en Safari. \"OpenSearch for Safari\" y \"Glims\" soy terminado.", + "head.7" => "Añadir MetaGer a Vivaldi", + "head.8" => "Añadir MetaGer a Firefox Klar", + "head.9" => "Añadir MetaGer a UCBrowser", + "head.10" => "Añadir MetaGer a Samsung Internet", ]; diff --git a/resources/lang/es/results.php b/resources/lang/es/results.php index 19b9de885ef3fdfe83e4878c863afcbac5f44072..3a8aac86f2f197c4a12e2c0e1823e634eb9b7c9a 100644 --- a/resources/lang/es/results.php +++ b/resources/lang/es/results.php @@ -1,9 +1,13 @@ <?php return [ - "redirect" => "(con desviar)", - "weiter" => "Continuar", - "zurueck" => "Atrás", - "filter" => "Resultados filtraban: <strong>[:filter]</strong>. <a href=\":link\" target=\"_blank\">Desactivar filtro.</a>", - "filter.default" => "Recibís el interfaz del usuario en <strong>:langName</strong>, pero resultados en <strong>TODOS</strong> idiomas. Usan <a href=\"/settings\" target=\"_blank\">adjustar</a> para seleccionar una idioma para los resultados.", + "redirect" => "(con desviar)", + "weiter" => "Continuar", + "zurueck" => "Atrás", + "backtotop" => "Volver al principio de la página", + "filter" => "Los resultados de la búsqueda se filtraron: <strong>[:filter]</strong>. <a href=\":link\" target=\"_blank\">desactiva filtro.</a>", + "filter.default" => "Obtiene la interfaz de usuario en <strong>: langName </strong>, pero los resultados en <strong> TODOS </strong> los idiomas. Para obtener resultados solo en alemán, puede ajustar \"Seleccionar idioma\" en <a href=\"/settings\" target=\"_blank\"> </a>.\r\n", + "produktanzeigen" => "Anuncios de productos:", + "query.alteration" => "Contiene resultados para <a href=\":link\">:alteration <i class=\"fa fa-search\"></i></a>", + "query.alteration.original" => "En su lugar, busque <a href=\":link\">:original <i class=\"fa fa-search\"></i></a>" ]; diff --git a/resources/lang/fr/plugin-page.php b/resources/lang/fr/plugin-page.php index 5db072d7d2ac3d8ecc1998cb3fff1231b8760fa2..3a756324c5963ddd082f11cdc7743ee07b9cc9f0 100644 --- a/resources/lang/fr/plugin-page.php +++ b/resources/lang/fr/plugin-page.php @@ -7,7 +7,8 @@ return [ "head.4" => "Ajouter MetaGer à Internet Explorer", "head.5" => "Ajouter MetaGer à Microsoft Edge", "head.6" => "Ajouter MetaGer à Vivaldi", - "opera.10" => "Cliquer sur \"ok\"", - "IE.11" => "Cliquer sur \"ok\"", - "vivaldi.7" => "Cliquer sur \"ajouter\"", + "head.7" => "Ajouter MetaGer à Vivaldi", + "head.8" => "Ajouter MetaGer à Firefox Klar", + "head.9" => "Ajouter MetaGer à UCBrowser", + "head.10" => "Ajouter MetaGer à Samsung Internet", ]; diff --git a/resources/less/metager/pages/resultpage.less b/resources/less/metager/pages/resultpage.less index a2a703ea1965582827ae6a5a7ecdf2f0dc31a7ca..a7b8077d7c9338de645c5531361d6c94c52380fb 100644 --- a/resources/less/metager/pages/resultpage.less +++ b/resources/less/metager/pages/resultpage.less @@ -1,5 +1,6 @@ @import "./resultpage/result-page.less"; @import "./resultpage/result.less"; +@import "./resultpage/quicktips.less"; @import "./resultpage/product.less"; @import "./resultpage/result-saver.less"; @import "./resultpage/keyboard-nav.less"; \ No newline at end of file diff --git a/resources/less/metager/pages/resultpage/quicktips.less b/resources/less/metager/pages/resultpage/quicktips.less index edddec3d475e5e2d67cc162a8242c0ce8076e359..1627559d9565e280897db335b0fd4c8e5ac7325b 100644 --- a/resources/less/metager/pages/resultpage/quicktips.less +++ b/resources/less/metager/pages/resultpage/quicktips.less @@ -1,9 +1,7 @@ /* Quicktips */ -@import "../../bs-variables.less"; -@import "../../variables.less"; -@import "../../mixins/mixins.less"; -@import "../../general/cards.less"; -@import "../../general/general.less"; +// @import "../../variables.less"; +// @import "../../general/cards.less"; +// @import "../../general/general.less"; @quicktip-font-large: @result-font-large; @quicktip-font-medium: @result-font-medium; @quicktip-font-small: @result-font-small; diff --git a/resources/views/hilfe.blade.php b/resources/views/hilfe.blade.php index 3cfe835b45524b3cb9bdbb13434a329f9c4481ed..2878b3ee9f5d70fc56dd6fb634f3e78a0b456e20 100644 --- a/resources/views/hilfe.blade.php +++ b/resources/views/hilfe.blade.php @@ -6,8 +6,10 @@ <div class="alert alert-warning" role="alert">{!! trans('hilfe.achtung') !!}</div> <h1 class="page-title">{!! trans('hilfe.title') !!}</h1> - <section> + <section id="startpage"> <h2>{!! trans('hilfe.title.2') !!}</h2> + <h3>{!! trans('hilfe.startpage.title') !!}</h3> + <p>{!! trans('hilfe.startpage.info') !!}</p> <h3>{!! trans('hilfe.searchfield.title') !!}</h3> <div> <p>{!! trans('hilfe.searchfield.info') !!}</p> @@ -30,7 +32,7 @@ </ul> </div> </section> - <section> + <section id="results"> <h3>{!! trans('hilfe.result.title') !!}</h3> <div> <p>{!! trans('hilfe.result.info.1') !!}</p> @@ -58,7 +60,7 @@ </ul> </div> </section> - <section> + <section id="severalwords"> <h3>{!! trans('hilfe.mehrwortsuche.title') !!}</h3> <div> <p>{!! trans('hilfe.mehrwortsuche.1') !!}</p> @@ -72,7 +74,7 @@ </div> </section> - <section> + <section id="capitalizationrules"> <h3>{!! trans('hilfe.grossklein.title') !!}</h3> <div> <p>{!! trans('hilfe.grossklein.1') !!}</p> @@ -108,7 +110,7 @@ </section> <h2 id="dienste">{!! trans('hilfe.dienste') !!}</h2> <h3><i class="fa fa-angle-double-right"></i> {!! trans('hilfe.dienste.kostenlos') !!}</h3> - <section> + <section id="app"> <div id="mg-app" style="margin-top: -100px"></div> <div style="margin-top: 100px"></div> <h3>{!! trans('hilfe.app.title') !!}</h3> @@ -116,13 +118,13 @@ <p>{!! trans('hilfe.app.1') !!}</p> </div> </section> - <section> + <section id="plugin"> <h3>{!! trans('hilfe.plugin.title') !!}</h3> <div> <p>{!! trans('hilfe.plugin.1') !!}</p> </div> </section> - <section> + <section id="asso"> <h3>{!! trans('hilfe.suchwortassoziator.title') !!}</h3> <div> <p>{!! trans('hilfe.suchwortassoziator.1') !!}</p> @@ -130,49 +132,49 @@ <p>{!! trans('hilfe.suchwortassoziator.3') !!}</p> </div> </section> - <section> + <section id="widget"> <h3>{!! trans('hilfe.widget.title') !!}</h3> <div> <p>{!! trans('hilfe.widget.1') !!}</p> </div> </section> <h2>{!! trans('hilfe.datenschutz.title') !!}</h2> - <section> + <section id="factcheck"> <h3>{!! trans('hilfe.datenschutz.faktencheck.heading') !!}</h3> <div> <p>@lang('hilfe.datenschutz.faktencheck.body.1')</p> <p>@lang('hilfe.datenschutz.faktencheck.body.2')</p> </div> </section> - <section> + <section id="tracking"> <h3>{!! trans('hilfe.datenschutz.1') !!}</h3> <div> <p>{!! trans('hilfe.datenschutz.2') !!}</p> <p>{!! trans('hilfe.datenschutz.3') !!}</p> </div> </section> - <section> + <section id="torhidden"> <h3>{!! trans('hilfe.tor.title') !!}</h3> <div> <p>{!! trans('hilfe.tor.1') !!}</p> <p>{!! trans('hilfe.tor.2') !!}</p> </div> </section> - <section> + <section id="proxy"> <h3>{!! trans('hilfe.proxy.title') !!}</h3> <div> <p>{!! trans('hilfe.proxy.1') !!}</p> </div> </section> - <section> + <section id="maps"> <h3>{!! trans('hilfe.maps.title') !!}</h3> <div> <p>{!! trans('hilfe.maps.1') !!}</p> <p>{!! trans('hilfe.maps.2') !!}</p> <p>{!! trans('hilfe.maps.3') !!}</p> </div> - </section> + </section id="faq"> <h2>{!! trans('hilfe.faq.title') !!}</h2> <section> <h3>{!! trans('hilfe.metager.title') !!}</h3> diff --git a/resources/views/layouts/researchandtabs.blade.php b/resources/views/layouts/researchandtabs.blade.php index 17a26ccd3eae3913021bea12859c68c075c6baac..b0c59b3a9de4ad8caeeb4b02d96dfe43085ec044 100644 --- a/resources/views/layouts/researchandtabs.blade.php +++ b/resources/views/layouts/researchandtabs.blade.php @@ -34,11 +34,11 @@ </div> <div id="additions-container"> @include('layouts.keyboardNavBox') + <div id="quicktips"> @if( $metager->showQuicktips() ) - <div id="quicktips"> - <iframe src="{{ $quicktips }}" frameborder="0"></iframe> - </div> + @include('quicktips', ['quicktips', $quicktips]) @endif + </div> </div> @include('parts.footer', ['type' => 'resultpage', 'id' => 'resultPageFooter']) </div> diff --git a/resources/views/plugin-page.blade.php b/resources/views/plugin-page.blade.php index c2a46a534c8ea90a8d738427fe2458d41546f2ce..f262fb346375e14fd7ec16e462b7c8eb23fb8b72 100644 --- a/resources/views/plugin-page.blade.php +++ b/resources/views/plugin-page.blade.php @@ -85,7 +85,7 @@ @elseif ($agent->isPhone()) @if ($browser === 'Firefox') - @if (version_compare($agent->version($agent->browser()), "80.0") <= 0)) + @if (version_compare($agent->version($agent->browser()), '80.') >= 0)) @include ('plugin/mobile/firefox/v80') @include ('plugin/mobile/firefox-klar/v8-8') @else diff --git a/resources/views/quicktips.blade.php b/resources/views/quicktips.blade.php index 6fa679cf65fd25ab3e02af788260f55783900250..f354bda8b7ff7dadefffc7704e3bf4325b39b28b 100644 --- a/resources/views/quicktips.blade.php +++ b/resources/views/quicktips.blade.php @@ -1,19 +1,5 @@ -<!DOCTYPE html> -<html lang="{{ LaravelLocalization::getCurrentLocale() }}"> -<head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>{{ $search }} - MetaGer Quicktips</title> - <link type="text/css" rel="stylesheet" href="{{ mix('css/quicktips.css') }}" /> - <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') }}" /> -</head> -<body id="quicktips"> @foreach($quicktips as $quicktip) <div class="quicktip" type="{{ $quicktip->type }}"> @include('parts.quicktip', ['quicktip' => $quicktip]) </div> -@endforeach -</body> -</html> +@endforeach \ No newline at end of file diff --git a/tests/Browser/Pages/App.php b/tests/Browser/Pages/App.php index c28c9a7039fed75cb5955bc0af2f1457df1e7a05..e1c50cf24d5f6200f5a56344e46d23a8e05b5b99 100644 --- a/tests/Browser/Pages/App.php +++ b/tests/Browser/Pages/App.php @@ -31,7 +31,7 @@ class App extends Page ->waitForText("This App brings the full Metager power to your smartphone.") ->assertTitle("Apps - MetaGer") ->switchLanguage("Español") - ->waitForText("Diese App bringt die volle Power unserer Suchmaschine auf ihr Smartphone.") + ->waitForText("Con esta aplicación, obtiene toda la potencia de nuestro motor de búsqueda en su smartphone.") ->assertTitle("Aplicaciones - MetaGer") ->switchLanguage("Deutsch"); diff --git a/tests/Browser/Pages/Plugin.php b/tests/Browser/Pages/Plugin.php index e47cea91d3efb62ec460b346cb9ad3c45e9862a8..8e4810d0a29d79f958b0a3c94d74dd879822ac38 100644 --- a/tests/Browser/Pages/Plugin.php +++ b/tests/Browser/Pages/Plugin.php @@ -25,7 +25,7 @@ class Plugin extends Page public function assert(Browser $browser) { $browser->assertPathIs($this->url()) - ->waitForText("MetaGer zum Firefox hinzufügen") + ->waitForText("MetaGer zu Firefox hinzufügen") ->assertTitle("Plugin - MetaGer") ->switchLanguage("English") ->waitForText("Add MetaGer to your Firefox") diff --git a/webpack.mix.js b/webpack.mix.js index 70865442f21a404d1626a9af75fae648b41cbf46..e2b3c9cff33d035511c795654007e7e888b14a00 100644 --- a/webpack.mix.js +++ b/webpack.mix.js @@ -31,9 +31,6 @@ mix .less("resources/less/metager/metager-dark.less", "public/css/themes/metager-dark.css", { strictMath: true }) - .less("resources/less/metager/pages/resultpage/quicktips.less", "public/css/quicktips.css", { - strictMath: true - }) .less("resources/less/font-awesome/fontawesome.less", "public/css/fontawesome.css", { strictMath: true })