From 9a857a8c6f1606c31d576621a7f0f07db193de39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lucas?= Date: Fri, 20 Sep 2013 20:44:15 +0200 Subject: [PATCH 01/22] Better english ... maybe --- base.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base.php b/base.php index 38b6b9c..be7c2bc 100644 --- a/base.php +++ b/base.php @@ -168,7 +168,7 @@ function localize($phrase, $count=-1) { /* Load the language file as a JSON object and transform it into an associative array */ $translations = json_decode($lang_file_content, true); - /* Clean the array of all translations unfinished */ + /* Clean the array of all unfinished translations */ foreach ($translations as $key => $val) { if (preg_match ("/^##TODO##/", $key)) { unset ($translations [$key]); From f2404c3dc1e5f4f30d0b2a5613513b5a705861fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lucas?= Date: Fri, 20 Sep 2013 20:44:35 +0200 Subject: [PATCH 02/22] Upgrade to doT 1.0.1 --- resources/doT/doT.min.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/resources/doT/doT.min.js b/resources/doT/doT.min.js index 1f05f62..823cabc 100644 --- a/resources/doT/doT.min.js +++ b/resources/doT/doT.min.js @@ -1,7 +1,8 @@ -/* Laura Doktorova https://github.com/olado/doT */(function(){function o(){var a={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},b=/&(?!#?\w+;)|<|>|"|'|\//g;return function(){return this?this.replace(b,function(c){return a[c]||c}):this}}function p(a,b,c){return(typeof b==="string"?b:b.toString()).replace(a.define||i,function(l,e,f,g){if(e.indexOf("def.")===0)e=e.substring(4);if(!(e in c))if(f===":"){a.defineParams&&g.replace(a.defineParams,function(n,h,d){c[e]={arg:h,text:d}});e in c||(c[e]=g)}else(new Function("def","def['"+ -e+"']="+g))(c);return""}).replace(a.use||i,function(l,e){if(a.useParams)e=e.replace(a.useParams,function(g,n,h,d){if(c[h]&&c[h].arg&&d){g=(h+":"+d).replace(/'|\\/g,"_");c.__exp=c.__exp||{};c.__exp[g]=c[h].text.replace(RegExp("(^|[^\\w$])"+c[h].arg+"([^\\w$])","g"),"$1"+d+"$2");return n+"def.__exp['"+g+"']"}});var f=(new Function("def","return "+e))(c);return f?p(a,f,c):f})}function m(a){return a.replace(/\\('|\\)/g,"$1").replace(/[\r\t\n]/g," ")}var j={version:"1.0.0",templateSettings:{evaluate:/\{\{([\s\S]+?\}?)\}\}/g, +/* Laura Doktorova https://github.com/olado/doT */ +(function(){function o(){var a={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},b=/&(?!#?\w+;)|<|>|"|'|\//g;return function(){return this?this.replace(b,function(c){return a[c]||c}):this}}function p(a,b,c){return(typeof b==="string"?b:b.toString()).replace(a.define||i,function(l,e,f,g){if(e.indexOf("def.")===0)e=e.substring(4);if(!(e in c))if(f===":"){a.defineParams&&g.replace(a.defineParams,function(n,h,d){c[e]={arg:h,text:d}});e in c||(c[e]=g)}else(new Function("def","def['"+ +e+"']="+g))(c);return""}).replace(a.use||i,function(l,e){if(a.useParams)e=e.replace(a.useParams,function(g,n,h,d){if(c[h]&&c[h].arg&&d){g=(h+":"+d).replace(/'|\\/g,"_");c.__exp=c.__exp||{};c.__exp[g]=c[h].text.replace(RegExp("(^|[^\\w$])"+c[h].arg+"([^\\w$])","g"),"$1"+d+"$2");return n+"def.__exp['"+g+"']"}});var f=(new Function("def","return "+e))(c);return f?p(a,f,c):f})}function m(a){return a.replace(/\\('|\\)/g,"$1").replace(/[\r\t\n]/g," ")}var j={version:"1.0.1",templateSettings:{evaluate:/\{\{([\s\S]+?(\}?)+)\}\}/g, interpolate:/\{\{=([\s\S]+?)\}\}/g,encode:/\{\{!([\s\S]+?)\}\}/g,use:/\{\{#([\s\S]+?)\}\}/g,useParams:/(^|[^\w$])def(?:\.|\[[\'\"])([\w$\.]+)(?:[\'\"]\])?\s*\:\s*([\w$\.]+|\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})/g,define:/\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g,defineParams:/^\s*([\w$]+):([\s\S]+)/,conditional:/\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g,iterate:/\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\}\})/g,varname:"it",strip:true,append:true,selfcontained:false},template:undefined, -compile:undefined};if(typeof module!=="undefined"&&module.exports)module.exports=j;else if(typeof define==="function"&&define.amd)define(function(){return j});else(function(){return this||(0,eval)("this")})().doT=j;String.prototype.encodeHTML=o();var q={append:{start:"'+(",end:")+'",endencode:"||'').toString().encodeHTML()+'"},split:{start:"';out+=(",end:");out+='",endencode:"||'').toString().encodeHTML();out+='"}},i=/$^/;j.template=function(a,b,c){b=b||j.templateSettings;var l=b.append?q.append: -q.split,e,f=0,g;a=b.use||b.define?p(b,a,c||{}):a;a=("var out='"+(b.strip?a.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g," ").replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g,""):a).replace(/'|\\/g,"\\$&").replace(b.interpolate||i,function(h,d){return l.start+m(d)+l.end}).replace(b.encode||i,function(h,d){e=true;return l.start+m(d)+l.endencode}).replace(b.conditional||i,function(h,d,k){return d?k?"';}else if("+m(k)+"){out+='":"';}else{out+='":k?"';if("+m(k)+"){out+='":"';}out+='"}).replace(b.iterate||i,function(h, -d,k,r){if(!d)return"';} } out+='";f+=1;g=r||"i"+f;d=m(d);return"';var arr"+f+"="+d+";if(arr"+f+"){var "+k+","+g+"=-1,l"+f+"=arr"+f+".length-1;while("+g+" Date: Sun, 22 Sep 2013 16:00:24 +0200 Subject: [PATCH 03/22] Fix config_default, FBReaderJ is now compliant (for a few months). --- config_default.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config_default.php b/config_default.php index de6ea58..093fd56 100644 --- a/config_default.php +++ b/config_default.php @@ -103,8 +103,8 @@ /* * generate a invalid OPDS stream to allow bad OPDS client to use search - * Example of non compliant OPDS client : FBReader (was working in May 2012), Moon+ Reader - * Example of good OPDS client : Mantano + * Example of non compliant OPDS client : Moon+ Reader + * Example of good OPDS client : Mantano, FBReader * 1 : enable support for non compliant OPDS client * 0 : always generate valid OPDS code */ From acea490e00d35baf111860bf53fe12301a1556de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lucas?= Date: Fri, 27 Sep 2013 17:10:07 +0200 Subject: [PATCH 04/22] Add new method to search tags and series. re #34 --- serie.php | 18 ++++++++++++++++++ tag.php | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/serie.php b/serie.php index 9dac0f3..b377881 100644 --- a/serie.php +++ b/serie.php @@ -72,4 +72,22 @@ order by series.sort'); } return $entryArray; } + + public static function getAllSeriesByQuery($query) { + $result = parent::getDb ()->prepare('select series.id as id, series.name as name, series.sort as sort, count(*) as count +from series, books_series_link +where series.id = series and series.name like ? +group by series.id, series.name, series.sort +order by series.sort'); + $entryArray = array(); + $result->execute (array ('%' . $query . '%')); + while ($post = $result->fetchObject ()) + { + $serie = new Serie ($post->id, $post->sort); + array_push ($entryArray, new Entry ($serie->name, $serie->getEntryId (), + str_format (localize("bookword", $post->count), $post->count), "text", + array ( new LinkNavigation ($serie->getUri ())))); + } + return $entryArray; + } } diff --git a/tag.php b/tag.php index 3664b0d..b3d9a23 100644 --- a/tag.php +++ b/tag.php @@ -61,4 +61,22 @@ order by tags.name'); } return $entryArray; } + + public static function getAllTagsByQuery($query) { + $result = parent::getDb ()->prepare('select tags.id as id, tags.name as name, count(*) as count +from tags, books_tags_link +where tags.id = tag and tags.name like ? +group by tags.id, tags.name +order by tags.name'); + $entryArray = array(); + $result->execute (array ('%' . $query . '%')); + while ($post = $result->fetchObject ()) + { + $tag = new Tag ($post->id, $post->name); + array_push ($entryArray, new Entry ($tag->name, $tag->getEntryId (), + str_format (localize("bookword", $post->count), $post->count), "text", + array ( new LinkNavigation ($tag->getUri ())))); + } + return $entryArray; + } } From 3943205b58d5eb7d312586b49948d61abd6c8c35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lucas?= Date: Fri, 27 Sep 2013 17:13:31 +0200 Subject: [PATCH 05/22] Change the search to look into tags and series (in addition to book title and author). re #34, #47, #78 --- base.php | 31 ++++++++++++++++++++++++------- book.php | 8 ++++++-- templates/default/header.html | 1 - 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/base.php b/base.php index be7c2bc..eecd77e 100644 --- a/base.php +++ b/base.php @@ -664,18 +664,26 @@ class PageRecentBooks extends Page class PageQueryResult extends Page { + const SCOPE_TAG = "tag"; + const SCOPE_SERIES = "series"; + const SCOPE_AUTHOR = "author"; + const SCOPE_BOOK = "book"; + public function InitializeContent () { global $config; $this->title = str_format (localize ("search.result"), $this->query); - $currentPage = getURLParam ("current", NULL); + $scope = getURLParam ("scope"); + + $crit = "%" . $this->query . "%"; + $bad = "QQQQQ"; // Special case when we are doing a search and no database is selected if (is_array ($config['calibre_directory']) && is_null (GetUrlParam (DB))) { $i = 0; foreach ($config['calibre_directory'] as $key => $value) { Base::clearDb (); - list ($array, $totalNumber) = Book::getBooksByQuery ($this->query, $this->n, $i); + list ($array, $totalNumber) = Book::getBooksByQuery (array ($crit, $crit, $crit, $crit), $this->n, $i); array_push ($this->entryArray, new Entry ($key, DB . ":query:{$i}", str_format (localize ("bookword", count($array)), count($array)), "text", array ( new LinkNavigation ("?" . DB . "={$i}&page=9&query=" . $this->query)))); @@ -683,14 +691,23 @@ class PageQueryResult extends Page } return; } - - switch ($currentPage) { - case Base::PAGE_ALL_AUTHORS : - case Base::PAGE_AUTHORS_FIRST_LETTER : + switch ($scope) { + case self::SCOPE_AUTHOR : $this->entryArray = Author::getAuthorsByStartingLetter ('%' . $this->query); break; + case self::SCOPE_TAG : + $this->entryArray = Tag::getAllTagsByQuery ($this->query); + break; + case self::SCOPE_SERIES : + $this->entryArray = Serie::getAllSeriesByQuery ($this->query); + break; + case self::SCOPE_BOOK : + list ($this->entryArray, $this->totalNumber) = Book::getBooksByQuery ( + array ($bad, $bad, $bad, $crit), $this->n); + break; default: - list ($this->entryArray, $this->totalNumber) = Book::getBooksByQuery ($this->query, $this->n); + list ($this->entryArray, $this->totalNumber) = Book::getBooksByQuery ( + array ($crit, $crit, $crit, $crit), $this->n); } } } diff --git a/book.php b/book.php index 09b1dc4..94fcf69 100644 --- a/book.php +++ b/book.php @@ -32,7 +32,11 @@ define ('SQL_BOOKS_BY_LANGUAGE', "select {0} from books_languages_link, books " define ('SQL_BOOKS_BY_CUSTOM', "select {0} from {2}, books " . SQL_BOOKS_LEFT_JOIN . " where {2}.book = books.id and {2}.{3} = ? {1} order by sort"); define ('SQL_BOOKS_QUERY', "select {0} from books " . SQL_BOOKS_LEFT_JOIN . " - where (exists (select null from authors, books_authors_link where book = books.id and author = authors.id and authors.name like ?) or title like ?) {1} order by books.sort"); + where ( + exists (select null from authors, books_authors_link where book = books.id and author = authors.id and authors.name like ?) or + exists (select null from tags, books_tags_link where book = books.id and tag = tags.id and tags.name like ?) or + exists (select null from series, books_series_link on book = books.id and books_series_link.series = series.id and series.name like ?) or + title like ?) {1} order by books.sort"); define ('SQL_BOOKS_RECENT', "select {0} from books " . SQL_BOOKS_LEFT_JOIN . " where 1=1 {1} order by timestamp desc limit "); @@ -524,7 +528,7 @@ where data.book = books.id and data.id = ?'); } public static function getBooksByQuery($query, $n, $database = NULL) { - return self::getEntryArray (self::SQL_BOOKS_QUERY, array ("%" . $query . "%", "%" . $query . "%"), $n, $database); + return self::getEntryArray (self::SQL_BOOKS_QUERY, $query, $n, $database); } public static function getAllBooks() { diff --git a/templates/default/header.html b/templates/default/header.html index 13c981b..193a11d 100644 --- a/templates/default/header.html +++ b/templates/default/header.html @@ -17,7 +17,6 @@
- {{? it.databaseId != ""}} From d7aa7af16e8a0ecbef002cb711ac1bf17d9db272 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lucas?= Date: Fri, 27 Sep 2013 17:15:00 +0200 Subject: [PATCH 06/22] Add new strings for the future search. re #34 --- lang/Localization_ca.json | 6 ++++++ lang/Localization_de.json | 6 ++++++ lang/Localization_en.json | 6 ++++++ lang/Localization_es.json | 6 ++++++ lang/Localization_fr.json | 6 ++++++ lang/Localization_it.json | 6 ++++++ lang/Localization_nb.json | 6 ++++++ lang/Localization_nl.json | 6 ++++++ lang/Localization_pt.json | 6 ++++++ lang/Localization_ru.json | 6 ++++++ lang/Localization_zh.json | 6 ++++++ 11 files changed, 66 insertions(+) diff --git a/lang/Localization_ca.json b/lang/Localization_ca.json index 729e17c..e1d603b 100644 --- a/lang/Localization_ca.json +++ b/lang/Localization_ca.json @@ -49,6 +49,9 @@ "##TODO##series.alphabetical.none":"Alphabetical index of absolutely no series", "series.alphabetical.one":"Índex alfabètic d'una sola sèrie", "series.title":"Sèries", +"##TODO##seriesword.many":"", +"##TODO##seriesword.none":"", +"##TODO##seriesword.one":"", "##TODO##sort.alternate":"Sort", "splitByLetter.book.other":"Altres llibres", "splitByLetter.letter":"{0} ({1})", @@ -56,6 +59,9 @@ "##TODO##tags.alphabetical.none":"Alphabetical index of absolutely no tag", "tags.alphabetical.one":"Llistat alfabètic de la única etiqueta", "tags.title":"Etiquetes", +"##TODO##tagword.many":"", +"##TODO##tagword.none":"", +"##TODO##tagword.one":"", "tagword.title":"Etiquetes", "##TODO##languages.abk":"Abkhaz", "##TODO##languages.aaf":"Afar", diff --git a/lang/Localization_de.json b/lang/Localization_de.json index b36af99..b3ef76c 100644 --- a/lang/Localization_de.json +++ b/lang/Localization_de.json @@ -49,6 +49,9 @@ "##TODO##series.alphabetical.none":"Alphabetical index of absolutely no series", "series.alphabetical.one":"Alphabetischer Index der Serie", "series.title":"Serien", +"##TODO##seriesword.many":"", +"##TODO##seriesword.none":"", +"##TODO##seriesword.one":"", "##TODO##sort.alternate":"Sort", "splitByLetter.book.other":"Andere Bücher", "splitByLetter.letter":"{0} unter {1}", @@ -56,6 +59,9 @@ "##TODO##tags.alphabetical.none":"Alphabetical index of absolutely no tag", "tags.alphabetical.one":"Alphabetischer Index des Schlagworts", "tags.title":"Schlagwörter", +"##TODO##tagword.many":"", +"##TODO##tagword.none":"", +"##TODO##tagword.one":"", "tagword.title":"Schlagwörter", "##TODO##languages.abk":"Abkhaz", "##TODO##languages.aaf":"Afar", diff --git a/lang/Localization_en.json b/lang/Localization_en.json index dbad2e8..c243666 100644 --- a/lang/Localization_en.json +++ b/lang/Localization_en.json @@ -49,6 +49,9 @@ "series.alphabetical.none":"Alphabetical index of absolutely no series", "series.alphabetical.one":"Alphabetical index of the single series", "series.title":"Series", +"seriesword.many":"{0} series", +"seriesword.none":"No series", +"seriesword.one":"1 series", "sort.alternate":"Sort", "splitByLetter.book.other":"Other books", "splitByLetter.letter":"{0} starting with {1}", @@ -56,6 +59,9 @@ "tags.alphabetical.none":"Alphabetical index of absolutely no tag", "tags.alphabetical.one":"Alphabetical index of the single tag", "tags.title":"Tags", +"tagword.many":"{0} tags", +"tagword.none":"No tag", +"tagword.one":"1 tag", "tagword.title":"Tags", "languages.abk":"Abkhaz", "languages.aaf":"Afar", diff --git a/lang/Localization_es.json b/lang/Localization_es.json index 6d523c1..a3dd8dd 100644 --- a/lang/Localization_es.json +++ b/lang/Localization_es.json @@ -49,6 +49,9 @@ "##TODO##series.alphabetical.none":"Alphabetical index of absolutely no series", "series.alphabetical.one":"Indice de una sola serie", "series.title":"Series:", +"##TODO##seriesword.many":"", +"##TODO##seriesword.none":"", +"##TODO##seriesword.one":"", "##TODO##sort.alternate":"Sort", "splitByLetter.book.other":"Otros libros", "splitByLetter.letter":"{0} que empiezan por {1}", @@ -56,6 +59,9 @@ "##TODO##tags.alphabetical.none":"Alphabetical index of absolutely no tag", "tags.alphabetical.one":"Listado Alfabético de la unica etiqueta", "tags.title":"etiquetas", +"##TODO##tagword.many":"", +"##TODO##tagword.none":"", +"##TODO##tagword.one":"", "tagword.title":"Etiquetas", "##TODO##languages.abk":"Abkhaz", "##TODO##languages.aaf":"Afar", diff --git a/lang/Localization_fr.json b/lang/Localization_fr.json index fe7743a..855307f 100644 --- a/lang/Localization_fr.json +++ b/lang/Localization_fr.json @@ -49,6 +49,9 @@ "##TODO##series.alphabetical.none":"Alphabetical index of absolutely no series", "series.alphabetical.one":"Index alphabétique de la seule collection", "series.title":"Collections", +"seriesword.many":"{0} collections", +"seriesword.none":"Pas de collection", +"seriesword.one":"1 collection", "sort.alternate":"Trier", "splitByLetter.book.other":"Autres livres", "splitByLetter.letter":"{0} débutant par {1}", @@ -56,6 +59,9 @@ "##TODO##tags.alphabetical.none":"Alphabetical index of absolutely no tag", "tags.alphabetical.one":"Index alphabétique de la seule étiquette", "tags.title":"Étiquettes", +"tagword.many":"{0} étiquettes", +"tagword.none":"Sans étiquette", +"tagword.one":"1 étiquette", "tagword.title":"Étiquettes", "##TODO##languages.abk":"Abkhaz", "##TODO##languages.aaf":"Afar", diff --git a/lang/Localization_it.json b/lang/Localization_it.json index d19240e..41cb8fd 100644 --- a/lang/Localization_it.json +++ b/lang/Localization_it.json @@ -49,6 +49,9 @@ "series.alphabetical.none":"Indice alfabetico indipendente dalla collana", "series.alphabetical.one":"Indice alfabetico di una sola collana", "series.title":"Collane", +"##TODO##seriesword.many":"", +"##TODO##seriesword.none":"", +"##TODO##seriesword.one":"", "sort.alternate":"Ordina", "splitByLetter.book.other":"Altri libri", "splitByLetter.letter":"{0} che iniziano per {1}", @@ -56,6 +59,9 @@ "tags.alphabetical.none":"Indice alfabetico indipendente dall'argomento", "tags.alphabetical.one":"Indice alfabetico del solo argomento", "tags.title":"Argomenti", +"##TODO##tagword.many":"", +"##TODO##tagword.none":"", +"##TODO##tagword.one":"", "tagword.title":"Argomenti", "##TODO##languages.abk":"Abkhaz", "##TODO##languages.aaf":"Afar", diff --git a/lang/Localization_nb.json b/lang/Localization_nb.json index 991ff70..a5345de 100644 --- a/lang/Localization_nb.json +++ b/lang/Localization_nb.json @@ -49,6 +49,9 @@ "series.alphabetical.none":"Alfabetisk indeks for ingen serier", "series.alphabetical.one":"Alfabetisk indeks for èn enkelt serie", "series.title":"Serier", +"##TODO##seriesword.many":"", +"##TODO##seriesword.none":"", +"##TODO##seriesword.one":"", "sort.alternate":"Sorter", "splitByLetter.book.other":"Andre bøker", "splitByLetter.letter":"{0} begynner med {1}", @@ -56,6 +59,9 @@ "tags.alphabetical.none":"Alfabetisk indeks for ingen stikkord", "tags.alphabetical.one":"Alfabetisk indeks for ett enkelt stikkord", "tags.title":"Stikkord", +"##TODO##tagword.many":"", +"##TODO##tagword.none":"", +"##TODO##tagword.one":"", "tagword.title":"Stikkord", "##TODO##languages.abk":"Abkhaz", "##TODO##languages.aaf":"Afar", diff --git a/lang/Localization_nl.json b/lang/Localization_nl.json index f9d9c59..7288bdc 100644 --- a/lang/Localization_nl.json +++ b/lang/Localization_nl.json @@ -49,6 +49,9 @@ "series.alphabetical.none":"Alfabetische index van absoluut geen ekele serie", "series.alphabetical.one":"Alfabetische index van 1 serie", "series.title":"Series", +"##TODO##seriesword.many":"", +"##TODO##seriesword.none":"", +"##TODO##seriesword.one":"", "sort.alternate":"Sorteren", "splitByLetter.book.other":"Andere boeken", "splitByLetter.letter":"{0} beginnend met {1}", @@ -56,6 +59,9 @@ "tags.alphabetical.none":"Alfabetische index van absoluut geen enkele tag", "tags.alphabetical.one":"Alfabetische index van 1 tag", "tags.title":"Tags", +"##TODO##tagword.many":"", +"##TODO##tagword.none":"", +"##TODO##tagword.one":"", "tagword.title":"Tags", "##TODO##languages.abk":"Abkhaz", "##TODO##languages.aaf":"Afar", diff --git a/lang/Localization_pt.json b/lang/Localization_pt.json index 0aed078..313a876 100644 --- a/lang/Localization_pt.json +++ b/lang/Localization_pt.json @@ -49,6 +49,9 @@ "series.alphabetical.none":"Índice alfabético de nenhuma série", "series.alphabetical.one":"Índice alfabético de uma série", "series.title":"Séries", +"##TODO##seriesword.many":"", +"##TODO##seriesword.none":"", +"##TODO##seriesword.one":"", "sort.alternate":"Ordenar", "splitByLetter.book.other":"Outros livros", "splitByLetter.letter":"{0} começando com {1}", @@ -56,6 +59,9 @@ "tags.alphabetical.none":"Índice alfabético de nenhuma etiqueta", "##TODO##tags.alphabetical.one":"Alphabetical index of the single tag", "tags.title":"Etiquetas", +"##TODO##tagword.many":"", +"##TODO##tagword.none":"", +"##TODO##tagword.one":"", "tagword.title":"Etiquetas", "languages.abk":"Abcázia", "languages.aaf":"Afar", diff --git a/lang/Localization_ru.json b/lang/Localization_ru.json index b16daca..94cc547 100644 --- a/lang/Localization_ru.json +++ b/lang/Localization_ru.json @@ -49,6 +49,9 @@ "##TODO##series.alphabetical.none":"Alphabetical index of absolutely no series", "series.alphabetical.one":"Алфавитный указатель для одной серии", "series.title":"Серии", +"##TODO##seriesword.many":"", +"##TODO##seriesword.none":"", +"##TODO##seriesword.one":"", "##TODO##sort.alternate":"Sort", "splitByLetter.book.other":"Другие книги", "splitByLetter.letter":"{0} начать с {1}", @@ -56,6 +59,9 @@ "##TODO##tags.alphabetical.none":"Alphabetical index of absolutely no tag", "tags.alphabetical.one":"Алфавитный указатель для одного тэга", "tags.title":"Тэги", +"##TODO##tagword.many":"", +"##TODO##tagword.none":"", +"##TODO##tagword.one":"", "tagword.title":"Тэги", "##TODO##languages.abk":"Abkhaz", "##TODO##languages.aaf":"Afar", diff --git a/lang/Localization_zh.json b/lang/Localization_zh.json index 12ef64e..9ce8546 100644 --- a/lang/Localization_zh.json +++ b/lang/Localization_zh.json @@ -49,6 +49,9 @@ "series.alphabetical.none":"Alphabetical index of absolutely no series", "series.alphabetical.one":"Alphabetical index of the single series", "series.title":"系列", +"##TODO##seriesword.many":"", +"##TODO##seriesword.none":"", +"##TODO##seriesword.one":"", "sort.alternate":"排序", "splitByLetter.book.other":"其他书籍", "splitByLetter.letter":"{0} 以 {1} 开头", @@ -56,6 +59,9 @@ "tags.alphabetical.none":"Alphabetical index of absolutely no tag", "tags.alphabetical.one":"Alphabetical index of the single tag", "tags.title":"标签", +"##TODO##tagword.many":"", +"##TODO##tagword.none":"", +"##TODO##tagword.one":"", "tagword.title":"标签", "##TODO##languages.abk":"Abkhaz", "##TODO##languages.aaf":"Afar", From 733afc2b4c4ad6c9b2fce95150a735d4bc52f72a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lucas?= Date: Sat, 28 Sep 2013 20:56:46 +0200 Subject: [PATCH 07/22] Update the new strings for all languages. re #34 --- lang/Localization_ca.json | 12 ++++++------ lang/Localization_de.json | 12 ++++++------ lang/Localization_es.json | 12 ++++++------ lang/Localization_it.json | 12 ++++++------ lang/Localization_nb.json | 12 ++++++------ lang/Localization_nl.json | 12 ++++++------ lang/Localization_pt.json | 12 ++++++------ lang/Localization_ru.json | 12 ++++++------ lang/Localization_zh.json | 12 ++++++------ 9 files changed, 54 insertions(+), 54 deletions(-) diff --git a/lang/Localization_ca.json b/lang/Localization_ca.json index e1d603b..232e3cc 100644 --- a/lang/Localization_ca.json +++ b/lang/Localization_ca.json @@ -49,9 +49,9 @@ "##TODO##series.alphabetical.none":"Alphabetical index of absolutely no series", "series.alphabetical.one":"Índex alfabètic d'una sola sèrie", "series.title":"Sèries", -"##TODO##seriesword.many":"", -"##TODO##seriesword.none":"", -"##TODO##seriesword.one":"", +"seriesword.many":"sèries", +"seriesword.none":"Cap sèrie", +"seriesword.one":"1 sèrie", "##TODO##sort.alternate":"Sort", "splitByLetter.book.other":"Altres llibres", "splitByLetter.letter":"{0} ({1})", @@ -59,9 +59,9 @@ "##TODO##tags.alphabetical.none":"Alphabetical index of absolutely no tag", "tags.alphabetical.one":"Llistat alfabètic de la única etiqueta", "tags.title":"Etiquetes", -"##TODO##tagword.many":"", -"##TODO##tagword.none":"", -"##TODO##tagword.one":"", +"tagword.many":"etiquetes", +"tagword.none":"Cap etiqueta", +"tagword.one":"1 etiqueta", "tagword.title":"Etiquetes", "##TODO##languages.abk":"Abkhaz", "##TODO##languages.aaf":"Afar", diff --git a/lang/Localization_de.json b/lang/Localization_de.json index b3ef76c..0c9545a 100644 --- a/lang/Localization_de.json +++ b/lang/Localization_de.json @@ -49,9 +49,9 @@ "##TODO##series.alphabetical.none":"Alphabetical index of absolutely no series", "series.alphabetical.one":"Alphabetischer Index der Serie", "series.title":"Serien", -"##TODO##seriesword.many":"", -"##TODO##seriesword.none":"", -"##TODO##seriesword.one":"", +"seriesword.many":"{0} Serien", +"seriesword.none":"Keine Serie", +"seriesword.one":"1 Serie", "##TODO##sort.alternate":"Sort", "splitByLetter.book.other":"Andere Bücher", "splitByLetter.letter":"{0} unter {1}", @@ -59,9 +59,9 @@ "##TODO##tags.alphabetical.none":"Alphabetical index of absolutely no tag", "tags.alphabetical.one":"Alphabetischer Index des Schlagworts", "tags.title":"Schlagwörter", -"##TODO##tagword.many":"", -"##TODO##tagword.none":"", -"##TODO##tagword.one":"", +"tagword.many":"{0} Schlagwörter", +"tagword.none":"Kein Schlagwort", +"tagword.one":"1 Schlagwort", "tagword.title":"Schlagwörter", "##TODO##languages.abk":"Abkhaz", "##TODO##languages.aaf":"Afar", diff --git a/lang/Localization_es.json b/lang/Localization_es.json index a3dd8dd..4f3e1b8 100644 --- a/lang/Localization_es.json +++ b/lang/Localization_es.json @@ -49,9 +49,9 @@ "##TODO##series.alphabetical.none":"Alphabetical index of absolutely no series", "series.alphabetical.one":"Indice de una sola serie", "series.title":"Series:", -"##TODO##seriesword.many":"", -"##TODO##seriesword.none":"", -"##TODO##seriesword.one":"", +"seriesword.many":"series", +"seriesword.none":"Sin series", +"seriesword.one":"1 serie", "##TODO##sort.alternate":"Sort", "splitByLetter.book.other":"Otros libros", "splitByLetter.letter":"{0} que empiezan por {1}", @@ -59,9 +59,9 @@ "##TODO##tags.alphabetical.none":"Alphabetical index of absolutely no tag", "tags.alphabetical.one":"Listado Alfabético de la unica etiqueta", "tags.title":"etiquetas", -"##TODO##tagword.many":"", -"##TODO##tagword.none":"", -"##TODO##tagword.one":"", +"tagword.many":"etiquetas", +"tagword.none":"Sin etiquetas", +"tagword.one":"1 etiqueta", "tagword.title":"Etiquetas", "##TODO##languages.abk":"Abkhaz", "##TODO##languages.aaf":"Afar", diff --git a/lang/Localization_it.json b/lang/Localization_it.json index 41cb8fd..96380cd 100644 --- a/lang/Localization_it.json +++ b/lang/Localization_it.json @@ -49,9 +49,9 @@ "series.alphabetical.none":"Indice alfabetico indipendente dalla collana", "series.alphabetical.one":"Indice alfabetico di una sola collana", "series.title":"Collane", -"##TODO##seriesword.many":"", -"##TODO##seriesword.none":"", -"##TODO##seriesword.one":"", +"seriesword.many":"{0} collane", +"seriesword.none":"Nessuna collana", +"seriesword.one":"1 collana", "sort.alternate":"Ordina", "splitByLetter.book.other":"Altri libri", "splitByLetter.letter":"{0} che iniziano per {1}", @@ -59,9 +59,9 @@ "tags.alphabetical.none":"Indice alfabetico indipendente dall'argomento", "tags.alphabetical.one":"Indice alfabetico del solo argomento", "tags.title":"Argomenti", -"##TODO##tagword.many":"", -"##TODO##tagword.none":"", -"##TODO##tagword.one":"", +"tagword.many":"{0} argomenti", +"tagword.none":"Senza argomento", +"tagword.one":"1 argomento", "tagword.title":"Argomenti", "##TODO##languages.abk":"Abkhaz", "##TODO##languages.aaf":"Afar", diff --git a/lang/Localization_nb.json b/lang/Localization_nb.json index a5345de..30eb7bd 100644 --- a/lang/Localization_nb.json +++ b/lang/Localization_nb.json @@ -49,9 +49,9 @@ "series.alphabetical.none":"Alfabetisk indeks for ingen serier", "series.alphabetical.one":"Alfabetisk indeks for èn enkelt serie", "series.title":"Serier", -"##TODO##seriesword.many":"", -"##TODO##seriesword.none":"", -"##TODO##seriesword.one":"", +"seriesword.many":"{0} serier", +"seriesword.none":"Ingen serier", +"seriesword.one":"1 serie", "sort.alternate":"Sorter", "splitByLetter.book.other":"Andre bøker", "splitByLetter.letter":"{0} begynner med {1}", @@ -59,9 +59,9 @@ "tags.alphabetical.none":"Alfabetisk indeks for ingen stikkord", "tags.alphabetical.one":"Alfabetisk indeks for ett enkelt stikkord", "tags.title":"Stikkord", -"##TODO##tagword.many":"", -"##TODO##tagword.none":"", -"##TODO##tagword.one":"", +"tagword.many":"{0} stikkord", +"tagword.none":"Ingen stikkord", +"tagword.one":"1 stikkord", "tagword.title":"Stikkord", "##TODO##languages.abk":"Abkhaz", "##TODO##languages.aaf":"Afar", diff --git a/lang/Localization_nl.json b/lang/Localization_nl.json index 7288bdc..9376a0e 100644 --- a/lang/Localization_nl.json +++ b/lang/Localization_nl.json @@ -49,9 +49,9 @@ "series.alphabetical.none":"Alfabetische index van absoluut geen ekele serie", "series.alphabetical.one":"Alfabetische index van 1 serie", "series.title":"Series", -"##TODO##seriesword.many":"", -"##TODO##seriesword.none":"", -"##TODO##seriesword.one":"", +"seriesword.many":"{0} series", +"seriesword.none":"Geen series", +"seriesword.one":"1 serie", "sort.alternate":"Sorteren", "splitByLetter.book.other":"Andere boeken", "splitByLetter.letter":"{0} beginnend met {1}", @@ -59,9 +59,9 @@ "tags.alphabetical.none":"Alfabetische index van absoluut geen enkele tag", "tags.alphabetical.one":"Alfabetische index van 1 tag", "tags.title":"Tags", -"##TODO##tagword.many":"", -"##TODO##tagword.none":"", -"##TODO##tagword.one":"", +"tagword.many":"{0} tags", +"tagword.none":"Geen tag", +"tagword.one":"1 tag", "tagword.title":"Tags", "##TODO##languages.abk":"Abkhaz", "##TODO##languages.aaf":"Afar", diff --git a/lang/Localization_pt.json b/lang/Localization_pt.json index 313a876..bb93bb6 100644 --- a/lang/Localization_pt.json +++ b/lang/Localization_pt.json @@ -49,9 +49,9 @@ "series.alphabetical.none":"Índice alfabético de nenhuma série", "series.alphabetical.one":"Índice alfabético de uma série", "series.title":"Séries", -"##TODO##seriesword.many":"", -"##TODO##seriesword.none":"", -"##TODO##seriesword.one":"", +"seriesword.many":"{0} séries", +"seriesword.none":"Sem séries", +"seriesword.one":"1 série", "sort.alternate":"Ordenar", "splitByLetter.book.other":"Outros livros", "splitByLetter.letter":"{0} começando com {1}", @@ -59,9 +59,9 @@ "tags.alphabetical.none":"Índice alfabético de nenhuma etiqueta", "##TODO##tags.alphabetical.one":"Alphabetical index of the single tag", "tags.title":"Etiquetas", -"##TODO##tagword.many":"", -"##TODO##tagword.none":"", -"##TODO##tagword.one":"", +"tagword.many":"{0} etiquetas", +"tagword.none":"Sem etiquetas", +"tagword.one":"1 etiqueta", "tagword.title":"Etiquetas", "languages.abk":"Abcázia", "languages.aaf":"Afar", diff --git a/lang/Localization_ru.json b/lang/Localization_ru.json index 94cc547..58310ef 100644 --- a/lang/Localization_ru.json +++ b/lang/Localization_ru.json @@ -49,9 +49,9 @@ "##TODO##series.alphabetical.none":"Alphabetical index of absolutely no series", "series.alphabetical.one":"Алфавитный указатель для одной серии", "series.title":"Серии", -"##TODO##seriesword.many":"", -"##TODO##seriesword.none":"", -"##TODO##seriesword.one":"", +"seriesword.many":"{0} серий(и)", +"seriesword.none":"Нет серий", +"seriesword.one":"1 серия", "##TODO##sort.alternate":"Sort", "splitByLetter.book.other":"Другие книги", "splitByLetter.letter":"{0} начать с {1}", @@ -59,9 +59,9 @@ "##TODO##tags.alphabetical.none":"Alphabetical index of absolutely no tag", "tags.alphabetical.one":"Алфавитный указатель для одного тэга", "tags.title":"Тэги", -"##TODO##tagword.many":"", -"##TODO##tagword.none":"", -"##TODO##tagword.one":"", +"tagword.many":"{0} тэгов(а)", +"tagword.none":"Нет тэгов", +"tagword.one":"1 тэг", "tagword.title":"Тэги", "##TODO##languages.abk":"Abkhaz", "##TODO##languages.aaf":"Afar", diff --git a/lang/Localization_zh.json b/lang/Localization_zh.json index 9ce8546..5bc4ade 100644 --- a/lang/Localization_zh.json +++ b/lang/Localization_zh.json @@ -49,9 +49,9 @@ "series.alphabetical.none":"Alphabetical index of absolutely no series", "series.alphabetical.one":"Alphabetical index of the single series", "series.title":"系列", -"##TODO##seriesword.many":"", -"##TODO##seriesword.none":"", -"##TODO##seriesword.one":"", +"seriesword.many":"{0} 系列", +"seriesword.none":"没有系列", +"seriesword.one":"1 个系列", "sort.alternate":"排序", "splitByLetter.book.other":"其他书籍", "splitByLetter.letter":"{0} 以 {1} 开头", @@ -59,9 +59,9 @@ "tags.alphabetical.none":"Alphabetical index of absolutely no tag", "tags.alphabetical.one":"Alphabetical index of the single tag", "tags.title":"标签", -"##TODO##tagword.many":"", -"##TODO##tagword.none":"", -"##TODO##tagword.one":"", +"tagword.many":"{0} 标签", +"tagword.none":"没有标签", +"tagword.one":"1 个标签", "tagword.title":"标签", "##TODO##languages.abk":"Abkhaz", "##TODO##languages.aaf":"Afar", From b39cbeebc899edad1337e3838d54e7e837a8889d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lucas?= Date: Sat, 28 Sep 2013 20:58:50 +0200 Subject: [PATCH 08/22] Prepare new search. re #34 --- book.php | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/book.php b/book.php index 94fcf69..37137e4 100644 --- a/book.php +++ b/book.php @@ -574,10 +574,63 @@ function getJson ($complete = false) { global $config; $page = getURLParam ("page", Base::PAGE_INDEX); $query = getURLParam ("query"); + $search = getURLParam ("search"); $qid = getURLParam ("id"); $n = getURLParam ("n", "1"); $database = GetUrlParam (DB); + if ($search) { + $out = array (); + $arrayTag = Tag::getAllTagsByQuery ($query); + $arraySeries = Serie::getAllSeriesByQuery ($query); + $arrayAuthor = Author::getAuthorsByStartingLetter ('%' . $query); + list ($arrayBook, $totalNumber) = Book::getBooksByStartingLetter ('%' . $query, -1); + + foreach (array ("book" => $arrayBook, + "author" => $arrayAuthor, + "series" => $arraySeries, + "tag" => $arrayTag) as $key => $array) { + $i = 0; + $pagequery = Base::PAGE_OPENSEARCH_QUERY; + foreach ($array as $entry) { + if (count($array) > 0) { + // str_format (localize("bookword", count($array)) + // str_format (localize("authorword", count($array) + // str_format (localize("seriesword", count($array) + // str_format (localize("tagword", count($array) + array_push ($out, array ("title" => "" . str_format (localize("{$key}word", count($array)), count($array)) . "", + "navlink" => "index.php?page={$pagequery}&query={$query}&db={$database}&scope={$key}")); + /*switch ($key) { + case "book": + array_push ($out, array ("title" => "" . str_format (localize("bookword", count($array)), count($array)) . "")); + break; + case "author": + array_push ($out, array ("title" => "" . str_format (localize("authorword", count($array)), count($array)) . "", + "navlink" => "index.php?page={$pagequery}&query={$query}&db={$database}&scope=author")); + break; + case "series": + array_push ($out, array ("title" => "" . str_format (localize("seriesword", count($array)), count($array)) . "", + "navlink" => "index.php?page={$pagequery}&query={$query}&db={$database}&scope=series")); + break; + case "tag": + array_push ($out, array ("title" => "" . str_format (localize("tagword", count($array)), count($array)) . "")); + break; + default : + array_push ($out, array ("title" => "" . count($array) . " Titre")); + }*/ + } + if ($entry instanceof EntryBook) { + array_push ($out, array ("title" => $entry->title, "navlink" => $entry->book->getDetailUrl ())); + } else { + array_push ($out, $entry->getContentArray ()); + } + $i++; + if ($i > 4) { break; }; + } + } + return $out; + } + $currentPage = Page::getPage ($page, $qid, $query, $n); $currentPage->InitializeContent (); From 877940a65186efc66a14d399c8f07d67465c85e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lucas?= Date: Sat, 28 Sep 2013 21:00:25 +0200 Subject: [PATCH 09/22] Clean the new search. re #34 --- book.php | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/book.php b/book.php index 37137e4..8d2531a 100644 --- a/book.php +++ b/book.php @@ -594,30 +594,13 @@ function getJson ($complete = false) { $pagequery = Base::PAGE_OPENSEARCH_QUERY; foreach ($array as $entry) { if (count($array) > 0) { + // Comment to help the perl i18n script // str_format (localize("bookword", count($array)) // str_format (localize("authorword", count($array) // str_format (localize("seriesword", count($array) // str_format (localize("tagword", count($array) array_push ($out, array ("title" => "" . str_format (localize("{$key}word", count($array)), count($array)) . "", "navlink" => "index.php?page={$pagequery}&query={$query}&db={$database}&scope={$key}")); - /*switch ($key) { - case "book": - array_push ($out, array ("title" => "" . str_format (localize("bookword", count($array)), count($array)) . "")); - break; - case "author": - array_push ($out, array ("title" => "" . str_format (localize("authorword", count($array)), count($array)) . "", - "navlink" => "index.php?page={$pagequery}&query={$query}&db={$database}&scope=author")); - break; - case "series": - array_push ($out, array ("title" => "" . str_format (localize("seriesword", count($array)), count($array)) . "", - "navlink" => "index.php?page={$pagequery}&query={$query}&db={$database}&scope=series")); - break; - case "tag": - array_push ($out, array ("title" => "" . str_format (localize("tagword", count($array)), count($array)) . "")); - break; - default : - array_push ($out, array ("title" => "" . count($array) . " Titre")); - }*/ } if ($entry instanceof EntryBook) { array_push ($out, array ("title" => $entry->title, "navlink" => $entry->book->getDetailUrl ())); From 8f2b53f336935f4bbb73f4f235ed2eecce8ed7e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lucas?= Date: Mon, 30 Sep 2013 10:04:11 +0200 Subject: [PATCH 10/22] Update German translation. Thanks to Glimm (@MobileRead). re #37 --- lang/Localization_de.json | 136 +++++++++++++++++++------------------- 1 file changed, 68 insertions(+), 68 deletions(-) diff --git a/lang/Localization_de.json b/lang/Localization_de.json index 0c9545a..2879758 100644 --- a/lang/Localization_de.json +++ b/lang/Localization_de.json @@ -1,5 +1,5 @@ { -"##TODO##about.title":"About COPS", +"about.title":"Über COPS", "allbooks.alphabetical.many":"Alphabetischer Index der {0} Bücher", "##TODO##allbooks.alphabetical.none":"Alphabetical index of absolutely no book", "allbooks.alphabetical.one":"Alphabetischer Index des einzigen Buchs", @@ -16,32 +16,32 @@ "bookword.none":"Kein Buch", "bookword.one":"1 Buch", "bookword.title":"Bücher", -"##TODO##cog.alternate":"Search, sort and filters", +"cog.alternate":"Suche, Sortierung und Filter", "content.series":"Serien: ", "content.series.data":"Buch {0} der {1} - Reihe", "content.summary":"Inhalt: ", -"##TODO##customize.email":"Set your email (to allow book emailing)", -"##TODO##customize.fancybox":"Use a Lightbox", -"##TODO##customize.filter":"Enable tag filtering", -"##TODO##customize.paging":"Max number of books per page (-1 to disable)", -"##TODO##customize.style":"Theme", -"##TODO##customize.title":"Customize COPS UI", -"##TODO##home.alternate":"Home", +"customize.email":"Geben Sie Ihre E-Mail-Adresse an (erlaubt das Zusenden von Büchern)", +"customize.fancybox":"Benutze die Lightbox", +"customize.filter":"Erlaube das Filtern durch Tags", +"customize.paging":"Maximale Anzahl von Büchern pro Seite (-1 zum deaktivieren)", +"customize.style":"Thema", +"customize.title":"Anpassungen an COPS", +"home.alternate":"Startseite", "i18n.coversection":"Umschlag", "language.title":"Sprache", -"##TODO##languages.alphabetical.many":"Alphabetical index of the {0} languages", +"languages.alphabetical.many":"Alphabetischer Index der {0} Sprachen", "##TODO##languages.alphabetical.none":"Alphabetical index of absolutely no language", -"##TODO##languages.alphabetical.one":"Alphabetical index of the single language", -"##TODO##languages.title":"Languages", -"##TODO##mail.messagenotsent":"Message could not be sent.", -"##TODO##mail.messagesent":"Message has been sent", -"##TODO##paging.next.alternate":"Next", -"##TODO##paging.previous.alternate":"Previous", -"##TODO##permalink.alternate":"Permalink", -"##TODO##pubdate.title":"Publication year", +"languages.alphabetical.one":"Alphabetischer Index der einen Sprache", +"languages.title":"Sprachen", +"mail.messagenotsent":"E-Mail konnte nicht gesendet werden.", +"mail.messagesent":"E-Mail wurde gesendet.", +"paging.next.alternate":"Nächste", +"paging.previous.alternate":"Vorherige", +"permalink.alternate":"Permalink", +"pubdate.title":"Veröffentlichung", "recent.list":"{0} neue Bücher", "recent.title":"Neuzugänge", -"##TODO##search.alternate":"Search", +"search.alternate":"Suche", "search.result":"Suchergebnis für", "search.sortorder.asc":"Auf", "search.sortorder.desc":"Ab", @@ -52,7 +52,7 @@ "seriesword.many":"{0} Serien", "seriesword.none":"Keine Serie", "seriesword.one":"1 Serie", -"##TODO##sort.alternate":"Sort", +"sort.alternate":"Sortierung", "splitByLetter.book.other":"Andere Bücher", "splitByLetter.letter":"{0} unter {1}", "tags.alphabetical.many":"Alphabetischer Index der {0} Schlagwörter", @@ -63,18 +63,18 @@ "tagword.none":"Kein Schlagwort", "tagword.one":"1 Schlagwort", "tagword.title":"Schlagwörter", -"##TODO##languages.abk":"Abkhaz", -"##TODO##languages.aaf":"Afar", -"##TODO##languages.afr":"Afrikaans", -"##TODO##languages.aka":"Akan", -"##TODO##languages.sqi":"Albanian", -"##TODO##languages.amh":"Amharic", -"##TODO##languages.ara":"Arabic", -"##TODO##languages.arg":"Aragonese", -"##TODO##languages.hye":"Armenian", -"##TODO##languages.asm":"Assamese", -"##TODO##languages.ava":"Avaric", -"##TODO##languages.ave":"Avestan", +"languages.abk":"Abchasisch", +"languages.aaf":"Afar", +"languages.afr":"Afrikaans", +"languages.aka":"Akan", +"languages.sqi":"Albanisch", +"languages.amh":"Amharisch", +"languages.ara":"Arabisch", +"languages.arg":"Aragonisch", +"languages.hye":"Armenisch", +"languages.asm":"Assamesisch", +"languages.ava":"Awarisch", +"languages.ave":"Avestisch", "##TODO##languages.aym":"Aymara", "##TODO##languages.aze":"Azerbaijani", "##TODO##languages.bam":"Bambara", @@ -84,38 +84,38 @@ "##TODO##languages.ben":"Bengali", "##TODO##languages.bih":"Bihari", "##TODO##languages.bis":"Bislama", -"##TODO##languages.bos":"Bosnian", +"languages.bos":"Bosnisch", "##TODO##languages.bre":"Breton", -"##TODO##languages.bul":"Bulgarian", +"languages.bul":"Bulgarisch", "##TODO##languages.mya":"Burmese", "##TODO##languages.cat":"Catalan", "##TODO##languages.cha":"Chamorro", "##TODO##languages.che":"Chechen", "##TODO##languages.nya":"Chichewa", -"##TODO##languages.zho":"Chinese", +"languages.zho":"Chinesisch", "##TODO##languages.chv":"Chuvash", "##TODO##languages.cor":"Cornish", "##TODO##languages.cos":"Corsican", "##TODO##languages.cre":"Cree", -"##TODO##languages.hrv":"Croatian", -"##TODO##languages.ces":"Czech", -"##TODO##languages.dan":"Danish", +"languages.hrv":"Kroatisch", +"languages.ces":"Tschechisch", +"languages.dan":"Dänisch", "##TODO##languages.div":"Divehi", -"##TODO##languages.nld":"Dutch", +"languages.nld":"Niederländisch", "##TODO##languages.dzo":"Dzongkha", -"##TODO##languages.eng":"English", -"##TODO##languages.epo":"Esperanto", +"languages.eng":"Englisch", +"languages.epo":"Esperanto", "##TODO##languages.est":"Estonian", "##TODO##languages.ewe":"Ewe", "##TODO##languages.fao":"Faroese", "##TODO##languages.fij":"Fijian", -"##TODO##languages.fin":"Finnish", -"##TODO##languages.fra":"French", +"languages.fin":"Finnisch", +"languages.fra":"Französisch", "##TODO##languages.ful":"Fula", "##TODO##languages.glg":"Galician", -"##TODO##languages.kat":"Georgian", -"##TODO##languages.deu":"German", -"##TODO##languages.ell":"Greek", +"languages.kat":"Georgisch", +"languages.deu":"Deutsch", +"languages.ell":"Griechisch", "##TODO##languages.grn":"Guaraní", "##TODO##languages.guj":"Gujarati", "##TODO##languages.hat":"Haitian", @@ -124,21 +124,21 @@ "##TODO##languages.her":"Herero", "##TODO##languages.hin":"Hindi", "##TODO##languages.hmo":"Hiri Motu", -"##TODO##languages.hun":"Hungarian", +"languages.hun":"Ungarisch", "##TODO##languages.ina":"Interlingua", -"##TODO##languages.ind":"Indonesian", +"languages.ind":"Indonesisch", "##TODO##languages.ile":"Interlingue", -"##TODO##languages.gle":"Irish", +"languages.gle":"Irisch", "##TODO##languages.ibo":"Igbo", "##TODO##languages.ipk":"Inupiaq", "##TODO##languages.ido":"Ido", -"##TODO##languages.isl":"Icelandic", -"##TODO##languages.ita":"Italian", +"languages.isl":"Isländisch", +"languages.ita":"Italienisch", "##TODO##languages.iku":"Inuktitut", -"##TODO##languages.jpn":"Japanese", +"languages.jpn":"Japanisch", "##TODO##languages.jav":"Javanese", "##TODO##languages.kal":"Kalaallisut", -"##TODO##languages.kan":"Kannada", +"languages.kan":"Kanaresisch", "##TODO##languages.kau":"Kanuri", "##TODO##languages.kas":"Kashmiri", "##TODO##languages.kaz":"Kazakh", @@ -148,11 +148,11 @@ "##TODO##languages.kir":"Kyrgyz", "##TODO##languages.kom":"Komi", "##TODO##languages.kon":"Kongo", -"##TODO##languages.kor":"Korean", +"languages.kor":"Koreanisch", "##TODO##languages.kur":"Kurdish", "##TODO##languages.kua":"Kwanyama", -"##TODO##languages.lat":"Latin", -"##TODO##languages.ltz":"Luxembourgish", +"languages.lat":"Lateinisch", +"languages.ltz":"Luxemburgisch", "##TODO##languages.lug":"Ganda", "##TODO##languages.lim":"Limburgish", "##TODO##languages.lin":"Lingala", @@ -169,7 +169,7 @@ "##TODO##languages.mri":"Māori", "##TODO##languages.mar":"Marathi", "##TODO##languages.mah":"Marshallese", -"##TODO##languages.mon":"Mongolian", +"languages.mon":"Mongolisch", "##TODO##languages.nau":"Nauru", "##TODO##languages.nav":"Navajo", "##TODO##languages.nob":"Norwegian Bokmål", @@ -177,7 +177,7 @@ "##TODO##languages.nep":"Nepali", "##TODO##languages.ndo":"Ndonga", "##TODO##languages.nno":"Norwegian Nynorsk", -"##TODO##languages.nor":"Norwegian", +"languages.nor":"Norwegisch", "##TODO##languages.iii":"Nuosu", "##TODO##languages.nbl":"South Ndebele", "##TODO##languages.oci":"Occitan", @@ -188,22 +188,22 @@ "##TODO##languages.oss":"Ossetian", "##TODO##languages.pan":"Panjabi", "##TODO##languages.pli":"Pāli", -"##TODO##languages.fas":"Persian", -"##TODO##languages.pol":"Polish", +"languages.fas":"Persisch", +"languages.pol":"Polnisch", "##TODO##languages.pus":"Pashto", -"##TODO##languages.por":"Portuguese", +"languages.por":"Portugisisch", "##TODO##languages.que":"Quechua", "##TODO##languages.roh":"Romansh", "##TODO##languages.run":"Kirundi", "##TODO##languages.ron":"Romanian", -"##TODO##languages.rus":"Russian", +"languages.rus":"Russisch", "##TODO##languages.san":"Sanskrit", "##TODO##languages.srd":"Sardinian", "##TODO##languages.snd":"Sindhi", "##TODO##languages.sme":"Northern Sami", "##TODO##languages.smo":"Samoan", "##TODO##languages.sag":"Sango", -"##TODO##languages.srp":"Serbian", +"languages.srp":"Serbisch", "##TODO##languages.gla":"Scottish Gaelic", "##TODO##languages.sna":"Shona", "##TODO##languages.sin":"Sinhala", @@ -211,11 +211,11 @@ "##TODO##languages.slv":"Slovene", "##TODO##languages.som":"Somali", "##TODO##languages.sot":"Southern Sotho", -"##TODO##languages.spa":"Spanish", +"languages.spa":"Spanisch", "##TODO##languages.sun":"Sundanese", "##TODO##languages.swa":"Swahili", "##TODO##languages.ssw":"Swati", -"##TODO##languages.swe":"Swedish", +"languages.swe":"Schwedisch", "##TODO##languages.tam":"Tamil", "##TODO##languages.tel":"Telugu", "##TODO##languages.tgk":"Tajik", @@ -226,17 +226,17 @@ "##TODO##languages.tgl":"Tagalog", "##TODO##languages.tsn":"Tswana", "##TODO##languages.ton":"Tonga", -"##TODO##languages.tur":"Turkish", +"languages.tur":"Türkisch", "##TODO##languages.tso":"Tsonga", "##TODO##languages.tat":"Tatar", "##TODO##languages.twi":"Twi", "##TODO##languages.tah":"Tahitian", "##TODO##languages.uig":"Uighur", -"##TODO##languages.ukr":"Ukrainian", +"languages.ukr":"Ukrainisch", "##TODO##languages.urd":"Urdu", "##TODO##languages.uzb":"Uzbek", "##TODO##languages.ven":"Venda", -"##TODO##languages.vie":"Vietnamese", +"languages.vie":"Vietnamesisch", "##TODO##languages.vol":"Volapük", "##TODO##languages.win":"Walloon", "##TODO##languages.cym":"Welsh", From 4ad1cd693be9be5dc7677bba24c8036f5c19f908 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lucas?= Date: Mon, 30 Sep 2013 11:53:46 +0200 Subject: [PATCH 11/22] Add debug information to check the completeness of the translation. re #37 --- tools/updateLang.pl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tools/updateLang.pl b/tools/updateLang.pl index e8deddc..efac02e 100644 --- a/tools/updateLang.pl +++ b/tools/updateLang.pl @@ -60,6 +60,8 @@ sub handleLanguageFile { my ($file) = @_; (my $lang = $file) =~ s/Localization_(\w\w)\.json/$1/; my $file = "../lang/" . $file; + my $total = 0; + my $translated = 0; debug ("language file: $file / $lang \n"); @@ -80,12 +82,16 @@ sub handleLanguageFile { print OUTPUT "{\n"; foreach my $name (@strings) { + $total++ if ($name !~ /^languages\.\w{3}$/); if (not exists ($values{$lang}{$name})) { print OUTPUT "\"##TODO##$name\":\"$values{en}{$name}\",\n"; } else { + $translated++ if ($name !~ /^languages\.\w{3}$/); print OUTPUT "\"$name\":\"$values{$lang}{$name}\",\n"; } } + my $percentage = ($translated * 100) / $total; + debug (" $translated / $total ($percentage %) \n"); print OUTPUT "\"DO_NOT_TRANSLATE\":\"end\"\n"; print OUTPUT "}\n"; From e3bf13ab47d933c219ce32081240d7861c74922b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lucas?= Date: Wed, 2 Oct 2013 16:35:20 +0200 Subject: [PATCH 12/22] Fix some warnings reported by JSHint. --- util.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/util.js b/util.js index 5c7f8aa..ea92d1f 100644 --- a/util.js +++ b/util.js @@ -237,7 +237,7 @@ function navigateTo (url) { function updatePage (data) { var result; filterList = {}; - data ["c"] = currentData ["c"]; + data.c = currentData.c; if (false && $("section").length && currentData.isPaginated === 0 && data.isPaginated === 0) { // Partial update (for now disabled) debug_log ("Partial update"); @@ -251,7 +251,7 @@ function updatePage (data) { } document.title = data.title; currentData = data; - setTimeout( function() { $("input[name=query]").focus() }, 500 ); + setTimeout( function() { $("input[name=query]").focus(); }, 500 ); debug_log (elapsed ()); @@ -325,7 +325,7 @@ function link_Clicked (event) { before = new Date (); var jsonurl = url.replace ("index", "getJSON"); $.getJSON(jsonurl, function(data) { - data ["c"] = currentData ["c"]; + data.c = currentData.c; var detail = ""; if (data.page === "16") { detail = data.fullhtml; From c994cf789fb8b008c92127578ed1d7c46f7f0b6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lucas?= Date: Thu, 3 Oct 2013 08:38:58 +0200 Subject: [PATCH 13/22] Add basic unit testing. re #96 --- .travis.yml | 5 +++++ phpunit.xml | 7 +++++++ test/baseTest.php | 14 ++++++++++++++ test/config_test.php | 4 ++++ 4 files changed, 30 insertions(+) create mode 100644 .travis.yml create mode 100644 phpunit.xml create mode 100644 test/baseTest.php create mode 100644 test/config_test.php diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..03ea145 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,5 @@ +language: php +php: + - 5.5 + - 5.4 + - 5.3 \ No newline at end of file diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 0000000..568c34c --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,7 @@ + + + + test + + + \ No newline at end of file diff --git a/test/baseTest.php b/test/baseTest.php new file mode 100644 index 0000000..78b6e35 --- /dev/null +++ b/test/baseTest.php @@ -0,0 +1,14 @@ +assertEquals ("?db=0", addURLParameter ("?", "db", "0")); + $this->assertEquals ("?key=value&db=0", addURLParameter ("?key=value", "db", "0")); + $this->assertEquals ("?key=value&otherKey=&db=0", addURLParameter ("?key=value&otherKey", "db", "0")); + } +} \ No newline at end of file diff --git a/test/config_test.php b/test/config_test.php new file mode 100644 index 0000000..d2f03ce --- /dev/null +++ b/test/config_test.php @@ -0,0 +1,4 @@ + Date: Thu, 3 Oct 2013 09:05:38 +0200 Subject: [PATCH 14/22] Small modif --- base.php | 1 + 1 file changed, 1 insertion(+) diff --git a/base.php b/base.php index eecd77e..835d635 100644 --- a/base.php +++ b/base.php @@ -9,6 +9,7 @@ define ("VERSION", "0.7.0beta"); define ("DB", "db"); date_default_timezone_set($config['default_timezone']); + function useServerSideRendering () { global $config; From a8dccf1ea587c9ab242b47f55d129ad2c41529a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lucas?= Date: Thu, 3 Oct 2013 11:48:02 +0200 Subject: [PATCH 15/22] Fix line ending / encoding. re #96 --- .travis.yml | 8 ++++---- phpunit.xml | 12 ++++++------ test/baseTest.php | 26 +++++++++++++------------- test/config_test.php | 6 +++--- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/.travis.yml b/.travis.yml index 03ea145..bf070f0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ -language: php -php: - - 5.5 - - 5.4 +language: php +php: + - 5.5 + - 5.4 - 5.3 \ No newline at end of file diff --git a/phpunit.xml b/phpunit.xml index 568c34c..066829b 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,7 +1,7 @@ - - - - test - - + + + + test + + \ No newline at end of file diff --git a/test/baseTest.php b/test/baseTest.php index 78b6e35..fc50712 100644 --- a/test/baseTest.php +++ b/test/baseTest.php @@ -1,14 +1,14 @@ -assertEquals ("?db=0", addURLParameter ("?", "db", "0")); - $this->assertEquals ("?key=value&db=0", addURLParameter ("?key=value", "db", "0")); - $this->assertEquals ("?key=value&otherKey=&db=0", addURLParameter ("?key=value&otherKey", "db", "0")); - } +assertEquals ("?db=0", addURLParameter ("?", "db", "0")); + $this->assertEquals ("?key=value&db=0", addURLParameter ("?key=value", "db", "0")); + $this->assertEquals ("?key=value&otherKey=&db=0", addURLParameter ("?key=value&otherKey", "db", "0")); + } } \ No newline at end of file diff --git a/test/config_test.php b/test/config_test.php index d2f03ce..824e18b 100644 --- a/test/config_test.php +++ b/test/config_test.php @@ -1,4 +1,4 @@ - Date: Thu, 3 Oct 2013 12:00:55 +0200 Subject: [PATCH 16/22] Upgrade to Magnific Popup 0.9.6 --- .../jquery.magnific-popup.min.js | 4 +- resources/Magnific-Popup/magnific-popup.css | 172 ++++++++---------- 2 files changed, 78 insertions(+), 98 deletions(-) diff --git a/resources/Magnific-Popup/jquery.magnific-popup.min.js b/resources/Magnific-Popup/jquery.magnific-popup.min.js index 8e4ce40..5d7c25c 100644 --- a/resources/Magnific-Popup/jquery.magnific-popup.min.js +++ b/resources/Magnific-Popup/jquery.magnific-popup.min.js @@ -1,4 +1,4 @@ -/*! Magnific Popup - v0.9.5 - 2013-08-21 +/*! Magnific Popup - v0.9.6 - 2013-10-01 * http://dimsemenov.com/plugins/magnific-popup/ * Copyright (c) 2013 Dmitry Semenov; */ -(function(e){var t,i,n,o,a,r,s,l="Close",c="BeforeClose",d="AfterClose",u="BeforeAppend",p="MarkupParse",f="Open",m="Change",g="mfp",v="."+g,h="mfp-ready",C="mfp-removing",y="mfp-prevent-close",w=function(){},b=!!window.jQuery,I=e(window),x=function(e,i){t.ev.on(g+e+v,i)},k=function(t,i,n,o){var a=document.createElement("div");return a.className="mfp-"+t,n&&(a.innerHTML=n),o?i&&i.appendChild(a):(a=e(a),i&&a.appendTo(i)),a},T=function(i,n){t.ev.triggerHandler(g+i,n),t.st.callbacks&&(i=i.charAt(0).toLowerCase()+i.slice(1),t.st.callbacks[i]&&t.st.callbacks[i].apply(t,e.isArray(n)?n:[n]))},E=function(){(t.st.focus?t.content.find(t.st.focus).eq(0):t.wrap).focus()},S=function(i){return i===s&&t.currTemplate.closeBtn||(t.currTemplate.closeBtn=e(t.st.closeMarkup.replace("%title%",t.st.tClose)),s=i),t.currTemplate.closeBtn},P=function(){e.magnificPopup.instance||(t=new w,t.init(),e.magnificPopup.instance=t)},_=function(i){if(!e(i).hasClass(y)){var n=t.st.closeOnContentClick,o=t.st.closeOnBgClick;if(n&&o)return!0;if(!t.content||e(i).hasClass("mfp-close")||t.preloader&&i===t.preloader[0])return!0;if(i===t.content[0]||e.contains(t.content[0],i)){if(n)return!0}else if(o&&e.contains(document,i))return!0;return!1}},O=function(){var e=document.createElement("p").style,t=["ms","O","Moz","Webkit"];if(void 0!==e.transition)return!0;for(;t.length;)if(t.pop()+"Transition"in e)return!0;return!1};w.prototype={constructor:w,init:function(){var i=navigator.appVersion;t.isIE7=-1!==i.indexOf("MSIE 7."),t.isIE8=-1!==i.indexOf("MSIE 8."),t.isLowIE=t.isIE7||t.isIE8,t.isAndroid=/android/gi.test(i),t.isIOS=/iphone|ipad|ipod/gi.test(i),t.supportsTransition=O(),t.probablyMobile=t.isAndroid||t.isIOS||/(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent),n=e(document.body),o=e(document),t.popupsCache={}},open:function(i){var n;if(i.isObj===!1){t.items=i.items.toArray(),t.index=0;var a,s=i.items;for(n=0;s.length>n;n++)if(a=s[n],a.parsed&&(a=a.el[0]),a===i.el[0]){t.index=n;break}}else t.items=e.isArray(i.items)?i.items:[i.items],t.index=i.index||0;if(t.isOpen)return t.updateItemHTML(),void 0;t.types=[],r="",t.ev=i.mainEl&&i.mainEl.length?i.mainEl.eq(0):o,i.key?(t.popupsCache[i.key]||(t.popupsCache[i.key]={}),t.currTemplate=t.popupsCache[i.key]):t.currTemplate={},t.st=e.extend(!0,{},e.magnificPopup.defaults,i),t.fixedContentPos="auto"===t.st.fixedContentPos?!t.probablyMobile:t.st.fixedContentPos,t.st.modal&&(t.st.closeOnContentClick=!1,t.st.closeOnBgClick=!1,t.st.showCloseBtn=!1,t.st.enableEscapeKey=!1),t.bgOverlay||(t.bgOverlay=k("bg").on("click"+v,function(){t.close()}),t.wrap=k("wrap").attr("tabindex",-1).on("click"+v,function(e){_(e.target)&&t.close()}),t.container=k("container",t.wrap)),t.contentContainer=k("content"),t.st.preloader&&(t.preloader=k("preloader",t.container,t.st.tLoading));var l=e.magnificPopup.modules;for(n=0;l.length>n;n++){var c=l[n];c=c.charAt(0).toUpperCase()+c.slice(1),t["init"+c].call(t)}T("BeforeOpen"),t.st.showCloseBtn&&(t.st.closeBtnInside?(x(p,function(e,t,i,n){i.close_replaceWith=S(n.type)}),r+=" mfp-close-btn-in"):t.wrap.append(S())),t.st.alignTop&&(r+=" mfp-align-top"),t.fixedContentPos?t.wrap.css({overflow:t.st.overflowY,overflowX:"hidden",overflowY:t.st.overflowY}):t.wrap.css({top:I.scrollTop(),position:"absolute"}),(t.st.fixedBgPos===!1||"auto"===t.st.fixedBgPos&&!t.fixedContentPos)&&t.bgOverlay.css({height:o.height(),position:"absolute"}),t.st.enableEscapeKey&&o.on("keyup"+v,function(e){27===e.keyCode&&t.close()}),I.on("resize"+v,function(){t.updateSize()}),t.st.closeOnContentClick||(r+=" mfp-auto-cursor"),r&&t.wrap.addClass(r);var d=t.wH=I.height(),u={};if(t.fixedContentPos&&t._hasScrollBar(d)){var m=t._getScrollbarSize();m&&(u.paddingRight=m)}t.fixedContentPos&&(t.isIE7?e("body, html").css("overflow","hidden"):u.overflow="hidden");var g=t.st.mainClass;t.isIE7&&(g+=" mfp-ie7"),g&&t._addClassToMFP(g),t.updateItemHTML(),T("BuildControls"),e("html").css(u),t.bgOverlay.add(t.wrap).prependTo(document.body),t._lastFocusedEl=document.activeElement,setTimeout(function(){t.content?(t._addClassToMFP(h),E()):t.bgOverlay.addClass(h),o.on("focusin"+v,function(i){return i.target===t.wrap[0]||e.contains(t.wrap[0],i.target)?void 0:(E(),!1)})},16),t.isOpen=!0,t.updateSize(d),T(f)},close:function(){t.isOpen&&(T(c),t.isOpen=!1,t.st.removalDelay&&!t.isLowIE&&t.supportsTransition?(t._addClassToMFP(C),setTimeout(function(){t._close()},t.st.removalDelay)):t._close())},_close:function(){T(l);var i=C+" "+h+" ";if(t.bgOverlay.detach(),t.wrap.detach(),t.container.empty(),t.st.mainClass&&(i+=t.st.mainClass+" "),t._removeClassFromMFP(i),t.fixedContentPos){var n={paddingRight:""};t.isIE7?e("body, html").css("overflow",""):n.overflow="",e("html").css(n)}o.off("keyup"+v+" focusin"+v),t.ev.off(v),t.wrap.attr("class","mfp-wrap").removeAttr("style"),t.bgOverlay.attr("class","mfp-bg"),t.container.attr("class","mfp-container"),!t.st.showCloseBtn||t.st.closeBtnInside&&t.currTemplate[t.currItem.type]!==!0||t.currTemplate.closeBtn&&t.currTemplate.closeBtn.detach(),t._lastFocusedEl&&e(t._lastFocusedEl).focus(),t.currItem=null,t.content=null,t.currTemplate=null,t.prevHeight=0,T(d)},updateSize:function(e){if(t.isIOS){var i=document.documentElement.clientWidth/window.innerWidth,n=window.innerHeight*i;t.wrap.css("height",n),t.wH=n}else t.wH=e||I.height();t.fixedContentPos||t.wrap.css("height",t.wH),T("Resize")},updateItemHTML:function(){var i=t.items[t.index];t.contentContainer.detach(),t.content&&t.content.detach(),i.parsed||(i=t.parseEl(t.index));var n=i.type;if(T("BeforeChange",[t.currItem?t.currItem.type:"",n]),t.currItem=i,!t.currTemplate[n]){var o=t.st[n]?t.st[n].markup:!1;T("FirstMarkupParse",o),t.currTemplate[n]=o?e(o):!0}a&&a!==i.type&&t.container.removeClass("mfp-"+a+"-holder");var r=t["get"+n.charAt(0).toUpperCase()+n.slice(1)](i,t.currTemplate[n]);t.appendContent(r,n),i.preloaded=!0,T(m,i),a=i.type,t.container.prepend(t.contentContainer),T("AfterChange")},appendContent:function(e,i){t.content=e,e?t.st.showCloseBtn&&t.st.closeBtnInside&&t.currTemplate[i]===!0?t.content.find(".mfp-close").length||t.content.append(S()):t.content=e:t.content="",T(u),t.container.addClass("mfp-"+i+"-holder"),t.contentContainer.append(t.content)},parseEl:function(i){var n=t.items[i],o=n.type;if(n=n.tagName?{el:e(n)}:{data:n,src:n.src},n.el){for(var a=t.types,r=0;a.length>r;r++)if(n.el.hasClass("mfp-"+a[r])){o=a[r];break}n.src=n.el.attr("data-mfp-src"),n.src||(n.src=n.el.attr("href"))}return n.type=o||t.st.type||"inline",n.index=i,n.parsed=!0,t.items[i]=n,T("ElementParse",n),t.items[i]},addGroup:function(e,i){var n=function(n){n.mfpEl=this,t._openClick(n,e,i)};i||(i={});var o="click.magnificPopup";i.mainEl=e,i.items?(i.isObj=!0,e.off(o).on(o,n)):(i.isObj=!1,i.delegate?e.off(o).on(o,i.delegate,n):(i.items=e,e.off(o).on(o,n)))},_openClick:function(i,n,o){var a=void 0!==o.midClick?o.midClick:e.magnificPopup.defaults.midClick;if(a||2!==i.which&&!i.ctrlKey&&!i.metaKey){var r=void 0!==o.disableOn?o.disableOn:e.magnificPopup.defaults.disableOn;if(r)if(e.isFunction(r)){if(!r.call(t))return!0}else if(r>I.width())return!0;i.type&&(i.preventDefault(),t.isOpen&&i.stopPropagation()),o.el=e(i.mfpEl),o.delegate&&(o.items=n.find(o.delegate)),t.open(o)}},updateStatus:function(e,n){if(t.preloader){i!==e&&t.container.removeClass("mfp-s-"+i),n||"loading"!==e||(n=t.st.tLoading);var o={status:e,text:n};T("UpdateStatus",o),e=o.status,n=o.text,t.preloader.html(n),t.preloader.find("a").on("click",function(e){e.stopImmediatePropagation()}),t.container.addClass("mfp-s-"+e),i=e}},_addClassToMFP:function(e){t.bgOverlay.addClass(e),t.wrap.addClass(e)},_removeClassFromMFP:function(e){this.bgOverlay.removeClass(e),t.wrap.removeClass(e)},_hasScrollBar:function(e){return(t.isIE7?o.height():document.body.scrollHeight)>(e||I.height())},_parseMarkup:function(t,i,n){var o;n.data&&(i=e.extend(n.data,i)),T(p,[t,i,n]),e.each(i,function(e,i){if(void 0===i||i===!1)return!0;if(o=e.split("_"),o.length>1){var n=t.find(v+"-"+o[0]);if(n.length>0){var a=o[1];"replaceWith"===a?n[0]!==i[0]&&n.replaceWith(i):"img"===a?n.is("img")?n.attr("src",i):n.replaceWith(''):n.attr(o[1],i)}}else t.find(v+"-"+e).html(i)})},_getScrollbarSize:function(){if(void 0===t.scrollbarSize){var e=document.createElement("div");e.id="mfp-sbm",e.style.cssText="width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;",document.body.appendChild(e),t.scrollbarSize=e.offsetWidth-e.clientWidth,document.body.removeChild(e)}return t.scrollbarSize}},e.magnificPopup={instance:null,proto:w.prototype,modules:[],open:function(e,t){return P(),e||(e={}),e.isObj=!0,e.index=t||0,this.instance.open(e)},close:function(){return e.magnificPopup.instance.close()},registerModule:function(t,i){i.options&&(e.magnificPopup.defaults[t]=i.options),e.extend(this.proto,i.proto),this.modules.push(t)},defaults:{disableOn:0,key:null,midClick:!1,mainClass:"",preloader:!0,focus:"",closeOnContentClick:!1,closeOnBgClick:!0,closeBtnInside:!0,showCloseBtn:!0,enableEscapeKey:!0,modal:!1,alignTop:!1,removalDelay:0,fixedContentPos:"auto",fixedBgPos:"auto",overflowY:"auto",closeMarkup:'',tClose:"Close (Esc)",tLoading:"Loading..."}},e.fn.magnificPopup=function(i){P();var n=e(this);if("string"==typeof i)if("open"===i){var o,a=b?n.data("magnificPopup"):n[0].magnificPopup,r=parseInt(arguments[1],10)||0;a.items?o=a.items[r]:(o=n,a.delegate&&(o=o.find(a.delegate)),o=o.eq(r)),t._openClick({mfpEl:o},n,a)}else t.isOpen&&t[i].apply(t,Array.prototype.slice.call(arguments,1));else b?n.data("magnificPopup",i):n[0].magnificPopup=i,t.addGroup(n,i);return n};var z,M,B,H="inline",L=function(){B&&(M.after(B.addClass(z)).detach(),B=null)};e.magnificPopup.registerModule(H,{options:{hiddenClass:"hide",markup:"",tNotFound:"Content not found"},proto:{initInline:function(){t.types.push(H),x(l+"."+H,function(){L()})},getInline:function(i,n){if(L(),i.src){var o=t.st.inline,a=e(i.src);if(a.length){var r=a[0].parentNode;r&&r.tagName&&(M||(z=o.hiddenClass,M=k(z),z="mfp-"+z),B=a.after(M).detach().removeClass(z)),t.updateStatus("ready")}else t.updateStatus("error",o.tNotFound),a=e("
");return i.inlineElement=a,a}return t.updateStatus("ready"),t._parseMarkup(n,{},i),n}}});var A,F="ajax",j=function(){A&&n.removeClass(A)};e.magnificPopup.registerModule(F,{options:{settings:null,cursor:"mfp-ajax-cur",tError:'The content could not be loaded.'},proto:{initAjax:function(){t.types.push(F),A=t.st.ajax.cursor,x(l+"."+F,function(){j(),t.req&&t.req.abort()})},getAjax:function(i){A&&n.addClass(A),t.updateStatus("loading");var o=e.extend({url:i.src,success:function(n,o,a){var r={data:n,xhr:a};T("ParseAjax",r),t.appendContent(e(r.data),F),i.finished=!0,j(),E(),setTimeout(function(){t.wrap.addClass(h)},16),t.updateStatus("ready"),T("AjaxContentAdded")},error:function(){j(),i.finished=i.loadError=!0,t.updateStatus("error",t.st.ajax.tError.replace("%url%",i.src))}},t.st.ajax.settings);return t.req=e.ajax(o),""}}});var N,W=function(i){if(i.data&&void 0!==i.data.title)return i.data.title;var n=t.st.image.titleSrc;if(n){if(e.isFunction(n))return n.call(t,i);if(i.el)return i.el.attr(n)||""}return""};e.magnificPopup.registerModule("image",{options:{markup:'
',cursor:"mfp-zoom-out-cur",titleSrc:"title",verticalFit:!0,tError:'The image could not be loaded.'},proto:{initImage:function(){var e=t.st.image,i=".image";t.types.push("image"),x(f+i,function(){"image"===t.currItem.type&&e.cursor&&n.addClass(e.cursor)}),x(l+i,function(){e.cursor&&n.removeClass(e.cursor),I.off("resize"+v)}),x("Resize"+i,t.resizeImage),t.isLowIE&&x("AfterChange",t.resizeImage)},resizeImage:function(){var e=t.currItem;if(e&&e.img&&t.st.image.verticalFit){var i=0;t.isLowIE&&(i=parseInt(e.img.css("padding-top"),10)+parseInt(e.img.css("padding-bottom"),10)),e.img.css("max-height",t.wH-i)}},_onImageHasSize:function(e){e.img&&(e.hasSize=!0,N&&clearInterval(N),e.isCheckingImgSize=!1,T("ImageHasSize",e),e.imgHidden&&(t.content&&t.content.removeClass("mfp-loading"),e.imgHidden=!1))},findImageSize:function(e){var i=0,n=e.img[0],o=function(a){N&&clearInterval(N),N=setInterval(function(){return n.naturalWidth>0?(t._onImageHasSize(e),void 0):(i>200&&clearInterval(N),i++,3===i?o(10):40===i?o(50):100===i&&o(500),void 0)},a)};o(1)},getImage:function(i,n){var o=0,a=function(){i&&(i.img[0].complete?(i.img.off(".mfploader"),i===t.currItem&&(t._onImageHasSize(i),t.updateStatus("ready")),i.hasSize=!0,i.loaded=!0,T("ImageLoadComplete")):(o++,200>o?setTimeout(a,100):r()))},r=function(){i&&(i.img.off(".mfploader"),i===t.currItem&&(t._onImageHasSize(i),t.updateStatus("error",s.tError.replace("%url%",i.src))),i.hasSize=!0,i.loaded=!0,i.loadError=!0)},s=t.st.image,l=n.find(".mfp-img");if(l.length){var c=document.createElement("img");c.className="mfp-img",i.img=e(c).on("load.mfploader",a).on("error.mfploader",r),c.src=i.src,l.is("img")&&(i.img=i.img.clone()),i.img[0].naturalWidth>0&&(i.hasSize=!0)}return t._parseMarkup(n,{title:W(i),img_replaceWith:i.img},i),t.resizeImage(),i.hasSize?(N&&clearInterval(N),i.loadError?(n.addClass("mfp-loading"),t.updateStatus("error",s.tError.replace("%url%",i.src))):(n.removeClass("mfp-loading"),t.updateStatus("ready")),n):(t.updateStatus("loading"),i.loading=!0,i.hasSize||(i.imgHidden=!0,n.addClass("mfp-loading"),t.findImageSize(i)),n)}}});var R,Z=function(){return void 0===R&&(R=void 0!==document.createElement("p").style.MozTransform),R};e.magnificPopup.registerModule("zoom",{options:{enabled:!1,easing:"ease-in-out",duration:300,opener:function(e){return e.is("img")?e:e.find("img")}},proto:{initZoom:function(){var e=t.st.zoom,i=".zoom";if(e.enabled&&t.supportsTransition){var n,o,a=e.duration,r=function(t){var i=t.clone().removeAttr("style").removeAttr("class").addClass("mfp-animated-image"),n="all "+e.duration/1e3+"s "+e.easing,o={position:"fixed",zIndex:9999,left:0,top:0,"-webkit-backface-visibility":"hidden"},a="transition";return o["-webkit-"+a]=o["-moz-"+a]=o["-o-"+a]=o[a]=n,i.css(o),i},s=function(){t.content.css("visibility","visible")};x("BuildControls"+i,function(){if(t._allowZoom()){if(clearTimeout(n),t.content.css("visibility","hidden"),image=t._getItemToZoom(),!image)return s(),void 0;o=r(image),o.css(t._getOffset()),t.wrap.append(o),n=setTimeout(function(){o.css(t._getOffset(!0)),n=setTimeout(function(){s(),setTimeout(function(){o.remove(),image=o=null,T("ZoomAnimationEnded")},16)},a)},16)}}),x(c+i,function(){if(t._allowZoom()){if(clearTimeout(n),t.st.removalDelay=a,!image){if(image=t._getItemToZoom(),!image)return;o=r(image)}o.css(t._getOffset(!0)),t.wrap.append(o),t.content.css("visibility","hidden"),setTimeout(function(){o.css(t._getOffset())},16)}}),x(l+i,function(){t._allowZoom()&&(s(),o&&o.remove())})}},_allowZoom:function(){return"image"===t.currItem.type},_getItemToZoom:function(){return t.currItem.hasSize?t.currItem.img:!1},_getOffset:function(i){var n;n=i?t.currItem.img:t.st.zoom.opener(t.currItem.el||t.currItem);var o=n.offset(),a=parseInt(n.css("padding-top"),10),r=parseInt(n.css("padding-bottom"),10);o.top-=e(window).scrollTop()-a;var s={width:n.width(),height:(b?n.innerHeight():n[0].offsetHeight)-r-a};return Z()?s["-moz-transform"]=s.transform="translate("+o.left+"px,"+o.top+"px)":(s.left=o.left,s.top=o.top),s}}});var q="iframe",D="//about:blank",K=function(e){if(t.currTemplate[q]){var i=t.currTemplate[q].find("iframe");i.length&&(e||(i[0].src=D),t.isIE8&&i.css("display",e?"block":"none"))}};e.magnificPopup.registerModule(q,{options:{markup:'
',srcAction:"iframe_src",patterns:{youtube:{index:"youtube.com",id:"v=",src:"//www.youtube.com/embed/%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}}},proto:{initIframe:function(){t.types.push(q),x("BeforeChange",function(e,t,i){t!==i&&(t===q?K():i===q&&K(!0))}),x(l+"."+q,function(){K()})},getIframe:function(i,n){var o=i.src,a=t.st.iframe;e.each(a.patterns,function(){return o.indexOf(this.index)>-1?(this.id&&(o="string"==typeof this.id?o.substr(o.lastIndexOf(this.id)+this.id.length,o.length):this.id.call(this,o)),o=this.src.replace("%id%",o),!1):void 0});var r={};return a.srcAction&&(r[a.srcAction]=o),t._parseMarkup(n,r,i),t.updateStatus("ready"),n}}});var Y=function(e){var i=t.items.length;return e>i-1?e-i:0>e?i+e:e},U=function(e,t,i){return e.replace("%curr%",t+1).replace("%total%",i)};e.magnificPopup.registerModule("gallery",{options:{enabled:!1,arrowMarkup:'',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:"Previous (Left arrow key)",tNext:"Next (Right arrow key)",tCounter:"%curr% of %total%"},proto:{initGallery:function(){var i=t.st.gallery,n=".mfp-gallery",a=Boolean(e.fn.mfpFastClick);return t.direction=!0,i&&i.enabled?(r+=" mfp-gallery",x(f+n,function(){i.navigateByImgClick&&t.wrap.on("click"+n,".mfp-img",function(){return t.items.length>1?(t.next(),!1):void 0}),o.on("keydown"+n,function(e){37===e.keyCode?t.prev():39===e.keyCode&&t.next()})}),x("UpdateStatus"+n,function(e,i){i.text&&(i.text=U(i.text,t.currItem.index,t.items.length))}),x(p+n,function(e,n,o,a){var r=t.items.length;o.counter=r>1?U(i.tCounter,a.index,r):""}),x("BuildControls"+n,function(){if(t.items.length>1&&i.arrows&&!t.arrowLeft){var n=i.arrowMarkup,o=t.arrowLeft=e(n.replace("%title%",i.tPrev).replace("%dir%","left")).addClass(y),r=t.arrowRight=e(n.replace("%title%",i.tNext).replace("%dir%","right")).addClass(y),s=a?"mfpFastClick":"click";o[s](function(){t.prev()}),r[s](function(){t.next()}),t.isIE7&&(k("b",o[0],!1,!0),k("a",o[0],!1,!0),k("b",r[0],!1,!0),k("a",r[0],!1,!0)),t.container.append(o.add(r))}}),x(m+n,function(){t._preloadTimeout&&clearTimeout(t._preloadTimeout),t._preloadTimeout=setTimeout(function(){t.preloadNearbyImages(),t._preloadTimeout=null},16)}),x(l+n,function(){o.off(n),t.wrap.off("click"+n),t.arrowLeft&&a&&t.arrowLeft.add(t.arrowRight).destroyMfpFastClick(),t.arrowRight=t.arrowLeft=null}),void 0):!1},next:function(){t.direction=!0,t.index=Y(t.index+1),t.updateItemHTML()},prev:function(){t.direction=!1,t.index=Y(t.index-1),t.updateItemHTML()},goTo:function(e){t.direction=e>=t.index,t.index=e,t.updateItemHTML()},preloadNearbyImages:function(){var e,i=t.st.gallery.preload,n=Math.min(i[0],t.items.length),o=Math.min(i[1],t.items.length);for(e=1;(t.direction?o:n)>=e;e++)t._preloadItem(t.index+e);for(e=1;(t.direction?n:o)>=e;e++)t._preloadItem(t.index-e)},_preloadItem:function(i){if(i=Y(i),!t.items[i].preloaded){var n=t.items[i];n.parsed||(n=t.parseEl(i)),T("LazyLoad",n),"image"===n.type&&(n.img=e('').on("load.mfploader",function(){n.hasSize=!0}).on("error.mfploader",function(){n.hasSize=!0,n.loadError=!0,T("LazyLoadError",n)}).attr("src",n.src)),n.preloaded=!0}}}});var G="retina";e.magnificPopup.registerModule(G,{options:{replaceSrc:function(e){return e.src.replace(/\.\w+$/,function(e){return"@2x"+e})},ratio:1},proto:{initRetina:function(){if(window.devicePixelRatio>1){var e=t.st.retina,i=e.ratio;i=isNaN(i)?i():i,i>1&&(x("ImageHasSize."+G,function(e,t){t.img.css({"max-width":t.img[0].naturalWidth/i,width:"100%"})}),x("ElementParse."+G,function(t,n){n.src=e.replaceSrc(n,i)}))}}}}),function(){var t=1e3,i="ontouchstart"in window,n=function(){I.off("touchmove"+a+" touchend"+a)},o="mfpFastClick",a="."+o;e.fn.mfpFastClick=function(o){return e(this).each(function(){var r,s=e(this);if(i){var l,c,d,u,p,f;s.on("touchstart"+a,function(e){u=!1,f=1,p=e.originalEvent?e.originalEvent.touches[0]:e.touches[0],c=p.clientX,d=p.clientY,I.on("touchmove"+a,function(e){p=e.originalEvent?e.originalEvent.touches:e.touches,f=p.length,p=p[0],(Math.abs(p.clientX-c)>10||Math.abs(p.clientY-d)>10)&&(u=!0,n())}).on("touchend"+a,function(e){n(),u||f>1||(r=!0,e.preventDefault(),clearTimeout(l),l=setTimeout(function(){r=!1},t),o())})})}s.on("click"+a,function(){r||o()})})},e.fn.destroyMfpFastClick=function(){e(this).off("touchstart"+a+" click"+a),i&&I.off("touchmove"+a+" touchend"+a)}}()})(window.jQuery||window.Zepto); \ No newline at end of file +(function(e){var t,n,i,o,r,a,s,l="Close",c="BeforeClose",d="AfterClose",u="BeforeAppend",p="MarkupParse",f="Open",m="Change",g="mfp",v="."+g,h="mfp-ready",C="mfp-removing",y="mfp-prevent-close",w=function(){},b=!!window.jQuery,I=e(window),x=function(e,n){t.ev.on(g+e+v,n)},k=function(t,n,i,o){var r=document.createElement("div");return r.className="mfp-"+t,i&&(r.innerHTML=i),o?n&&n.appendChild(r):(r=e(r),n&&r.appendTo(n)),r},T=function(n,i){t.ev.triggerHandler(g+n,i),t.st.callbacks&&(n=n.charAt(0).toLowerCase()+n.slice(1),t.st.callbacks[n]&&t.st.callbacks[n].apply(t,e.isArray(i)?i:[i]))},E=function(){(t.st.focus?t.content.find(t.st.focus).eq(0):t.wrap).focus()},S=function(n){return n===s&&t.currTemplate.closeBtn||(t.currTemplate.closeBtn=e(t.st.closeMarkup.replace("%title%",t.st.tClose)),s=n),t.currTemplate.closeBtn},P=function(){e.magnificPopup.instance||(t=new w,t.init(),e.magnificPopup.instance=t)},_=function(n){if(!e(n).hasClass(y)){var i=t.st.closeOnContentClick,o=t.st.closeOnBgClick;if(i&&o)return!0;if(!t.content||e(n).hasClass("mfp-close")||t.preloader&&n===t.preloader[0])return!0;if(n===t.content[0]||e.contains(t.content[0],n)){if(i)return!0}else if(o&&e.contains(document,n))return!0;return!1}},O=function(){var e=document.createElement("p").style,t=["ms","O","Moz","Webkit"];if(void 0!==e.transition)return!0;for(;t.length;)if(t.pop()+"Transition"in e)return!0;return!1};w.prototype={constructor:w,init:function(){var n=navigator.appVersion;t.isIE7=-1!==n.indexOf("MSIE 7."),t.isIE8=-1!==n.indexOf("MSIE 8."),t.isLowIE=t.isIE7||t.isIE8,t.isAndroid=/android/gi.test(n),t.isIOS=/iphone|ipad|ipod/gi.test(n),t.supportsTransition=O(),t.probablyMobile=t.isAndroid||t.isIOS||/(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent),i=e(document.body),o=e(document),t.popupsCache={}},open:function(n){var i;if(n.isObj===!1){t.items=n.items.toArray(),t.index=0;var r,s=n.items;for(i=0;s.length>i;i++)if(r=s[i],r.parsed&&(r=r.el[0]),r===n.el[0]){t.index=i;break}}else t.items=e.isArray(n.items)?n.items:[n.items],t.index=n.index||0;if(t.isOpen)return t.updateItemHTML(),void 0;t.types=[],a="",t.ev=n.mainEl&&n.mainEl.length?n.mainEl.eq(0):o,n.key?(t.popupsCache[n.key]||(t.popupsCache[n.key]={}),t.currTemplate=t.popupsCache[n.key]):t.currTemplate={},t.st=e.extend(!0,{},e.magnificPopup.defaults,n),t.fixedContentPos="auto"===t.st.fixedContentPos?!t.probablyMobile:t.st.fixedContentPos,t.st.modal&&(t.st.closeOnContentClick=!1,t.st.closeOnBgClick=!1,t.st.showCloseBtn=!1,t.st.enableEscapeKey=!1),t.bgOverlay||(t.bgOverlay=k("bg").on("click"+v,function(){t.close()}),t.wrap=k("wrap").attr("tabindex",-1).on("click"+v,function(e){_(e.target)&&t.close()}),t.container=k("container",t.wrap)),t.contentContainer=k("content"),t.st.preloader&&(t.preloader=k("preloader",t.container,t.st.tLoading));var l=e.magnificPopup.modules;for(i=0;l.length>i;i++){var c=l[i];c=c.charAt(0).toUpperCase()+c.slice(1),t["init"+c].call(t)}T("BeforeOpen"),t.st.showCloseBtn&&(t.st.closeBtnInside?(x(p,function(e,t,n,i){n.close_replaceWith=S(i.type)}),a+=" mfp-close-btn-in"):t.wrap.append(S())),t.st.alignTop&&(a+=" mfp-align-top"),t.fixedContentPos?t.wrap.css({overflow:t.st.overflowY,overflowX:"hidden",overflowY:t.st.overflowY}):t.wrap.css({top:I.scrollTop(),position:"absolute"}),(t.st.fixedBgPos===!1||"auto"===t.st.fixedBgPos&&!t.fixedContentPos)&&t.bgOverlay.css({height:o.height(),position:"absolute"}),t.st.enableEscapeKey&&o.on("keyup"+v,function(e){27===e.keyCode&&t.close()}),I.on("resize"+v,function(){t.updateSize()}),t.st.closeOnContentClick||(a+=" mfp-auto-cursor"),a&&t.wrap.addClass(a);var d=t.wH=I.height(),u={};if(t.fixedContentPos&&t._hasScrollBar(d)){var m=t._getScrollbarSize();m&&(u.paddingRight=m)}t.fixedContentPos&&(t.isIE7?e("body, html").css("overflow","hidden"):u.overflow="hidden");var g=t.st.mainClass;return t.isIE7&&(g+=" mfp-ie7"),g&&t._addClassToMFP(g),t.updateItemHTML(),T("BuildControls"),e("html").css(u),t.bgOverlay.add(t.wrap).prependTo(document.body),t._lastFocusedEl=document.activeElement,setTimeout(function(){t.content?(t._addClassToMFP(h),E()):t.bgOverlay.addClass(h),o.on("focusin"+v,function(n){return n.target===t.wrap[0]||e.contains(t.wrap[0],n.target)?void 0:(E(),!1)})},16),t.isOpen=!0,t.updateSize(d),T(f),n},close:function(){t.isOpen&&(T(c),t.isOpen=!1,t.st.removalDelay&&!t.isLowIE&&t.supportsTransition?(t._addClassToMFP(C),setTimeout(function(){t._close()},t.st.removalDelay)):t._close())},_close:function(){T(l);var n=C+" "+h+" ";if(t.bgOverlay.detach(),t.wrap.detach(),t.container.empty(),t.st.mainClass&&(n+=t.st.mainClass+" "),t._removeClassFromMFP(n),t.fixedContentPos){var i={paddingRight:""};t.isIE7?e("body, html").css("overflow",""):i.overflow="",e("html").css(i)}o.off("keyup"+v+" focusin"+v),t.ev.off(v),t.wrap.attr("class","mfp-wrap").removeAttr("style"),t.bgOverlay.attr("class","mfp-bg"),t.container.attr("class","mfp-container"),!t.st.showCloseBtn||t.st.closeBtnInside&&t.currTemplate[t.currItem.type]!==!0||t.currTemplate.closeBtn&&t.currTemplate.closeBtn.detach(),t._lastFocusedEl&&e(t._lastFocusedEl).focus(),t.currItem=null,t.content=null,t.currTemplate=null,t.prevHeight=0,T(d)},updateSize:function(e){if(t.isIOS){var n=document.documentElement.clientWidth/window.innerWidth,i=window.innerHeight*n;t.wrap.css("height",i),t.wH=i}else t.wH=e||I.height();t.fixedContentPos||t.wrap.css("height",t.wH),T("Resize")},updateItemHTML:function(){var n=t.items[t.index];t.contentContainer.detach(),t.content&&t.content.detach(),n.parsed||(n=t.parseEl(t.index));var i=n.type;if(T("BeforeChange",[t.currItem?t.currItem.type:"",i]),t.currItem=n,!t.currTemplate[i]){var o=t.st[i]?t.st[i].markup:!1;T("FirstMarkupParse",o),t.currTemplate[i]=o?e(o):!0}r&&r!==n.type&&t.container.removeClass("mfp-"+r+"-holder");var a=t["get"+i.charAt(0).toUpperCase()+i.slice(1)](n,t.currTemplate[i]);t.appendContent(a,i),n.preloaded=!0,T(m,n),r=n.type,t.container.prepend(t.contentContainer),T("AfterChange")},appendContent:function(e,n){t.content=e,e?t.st.showCloseBtn&&t.st.closeBtnInside&&t.currTemplate[n]===!0?t.content.find(".mfp-close").length||t.content.append(S()):t.content=e:t.content="",T(u),t.container.addClass("mfp-"+n+"-holder"),t.contentContainer.append(t.content)},parseEl:function(n){var i=t.items[n],o=i.type;if(i=i.tagName?{el:e(i)}:{data:i,src:i.src},i.el){for(var r=t.types,a=0;r.length>a;a++)if(i.el.hasClass("mfp-"+r[a])){o=r[a];break}i.src=i.el.attr("data-mfp-src"),i.src||(i.src=i.el.attr("href"))}return i.type=o||t.st.type||"inline",i.index=n,i.parsed=!0,t.items[n]=i,T("ElementParse",i),t.items[n]},addGroup:function(e,n){var i=function(i){i.mfpEl=this,t._openClick(i,e,n)};n||(n={});var o="click.magnificPopup";n.mainEl=e,n.items?(n.isObj=!0,e.off(o).on(o,i)):(n.isObj=!1,n.delegate?e.off(o).on(o,n.delegate,i):(n.items=e,e.off(o).on(o,i)))},_openClick:function(n,i,o){var r=void 0!==o.midClick?o.midClick:e.magnificPopup.defaults.midClick;if(r||2!==n.which&&!n.ctrlKey&&!n.metaKey){var a=void 0!==o.disableOn?o.disableOn:e.magnificPopup.defaults.disableOn;if(a)if(e.isFunction(a)){if(!a.call(t))return!0}else if(a>I.width())return!0;n.type&&(n.preventDefault(),t.isOpen&&n.stopPropagation()),o.el=e(n.mfpEl),o.delegate&&(o.items=i.find(o.delegate)),t.open(o)}},updateStatus:function(e,i){if(t.preloader){n!==e&&t.container.removeClass("mfp-s-"+n),i||"loading"!==e||(i=t.st.tLoading);var o={status:e,text:i};T("UpdateStatus",o),e=o.status,i=o.text,t.preloader.html(i),t.preloader.find("a").on("click",function(e){e.stopImmediatePropagation()}),t.container.addClass("mfp-s-"+e),n=e}},_addClassToMFP:function(e){t.bgOverlay.addClass(e),t.wrap.addClass(e)},_removeClassFromMFP:function(e){this.bgOverlay.removeClass(e),t.wrap.removeClass(e)},_hasScrollBar:function(e){return(t.isIE7?o.height():document.body.scrollHeight)>(e||I.height())},_parseMarkup:function(t,n,i){var o;i.data&&(n=e.extend(i.data,n)),T(p,[t,n,i]),e.each(n,function(e,n){if(void 0===n||n===!1)return!0;if(o=e.split("_"),o.length>1){var i=t.find(v+"-"+o[0]);if(i.length>0){var r=o[1];"replaceWith"===r?i[0]!==n[0]&&i.replaceWith(n):"img"===r?i.is("img")?i.attr("src",n):i.replaceWith(''):i.attr(o[1],n)}}else t.find(v+"-"+e).html(n)})},_getScrollbarSize:function(){if(void 0===t.scrollbarSize){var e=document.createElement("div");e.id="mfp-sbm",e.style.cssText="width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;",document.body.appendChild(e),t.scrollbarSize=e.offsetWidth-e.clientWidth,document.body.removeChild(e)}return t.scrollbarSize}},e.magnificPopup={instance:null,proto:w.prototype,modules:[],open:function(t,n){return P(),t=t?e.extend(!0,{},t):{},t.isObj=!0,t.index=n||0,this.instance.open(t)},close:function(){return e.magnificPopup.instance&&e.magnificPopup.instance.close()},registerModule:function(t,n){n.options&&(e.magnificPopup.defaults[t]=n.options),e.extend(this.proto,n.proto),this.modules.push(t)},defaults:{disableOn:0,key:null,midClick:!1,mainClass:"",preloader:!0,focus:"",closeOnContentClick:!1,closeOnBgClick:!0,closeBtnInside:!0,showCloseBtn:!0,enableEscapeKey:!0,modal:!1,alignTop:!1,removalDelay:0,fixedContentPos:"auto",fixedBgPos:"auto",overflowY:"auto",closeMarkup:'',tClose:"Close (Esc)",tLoading:"Loading..."}},e.fn.magnificPopup=function(n){P();var i=e(this);if("string"==typeof n)if("open"===n){var o,r=b?i.data("magnificPopup"):i[0].magnificPopup,a=parseInt(arguments[1],10)||0;r.items?o=r.items[a]:(o=i,r.delegate&&(o=o.find(r.delegate)),o=o.eq(a)),t._openClick({mfpEl:o},i,r)}else t.isOpen&&t[n].apply(t,Array.prototype.slice.call(arguments,1));else n=e.extend(!0,{},n),b?i.data("magnificPopup",n):i[0].magnificPopup=n,t.addGroup(i,n);return i};var z,M,B,H="inline",L=function(){B&&(M.after(B.addClass(z)).detach(),B=null)};e.magnificPopup.registerModule(H,{options:{hiddenClass:"hide",markup:"",tNotFound:"Content not found"},proto:{initInline:function(){t.types.push(H),x(l+"."+H,function(){L()})},getInline:function(n,i){if(L(),n.src){var o=t.st.inline,r=e(n.src);if(r.length){var a=r[0].parentNode;a&&a.tagName&&(M||(z=o.hiddenClass,M=k(z),z="mfp-"+z),B=r.after(M).detach().removeClass(z)),t.updateStatus("ready")}else t.updateStatus("error",o.tNotFound),r=e("
");return n.inlineElement=r,r}return t.updateStatus("ready"),t._parseMarkup(i,{},n),i}}});var A,F="ajax",j=function(){A&&i.removeClass(A)},N=function(){j(),t.req&&t.req.abort()};e.magnificPopup.registerModule(F,{options:{settings:null,cursor:"mfp-ajax-cur",tError:'The content could not be loaded.'},proto:{initAjax:function(){t.types.push(F),A=t.st.ajax.cursor,x(l+"."+F,N),x("BeforeChange."+F,N)},getAjax:function(n){A&&i.addClass(A),t.updateStatus("loading");var o=e.extend({url:n.src,success:function(i,o,r){var a={data:i,xhr:r};T("ParseAjax",a),t.appendContent(e(a.data),F),n.finished=!0,j(),E(),setTimeout(function(){t.wrap.addClass(h)},16),t.updateStatus("ready"),T("AjaxContentAdded")},error:function(){j(),n.finished=n.loadError=!0,t.updateStatus("error",t.st.ajax.tError.replace("%url%",n.src))}},t.st.ajax.settings);return t.req=e.ajax(o),""}}});var W,R=function(n){if(n.data&&void 0!==n.data.title)return n.data.title;var i=t.st.image.titleSrc;if(i){if(e.isFunction(i))return i.call(t,n);if(n.el)return n.el.attr(i)||""}return""};e.magnificPopup.registerModule("image",{options:{markup:'
',cursor:"mfp-zoom-out-cur",titleSrc:"title",verticalFit:!0,tError:'The image could not be loaded.'},proto:{initImage:function(){var e=t.st.image,n=".image";t.types.push("image"),x(f+n,function(){"image"===t.currItem.type&&e.cursor&&i.addClass(e.cursor)}),x(l+n,function(){e.cursor&&i.removeClass(e.cursor),I.off("resize"+v)}),x("Resize"+n,t.resizeImage),t.isLowIE&&x("AfterChange",t.resizeImage)},resizeImage:function(){var e=t.currItem;if(e&&e.img&&t.st.image.verticalFit){var n=0;t.isLowIE&&(n=parseInt(e.img.css("padding-top"),10)+parseInt(e.img.css("padding-bottom"),10)),e.img.css("max-height",t.wH-n)}},_onImageHasSize:function(e){e.img&&(e.hasSize=!0,W&&clearInterval(W),e.isCheckingImgSize=!1,T("ImageHasSize",e),e.imgHidden&&(t.content&&t.content.removeClass("mfp-loading"),e.imgHidden=!1))},findImageSize:function(e){var n=0,i=e.img[0],o=function(r){W&&clearInterval(W),W=setInterval(function(){return i.naturalWidth>0?(t._onImageHasSize(e),void 0):(n>200&&clearInterval(W),n++,3===n?o(10):40===n?o(50):100===n&&o(500),void 0)},r)};o(1)},getImage:function(n,i){var o=0,r=function(){n&&(n.img[0].complete?(n.img.off(".mfploader"),n===t.currItem&&(t._onImageHasSize(n),t.updateStatus("ready")),n.hasSize=!0,n.loaded=!0,T("ImageLoadComplete")):(o++,200>o?setTimeout(r,100):a()))},a=function(){n&&(n.img.off(".mfploader"),n===t.currItem&&(t._onImageHasSize(n),t.updateStatus("error",s.tError.replace("%url%",n.src))),n.hasSize=!0,n.loaded=!0,n.loadError=!0)},s=t.st.image,l=i.find(".mfp-img");if(l.length){var c=document.createElement("img");c.className="mfp-img",n.img=e(c).on("load.mfploader",r).on("error.mfploader",a),c.src=n.src,l.is("img")&&(n.img=n.img.clone()),n.img[0].naturalWidth>0&&(n.hasSize=!0)}return t._parseMarkup(i,{title:R(n),img_replaceWith:n.img},n),t.resizeImage(),n.hasSize?(W&&clearInterval(W),n.loadError?(i.addClass("mfp-loading"),t.updateStatus("error",s.tError.replace("%url%",n.src))):(i.removeClass("mfp-loading"),t.updateStatus("ready")),i):(t.updateStatus("loading"),n.loading=!0,n.hasSize||(n.imgHidden=!0,i.addClass("mfp-loading"),t.findImageSize(n)),i)}}});var Z,q=function(){return void 0===Z&&(Z=void 0!==document.createElement("p").style.MozTransform),Z};e.magnificPopup.registerModule("zoom",{options:{enabled:!1,easing:"ease-in-out",duration:300,opener:function(e){return e.is("img")?e:e.find("img")}},proto:{initZoom:function(){var e,n=t.st.zoom,i=".zoom";if(n.enabled&&t.supportsTransition){var o,r,a=n.duration,s=function(e){var t=e.clone().removeAttr("style").removeAttr("class").addClass("mfp-animated-image"),i="all "+n.duration/1e3+"s "+n.easing,o={position:"fixed",zIndex:9999,left:0,top:0,"-webkit-backface-visibility":"hidden"},r="transition";return o["-webkit-"+r]=o["-moz-"+r]=o["-o-"+r]=o[r]=i,t.css(o),t},d=function(){t.content.css("visibility","visible")};x("BuildControls"+i,function(){if(t._allowZoom()){if(clearTimeout(o),t.content.css("visibility","hidden"),e=t._getItemToZoom(),!e)return d(),void 0;r=s(e),r.css(t._getOffset()),t.wrap.append(r),o=setTimeout(function(){r.css(t._getOffset(!0)),o=setTimeout(function(){d(),setTimeout(function(){r.remove(),e=r=null,T("ZoomAnimationEnded")},16)},a)},16)}}),x(c+i,function(){if(t._allowZoom()){if(clearTimeout(o),t.st.removalDelay=a,!e){if(e=t._getItemToZoom(),!e)return;r=s(e)}r.css(t._getOffset(!0)),t.wrap.append(r),t.content.css("visibility","hidden"),setTimeout(function(){r.css(t._getOffset())},16)}}),x(l+i,function(){t._allowZoom()&&(d(),r&&r.remove(),e=null)})}},_allowZoom:function(){return"image"===t.currItem.type},_getItemToZoom:function(){return t.currItem.hasSize?t.currItem.img:!1},_getOffset:function(n){var i;i=n?t.currItem.img:t.st.zoom.opener(t.currItem.el||t.currItem);var o=i.offset(),r=parseInt(i.css("padding-top"),10),a=parseInt(i.css("padding-bottom"),10);o.top-=e(window).scrollTop()-r;var s={width:i.width(),height:(b?i.innerHeight():i[0].offsetHeight)-a-r};return q()?s["-moz-transform"]=s.transform="translate("+o.left+"px,"+o.top+"px)":(s.left=o.left,s.top=o.top),s}}});var D="iframe",K="//about:blank",Y=function(e){if(t.currTemplate[D]){var n=t.currTemplate[D].find("iframe");n.length&&(e||(n[0].src=K),t.isIE8&&n.css("display",e?"block":"none"))}};e.magnificPopup.registerModule(D,{options:{markup:'
',srcAction:"iframe_src",patterns:{youtube:{index:"youtube.com",id:"v=",src:"//www.youtube.com/embed/%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}}},proto:{initIframe:function(){t.types.push(D),x("BeforeChange",function(e,t,n){t!==n&&(t===D?Y():n===D&&Y(!0))}),x(l+"."+D,function(){Y()})},getIframe:function(n,i){var o=n.src,r=t.st.iframe;e.each(r.patterns,function(){return o.indexOf(this.index)>-1?(this.id&&(o="string"==typeof this.id?o.substr(o.lastIndexOf(this.id)+this.id.length,o.length):this.id.call(this,o)),o=this.src.replace("%id%",o),!1):void 0});var a={};return r.srcAction&&(a[r.srcAction]=o),t._parseMarkup(i,a,n),t.updateStatus("ready"),i}}});var U=function(e){var n=t.items.length;return e>n-1?e-n:0>e?n+e:e},G=function(e,t,n){return e.replace("%curr%",t+1).replace("%total%",n)};e.magnificPopup.registerModule("gallery",{options:{enabled:!1,arrowMarkup:'',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:"Previous (Left arrow key)",tNext:"Next (Right arrow key)",tCounter:"%curr% of %total%"},proto:{initGallery:function(){var n=t.st.gallery,i=".mfp-gallery",r=Boolean(e.fn.mfpFastClick);return t.direction=!0,n&&n.enabled?(a+=" mfp-gallery",x(f+i,function(){n.navigateByImgClick&&t.wrap.on("click"+i,".mfp-img",function(){return t.items.length>1?(t.next(),!1):void 0}),o.on("keydown"+i,function(e){37===e.keyCode?t.prev():39===e.keyCode&&t.next()})}),x("UpdateStatus"+i,function(e,n){n.text&&(n.text=G(n.text,t.currItem.index,t.items.length))}),x(p+i,function(e,i,o,r){var a=t.items.length;o.counter=a>1?G(n.tCounter,r.index,a):""}),x("BuildControls"+i,function(){if(t.items.length>1&&n.arrows&&!t.arrowLeft){var i=n.arrowMarkup,o=t.arrowLeft=e(i.replace("%title%",n.tPrev).replace("%dir%","left")).addClass(y),a=t.arrowRight=e(i.replace("%title%",n.tNext).replace("%dir%","right")).addClass(y),s=r?"mfpFastClick":"click";o[s](function(){t.prev()}),a[s](function(){t.next()}),t.isIE7&&(k("b",o[0],!1,!0),k("a",o[0],!1,!0),k("b",a[0],!1,!0),k("a",a[0],!1,!0)),t.container.append(o.add(a))}}),x(m+i,function(){t._preloadTimeout&&clearTimeout(t._preloadTimeout),t._preloadTimeout=setTimeout(function(){t.preloadNearbyImages(),t._preloadTimeout=null},16)}),x(l+i,function(){o.off(i),t.wrap.off("click"+i),t.arrowLeft&&r&&t.arrowLeft.add(t.arrowRight).destroyMfpFastClick(),t.arrowRight=t.arrowLeft=null}),void 0):!1},next:function(){t.direction=!0,t.index=U(t.index+1),t.updateItemHTML()},prev:function(){t.direction=!1,t.index=U(t.index-1),t.updateItemHTML()},goTo:function(e){t.direction=e>=t.index,t.index=e,t.updateItemHTML()},preloadNearbyImages:function(){var e,n=t.st.gallery.preload,i=Math.min(n[0],t.items.length),o=Math.min(n[1],t.items.length);for(e=1;(t.direction?o:i)>=e;e++)t._preloadItem(t.index+e);for(e=1;(t.direction?i:o)>=e;e++)t._preloadItem(t.index-e)},_preloadItem:function(n){if(n=U(n),!t.items[n].preloaded){var i=t.items[n];i.parsed||(i=t.parseEl(n)),T("LazyLoad",i),"image"===i.type&&(i.img=e('').on("load.mfploader",function(){i.hasSize=!0}).on("error.mfploader",function(){i.hasSize=!0,i.loadError=!0,T("LazyLoadError",i)}).attr("src",i.src)),i.preloaded=!0}}}});var X="retina";e.magnificPopup.registerModule(X,{options:{replaceSrc:function(e){return e.src.replace(/\.\w+$/,function(e){return"@2x"+e})},ratio:1},proto:{initRetina:function(){if(window.devicePixelRatio>1){var e=t.st.retina,n=e.ratio;n=isNaN(n)?n():n,n>1&&(x("ImageHasSize."+X,function(e,t){t.img.css({"max-width":t.img[0].naturalWidth/n,width:"100%"})}),x("ElementParse."+X,function(t,i){i.src=e.replaceSrc(i,n)}))}}}}),function(){var t=1e3,n="ontouchstart"in window,i=function(){I.off("touchmove"+r+" touchend"+r)},o="mfpFastClick",r="."+o;e.fn.mfpFastClick=function(o){return e(this).each(function(){var a,s=e(this);if(n){var l,c,d,u,p,f;s.on("touchstart"+r,function(e){u=!1,f=1,p=e.originalEvent?e.originalEvent.touches[0]:e.touches[0],c=p.clientX,d=p.clientY,I.on("touchmove"+r,function(e){p=e.originalEvent?e.originalEvent.touches:e.touches,f=p.length,p=p[0],(Math.abs(p.clientX-c)>10||Math.abs(p.clientY-d)>10)&&(u=!0,i())}).on("touchend"+r,function(e){i(),u||f>1||(a=!0,e.preventDefault(),clearTimeout(l),l=setTimeout(function(){a=!1},t),o())})})}s.on("click"+r,function(){a||o()})})},e.fn.destroyMfpFastClick=function(){e(this).off("touchstart"+r+" click"+r),n&&I.off("touchmove"+r+" touchend"+r)}}()})(window.jQuery||window.Zepto); \ No newline at end of file diff --git a/resources/Magnific-Popup/magnific-popup.css b/resources/Magnific-Popup/magnific-popup.css index 60391e1..2865003 100644 --- a/resources/Magnific-Popup/magnific-popup.css +++ b/resources/Magnific-Popup/magnific-popup.css @@ -58,8 +58,7 @@ .mfp-ajax-cur { cursor: progress; } -.mfp-zoom-out-cur, -.mfp-zoom-out-cur .mfp-image-holder .mfp-close { +.mfp-zoom-out-cur, .mfp-zoom-out-cur .mfp-image-holder .mfp-close { cursor: -moz-zoom-out; cursor: -webkit-zoom-out; cursor: zoom-out; } @@ -97,12 +96,10 @@ left: 8px; right: 8px; z-index: 1044; } - -.mfp-preloader a { - color: #cccccc; } - -.mfp-preloader a:hover { - color: white; } + .mfp-preloader a { + color: #cccccc; } + .mfp-preloader a:hover { + color: white; } .mfp-s-ready .mfp-preloader { display: none; } @@ -110,8 +107,7 @@ .mfp-s-error .mfp-content { display: none; } -button.mfp-close, -button.mfp-arrow { +button.mfp-close, button.mfp-arrow { overflow: visible; cursor: pointer; background: transparent; @@ -122,7 +118,6 @@ button.mfp-arrow { z-index: 1046; -webkit-box-shadow: none; box-shadow: none; } - button::-moz-focus-inner { padding: 0; border: 0; } @@ -176,36 +171,32 @@ button::-moz-focus-inner { width: 90px; height: 110px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } - -.mfp-arrow:active { - margin-top: -54px; } - -.mfp-arrow:hover, -.mfp-arrow:focus { - opacity: 1; } - -.mfp-arrow:before, .mfp-arrow:after, -.mfp-arrow .mfp-b, -.mfp-arrow .mfp-a { - content: ''; - display: block; - width: 0; - height: 0; - position: absolute; - left: 0; - top: 0; - margin-top: 35px; - margin-left: 35px; - border: medium inset transparent; } -.mfp-arrow:after, -.mfp-arrow .mfp-a { - border-top-width: 13px; - border-bottom-width: 13px; - top: 8px; } -.mfp-arrow:before, -.mfp-arrow .mfp-b { - border-top-width: 21px; - border-bottom-width: 21px; } + .mfp-arrow:active { + margin-top: -54px; } + .mfp-arrow:hover, .mfp-arrow:focus { + opacity: 1; } + .mfp-arrow:before, .mfp-arrow:after, + .mfp-arrow .mfp-b, + .mfp-arrow .mfp-a { + content: ''; + display: block; + width: 0; + height: 0; + position: absolute; + left: 0; + top: 0; + margin-top: 35px; + margin-left: 35px; + border: medium inset transparent; } + .mfp-arrow:after, + .mfp-arrow .mfp-a { + border-top-width: 13px; + border-bottom-width: 13px; + top: 8px; } + .mfp-arrow:before, + .mfp-arrow .mfp-b { + border-top-width: 21px; + border-bottom-width: 21px; } .mfp-arrow-left { left: 0; } @@ -231,30 +222,27 @@ button::-moz-focus-inner { .mfp-iframe-holder { padding-top: 40px; padding-bottom: 40px; } - -.mfp-iframe-holder .mfp-content { - line-height: 0; - width: 100%; - max-width: 900px; } + .mfp-iframe-holder .mfp-content { + line-height: 0; + width: 100%; + max-width: 900px; } + .mfp-iframe-holder .mfp-close { + top: -40px; } .mfp-iframe-scaler { width: 100%; height: 0; overflow: hidden; padding-top: 56.25%; } - -.mfp-iframe-scaler iframe { - position: absolute; - display: block; - top: 0; - left: 0; - width: 100%; - height: 100%; - box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); - background: black; } - -.mfp-iframe-holder .mfp-close { - top: -40px; } + .mfp-iframe-scaler iframe { + position: absolute; + display: block; + top: 0; + left: 0; + width: 100%; + height: 100%; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); + background: black; } /* Main image in popup */ img.mfp-img { @@ -270,22 +258,26 @@ img.mfp-img { margin: 0 auto; } /* The shadow behind the image */ -.mfp-figure:after { - content: ''; - position: absolute; - left: 0; - top: 40px; - bottom: 40px; - display: block; - right: 0; - width: auto; - height: auto; - z-index: -1; - box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); - background: #444444; } - .mfp-figure { line-height: 0; } + .mfp-figure:after { + content: ''; + position: absolute; + left: 0; + top: 40px; + bottom: 40px; + display: block; + right: 0; + width: auto; + height: auto; + z-index: -1; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); + background: #444444; } + .mfp-figure small { + color: #bdbdbd; + display: block; + font-size: 12px; + line-height: 14px; } .mfp-bottom-bar { margin-top: -36px; @@ -302,12 +294,6 @@ img.mfp-img { word-wrap: break-word; padding-right: 36px; } -.mfp-figure small { - color: #bdbdbd; - display: block; - font-size: 12px; - line-height: 14px; } - .mfp-image-holder .mfp-content { max-width: 100%; } @@ -321,15 +307,16 @@ img.mfp-img { .mfp-img-mobile .mfp-image-holder { padding-left: 0; padding-right: 0; } - .mfp-img-mobile img.mfp-img { padding: 0; } - - /* The shadow behind the image */ - .mfp-img-mobile .mfp-figure:after { - top: 0; - bottom: 0; } - + .mfp-img-mobile .mfp-figure { + /* The shadow behind the image */ } + .mfp-img-mobile .mfp-figure:after { + top: 0; + bottom: 0; } + .mfp-img-mobile .mfp-figure small { + display: inline; + margin-left: 5px; } .mfp-img-mobile .mfp-bottom-bar { background: rgba(0, 0, 0, 0.6); bottom: 0; @@ -340,14 +327,11 @@ img.mfp-img { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } - - .mfp-img-mobile .mfp-bottom-bar:empty { - padding: 0; } - + .mfp-img-mobile .mfp-bottom-bar:empty { + padding: 0; } .mfp-img-mobile .mfp-counter { right: 5px; top: 3px; } - .mfp-img-mobile .mfp-close { top: 0; right: 0; @@ -357,11 +341,7 @@ img.mfp-img { background: rgba(0, 0, 0, 0.6); position: fixed; text-align: center; - padding: 0; } - - .mfp-img-mobile .mfp-figure small { - display: inline; - margin-left: 5px; } } + padding: 0; } } @media all and (max-width: 900px) { .mfp-arrow { -webkit-transform: scale(0.75); From 650a23c8db4ba3bc2b78c1d23a65cfe3a3ec7c49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lucas?= Date: Thu, 3 Oct 2013 15:22:21 +0200 Subject: [PATCH 17/22] Add real test with a database. re #96 --- test/baseTest.php | 2 +- test/bookTest.php | 43 +++++++++++++++++++++++++++++++++++++++++++ test/config_test.php | 4 ++-- test/metadata.db | Bin 0 -> 139264 bytes 4 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 test/bookTest.php create mode 100644 test/metadata.db diff --git a/test/baseTest.php b/test/baseTest.php index fc50712..2e60c99 100644 --- a/test/baseTest.php +++ b/test/baseTest.php @@ -3,7 +3,7 @@ require_once (dirname(__FILE__) . "/config_test.php"); require_once (dirname(__FILE__) . "/../base.php"); -class StackTest extends PHPUnit_Framework_TestCase +class BaseTest extends PHPUnit_Framework_TestCase { public function testAddURLParameter () { diff --git a/test/bookTest.php b/test/bookTest.php new file mode 100644 index 0000000..747e593 --- /dev/null +++ b/test/bookTest.php @@ -0,0 +1,43 @@ +assertEquals (14, Book::getBookCount ()); + } + + public function testGetCount () + { + $entryArray = Book::getCount (); + $this->assertEquals (2, count($entryArray)); + + $entryAllBooks = $entryArray [0]; + $this->assertEquals ("Alphabetical index of the 14 books", $entryAllBooks->content); + + $entryRecentBooks = $entryArray [1]; + $this->assertEquals ("50 most recent books", $entryRecentBooks->content); + + } + + public function testGetCountRecent () + { + global $config; + $config['cops_recentbooks_limit'] = 0; + $entryArray = Book::getCount (); + + $this->assertEquals (1, count($entryArray)); + + $config['cops_recentbooks_limit'] = 2; + $entryArray = Book::getCount (); + + $entryRecentBooks = $entryArray [1]; + $this->assertEquals ("2 most recent books", $entryRecentBooks->content); + + $config['cops_recentbooks_limit'] = 50; + } + +} \ No newline at end of file diff --git a/test/config_test.php b/test/config_test.php index 824e18b..847889b 100644 --- a/test/config_test.php +++ b/test/config_test.php @@ -1,4 +1,4 @@ A`jCSKV zd%W4i@n$_v)@Q$aUsZMW9~vM*i6W~(*3YZ=d*8kH-Fx4C@6A7ZGFLJ6#bRm2sOV9p zOHozjNnKYI^&v(6K8%}+|37BkWvC3>W4~;6@5aY~h*Ff2_($;%;_t+F#b1fH#Gi|A zivJ+KF8;mvs`wwpZ;D?NUl6}6J}v$m@$=$eh@TPvxp+goCVoP!i;5_U7lkQ4C|(fn z6VHm1;?EY&@g-$M)`3udGyzblx5&Fbf7 z4xgOWtw4Q3&t-L8KXK~Z?D5&N`kAvQ=4Q@5uRk;U{A3@(H~AHe6;nSq``kJG)M@-b zfAXY$Wm1lP^rOY~yvY|- z!}XyLZR{4msEA(_e=UAP{Hgdo@p~gHmq5($Mu!B80g^ib#^|J%>k zjeEO>mD8u^o=~HMgRiRR)j2A2CVR;&RH`MjOeN1Ro27ga{PC$`e#Iq?J`oM5@$hsq8Zu%*Bb>+tV~Io}IBhJZgQmF{n+`|P;czyHfK@}YiQE|C&Y?IQVK(_T}w*Tf%+f5MCR z^C0l{L4frCccTq}j0oGa9prO`iw(wyqqE0m&YwJ|kB@gUJe)su;@R`F6J)>$Y;NQT z1U28-%wAQ=6|&~b<(KlX?k&J{Qsj4fA_L1p*m@8||EdC0!?Z%Sg{}U&J~}J>V`F3L zPv_WhLjy~hFI{y;8xFEfHZaY!u-fP|=g*x!aSF-iW>1~#0EtSjk~i7JQ*XzyLAmdI z;bNhgP_(&CZ{jnLDG~)j4wh>{&Ew!THjmd8^fQ z)_^%y-+{c!W+`Wu7r5Vb7}8GGtX_8Y!c(CR6_RMOAPryJM*3ViU643$mpDGYy^hIe zGS`{Is!>_KR=Qiv8%t#eXC0%V-I#C(;8m-zR1%(ch_`H%7c#|5W=TJM`t(T$c{=q? z-Y8cVR*Ko&V$MW44)QhCbG)q}Jsx2C7yplff8Ni7fCquw0Rp|M7*ly@9wGYgQdTjW zq5O_^uV$#fBYvp?1h3ue_m9Qn>eUx&L;XVDC@fWtB@8em*l=DAVg1d50Aif!@{R4^ zuRhONS>j3Ae5q;{GG@c8zb=D@k1PvKB4uFXLbrb`99FN$JY`jEIj2@RcSvtt&dn*L zz|uli>A=WYg0L@?ZPVDXoeX4+uPX~nZltPAS`%m;OXp{Ljb3q zH5>>GiZ_%Y@exJ*1?J*^AM@{@5}y&@5q~RwAigAiTYOx6QhbE|8hC>D>OsJRzz#sb zcQ<+5j0o|j(xa-ogzpY|AMW<;q5Dv`Z-DNDs&A0)1FEl&?)|E7gzkN+Z#Uh0RiB^k zJzc00^6?8_H@*9WuZ!;8ns12iU8--G?n3qLqPwQ{+4TPd(EN8SF7Vr+{V#wId9pQVg zx|{DkU1ZenA@b*UpXla$x7Nk?E_I0SLLKJ2rtTUPU&Z+Uq5`kH@4_SRoAAc_P0;?Q z;eq!v@V@&Ac;3B;&)(02fCqu=fE z@uaCr9~jRNWB|zf?Z*E%@Y(x$5bz*y10lfU@rX4p4_o8(kTu@d#{YhfR~!F(`Mp=| z;X6itR1sHF2SDFG)f)d*d;Aw1E>w;08Z--P6KM_J&x3#mf!huO2i#&8aW6adcJRcWtJ_X4 zF5uTD5|MT?!&AFlX)q}uwL%??@&Bu+X z*8HDp&Ht&}oc|+ZAkF`&*8HDp&Ht(G=l{M1``@P(@k8-_@i&+Od`tYXcvE~0EAqdB zS->xf&tfj%)7RZRF9Qz(9t5r#0^I_<;ZC{^-$B=*J#-x$pzFXOUHkj!+BZVi-raPS ztNi^wdiHhGwY!V1T|;yg!*tblk^J8)zT~$5zX?Ae_5ir%>Us%12zU^HnMX{rL_k|4sJ& zBl`c+jcS0GuLl7S0@ni?|F;BV`{L%V%r&+gyc7E!@6DqbgGTOpi)yEaY^OT*o9m!Zg7 zx>j@EcLnTeVIXpSzJBA-#)ZM=^#pFqrL-lwLw2{Qll%MiR|>YE>$X_Q8ts(1YEqZ^ zZNqG}GiKwP4q4`7-~)dHOW+S-|NGk8)+nza4+0(pt{DPk$s5{5*I~Bm^|FOeW9y*kr|>Rm9h8|%V*88lAW$d#%Eka_K=n)e_7k60}L7F3c)AAI4N<1l^6KAx) z(7vg?sr|lCv>#}Ht9?iNjP@z*lkUH3ZkCtuHim%jIE`bN4?D(ppKq4$-Qs2CF0y|C zG`n#3;ZF9jZeNnV539Ze-}`)VzIXXzeDC!=N_W`F4)VRvm*RVuZ<_DDz6a<&D17(x zUG-I372I;*|_$K+T`VPvU{nz~eZTtUcz!N^sYXFzUDmcO!&^u8*aR$j1 zz#l;IKLG9jt@iui1AhTd@JZ$Xp8^-K{%&I=_L_dp5McY&h`Hyfr{Jve> z4u7{?m*=zm|9w8W-p|)9*Z*~^(*M7^OWOas#KW9lm-ZfcS0CcL5EJsQ?UQ%)5x#3; zzr1Vjm3Ni*|LIa6R@8^pW$jnB@2Njhei?r^0G~HRLaEy`f}MUo9NLzBA3j?yqT%+F2LDbIhW5@i9oSi z*;=ub&)ORVhf|SIS}v+AT1l!0+q95 z7N`cqgeY3cG_a>jdFtv2ExY{KLmKS`+(9v&)DveNge$HFK6txysq0m zsZ?j|vyACw<6w#EhgRvC+^cUJ%vyHj%o zq(R!%Qm#H?p+7yx(?jo8#{7e+YBsoD49;BVRY|nV|&;g@~Yfkx!I)J9CB}+ z`Lg-@H5=31D`Kq^YwM4J*w(=f?%e9UE4QCr^`fxDcl6L&&b{%KVsrED%uNpdE=Yk60(3*S|ebFGJVG)F)b=0f#M% zqA~V>j#1B(g|rkP!<13$o^5x`fJ*6Y9G>$Yj>!Brv59{P#;kKTA>}m zE>Q&M_xOlUQTK?Ik-5`{PwXlln91id=Du=mUX-UaFW_KuoWV;|=s~^iaAE~69Ev(B zR(72^daV1=-`Z~a$Pkx*et7oG`NKoMRXn!_AD(sndDAGN5{sDrM~MwbCdURj&GSQ) z=J21sLNl`GmP@9o&s8xMTQM<1-<;~n0Z#SOAf@Un+_U*SE(&!Wtu7~LXZksZ@&M=X z{(qtz=FF8MrrT*QxZ#*$szFm0@jlMtg?`Fn@Y`RR(dR4G>^e;w&u5Gh2&HARWG^RM z=%ZvqKl(V8JfB;Vo(p(BR>bM>t;!4caKiasO4u8UQNoi&cn4fyuZ@;T;K2%vnD3z^ z{eS;CN^-#{*|Xi8kihFYv-)u#Ct2}xtNK5@T_iY$32hYls*lpEuTP^hdCt7TwJlzx zdGq5qBd@Ga%#eQyd1+7?s6`zzhPpVPXS=zzNB@AT-gta9(zwpjJ}NlHdKaY_82JlI z;kX2BxmOQsoJ&=3F5munS#H}inp^hNlPc%&lE!(Qyh?ercPwe>IFR$}yZglZm0jX7 zoc|~OPw~HrKNA05{3=fV_yz3#|55RZcu6dZ$HcSZIQ=>F?>%@B@F1Y{b*X#Q5hA@i zdb`w7bp)f?s0^fmaYTFt`|{Hex0?gyXvL2_2o3Thk1PZH$U{UwKQgQD<40!Sz5K`w zxrZN_(UMzFzsd|0>-|s}=7rt-$n30(ADK@Heq?5&@gwsL-v7HxJ*%i^wJ&OaCcdHd zEB`D0Zh>F?e&5)MhuTTz@a`*A=;Ty74B7QEad~YoA8h>E97~dmrkO4C<>5MsoP(qx zyWv#hjSt-IAKSA>y?P&KK+-S$AFoSJA$ID9^k<*fpP7BWwb(7?duuO%TDnuGx8he? zZ!y0HztU;}vjVFnvs^Z_3uQ>JE)U?XRA9SXo4Pi~oYZCQ1AT!lYh2gelUwNtU6)5v zZ$W3WJ5SfknNn`m@$lW+-lG;UxU^;^pq4kD0)cydV~57tp+2MTLYQxlc=rEWfYo_T z@E~xF5b*5(*9bT-nFoPe00J)i-%rB+cMul9Z)m@um9&G}u=*$JXVr>&0;?3it$a?o zqMY2k!HH2UZy8Wa0!T6DW-tq4>#mQ9(NU_2SYni_6|VKfv$hq{f<^>i#E z8cz&z5r|qVA{mZk64AIBjGM`6tB6!=vAz{_M%?I}zhe=RNP-TL8(l)wS`q1t5sAjK zC}J_1u>ciKX6uWfBj-lve4UGkCg@DM(IrH!6=9?oGt=SFbTFO`CF~-i;rb%z1iR6> z?v6#IA_+R;ZgdGzYefJ~vFS({2o;Uk-ECy*5o*7W(mmVNv50Ui5>C*Wd812+Tq`8D z7&D^bY=UqqWwoOTr|5*e(K*qvkVGOuNAQgEXf?5DyQKMf%4PW!2_ho3Og<)rD4#=KDuqfuOey6mTd;3r}xn*CH@`(L+`SCqW^9qj?(hXn9HDbdaQ?4bw!8|(M^#~yk}y_#Yp zm&<_WdfZoM^2%keDUoBQ)33u`W}8QNwd;26W_Dtp!**uJE&G`>TbwJW3**~drY&=( zgM0A1p7q``qdI#T)wX6Q3S6r-)O^4{_P_(`Yj<-$=Z(TrmDWx>5AUt(V<(s@G@&~l z367y~+h-|Jj&NwkO5q)YkCUYfJYn58Hv2$3i<#4`g|PFu|MHOs{bLV4sBSzfL6b|D zjMDl-E}M6rChLLYgxjEL;i$2>-Bp;M#3T4zRERp@sqyJl{U%i%i5ZDR?{9;rE`Lq15ia$~C&--~0@E~w&Kwuw+ z_w#0AF>FTCkzh7u7{ORLnhd7Wuwo~pNh6)jgcI3NRF3~1{ofkh?zO^$07GCxoL9F( z{yhHE`d>c(^NTp|)BX2Zoc@VF52hXjJP5q=5Wq1VIJOT5cHe~!zTZ@KV>@pO8NjoT z2|2{a`Mnq0lYa{#y{Pg1>X7&jo`=QvaqZ?S?E^T#I}iKR5!?TV>Hlju^OyeKs{ecE zTkh4sgMbGCqV}#KqJJ?+^sfz2$Ur~Q{~!@^sE=s=z5P8z|Gl(2;Qk>W(Las_0sVJ( z(bXpqJ}{!;>KkFU;a8qg@b6W1M%~Z~+JA=`z^9d$@O>M<=(um}_=9aHP@Jg`%%C{W z!OJrb`Nx7mbtBGGC@ZFPm0!r_N)>Fl+W0bpn$j+n-S389_VQ=F2eUoSz8~p1Ru{$p9IqZ52*EQYs;o4eFO}U6& zmh0x!wlMWXQPWQJb}MFwy-Gh)!%qf;CV9 zwhnk=H2>$ZXjPk78`f4*YkCxY~*rbnO-a zwVn}(QL$fb-~!s6BCIyE0Bip5?-cQOw*>gTMtBhLAg~z(1|bYQpd7Oo*U0(5?kL$s( zK6C1*ZoNOIhr@x6lW1~6N4GNRG^Z1MuWxK-Z@bw=tAPt)>mji*u-`v+_ucAi04BD< zl?M>Z>vSDxWY~2;=DH`wu60t(hTm3Z#P(16#-6yl9rPp&7Q*tLx@L^rGCo}=%(m0= zeN&rlOHFjO5T@&+H2){Wh9bTtK8Kt4^B~|s;BAG#doh(4jUL^HeV>h`f>F@V7I9=U z+&@|bO=5yC9>+Pui`ay*SkjLy@=%!7ajfoq4rn24$^c!Z#t!dC1+qiMkg@@M(KPdulH@5AT!YuNkyUyGj;uZyx+ zLZJ8aAmBm34S_$3&*yPyN45yXG#J#6FOo3kjtBW z-AI4TC{&E{`kpSKglD*5WZ@h z!Sc7)sydDTO#ejr-xtq;`o9L+e;wSQ>~6UC>_NbTfbvJJ$e-M0zg$oL{vq+8>LUMs zu~)Uozn2_#>dC){N9KC+_Ya8sRGa*Ll-?r$Zt~=5CjTxH2U?K77!mt0>buBaDtRt*`YsSb{JXVVwE z>2ovBO*HM1AJDnByy3qDU4654+DN}`mN+~Yo}3eG?2;L=O;lz?j|~k*kQ?q4W3#5x z_qJtM%$F;&O#3k4mi?yNU)yF>LnF)VD621D8X925V3;v#!10yF)6H5TV>A_SCCuRz zs+XHTf*_g#jcNsivOuQErf+s9TRmbON6^%{)X!55JuKrk1DdvsYbs~es4O=H<};ZV zF{Mj!Q{=^bt6rsjzt~NgT$O9!CHtSI{Hdb+srqk}Z-|H09}!1*_y4;7voi<$dvFZL z&vsveD>tpWq5q0y1%Ka(*$X-a=ri*UR4lHS%TCHe9hx9(;{YLug$HRP4-B4UR%wyC zL|chV7T(Ux>xig7efq>H-TI)PJ~bg9^+R?TatgR;3?Dcz4z`k^XCAw9BIMr_jjC@v zN=*X|J6_~gq!vMS4R7%saL{G@9dHn$*grI}WjK*`>n}E}j+{P!>Ks-nwFi#m2D0jh ztQK&SGsSA5nGm^3cJ4FpJ8sRSl&2)$ZZo4&!}tZO2+2{<>`H#p8m8(72kJ9?vBFxm z-s-DLeyXYVJTa8cOICmg)R7d{Iv=YLw3_-nZ#Bg=xn#Faf9!ER6wr-JOA9hhYvAiV zyMh+by{Slsg#`uP|4+SNQSVppdG}NO4!5A|>O$DRXLeTo*pWs`Tg>I5Xkqn*1xGhY zHGXSLdyNrqFcCI0CML6Xq``FAggiD!XoK-2&4IGYl?BgL~$K0x9176 zx9UJC*$AMy!}PEGe+vHnryZuAn?Ad)*OiEW&oj@cA6sur-ZjmoC56{McP8>$+_#0! zYsK+M*GTFOpXE^2mfD@zhny!?J;?o`1)|3s%Hy|D!AFC#@lx801Di7d*Z3P1P2PO<>$>`Q+`s3E zC)AG(w&fDw59HeH*ytRkpFVWv5ESce;SW?$OR>QD(1AA~-XV(nPO*hrJ$HyHG&Sg5 z#Sc1b0R%8f|NmT3|GD}zHy?f7rZwuivXt=eNu|^`E;h22n&yVyb9hQEv@JuaMY+M; zq`}l*D_3gk7wV^v>y_;rW+!Z{#SU=@C)@gFNM-28aEmP%|2k8?Q*Vp@zo4jJP`!PA zZ+>>ub!9Fo=l+^zBrJu_%@(YnwmiZ5evJ%4rfxj}Rd0G|U

SZhjzxT=s+;#tG^Q z-yt^8RQq?B0m%AnF8*6^kmLX76!mlJ4PWzj^OM(2Uc;^{r>FgU!eRA|CYz+x=G??D zL)y~5{Cth1zg5da1L4au-E=QQYW9R1M)vNacZlj6>;4WC{k7}=UCL!exvYI&3}ElS z&u>lxSN5m;d$48i8~u%vDQOdK{G<1_*he2F?(KMnS3fIn5t2N~K~RK6xk2wOn~bTvkTwgLcvGn@6iFMtM@7$(t`5 zg>1mItQ1AHCi zD^>_1WQ4D~>Doo-fB1xto<%oZwJ!cT#8(^%g7~`}`u`y)|8JP;{}|N&HSmM4fFpbn z^#3XPYgIQd%!7ajfg1|}qS6tj|6NS~!%Y7}O#g#S{{u|_{Y?LTO#i)1|2<6qex`pP z(|bH zT#;Y+L+{-psh(RdnWjEhEnmdibDX`yUxsM8>bW(XhOw?ck25S__F2TriD9u<=^7U& z)Uzg*%@=f()vz@Mr`8@4&!}_eN->9oZQ=}2Hcw%#P?lm)jSm~BLg`Wtd*jGT3{v&x zabSlX<5;m;;sW~U%Mt9NV}H4j%VRkg+S)BX(HU0$gJPZ9U92uGbI~WERAWOr{dnFe zWAC~dRO-UAQGq&=qow^^OJrU$13rah^7%?NyRPR7`h3PH<;@Dzk$&I;RiL)CzoF@m zh-X!2*?+^gVjgFZaQ(XoA&wYjll1&{u)}tL--7)AX?gx<>+%27`0V{W2zU^9#~|R6 z*roI?Wqv9D_w!dN|M&894_|rwS9$zbdHh$U{4e;c##i3|$FKai3jY1Q`XTinwbyAD zK-u5W)b+#uvFcI(Sn7a!*=?hAO{=)9qpr}iEi9Dw=gVD>`^TP$tCt^iSv~VcVX0~? zSu4Jg>FGnhu?NP~HCG(l7W#CH%-sf0eS+6P)}Oi-*jllcNqM2ZKF_o$u|5Wap=NTe z|EN#U`$DFeH3L8Sglznnt6}xA7ivb|`VVuRYf*3btxvAYMR}Kdp7f8+B-P6gyJ}GL z3}M^0t5X}koN7^rhA0i7X!xp6I01pnVn$YF?aBizfAvcVebELK>6Qd4>um{;D_r-+q|n zwfNl#0iygNrvG84|6Znljp<+T>_C_F4wRmPa{OodAMBy^zkcN}73DA0_p5)X9nyYD z`+>Ns{D$(<&O_pI-wFTN(K+APLwnQ(p6Io9MyDlOv~l|T>!veZA89_FchH}(_FaGM zq;KrLJ?eSRg}&HXyik{g^<~FB7wpAgwRwKqr-4p4n2;}l@~m{2=yy$OyW+X#bX}qI zbq$cK$y}c~QJZ3ULD!4N{A2O`>SfhcsIzR)HG}Phoo`W~^RZ#>+6mVu@EEvwT$UwT zmQ|atcaptt)3WL(tDQvFO!dj9d}9yarXL5G z@A<9NCEczra{V7pAKa&XPl31pXT?v87sW~OG`h;eaHd`bI}_#(K*C&U|AH~6HuSH#?ZJI_bF96bnJI|OL7RFBiu zcZ{yxv*PEJ-Re=~IN&>itFQYo$4Sz)FG1I?I9+>V9R4VWALQ^9hfmX0JV00VetsUO ztM(v==p1qnKi|#IL4Ka(>jAoUP0_VS&h3rTvwt^gvRfVDTJ7Rm@z}2N*zV(zyxS$= z%Mo5YOlh_E&{chiu3~~i_HoD~9I~H7-pe6@KAZk)>wg^kzq1196W|PQfZAUHPgn(y z$bv^a2TpJj{NPD&fS8y9<&T5%@6>*Tb;I9t|Do>Q&x62C0|CPO5vKnUrvDM9|6NS~ zyO{oWG5rrS{SPz!4>SD_GyM-S{SPty4>A1@G5rrR{SPwz4>0`?F#QiO{r5Bd_cQ(X zG5z;3{r58c_qyo6hv~nE>EF-v?`Qh=GyVHq^zUQ(?`8?Vn zKlIuUJ@x~w_UomRe0E5;{m^AU2>U^^AK3p_6+ck$&--~0@E~xTK!DhhSy+<$|EQl< z)K6=J+B4dJ0Y9D}7r&}D?*DU}KxNZrKJzU59G2Nhi@np}B1U(k&JD}{LT*>|tn+D% zjV@pFXMAH1-mQL^Gqe2rkez(`U|og?GoSH|g#+qOO8>BGxl&xgCPMk@iu6;<)P?+5 zUF!O8jyGIg3fh(^ZRP{p^Qz>H<)v39yOQmUXQz3}Keq1y^|JJZt8H8a;5aWIsB57U zY&XscaBa8L2>`8m}zF&wVdUDA-=4LFGKVH?k&+kuMr*uZU+eP zkskYSdWo@wlS}lo#TBEFG0WmE5m(QYii>6$yI<-@ma(}pBz?1_(Z0C;!Z?m$A3{I>L`)3wFf0WQq~7 z4^&?)RrGmTH;prsRcHNQReo2YfA7-Y>j%&J_Xfw*pGs9qxg{_MC zez%VzJa_iQ@#C{+<#BMXNOeaB&Kx_3C`V^c&YqhkJ&$v!i*b1N_=!_>Av%6mieqO_ z&shby&yUmP+1HfWq0=XiPUW(XZXt)7j_E#aaGROb?fiO8)v#<7bPnFNwS(;<*Ph%_ z>aPh3Y^K;|yPXw-+fLWGCh*z-wwkXl2S=qCvj?(&HA=m%@ ziuR>5?m)I5j_e_FOYpXyyp#&m5fr|6t~! z&(EIIX*cpim0Trn^7)e!r)Doq@oQkRTFqq-(Iqw!u(}KZ6v53U&|w>0=eRAe&DFJ~ zx(Yn$#O-R4>iCXqmsQ&>a=UG`t*$KMlFm;OmeWo?fs_~{!$g1Vaoqt>J)u(X&spH|a|X`GjYXeCpeQqD-rAXusWw zkZRvI=H4gaKi>-e647kXZ3=%G)v2Qee;XN($p!%_?aW*;Z>4_Nh+pvU-M>e@5_Q3o zSignK^wLZH!i1t%8 z>h_-MA+V8o-oH1wSH1G8n>wX}fh{8}A>X>SB-6&YE^=gIt?3$8F0KgIOs_{ypFeeO zB9{&5n`VLC6pZvzPH{kyt5f@EXgz+#k0lE=k$#jP!sQ3CJ>ZoivDMvC~EqTPL&xZwDLO$)8)Vn3I)VJEzDx(r*+(H(q|ffA66O)vJ43;zG>= zQhVCG_iOQ7ec8ZgTgIvHZyj3O7DfA(thQE!oBEy59io0Gzw))xzj|6xPivpQ!4!Wx zWWVu&5BT@S?^dr=TVk>_qRH##7%bzo$KIyzJBzt8dpFj~kR3u&B@c_wNlu zO@h^iZM~$+Tb5o3Vq{~a|C_^>Vzh^B!`GdKD`oD6D&BVpq?GeD0F=gmRf7(2J5Z}SvF588(H!^V{LOtD@tpdypiY{#V~hKuDJCi*nUWEDfDoa z>n*Ajbp5gpfv z-tQKMz?D58^zWTZsvkYjj?Qahq>I!W0y|QBLwpwzH<%=uViwv*zolrt*35cF8 zmiy)Q^gGqlQaSl*r)<=!hGxxSdd=b<|r5 zGh`F%5krPuKVn#UTNA_bZBx8>&CK}s&g@rTUuxI$jw&nr-FfZU>rTv0ecmeKE!E@H z!2141$n|$NGO<|zm9S|)OZ)$i6y- zk$Ayq4r_(&n`F?4^38q@%|*D<)MNiP%+oia=gDirWY}LF-4g86&4Ae+?9(ndvNBSG zy`?tWu21%SE_b>s)pbMPLZ*6>mx1l5Ue~ui`(ic2V)9mDb=0rxt@M9Q`Hzb7A2suq zr1sa;MgQK@arLUd9hy0FRCPpNAKDSs>Z32X-EA6>jqup<9&DJ?+(~3(dZ|Y>3fc)o z<0fpw$?UbemSi8qx7Y_3vDX82yM3?;!BfUO0snS%gwu-p&T#6m6FuT&W)J*MpkvTq3Ph;t3`w@&yC32#-(zdtAY;ZQru zZ-B#sMfwfF+wO-=h~LS&M*L2YoSfUq&ZuQwPySB$PLRKonN9vqK)v+eZv4M}<^LBu z$p4lNrH)6q!#X0SJMz}KgFDquV&lyu6o`u* z#*;Cf&yCCRENhR9Ra=cmE6fVUidoN-8`s>e6fh04U%gUp#~jGcTE`lkfW`)q!&;pp z;>6rKTX2%JZSA|;G`O)`l<>}VhPS0JI3U>uyf~iO(jjCgm;hDX z;s8{}R>ptrbwzt!(Aj6+&x61_0D*V)=y3VqOD%^si_2pJicN>MS~Q2fG%m=#fkPYn z|0&qoJE#33cf9yJMg7=A+PP&@KWk!3lY(Ac)EjmUB0pmTD{`^1klcp^QNq!tSk_)B zlRCCUS^DT5UEPZM(}8Zv`3UwTqI@fOzL3jjWrl^~B{Q$5*Y%kdvy{tVPouR`4*Qwt zPaBzw`pIG;TP#fJlzugj70x&hIb)UzRF&0|i8avGa(*3qv#gj{cb36w_^fUevbu>a zRIu`X#avr9D*CFivWnGcyoZZU1AkUOT+LjZ)Yq1aWn^5+trSbyoRP-@YGhN$RLWSu z#&9qesV;_Yi4dqhWsUEP*p{=bFXvY1)1_QtNjIocWoxS#T8d2#t&~h7vuu`7&q=HU z&n;n6?)mD)VnNSVOO%QtWsUW+4ViGNvaDxNL={`QJd;QJa~DnhcoFbATP-h}<*B|i z)pS0GM?kQkhf|^GB*Ui_e2WE>GL~T6SJqdGAb1qly^O|48*{?!AU(`MW&o@)+k+Ma8hNcb5XyF zfu7O}Rp1ODtCs;V6or;%N>wvoS?74PLY|f&PW8$5qlA3ExQ2>Q?Rh>!0x+SktF`4^W*N0uBSKj#<`)5f)QI4jyM!HtK7>|) zXbhw-P&Vev!0?LPXm}l_^R8ONxSjH}Ln-JG+Vc zgT8ai=q0q8z256-`fOWE3S<7Vs*Q3SkQn^?NOuF$L>|zOQ zieQN@lNo~Q3c!C8|EBa4jDS?_viTAaORp4VMNz)92@_Ue6!Z%qRI`K$m@L&h5f4lu zqSe_z;}zo~YEvlI*2Pj*l(EH5kOjY?+StH_k#mwm5XvZpjLT*P%n1@C0MQntToh4` zp##pK;Kh0b!+Wi+2f2vFTnQA+^pG~O`wR-GRu7z z9slHq-lN6!Jg^qqFfLcI+hP%0F}k0@ZSeg-$13U*v4EO3Qz;`HiUg-4$#^i9G(y2t zIvo!tGtpQ$n=q2utfAIdHJ&^ejZDQ7(@s@4#>BAl%$$VJx(%NrM%iStZidb#pIXBv zHa(R{#hd~Gn?w-civTuJH*9*g4x3Htpie{tY8(SVG-SkrMmUiP#uAA{aN1Z*2TgM^ zHXV+n!{KzeC1j$Jgj3Ot5p7sGenLW~YD1>2l-u@08>l3wVyL5y7;T~A+d5R*)*8N4#v_EBbr{!B#iiCOPGXXVW*md>c7U?zkjPJ|5p1S z@c6F!U0&`UR^mzY=fi`8=k5M%6tx=PTlZc(JQa!7h)B|VI2Z~y;It~`$4S;nTzUyp zcwxq&i7m$C$#5_lOD>|DB8$Ovcrg)-M6!|TL^vH!MlvnBDKwP`qZSsM!6MDw z${Z1OU~upyYAOp!o5&uWzSpx6;&{=iXbb#>URO`mswG)XNx3DClUcQ6%R#HMrbjZiARb4r?bH{xBxE6 zX(JoUnu%DvC1S-AH84v5-z$pxPs)`WO8lGX{~Og|Cq1%-hoO1)~B1pCu;JPYn|Pu?r1ZD_CaC z=E~TZrdmeskoTcbK(WHO2vG{7e3W=WwY;8LF6N6%Fka+gEkJk{@+*|$ z3{-F_7(>dV;!r}P{YAF2Li*FP0U#|K)dH0xb$J3L7eWd@c7>dJ?7-^dSJWZE{SDEz z3EVdoouoomZwG4VBj{uExl)~YBt;^aKul8ENMa?M!lJQ4>U-ASx0WSn?j=CN0@!>m zTR?xD0c0vukEKh58R%ewEcKmKUaXF65CQcvZ-HB9lFAj>#$o%)u;z!;U6x>gu;LM* zDQ9eQN9x?1v1EKG2h#)Z;`ekFibQxi6(;@d=_-Qp5|IWf7PZ!(N!BvAu!8b|dU85b zDUzxYj!kkh(%_Gq#S-+>Q|203Fiuva{fhhg{JcJ!%~3DbC5}_Frw9j2vRqgISml6y zAdQM<$)E+T3o3w4wLxj|PzY$aiam-M2U!1Ck1P0hBY(HL{(m*G3#9b16>SqzYA?+J z{Ts=-lR32scY!8k{|n**lmc2bYauqtNd2DhK~hW&M}b~*MhVuYB(O3SV)T+&3B8xm z5~IEwFOPs<6-dW5E$l?WkdT(3p+a$uh9)7wSm-9%=nB}6%{^^ob#PSTFmTI z9vf><>Sti@$>&zf`XeymJ_=21N;k4uptynAE?9~5$TXK`8B>7rR(k*#nE_R4YM1mowx3LJ)Lx8fLeg^msPVYplwp8`3u3AhGS zO7#>Qvn)^)00D=oUyP(10p(m+_#ouw6i^eKw-c`mtBO7s$g{=A?Rw^tim|EzEW?+ zWb9R%a&Q-Zpx(8CnWvm;j*YxxyubgeWS5T25mdGB#kh zgtWnfB-jaAu-JHN%^*-asUQqNFilbtJOm{qvgWERl!X-(!FkmeWWdxSrJ-ezb*`|O zhh-7F3re#X^8zw)f$GsTy2B2)#ul(LEUcK<0Ncy2AWF%|=88IOjVlJ;Fl6R3k~JDx zW3|E?>QY9ip`io#pd@arHUE=_MTLiQY7h5_WMAP_blS=~T`C&c3`wp$Q-aZ$rfV`} zQ_Y|QAx+RE6LTiCyIf=`4>L0~vjFiC)Jz+A<7BoRDo#@s5bg*jnMxI{0BAARyLy4R z9M}}*VwQ*lpz7#4IiUi(=gKPN8gvvIi^(cJC?IFB{jWf_})eVPfSfG8}+A9Fp_FeKeer!PZ|pb@`qqbiY;arGe$fZ z51V0Vp9z@T(&20{6N;x3vBgv>VZ2RNZ713CZ|%<5Xow0#@41Zb!)AjX{rR;jDrIgqed(qjhVr0G7a-tIBo=| zr>B#_v=K>1ro*93YC6=i&CyWJqIEgjJFEou%Qj!Id;27&5iyMb=2ClV)5Gzpq|2ny z)V^`jSi8+bSCzfzViLC#{q3gc)v6^^vlWXX_5zCUC< zf&@e!50?H3m4_x+VKFkQJQhRNTDBdENVkJp1pNs55FLh;L267dL#&>_)M>G7R3UG% zg$6=h3Hh=I5IjlPRArU})|S@Lu1Kwt0-vK$ko-jodMvHW;bautE+m0#f)8|U>vQ&I7;w@Cjz^j zzyRfF@Z>{eTkZ&KIrIyF>bOtTn&^}S(qs=C*bSC~WYwiUB+V5ft5gS!)m78TOW2Yf z4U-)5KoID-0J^1EV19qqG-0Y(LKx1vfIcG)z-S_AyEUJkqea--O3;PKC`{%v0!l%; zi=f9SGWnFSgM$PtzSr~|ip{`7JyxnEsc54bmE01m2*hb9kMXiC|COcuH-3;U1|{>Y zkNitZZ<8NT0rtBhVO(ZtPtoIp;~fL@1cYap2%x}RG|{h!p3f~>hG2Yx+Zeo?P%>Iv zEtFvN&9k2XcSM;^1Tmd=PzbrVk^Vy>D!_)^a+RrZY5#}VpH%;^ZH!8pV=h3OXIZ9+VX#WI{J`x{)l2<^wPbLog@TPx#mY zuEZ~hg6u&9ew0LRINnEEFL>(78C!}47*&dyOm&sK^vW1-^7<-{g0d_pk{y+3y&erI zb5&3$oKV4`$&m;Zf~!!GGUu@kJ?tQ@G}kOwVKC5_VZJEjVBsO8F>oYMh8$vnvbi*~ zYh%?6=E;B58O)^pPyMViqMTI3?~7j$rZ^}x?Hk%JXeI5SHmp|E6Y7ZaZRK;A8$8K> zo3e<+D6ngEsULG;`1cB(X7x%Y33Es`H62XEV(?TTl{=L+rh}nSIFkt(iAW}to*=9o zeWnkSLCclO>MI8htgWq0E!t-kPl3)3P^TP-B#7&bE+J;EgjhP2iG-pim0-vcrbCON zx)K6pogba+?N~x0nV`AI(IrH!6@jY8vMDnY#9Tcr?A!Tzhe=R2%=7-6^L3ZBAqcJQA`U51Y&g6t3P5^l%Z~9g9ds z5@gC8T|(4a5r9){IuZs#MI&~18<~29+V7)u&vtbzA{>i^6XcmXx`fEJLSl~as}R_KFQMPF!yPd-8lO%i z_A;&_at&8g(Nugf6E#5AQJZsslhkpJ_ufP4P7if1BsHD5o6A7lS{cbqCS#=IAuzzj zMVqR_nYuD2?xJ+h40bFdoEYO05VKZ7IF-U0k2G4b3E#Mr(#;KYECG<(!$lx!t%${B z0@mEPdq8a>>cAab1P0;`18O`;^e-^PE8o_>r(zqBTl2TEXJA-4@r*QGJ3g^<=1LKI z3JG!z3Pk%aZLGYhsZg}$t>;*I8$DvXw`RsCIlO%pVA6;8r?D8$rV^oaFd0t3`zr}s zw-L?)EsW@N27jsOVz!0#H$0V!)#e*6zcge`-~N3-mUzjQL%8XVjKN~N|L!BiOBEgMNiqh{I+N7JqR|H5$I zuFZBx{eQord|kn1)8A#CO|X`=Nte$>Gu7E%S8~B%OAnXnRD0(Zcr(0y zU;tJ8sfEE!stBte{PKW#n0bfxOvVT3guFz^<(NTw7i4vZz()u%0oYX`p zUC;?(4uHu9?iW1sO{&}ymJmXJ!#6}ciaA<(X5$il%^)(YHuMQv9oz|@Vg(Nl9Z)XK z6*lIu|6ZD`64taa&8h3l(Dq;ws8q0wL#~OV{GjJSO@!HiCebnFj+yuDq<$3cU@%dT z0!c-a38VnK2ThW*wSZF6UItJH$%vS(vabkq(<(g43S=6Cl4~o9WC$dfu}7h_S8(%S z)8TxUp;}Ud$Pf#Vup8ep!NjukrSs%8hjnS|>@|?pU&P`bQn0ZulUCEK zph?SS4z;Hadde)6XerNf5y4~!Vj~XpVd;%6T@8*H1x(!6Hy*~hi_&1yz~T2H_xvjK zbodBR8ewCpPqq*m`re)3@sByLR3P62kY-(JAzpUS~oWz z0Hba}H!|cXGU?_Q$&HB;q7UHon1gKq76CGA0%hcCPk2T!!oYdQ#A+$W;Ion|V^$A3 zJ}OC8SO!gXspzgFLkWgLau|TS0F}aa1SC04p}=+=K}@a@j{lFQ{Ia6_vU+w?>aYKJ zF4;le7%V4?Ol4IaRLn3;j(L0~<3O#u9Cga*oz z0VubGZ#E^<$D{jZN?6Z|wLFA#)REEx1Y03d?>a~kAtiGK4jcq$z}u|CUBf6;rmpTM zsqJGIhBo0rO*Nc2iRzy#6+xRmUCJ@iEx8C+WtvKo?oD6_ zRC5=4oh_nMU4PW>Q5cT>Y0t+kzw2*`C$=FnIykX&VHS~OMjjibV)rNIf#Fu zlw1}FFFQ!T_|W9%aeb?2!dO0&O~w|@3^c${f}DBMu%@P`)3IPAW~9Q<49&!%?f2o- zEP5~&pNhG>T+q?#J+z`|?gj!Q2~o4=YSIj>`tR4duqccrG17NHcqzzRYWUufnO^{!pe zhiE-jxVF#+3PB2vNWpNd(etOHKGak?LP+4C#l0MjZf;l1Iaio%%;gpD;R;V@~3e~@70yU0(~zd!iQya znz$$|;e8tOdolgLpGD)QDFxrd=0TH-q+vR|TaYk5>Xor!kf-!n!6;YFr^<{oM zkRT+SirYc<++v9$I-$4-Rpmq3&?u6CA6tOd~fE262sEl!Z0pmNlCL{3+Tyc5TF*h!o zWF^-bcpT#cR*)03h5%0FMF{3*>)6}Lm!RzANxgTyS=w;fLZ+Ly3KfxX7?%^x*qWRO zjSxw~WxT$_tO5~QSgJx8DUa83sEgT%uYIq!8sJGJal|7^Pa^PYakYw_O>z)-rKp^( z<{?}{g0bDI?F~3s`jn!Sy;lsBBARt+%2DEM_RvAZ*0OgP8NlB50CdTp}l&&gVqDj8AH7;8bg>q#%h|{vDNl3ssnvAssrbWo>MtPmq z$U%sv|G^Eu2hvmjl7WLsP8 zURTM63~Q$q=6Mf zg0qI6P)Ehet}{oEbwB!B+f5%C;_}ZA&z?Ddc<8r^&C(b&{RUMzHppq7AEGpe|MV3? z;3i$GDb-d2h zb;ua%;(VU%=GGql1FCw{Mh-#u9&|?qr&#Zz6ayoFK`ESNfjpcw7#j&2n-Jr$#<^4l z=ko2Jm*uwIrKM#aPpX{9OB&~K@+#%gewk^jTCn|JTvo)t!^Qh~5bz-I_CnzCJD7x5 zMu>z5x6cL-jUqjU(vfQ$N{Rke6?=aE-P_x2ue5gv0zcJ7{wJU89ceQ?(Qz2|^dFbC M{#~sC0Ryl8|7j_g$N&HU literal 0 HcmV?d00001 From 748913ac832ab663b95c02feb60e068477cee7b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lucas?= Date: Thu, 3 Oct 2013 17:59:44 +0200 Subject: [PATCH 18/22] Update phpunit to include basic code coverage information. re #96 --- phpunit.xml | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/phpunit.xml b/phpunit.xml index 066829b..a1b1ab4 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,7 +1,23 @@ - - - test - - + + + + + ./ + + ./resources + + + ./test + + + + + + + + + test + + \ No newline at end of file From 934c8012ab73ebcc9a814f679e21c4b62085769b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lucas?= Date: Thu, 3 Oct 2013 18:27:36 +0200 Subject: [PATCH 19/22] Add new test on GetBookByAuthor, also test pagination. re #96 --- test/bookTest.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/bookTest.php b/test/bookTest.php index 747e593..32e36f0 100644 --- a/test/bookTest.php +++ b/test/bookTest.php @@ -39,5 +39,25 @@ class StackTest extends PHPUnit_Framework_TestCase $config['cops_recentbooks_limit'] = 50; } + + public function testGetBooksByAuthor () + { + // All book by Arthur Conan Doyle + global $config; + + $config['cops_max_item_per_page'] = 5; + list ($entryArray, $totalNumber) = Book::getBooksByAuthor (1, 1); + $this->assertEquals (5, count($entryArray)); + $this->assertEquals (8, $totalNumber); + + list ($entryArray, $totalNumber) = Book::getBooksByAuthor (1, 2); + $this->assertEquals (3, count($entryArray)); + $this->assertEquals (8, $totalNumber); + + $config['cops_max_item_per_page'] = -1; + list ($entryArray, $totalNumber) = Book::getBooksByAuthor (1, -1); + $this->assertEquals (8, count($entryArray)); + $this->assertEquals (-1, $totalNumber); + } } \ No newline at end of file From 0de883de67abcda5216996cce5fa4921b1d792c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lucas?= Date: Fri, 4 Oct 2013 08:17:42 +0200 Subject: [PATCH 20/22] Add new tests. re #96 --- test/bookTest.php | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/test/bookTest.php b/test/bookTest.php index 32e36f0..c439563 100644 --- a/test/bookTest.php +++ b/test/bookTest.php @@ -59,5 +59,42 @@ class StackTest extends PHPUnit_Framework_TestCase $this->assertEquals (8, count($entryArray)); $this->assertEquals (-1, $totalNumber); } + + public function testGetBooksBySeries () + { + // All book from the Sherlock Holmes series + list ($entryArray, $totalNumber) = Book::getBooksBySeries (1, -1); + $this->assertEquals (7, count($entryArray)); + $this->assertEquals (-1, $totalNumber); + } + + public function testGetBooksByTag () + { + // All book with the Fiction tag + list ($entryArray, $totalNumber) = Book::getBooksByTag (1, -1); + $this->assertEquals (14, count($entryArray)); + $this->assertEquals (-1, $totalNumber); + } + + public function testGetBooksByLanguage () + { + // All english book (= all books) + list ($entryArray, $totalNumber) = Book::getBooksByLanguage (1, -1); + $this->assertEquals (14, count($entryArray)); + $this->assertEquals (-1, $totalNumber); + } + public function testGetBookById () + { + // also check most of book's class methods + $book = Book::getBookById(2); + $this->assertEquals ("The Return of Sherlock Holmes", $book->getTitle ()); + $this->assertEquals ("urn:uuid:87ddbdeb-1e27-4d06-b79b-4b2a3bfc6a5f", $book->getEntryId ()); + $this->assertEquals ("index.php?page=13&id=2", $book->getDetailUrl ()); + $this->assertEquals ("Doyle, Arthur Conan", $book->getAuthorsName ()); + $this->assertEquals ("Fiction, Mystery & Detective, Short Stories", $book->getTagsName ()); + $this->assertEquals ('

The Return of Sherlock Holmes is a collection of 13 Sherlock Holmes stories, originally published in 1903-1904, by Arthur Conan Doyle.
The book was first published on March 7, 1905 by Georges Newnes, Ltd and in a Colonial edition by Longmans. 30,000 copies were made of the initial print run. The US edition by McClure, Phillips & Co. added another 28,000 to the run.
This was the first Holmes collection since 1893, when Holmes had "died" in "The Adventure of the Final Problem". Having published The Hound of the Baskervilles in 1901–1902 (although setting it before Holmes\' death) Doyle came under intense pressure to revive his famous character.

', $book->getComment (false)); + + } + } \ No newline at end of file From 23129b9c9ea1fb5f25823c88dbeee87181e32c85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lucas?= Date: Sun, 6 Oct 2013 18:08:26 +0200 Subject: [PATCH 21/22] The search page title is now more precise in case a scope is provided. re #34 --- base.php | 19 +++++++++++++++++-- lang/Localization_ca.json | 4 ++++ lang/Localization_de.json | 4 ++++ lang/Localization_en.json | 4 ++++ lang/Localization_es.json | 4 ++++ lang/Localization_fr.json | 4 ++++ lang/Localization_it.json | 4 ++++ lang/Localization_nb.json | 4 ++++ lang/Localization_nl.json | 4 ++++ lang/Localization_pt.json | 4 ++++ lang/Localization_ru.json | 4 ++++ lang/Localization_zh.json | 4 ++++ 12 files changed, 61 insertions(+), 2 deletions(-) diff --git a/base.php b/base.php index 835d635..bfeae82 100644 --- a/base.php +++ b/base.php @@ -673,9 +673,24 @@ class PageQueryResult extends Page public function InitializeContent () { global $config; - $this->title = str_format (localize ("search.result"), $this->query); $scope = getURLParam ("scope"); - + switch ($scope) { + case self::SCOPE_AUTHOR : + $this->title = str_format (localize ("search.result.author"), $this->query); + break; + case self::SCOPE_TAG : + $this->title = str_format (localize ("search.result.tag"), $this->query); + break; + case self::SCOPE_SERIES : + $this->title = str_format (localize ("search.result.series"), $this->query); + break; + case self::SCOPE_BOOK : + $this->title = str_format (localize ("search.result.book"), $this->query); + break; + default: + $this->title = str_format (localize ("search.result"), $this->query); + } + $crit = "%" . $this->query . "%"; $bad = "QQQQQ"; diff --git a/lang/Localization_ca.json b/lang/Localization_ca.json index 232e3cc..0cd2c3c 100644 --- a/lang/Localization_ca.json +++ b/lang/Localization_ca.json @@ -43,6 +43,10 @@ "recent.title":"Els més recents", "##TODO##search.alternate":"Search", "##TODO##search.result":"Search result for *{0}*", +"##TODO##search.result.author":"Search result for *{0}* in authors", +"##TODO##search.result.book":"Search result for *{0}* in books", +"##TODO##search.result.series":"Search result for *{0}* in series", +"##TODO##search.result.tag":"Search result for *{0}* in tags", "##TODO##search.sortorder.asc":"Asc", "##TODO##search.sortorder.desc":"Desc", "series.alphabetical.many":"{0} sèries ordenades alfabèticament", diff --git a/lang/Localization_de.json b/lang/Localization_de.json index 2879758..1f7b699 100644 --- a/lang/Localization_de.json +++ b/lang/Localization_de.json @@ -43,6 +43,10 @@ "recent.title":"Neuzugänge", "search.alternate":"Suche", "search.result":"Suchergebnis für", +"##TODO##search.result.author":"Search result for *{0}* in authors", +"##TODO##search.result.book":"Search result for *{0}* in books", +"##TODO##search.result.series":"Search result for *{0}* in series", +"##TODO##search.result.tag":"Search result for *{0}* in tags", "search.sortorder.asc":"Auf", "search.sortorder.desc":"Ab", "series.alphabetical.many":"Alphabetischer Index der {0} Serien", diff --git a/lang/Localization_en.json b/lang/Localization_en.json index c243666..888bf80 100644 --- a/lang/Localization_en.json +++ b/lang/Localization_en.json @@ -43,6 +43,10 @@ "recent.title":"Recent additions", "search.alternate":"Search", "search.result":"Search result for *{0}*", +"search.result.author":"Search result for *{0}* in authors", +"search.result.book":"Search result for *{0}* in books", +"search.result.series":"Search result for *{0}* in series", +"search.result.tag":"Search result for *{0}* in tags", "search.sortorder.asc":"Asc", "search.sortorder.desc":"Desc", "series.alphabetical.many":"Alphabetical index of the {0} series", diff --git a/lang/Localization_es.json b/lang/Localization_es.json index 4f3e1b8..bb58c37 100644 --- a/lang/Localization_es.json +++ b/lang/Localization_es.json @@ -43,6 +43,10 @@ "recent.title":"Añadidos recientemente", "##TODO##search.alternate":"Search", "##TODO##search.result":"Search result for *{0}*", +"##TODO##search.result.author":"Search result for *{0}* in authors", +"##TODO##search.result.book":"Search result for *{0}* in books", +"##TODO##search.result.series":"Search result for *{0}* in series", +"##TODO##search.result.tag":"Search result for *{0}* in tags", "##TODO##search.sortorder.asc":"Asc", "##TODO##search.sortorder.desc":"Desc", "series.alphabetical.many":"Indice alfabético de {0}", diff --git a/lang/Localization_fr.json b/lang/Localization_fr.json index 855307f..19910a9 100644 --- a/lang/Localization_fr.json +++ b/lang/Localization_fr.json @@ -43,6 +43,10 @@ "recent.title":"Ajouts récents", "search.alternate":"Rechercher", "search.result":"Résultats pour *{0}*", +"search.result.author":"Résultats pour *{0}* dans les auteurs", +"search.result.book":"Résultats pour *{0}* dans les livres", +"search.result.series":"Résultats pour *{0}* dans les colllections", +"search.result.tag":"Résultats pour *{0}* dans les étiquettes", "search.sortorder.asc":"Crois.", "search.sortorder.desc":"Décrois.", "series.alphabetical.many":"Index alphabétique de {0} collections", diff --git a/lang/Localization_it.json b/lang/Localization_it.json index 96380cd..fe3be9d 100644 --- a/lang/Localization_it.json +++ b/lang/Localization_it.json @@ -43,6 +43,10 @@ "recent.title":"Ultime aggiunte", "search.alternate":"Cerca", "search.result":"Risultati per *{0}*", +"##TODO##search.result.author":"Search result for *{0}* in authors", +"##TODO##search.result.book":"Search result for *{0}* in books", +"##TODO##search.result.series":"Search result for *{0}* in series", +"##TODO##search.result.tag":"Search result for *{0}* in tags", "search.sortorder.asc":"Asc", "search.sortorder.desc":"Disc", "series.alphabetical.many":"Indice alfabetico di {0} collane", diff --git a/lang/Localization_nb.json b/lang/Localization_nb.json index 30eb7bd..e937586 100644 --- a/lang/Localization_nb.json +++ b/lang/Localization_nb.json @@ -43,6 +43,10 @@ "recent.title":"Nylig lagt til", "search.alternate":"Søk", "search.result":"Søkeresultat for *{0}*", +"##TODO##search.result.author":"Search result for *{0}* in authors", +"##TODO##search.result.book":"Search result for *{0}* in books", +"##TODO##search.result.series":"Search result for *{0}* in series", +"##TODO##search.result.tag":"Search result for *{0}* in tags", "search.sortorder.asc":"Stigende", "search.sortorder.desc":"Synkende", "series.alphabetical.many":"Alfabetisk indeks for {0} serier", diff --git a/lang/Localization_nl.json b/lang/Localization_nl.json index 9376a0e..40b231c 100644 --- a/lang/Localization_nl.json +++ b/lang/Localization_nl.json @@ -43,6 +43,10 @@ "recent.title":"Recent toegevoegde boeken", "search.alternate":"Zoeken", "search.result":"Zoekresultaat voor *{0}*", +"##TODO##search.result.author":"Search result for *{0}* in authors", +"##TODO##search.result.book":"Search result for *{0}* in books", +"##TODO##search.result.series":"Search result for *{0}* in series", +"##TODO##search.result.tag":"Search result for *{0}* in tags", "search.sortorder.asc":"A-Z", "search.sortorder.desc":"Z-A", "series.alphabetical.many":"Alfabetische index van {0} series", diff --git a/lang/Localization_pt.json b/lang/Localization_pt.json index bb93bb6..1e8ba9d 100644 --- a/lang/Localization_pt.json +++ b/lang/Localization_pt.json @@ -43,6 +43,10 @@ "recent.title":"Adições recentes", "search.alternate":"Busca", "search.result":"Resultado da busca por *{0}*", +"##TODO##search.result.author":"Search result for *{0}* in authors", +"##TODO##search.result.book":"Search result for *{0}* in books", +"##TODO##search.result.series":"Search result for *{0}* in series", +"##TODO##search.result.tag":"Search result for *{0}* in tags", "search.sortorder.asc":"Asc", "search.sortorder.desc":"Desc", "series.alphabetical.many":"Índice alfabético das {0} séries", diff --git a/lang/Localization_ru.json b/lang/Localization_ru.json index 58310ef..846ddf7 100644 --- a/lang/Localization_ru.json +++ b/lang/Localization_ru.json @@ -43,6 +43,10 @@ "recent.title":"Недавние поступления", "##TODO##search.alternate":"Search", "##TODO##search.result":"Search result for *{0}*", +"##TODO##search.result.author":"Search result for *{0}* in authors", +"##TODO##search.result.book":"Search result for *{0}* in books", +"##TODO##search.result.series":"Search result for *{0}* in series", +"##TODO##search.result.tag":"Search result for *{0}* in tags", "##TODO##search.sortorder.asc":"Asc", "##TODO##search.sortorder.desc":"Desc", "series.alphabetical.many":"Алфавитный указатель для {0} серий", diff --git a/lang/Localization_zh.json b/lang/Localization_zh.json index 5bc4ade..51f1642 100644 --- a/lang/Localization_zh.json +++ b/lang/Localization_zh.json @@ -43,6 +43,10 @@ "recent.title":"最近添加", "search.alternate":"搜索", "search.result":"*{0}* 的搜索结果", +"##TODO##search.result.author":"Search result for *{0}* in authors", +"##TODO##search.result.book":"Search result for *{0}* in books", +"##TODO##search.result.series":"Search result for *{0}* in series", +"##TODO##search.result.tag":"Search result for *{0}* in tags", "search.sortorder.asc":"升序", "search.sortorder.desc":"降序", "series.alphabetical.many":"{0} 个系列的字母索引", From 3e98615ea9624dbf9db1f2f619c07eefcf42994c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lucas?= Date: Sun, 6 Oct 2013 18:58:16 +0200 Subject: [PATCH 22/22] Cleanly handle suggestion title. re #34 --- base.php | 11 +++++++---- book.php | 9 +++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/base.php b/base.php index bfeae82..f28d758 100644 --- a/base.php +++ b/base.php @@ -287,14 +287,17 @@ class Entry return date (DATE_ATOM, self::$updated); } - public function getContentArray () { - $navlink = "#"; + public function getNavLink () { foreach ($this->linkArray as $link) { if ($link->type != Link::OPDS_NAVIGATION_TYPE) { continue; } - $navlink = $link->hrefXhtml (); + return $link->hrefXhtml (); } - return array ( "title" => $this->title, "content" => $this->content, "navlink" => $navlink ); + return "#"; + } + + public function getContentArray () { + return array ( "title" => $this->title, "content" => $this->content, "navlink" => $this->getNavLink () ); } public function __construct($ptitle, $pid, $pcontent, $pcontentType, $plinkArray) { diff --git a/book.php b/book.php index 8d2531a..c5d5cd4 100644 --- a/book.php +++ b/book.php @@ -599,13 +599,14 @@ function getJson ($complete = false) { // str_format (localize("authorword", count($array) // str_format (localize("seriesword", count($array) // str_format (localize("tagword", count($array) - array_push ($out, array ("title" => "" . str_format (localize("{$key}word", count($array)), count($array)) . "", - "navlink" => "index.php?page={$pagequery}&query={$query}&db={$database}&scope={$key}")); + array_push ($out, array ("title" => str_format (localize("{$key}word", count($array)), count($array)), + "class" => "tt-header", + "navlink" => "index.php?page={$pagequery}&query={$query}&db={$database}&scope={$key}")); } if ($entry instanceof EntryBook) { - array_push ($out, array ("title" => $entry->title, "navlink" => $entry->book->getDetailUrl ())); + array_push ($out, array ("class" => "", "title" => $entry->title, "navlink" => $entry->book->getDetailUrl ())); } else { - array_push ($out, $entry->getContentArray ()); + array_push ($out, array ("class" => "", "title" => $entry->title, "navlink" => $entry->getNavLink ())); } $i++; if ($i > 4) { break; };