Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge branch 'master' into htmlvaliditytests
* master:
  fix(search): don't start result position with 2
  refactor(search): clearer data flow
  Change spacing in search meta data to punctuation
  translation update
  translation update
  Fix(search): restore valid heading hierarchy
  fix(search): add position to fulltext results event
  fix(search): ensure consistent html in search results
  Fix invalid HTML in search results
  Fix links with invalid empty target attributes
  Fix buttons with invalid empty name attributes
  • Loading branch information
splitbrain committed Apr 20, 2018
2 parents 8e3e869 + 6ea61f3 commit 56ea169
Show file tree
Hide file tree
Showing 17 changed files with 172 additions and 131 deletions.
2 changes: 1 addition & 1 deletion inc/Form/ButtonElement.php
Expand Up @@ -28,7 +28,7 @@ function __construct($name, $content = '') {
* @return string
*/
public function toHTML() {
return '<button ' . buildAttributes($this->attrs()) . '>'.$this->content.'</button>';
return '<button ' . buildAttributes($this->attrs(), true) . '>'.$this->content.'</button>';
}

}
38 changes: 19 additions & 19 deletions inc/Ui/Search.php
Expand Up @@ -522,7 +522,7 @@ protected function getPageLookupHTML($data)
global $lang;

$html = '<div class="search_quickresult">';
$html .= '<h3>' . $lang['quickhits'] . ':</h3>';
$html .= '<h2>' . $lang['quickhits'] . ':</h2>';
$html .= '<ul class="search_quickhits">';
foreach ($data as $id => $title) {
$name = null;
Expand Down Expand Up @@ -562,12 +562,14 @@ protected function getFulltextResultsHTML($data, $highlight)
}

$html = '<div class="search_fulltextresult">';
$html .= '<h3>' . $lang['search_fullresults'] . ':</h3>';
$html .= '<h2>' . $lang['search_fullresults'] . ':</h2>';

$html .= '<dl class="search_results">';
$num = 1;
$num = 0;
$position = 0;

foreach ($data as $id => $cnt) {
$position += 1;
$resultLink = html_wikilink(':' . $id, null, $highlight);

$resultHeader = [$resultLink];
Expand All @@ -578,34 +580,32 @@ protected function getFulltextResultsHTML($data, $highlight)
$resultHeader[] = $restrictQueryToNSLink;
}

$snippet = '';
$lastMod = '';
$resultBody = [];
$mtime = filemtime(wikiFN($id));
$lastMod = '<span class="lastmod">' . $lang['lastmod'] . '</span> ';
$lastMod .= '<time datetime="' . date_iso8601($mtime) . '" title="'.dformat($mtime).'">' . dformat($mtime, '%f') . '</time>';
$resultBody['meta'] = $lastMod;
if ($cnt !== 0) {
$resultHeader[] = $cnt . ' ' . $lang['hits'];
if ($num < FT_SNIPPET_NUMBER) { // create snippets for the first number of matches only
$snippet = '<dd>' . ft_snippet($id, $highlight) . '</dd>';
$lastMod = '<span class="search_results__lastmod">' . $lang['lastmod'] . ' ';
$lastMod .= '<time datetime="' . date_iso8601($mtime) . '" title="'.dformat($mtime).'">' . dformat($mtime, '%f') . '</time>';
$lastMod .= '</span>';
}
$num++;
$hits = '<span class="hits">' . $cnt . ' ' . $lang['hits'] . '</span>, ';
$resultBody['meta'] = $hits . $resultBody['meta'];
if ($num <= FT_SNIPPET_NUMBER) { // create snippets for the first number of matches only
$resultBody['snippet'] = ft_snippet($id, $highlight);
}
}

$metaLine = '<div class="search_results__metaLine">';
$metaLine .= $lastMod;
$metaLine .= '</div>';


$eventData = [
'resultHeader' => $resultHeader,
'resultBody' => [$metaLine, $snippet],
'resultBody' => $resultBody,
'page' => $id,
'position' => $position,
];
trigger_event('SEARCH_RESULT_FULLPAGE', $eventData);
$html .= '<div class="search_fullpage_result">';
$html .= '<dt>' . implode(' ', $eventData['resultHeader']) . '</dt>';
$html .= implode('', $eventData['resultBody']);
foreach ($eventData['resultBody'] as $class => $htmlContent) {
$html .= "<dd class=\"$class\">$htmlContent</dd>";
}
$html .= '</div>';
}
$html .= '</dl>';
Expand Down
2 changes: 1 addition & 1 deletion inc/Ui/SearchState.php
Expand Up @@ -136,6 +136,6 @@ public function getSearchLink($label)
}

$href = wl($ID, $hrefAttributes, false, '&');
return "<a href='$href' " . buildAttributes($tagAttributes) . ">$label</a>";
return "<a href='$href' " . buildAttributes($tagAttributes, true) . ">$label</a>";
}
}
91 changes: 52 additions & 39 deletions inc/lang/de/lang.php
Expand Up @@ -3,6 +3,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
* @author Michael Bohn <mjbohn@gmail.com>
* @author Joel Strasser <strasser999@gmail.com>
* @author Robert Riebisch <robert.riebisch@googlemail.com>
* @author Joerg <scooter22@gmx.de>
Expand All @@ -17,7 +18,7 @@
* @author Robin Kluth <commi1993@gmail.com>
* @author Arne Pelka <mail@arnepelka.de>
* @author Dirk Einecke <dirk@dirkeinecke.de>
* @author Blitzi94@gmx.de
* @author Blitzi94 <Blitzi94@gmx.de>
* @author Robert Bogenschneider <robog@gmx.de>
* @author Niels Lange <niels@boldencursief.nl>
* @author Christian Wichmann <nospam@zone0.de>
Expand Down Expand Up @@ -94,44 +95,8 @@
$lang['draftdate'] = 'Entwurf gespeichert am';
$lang['nosecedit'] = 'Diese Seite wurde in der Zwischenzeit geändert, der Seitenabschnitt ist veraltet, lade stattdessen volle Seite.';
$lang['searchcreatepage'] = 'Falls der gesuchte Begriff nicht gefunden wurde, können Sie direkt eine neue, nach Ihrer Anfrage benannte Seite %s anlegen.';
$lang['regmissing'] = 'Bitte alle Felder ausfüllen!';
$lang['reguexists'] = 'Der Benutzername existiert leider schon.';
$lang['regsuccess'] = 'Der neue Benutzer wurde angelegt und das Passwort per E-Mail versandt.';
$lang['regsuccess2'] = 'Der neue Benutzer wurde angelegt.';
$lang['regfail'] = 'Der Benutzer konnte nicht angelegt werden.';
$lang['regmailfail'] = 'Offenbar ist ein Fehler beim Versenden der Passwort-E-Mail aufgetreten. Bitte wenden Sie sich an den Wiki-Admin.';
$lang['regbadmail'] = 'Die angegebene E-Mail-Adresse scheint ungültig zu sein. Falls dies ein Fehler ist, wenden Sie sich bitte an den Wiki-Admin.';
$lang['regbadpass'] = 'Die beiden eingegeben Passwörter stimmen nicht überein. Bitte versuchen Sie es noch einmal.';
$lang['regpwmail'] = 'Ihr DokuWiki-Passwort';
$lang['reghere'] = 'Sie haben noch keinen Zugang? Hier registrieren';
$lang['profna'] = 'Änderung des Benutzerprofils in diesem Wiki nicht möglich.';
$lang['profnochange'] = 'Keine Änderungen, nichts zu tun.';
$lang['profnoempty'] = 'Es muss ein Name und eine E-Mail-Adresse angegeben werden.';
$lang['profchanged'] = 'Benutzerprofil erfolgreich geändert.';
$lang['profnodelete'] = 'Dieses Wiki unterstützt kein Löschen von Benutzern.';
$lang['profdeleteuser'] = 'Benutzerprofil löschen';
$lang['profdeleted'] = 'Ihr Benutzerprofil wurde im Wiki gelöscht.';
$lang['profconfdelete'] = 'Ich möchte mein Benutzerprofil löschen.<br/> Diese Aktion lässt sich nicht rückgängig machen,';
$lang['profconfdeletemissing'] = 'Bestätigung in Kontrollkästchen fehlt';
$lang['proffail'] = 'Das Benutzerkonto konnte nicht aktualisiert werden.';
$lang['pwdforget'] = 'Passwort vergessen? Fordern Sie ein neues an';
$lang['resendna'] = 'Passwörter versenden ist in diesem Wiki nicht möglich.';
$lang['resendpwd'] = 'Neues Passwort setzen für';
$lang['resendpwdmissing'] = 'Es tut mir leid, aber Sie müssen alle Felder ausfüllen.';
$lang['resendpwdnouser'] = 'Es tut mir leid, aber der Benutzer existiert nicht in unserer Datenbank.';
$lang['resendpwdbadauth'] = 'Es tut mir leid, aber dieser Authentifizierungscode ist ungültig. Stellen Sie sicher, dass Sie den kompletten Bestätigungslink verwendet haben.';
$lang['resendpwdconfirm'] = 'Ein Bestätigungslink wurde per E-Mail versandt.';
$lang['resendpwdsuccess'] = 'Ihr neues Passwort wurde per E-Mail versandt.';
$lang['license'] = 'Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht:';
$lang['licenseok'] = 'Hinweis: Durch das Bearbeiten dieser Seite geben Sie Ihr Einverständnis, dass Ihr Inhalt unter der folgenden Lizenz veröffentlicht wird:';
$lang['searchmedia'] = 'Suche Dateinamen:';
$lang['searchmedia_in'] = 'Suche in %s';
$lang['txt_upload'] = 'Datei zum Hochladen auswählen:';
$lang['txt_filename'] = 'Hochladen als (optional):';
$lang['txt_overwrt'] = 'Bestehende Datei überschreiben';
$lang['maxuploadsize'] = 'Max. %s pro Datei-Upload.';
$lang['lockedby'] = 'Momentan gesperrt von:';
$lang['lockexpire'] = 'Sperre läuft ab am:';
$lang['search_fullresults'] = 'Volltextergebnisse';
$lang['js']['search_toggle_tools'] = 'Suchwerkzeuge umschalten';
$lang['js']['willexpire'] = 'Die Sperre zur Bearbeitung dieser Seite läuft in einer Minute ab.\nUm Bearbeitungskonflikte zu vermeiden, sollten Sie sie durch einen Klick auf den Vorschau-Knopf verlängern.';
$lang['js']['notsavedyet'] = 'Nicht gespeicherte Änderungen gehen verloren!';
$lang['js']['searchmedia'] = 'Suche Dateien';
Expand Down Expand Up @@ -173,6 +138,54 @@
$lang['js']['media_drop'] = 'Dateien hier hinziehen um sie hochzuladen';
$lang['js']['media_cancel'] = 'Entfernen';
$lang['js']['media_overwrt'] = 'Existierende Dateien überschreiben';
$lang['search_exact_match'] = 'genaue Treffer';
$lang['search_starts_with'] = 'beginnt mit';
$lang['search_ends_with'] = 'endet mit';
$lang['search_contains'] = 'enthält';
$lang['search_custom_match'] = 'angepasst ';
$lang['search_any_ns'] = 'alle Kategorien';
$lang['search_any_time'] = 'jederzeit';
$lang['search_past_7_days'] = 'letzte Woche';
$lang['search_past_month'] = 'letzter Monat';
$lang['search_past_year'] = 'letztes Jahr';
$lang['regmissing'] = 'Bitte alle Felder ausfüllen!';
$lang['reguexists'] = 'Der Benutzername existiert leider schon.';
$lang['regsuccess'] = 'Der neue Benutzer wurde angelegt und das Passwort per E-Mail versandt.';
$lang['regsuccess2'] = 'Der neue Benutzer wurde angelegt.';
$lang['regfail'] = 'Der Benutzer konnte nicht angelegt werden.';
$lang['regmailfail'] = 'Offenbar ist ein Fehler beim Versenden der Passwort-E-Mail aufgetreten. Bitte wenden Sie sich an den Wiki-Admin.';
$lang['regbadmail'] = 'Die angegebene E-Mail-Adresse scheint ungültig zu sein. Falls dies ein Fehler ist, wenden Sie sich bitte an den Wiki-Admin.';
$lang['regbadpass'] = 'Die beiden eingegeben Passwörter stimmen nicht überein. Bitte versuchen Sie es noch einmal.';
$lang['regpwmail'] = 'Ihr DokuWiki-Passwort';
$lang['reghere'] = 'Sie haben noch keinen Zugang? Hier registrieren';
$lang['profna'] = 'Änderung des Benutzerprofils in diesem Wiki nicht möglich.';
$lang['profnochange'] = 'Keine Änderungen, nichts zu tun.';
$lang['profnoempty'] = 'Es muss ein Name und eine E-Mail-Adresse angegeben werden.';
$lang['profchanged'] = 'Benutzerprofil erfolgreich geändert.';
$lang['profnodelete'] = 'Dieses Wiki unterstützt kein Löschen von Benutzern.';
$lang['profdeleteuser'] = 'Benutzerprofil löschen';
$lang['profdeleted'] = 'Ihr Benutzerprofil wurde im Wiki gelöscht.';
$lang['profconfdelete'] = 'Ich möchte mein Benutzerprofil löschen.<br/> Diese Aktion lässt sich nicht rückgängig machen,';
$lang['profconfdeletemissing'] = 'Bestätigung in Kontrollkästchen fehlt';
$lang['proffail'] = 'Das Benutzerkonto konnte nicht aktualisiert werden.';
$lang['pwdforget'] = 'Passwort vergessen? Fordern Sie ein neues an';
$lang['resendna'] = 'Passwörter versenden ist in diesem Wiki nicht möglich.';
$lang['resendpwd'] = 'Neues Passwort setzen für';
$lang['resendpwdmissing'] = 'Es tut mir leid, aber Sie müssen alle Felder ausfüllen.';
$lang['resendpwdnouser'] = 'Es tut mir leid, aber der Benutzer existiert nicht in unserer Datenbank.';
$lang['resendpwdbadauth'] = 'Es tut mir leid, aber dieser Authentifizierungscode ist ungültig. Stellen Sie sicher, dass Sie den kompletten Bestätigungslink verwendet haben.';
$lang['resendpwdconfirm'] = 'Ein Bestätigungslink wurde per E-Mail versandt.';
$lang['resendpwdsuccess'] = 'Ihr neues Passwort wurde per E-Mail versandt.';
$lang['license'] = 'Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht:';
$lang['licenseok'] = 'Hinweis: Durch das Bearbeiten dieser Seite geben Sie Ihr Einverständnis, dass Ihr Inhalt unter der folgenden Lizenz veröffentlicht wird:';
$lang['searchmedia'] = 'Suche Dateinamen:';
$lang['searchmedia_in'] = 'Suche in %s';
$lang['txt_upload'] = 'Datei zum Hochladen auswählen:';
$lang['txt_filename'] = 'Hochladen als (optional):';
$lang['txt_overwrt'] = 'Bestehende Datei überschreiben';
$lang['maxuploadsize'] = 'Max. %s pro Datei-Upload.';
$lang['lockedby'] = 'Momentan gesperrt von:';
$lang['lockexpire'] = 'Sperre läuft ab am:';
$lang['rssfailed'] = 'Es ist ein Fehler beim Laden des Feeds aufgetreten: ';
$lang['nothingfound'] = 'Nichts gefunden.';
$lang['mediaselect'] = 'Dateiauswahl';
Expand Down

0 comments on commit 56ea169

Please sign in to comment.