Merge again
This commit is contained in:
		
						commit
						eac4944429
					
				
					 36 changed files with 1305 additions and 1270 deletions
				
			
		
							
								
								
									
										31
									
								
								.htaccess
									
										
									
									
									
								
							
							
						
						
									
										31
									
								
								.htaccess
									
										
									
									
									
								
							|  | @ -25,6 +25,37 @@ RewriteRule ^download/(\d*)/.*\.kepub\.epub$ fetch.php?data=$1&type=epub [L] | |||
| RewriteRule ^download/(\d*)/.*\.(.*)$ fetch.php?data=$1&type=$2 [L] | ||||
| </IfModule> | ||||
| 
 | ||||
| <IfModule mod_expires.c> | ||||
| ExpiresActive on | ||||
| 
 | ||||
| # Data | ||||
| ExpiresByType text/xml "access plus 0 seconds" | ||||
| ExpiresByType application/xml "access plus 0 seconds" | ||||
| ExpiresByType application/json "access plus 0 seconds" | ||||
| ExpiresByType application/xhtml+xml "access plus 0 seconds" | ||||
| 
 | ||||
| # Favicon (cannot be renamed) | ||||
| ExpiresByType image/x-icon "access plus 1 week" | ||||
| 
 | ||||
| # Media: images | ||||
| ExpiresByType image/png "access plus 1 month" | ||||
| ExpiresByType image/jpg "access plus 1 month" | ||||
| ExpiresByType image/jpeg "access plus 1 month" | ||||
| 
 | ||||
| # Webfonts | ||||
| ExpiresByType font/truetype "access plus 1 month" | ||||
| ExpiresByType font/opentype "access plus 1 month" | ||||
| ExpiresByType application/x-font-woff   "access plus 1 month" | ||||
| ExpiresByType image/svg+xml "access plus 1 month" | ||||
| ExpiresByType application/vnd.ms-fontobject "access plus 1 month" | ||||
| 
 | ||||
| # CSS and JavaScript | ||||
| ExpiresByType text/css "access plus 1 year" | ||||
| ExpiresByType application/javascript "access plus 1 year" | ||||
| ExpiresByType text/javascript "access plus 1 year" | ||||
|     | ||||
| </IfModule> | ||||
| 
 | ||||
| ########################################### | ||||
| # Uncomment if you wish to protect access with a password | ||||
| ########################################### | ||||
|  |  | |||
							
								
								
									
										27
									
								
								base.php
									
										
									
									
									
								
							
							
						
						
									
										27
									
								
								base.php
									
										
									
									
									
								
							|  | @ -11,7 +11,7 @@ define ("DB", "db"); | |||
| date_default_timezone_set($config['default_timezone']); | ||||
|   | ||||
| function getURLParam ($name, $default = NULL) { | ||||
|     if (!empty ($_GET) && isset($_GET[$name])) { | ||||
|     if (!empty ($_GET) && isset($_GET[$name]) && $_GET[$name] != "") { | ||||
|         return $_GET[$name]; | ||||
|     } | ||||
|     return $default; | ||||
|  | @ -208,7 +208,7 @@ class Link | |||
|     } | ||||
|      | ||||
|     public function hrefXhtml () { | ||||
|         return str_replace ("&", "&", $this->href); | ||||
|         return $this->href; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | @ -218,7 +218,7 @@ class LinkNavigation extends Link | |||
|         parent::__construct ($phref, Link::OPDS_NAVIGATION_TYPE, $prel, $ptitle); | ||||
|         if (!is_null (GetUrlParam (DB))) $this->href = addURLParameter ($this->href, DB, GetUrlParam (DB)); | ||||
|         if (!preg_match ("#^\?(.*)#", $this->href) && !empty ($this->href)) $this->href = "?" . $this->href; | ||||
|         if (preg_match ("/bookdetail.php/", $_SERVER["SCRIPT_NAME"])) { | ||||
|         if (preg_match ("/(bookdetail|getJSON).php/", $_SERVER["SCRIPT_NAME"])) { | ||||
|             $this->href = "index.php" . $this->href; | ||||
|         } else { | ||||
|             $this->href = $_SERVER["SCRIPT_NAME"] . $this->href; | ||||
|  | @ -266,6 +266,16 @@ class Entry | |||
|         return date (DATE_ATOM, self::$updated); | ||||
|     } | ||||
|      | ||||
|     public function getContentArray () { | ||||
|         $navlink = "#"; | ||||
|         foreach ($this->linkArray as $link) {  | ||||
|             if ($link->type != Link::OPDS_NAVIGATION_TYPE) { continue; } | ||||
|              | ||||
|             $navlink = $link->hrefXhtml (); | ||||
|         } | ||||
|         return array ( "title" => $this->title, "content" => $this->content, "navlink" => $navlink ); | ||||
|     } | ||||
|   | ||||
|     public function __construct($ptitle, $pid, $pcontent, $pcontentType, $plinkArray) { | ||||
|         global $config; | ||||
|         $this->title = $ptitle; | ||||
|  | @ -299,6 +309,12 @@ class EntryBook extends Entry | |||
|         $this->localUpdated = $pbook->timestamp; | ||||
|     } | ||||
|      | ||||
|     public function getContentArray () { | ||||
|         $entry = array ( "title" => $this->title); | ||||
|         $entry ["book"] = $this->book->getContentArray (); | ||||
|         return $entry; | ||||
|     } | ||||
|      | ||||
|     public function getCoverThumbnail () { | ||||
|         foreach ($this->linkArray as $link) { | ||||
|             if ($link->rel == Link::OPDS_THUMBNAIL_TYPE) | ||||
|  | @ -325,6 +341,7 @@ class Page | |||
|     public $query; | ||||
|     public $favicon; | ||||
|     public $n; | ||||
|     public $book; | ||||
|     public $totalNumber = -1; | ||||
|     public $entryArray = array(); | ||||
|      | ||||
|  | @ -660,8 +677,8 @@ class PageBookDetail extends Page | |||
| { | ||||
|     public function InitializeContent ()  | ||||
|     { | ||||
|         $book = Book::getBookById ($this->idGet); | ||||
|         $this->title = $book->title; | ||||
|         $this->book = Book::getBookById ($this->idGet); | ||||
|         $this->title = $this->book->title; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										74
									
								
								book.php
									
										
									
									
									
								
							
							
						
						
									
										74
									
								
								book.php
									
										
									
									
									
								
							|  | @ -102,16 +102,78 @@ class Book extends Base { | |||
|         return "?page=".parent::PAGE_BOOK_DETAIL."&id=$this->id"; | ||||
|     } | ||||
|      | ||||
|     public function getContentArray () { | ||||
|         global $config; | ||||
|         $i = 0; | ||||
|         $preferedData = array (); | ||||
|         foreach ($config['cops_prefered_format'] as $format) | ||||
|         { | ||||
|             if ($i == 2) { break; } | ||||
|             if ($data = $this->getDataFormat ($format)) { | ||||
|                 $i++; | ||||
|                 array_push ($preferedData, array ("url" => $data->getHtmlLink (), "name" => $format)); | ||||
|             } | ||||
|         } | ||||
|         $serie = $this->getSerie (); | ||||
|         if (is_null ($serie)) { | ||||
|             $sn = ""; | ||||
|             $scn = ""; | ||||
|             $su = ""; | ||||
|         } else { | ||||
|             $sn = $serie->name; | ||||
|             $scn = str_format (localize ("content.series.data"), $this->seriesIndex, $serie->name); | ||||
|             $link = new LinkNavigation ($serie->getUri ()); | ||||
|             $su = $link->hrefXhtml (); | ||||
|         } | ||||
|          | ||||
|         return array ("id" => $this->id, | ||||
|                       "hasCover" => $this->hasCover, | ||||
|                       "preferedData" => $preferedData, | ||||
|                       "rating" => $this->getRating (), | ||||
|                       "pubDate" => $this->getPubDate (), | ||||
|                       "languagesName" => $this->getLanguages (), | ||||
|                       "authorsName" => $this->getAuthorsName (), | ||||
|                       "tagsName" => $this->getTagsName (), | ||||
|                       "seriesName" => $sn, | ||||
|                       "seriesCompleteName" => $scn, | ||||
|                       "seriesurl" => $su);   | ||||
|      | ||||
|     } | ||||
|     public function getFullContentArray () { | ||||
|         global $config; | ||||
|         $out = $this->getContentArray (); | ||||
|          | ||||
|         $out ["coverurl"] = Data::getLink ($this, "jpg", "image/jpeg", Link::OPDS_IMAGE_TYPE, "cover.jpg", NULL)->hrefXhtml (); | ||||
|         $out ["thumbnailurl"] = Data::getLink ($this, "jpg", "image/jpeg", Link::OPDS_THUMBNAIL_TYPE, "cover.jpg", NULL, NULL, 150)->hrefXhtml (); | ||||
|         $out ["content"] = $this->getComment (false); | ||||
|         $out ["datas"] = array (); | ||||
|         $dataKindle = $this->GetMostInterestingDataToSendToKindle (); | ||||
|         foreach ($this->getDatas() as $data) { | ||||
|             $tab = array ("id" => $data->id, "format" => $data->format, "url" => $data->getHtmlLink (), "mail" => 0); | ||||
|             if (!empty ($config['cops_mail_configuration']) && !is_null ($dataKindle) && $data->id == $dataKindle->id) { | ||||
|                 $tab ["mail"] = 1; | ||||
|             } | ||||
|             array_push ($out ["datas"], $tab); | ||||
|         } | ||||
|         $out ["authors"] = array (); | ||||
|         foreach ($this->getAuthors () as $author) { | ||||
|             $link = new LinkNavigation ($author->getUri ()); | ||||
|             array_push ($out ["authors"], array ("name" => $author->name, "url" => $link->hrefXhtml ())); | ||||
|         } | ||||
|         $out ["tags"] = array (); | ||||
|         foreach ($this->getTags () as $tag) { | ||||
|             $link = new LinkNavigation ($tag->getUri ()); | ||||
|             array_push ($out ["tags"], array ("name" => $tag->name, "url" => $link->hrefXhtml ())); | ||||
|         } | ||||
|         ; | ||||
|         return $out; | ||||
|     } | ||||
|      | ||||
|     public function getDetailUrl ($permalink = false) { | ||||
|         global $config; | ||||
|         $urlParam = $this->getUri (); | ||||
|         if (!is_null (GetUrlParam (DB))) $urlParam = addURLParameter ($urlParam, DB, GetUrlParam (DB)); | ||||
|         $urlParam = str_replace ("&", "&", $urlParam); | ||||
|         if ($permalink || getCurrentOption ('use_fancyapps') == 0) {  | ||||
|         return 'index.php' . $urlParam;  | ||||
|         } else {  | ||||
|             return 'bookdetail.php' . $urlParam; | ||||
|         } | ||||
|     } | ||||
|      | ||||
|     public function getTitle () { | ||||
|  | @ -207,7 +269,7 @@ class Book extends Base { | |||
| 	 | ||||
| 	public function GetMostInterestingDataToSendToKindle () | ||||
| 	{ | ||||
| 		$bestFormatForKindle = array ("PDF", "MOBI"); | ||||
| 		$bestFormatForKindle = array ("EPUB", "PDF", "MOBI"); | ||||
| 		$bestRank = -1; | ||||
| 		$bestData = NULL; | ||||
| 		foreach ($this->getDatas () as $data) { | ||||
|  |  | |||
							
								
								
									
										103
									
								
								bookdetail.php
									
										
									
									
									
								
							
							
						
						
									
										103
									
								
								bookdetail.php
									
										
									
									
									
								
							|  | @ -1,103 +0,0 @@ | |||
| <?php | ||||
| /** | ||||
|  * COPS (Calibre OPDS PHP Server) book detail script | ||||
|  * | ||||
|  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html) | ||||
|  * @author     Sébastien Lucas <sebastien@slucas.fr> | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| require_once ("config.php"); | ||||
| require_once ("book.php"); | ||||
| 
 | ||||
| $book = Book::getBookById($_GET["id"]); | ||||
| $authors = $book->getAuthors (); | ||||
| $tags = $book->getTags (); | ||||
| $serie = $book->getSerie (); | ||||
| $book->getLinkArray (); | ||||
|   | ||||
| ?>
 | ||||
| <article class="bookpopup"> | ||||
|             <span class="cover"> | ||||
|             <?php | ||||
|                 if ($book->hasCover) { | ||||
|             ?>
 | ||||
|             <a href="<?php echo Data::getLink ($book, "jpg", "image/jpeg", Link::OPDS_IMAGE_TYPE, "cover.jpg", NULL)->hrefXhtml () ?>"> | ||||
|               <img src="<?php echo Data::getLink ($book, "jpg", "image/jpeg", Link::OPDS_THUMBNAIL_TYPE, "cover.jpg", NULL, NULL, 150)->hrefXhtml () ?>" alt="<?php echo localize("i18n.coversection") ?>" /> | ||||
|             </a> | ||||
|             <?php | ||||
|                 } | ||||
|             ?>
 | ||||
|             </span> | ||||
| <?php | ||||
|             foreach ($book->getDatas() as $data) | ||||
|             { | ||||
| ?>    
 | ||||
|                 <h2 class="download"><a href="<?php echo $data->getHtmlLink () ?>"><?php echo $data->format ?></a></h2>
 | ||||
| <?php | ||||
|             } | ||||
| ?>
 | ||||
|         <h1><a rel="bookmark" href="<?php echo $book->getDetailUrl (true) ?>"><img src="<?php echo getUrlWithVersion("images/Link.png") ?>" alt="<?php echo localize ("permalink.alternate") ?>" /></a><?php echo htmlspecialchars ($book->title) ?></h1>
 | ||||
|             <p class="popupless"> | ||||
|             <h3><?php echo localize("authors.title") ?>: </h3>
 | ||||
|              | ||||
| <?php | ||||
|             $i = 0; | ||||
|             foreach ($authors as $author) { | ||||
|                 if ($i > 0) echo ", "; | ||||
| ?>
 | ||||
|                 <a href="<?php $link = new LinkNavigation ($author->getUri ()); echo $link->hrefXhtml () ?>"><?php echo htmlspecialchars ($author->name) ?></a>
 | ||||
| <?php | ||||
|             } | ||||
| ?>
 | ||||
| </p> | ||||
| <?php | ||||
|         if (count ($tags) > 0) { | ||||
| ?>
 | ||||
|             <p class="popupless"> | ||||
|             <h3><?php echo localize("tags.title") ?>: </h3>
 | ||||
| 
 | ||||
| <?php | ||||
|             $i = 0; | ||||
|             foreach ($tags as $tag) { | ||||
|                 if ($i > 0) echo ", "; | ||||
| ?>
 | ||||
|                 <a href="<?php $link = new LinkNavigation ($tag->getUri ()); echo $link->hrefXhtml () ?>"><?php echo htmlspecialchars ($tag->name) ?></a>
 | ||||
| <?php | ||||
|             } | ||||
| ?>
 | ||||
| </p> | ||||
| <?php | ||||
|         } | ||||
|         if (!is_null ($serie)) | ||||
|         { | ||||
| ?>
 | ||||
|             <p class="popupless"> | ||||
|                 <h3><a href="<?php $link = new LinkNavigation ($serie->getUri ()); echo $link->hrefXhtml () ?>"><?php echo localize("series.title") ?></a>: </h3>
 | ||||
|             <?php echo str_format (localize ("content.series.data"), $book->seriesIndex, htmlspecialchars ($serie->name)) ?>
 | ||||
| </p> | ||||
| <?php | ||||
|         } | ||||
|         if ($book->getPubDate() != "") | ||||
|         { | ||||
| ?>
 | ||||
|             <p class="popupless"> | ||||
| <h3><?php echo localize("pubdate.title") ?>: </h3>
 | ||||
|             <?php echo $book->getPubDate() ?>
 | ||||
| </p> | ||||
| <?php | ||||
|         } | ||||
|         if ($book->getLanguages () != "") | ||||
|         { | ||||
| ?>
 | ||||
|             <p class="popupless"> | ||||
| <h3><?php echo localize("language.title") ?>: </h3>
 | ||||
|             <?php echo $book->getLanguages () ?>
 | ||||
| </p> | ||||
|  <?php | ||||
|         } | ||||
| ?>
 | ||||
| <br /> | ||||
| <h4><?php echo localize("content.summary") ?></h4>
 | ||||
| <div <?php if (!isset ($page)) echo 'style="max-width:700px;"' ?> ><?php echo $book->getComment (false) ?></div>
 | ||||
| </article> | ||||
|  | @ -24,8 +24,8 @@ | |||
| <head> | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||||
|     <title><?php echo localize ("customize.title") ?></title>
 | ||||
|     <script type="text/javascript" src="<?php echo getUrlWithVersion("js/jquery-1.9.1.min.js") ?>"></script> | ||||
|     <script type="text/javascript" src="<?php echo getUrlWithVersion("js/jquery.cookies.js") ?>"></script> | ||||
|     <script type="text/javascript" src="<?php echo getUrlWithVersion("resources/jQuery/jquery-1.9.1.min.js") ?>"></script> | ||||
|     <script type="text/javascript" src="<?php echo getUrlWithVersion("resources/jquery-cookie/jquery.cookies.js") ?>"></script> | ||||
|     <link rel='stylesheet' type='text/css' href='http://fonts.googleapis.com/css?family=Open+Sans:400,300italic,800,300,400italic,600,600italic,700,700italic,800italic' /> | ||||
|     <link rel="stylesheet" type="text/css" href="<?php echo getUrlWithVersion(getCurrentCss ()) ?>" media="screen" /> | ||||
|     <link rel="stylesheet" type="text/css" href="<?php echo getUrlWithVersion("resources/normalize/normalize.css") ?>" /> | ||||
|  |  | |||
							
								
								
									
										2
									
								
								data.php
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								data.php
									
										
									
									
									
								
							|  | @ -105,7 +105,7 @@ class Data extends Base { | |||
|         } | ||||
|         else | ||||
|         { | ||||
|             return str_replace ("&", "&", self::getLink ($this->book, $this->extension, $this->getMimeType (), NULL, $this->getFilename (), $this->id, NULL)->href); | ||||
|             return self::getLink ($this->book, $this->extension, $this->getMimeType (), NULL, $this->getFilename (), $this->id, NULL)->href; | ||||
|         } | ||||
|     } | ||||
|      | ||||
|  |  | |||
							
								
								
									
										101
									
								
								getJSON.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								getJSON.php
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,101 @@ | |||
| <?php | ||||
| /** | ||||
|  * COPS (Calibre OPDS PHP Server) HTML main script | ||||
|  * | ||||
|  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html) | ||||
|  * @author     Sébastien Lucas <sebastien@slucas.fr> | ||||
|  * | ||||
|  */ | ||||
|   | ||||
|     require_once ("config.php"); | ||||
|     require_once ("base.php"); | ||||
|     require_once ("author.php"); | ||||
|     require_once ("serie.php"); | ||||
|     require_once ("tag.php"); | ||||
|     require_once ("language.php"); | ||||
|     require_once ("customcolumn.php"); | ||||
|     require_once ("book.php"); | ||||
|      | ||||
|     header ("Content-Type:application/json;charset=utf-8"); | ||||
|     $page = getURLParam ("page", Base::PAGE_INDEX); | ||||
|     $query = getURLParam ("query"); | ||||
|     $qid = getURLParam ("id"); | ||||
|     $n = getURLParam ("n", "1"); | ||||
|     $database = GetUrlParam (DB); | ||||
|      | ||||
|     $currentPage = Page::getPage ($page, $qid, $query, $n); | ||||
|     $currentPage->InitializeContent (); | ||||
|      | ||||
|     $out = array ( "title" => $currentPage->title); | ||||
|     $entries = array (); | ||||
|     foreach ($currentPage->entryArray as $entry) { | ||||
|         array_push ($entries, $entry->getContentArray ()); | ||||
|     } | ||||
|     if (!is_null ($currentPage->book)) { | ||||
|         $out ["book"] = $currentPage->book->getFullContentArray (); | ||||
|     } | ||||
|     $out ["databaseId"] = GetUrlParam (DB, ""); | ||||
|     $out ["databaseName"] = Base::getDbName (); | ||||
|     $out ["page"] = $page; | ||||
|     $out ["entries"] = $entries; | ||||
|     $out ["isPaginated"] = 0; | ||||
|     if ($currentPage->isPaginated ()) { | ||||
|         $prevLink = $currentPage->getPrevLink (); | ||||
|         $nextLink = $currentPage->getNextLink (); | ||||
|         $out ["isPaginated"] = 1; | ||||
|         $out ["prevLink"] = ""; | ||||
|         if (!is_null ($prevLink)) { | ||||
|             $out ["prevLink"] = $prevLink->hrefXhtml (); | ||||
|         } | ||||
|         $out ["nextLink"] = ""; | ||||
|         if (!is_null ($nextLink)) { | ||||
|             $out ["nextLink"] = $nextLink->hrefXhtml (); | ||||
|         } | ||||
|         $out ["maxPage"] = $currentPage->getMaxPage (); | ||||
|         $out ["currentPage"] = $currentPage->n; | ||||
|     } | ||||
|     if (!is_null (getURLParam ("complete"))) {  | ||||
|         $out ["const"] = array ("version" => VERSION, "i18n" => array ( | ||||
|                        "coverAlt" => localize("i18n.coversection"), | ||||
|                        "authorsTitle" => localize("authors.title"), | ||||
|                        "bookwordTitle" => localize("bookword.title"), | ||||
|                        "tagsTitle" => localize("tags.title"), | ||||
|                        "seriesTitle" => localize("series.title"), | ||||
|                        "customizeTitle" => localize ("customize.title"), | ||||
|                        "aboutTitle" => localize ("about.title"), | ||||
|                        "previousAlt" => localize ("paging.previous.alternate"), | ||||
|                        "nextAlt" => localize ("paging.next.alternate"), | ||||
|                        "searchAlt" => localize ("search.alternate"), | ||||
|                        "sortAlt" => localize ("sort.alternate"), | ||||
|                        "homeAlt" => localize ("home.alternate"), | ||||
|                        "permalinkAlt" => localize ("permalink.alternate"), | ||||
|                        "pubdateTitle" => localize("pubdate.title"), | ||||
|                        "languagesTitle" => localize("language.title"), | ||||
|                        "contentTitle" => localize("content.summary"), | ||||
|                        "sortorderAsc" => localize("search.sortorder.asc"), | ||||
|                        "sortorderDesc" => localize("search.sortorder.desc")), | ||||
|                    "url" => array ( | ||||
|                        "detailUrl" => "index.php?page=13&id={0}&db={1}", | ||||
|                        "coverUrl" => "fetch.php?id={0}&db={1}", | ||||
|                        "thumbnailUrl" => "fetch.php?height=70&id={0}&db={1}"), | ||||
|                    "config" => array ( | ||||
|                        "use_fancyapps" => $config ["cops_use_fancyapps"], | ||||
|                        "max_item_per_page" => $config['cops_max_item_per_page'])); | ||||
|    } | ||||
| 
 | ||||
|     $out ["containsBook"] = 0; | ||||
|     if ($currentPage->containsBook ()) { | ||||
|         $out ["containsBook"] = 1; | ||||
|     } | ||||
|     $out["abouturl"] = "about.html"; | ||||
|     if (getCurrentOption ('use_fancyapps') == 0) { | ||||
|         $out["abouturl"] = "index.php" . addURLParameter ("?page=16", DB, $database); | ||||
|     } | ||||
|      | ||||
|     $out ["homeurl"] = "index.php"; | ||||
|     if ($page != Base::PAGE_INDEX && !is_null ($database)) $out ["homeurl"] = $out ["homeurl"] .  "?" . addURLParameter ("", DB, $database); | ||||
| 
 | ||||
|      | ||||
|     echo json_encode ($out); | ||||
| 
 | ||||
| ?>
 | ||||
							
								
								
									
										
											BIN
										
									
								
								images/mail-send.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								images/mail-send.png
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 3.5 KiB | 
							
								
								
									
										295
									
								
								index.php
									
										
									
									
									
								
							
							
						
						
									
										295
									
								
								index.php
									
										
									
									
									
								
							|  | @ -22,294 +22,73 @@ | |||
|         exit (); | ||||
|     } | ||||
|      | ||||
|     $withToolbar = false; | ||||
|     if (!isset($_COOKIE['toolbar'])) $withToolbar = true; | ||||
|      | ||||
|     header ("Content-Type:application/xhtml+xml;charset=utf-8"); | ||||
|     header ("Content-Type:text/html;charset=utf-8"); | ||||
|     $page = getURLParam ("page", Base::PAGE_INDEX); | ||||
|     $query = getURLParam ("query"); | ||||
|     $qid = getURLParam ("id"); | ||||
|     $n = getURLParam ("n", "1"); | ||||
|     $database = GetUrlParam (DB); | ||||
|      | ||||
|     $currentPage = Page::getPage ($page, $qid, $query, $n); | ||||
|     $currentPage->InitializeContent ();  | ||||
| 
 | ||||
| /* Test to see if pages are opened on an Eink screen  | ||||
|  * test Kindle, Kobo Touch and Sony PRS-T1 Ereader.  | ||||
|  * HTTP_USER_AGENT = "Mozilla/5.0 (Linux; U; en-us; EBRD1101; EXT) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1" | ||||
|  */ | ||||
| 
 | ||||
|     if (preg_match("/(Kobo|Kindle\/3.0|EBRD1101)/", $_SERVER['HTTP_USER_AGENT'])) { | ||||
|         $isEink = 1; | ||||
|     } else { | ||||
|         $isEink = 0; | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| ?>
 | ||||
| <!DOCTYPE html> | ||||
| <html xmlns="http://www.w3.org/1999/xhtml"> | ||||
| <head> | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||||
|     <title><?php echo htmlspecialchars ($currentPage->title) ?></title>
 | ||||
|     <script type="text/javascript" src="<?php echo getUrlWithVersion("js/jquery-1.9.1.min.js") ?>"></script> | ||||
|     <script type="text/javascript" src="<?php echo getUrlWithVersion("js/jquery.cookies.js") ?>"></script> | ||||
| <?php if (getCurrentOption ('use_fancyapps') == 1) { ?>
 | ||||
|     <script type="text/javascript" src="<?php echo getUrlWithVersion("resources/fancybox/jquery.fancybox.pack.js") ?>"></script> | ||||
|     <link rel="stylesheet" type="text/css" href="<?php echo getUrlWithVersion("resources/fancybox/jquery.fancybox.css") ?>" media="screen" /> | ||||
| <?php } ?>
 | ||||
|     <title>COPS</title> | ||||
|     <script type="text/javascript" src="<?php echo getUrlWithVersion("resources/jQuery/jquery-1.9.1.min.js") ?>"></script> | ||||
|     <script type="text/javascript" src="<?php echo getUrlWithVersion("resources/jquery-cookie/jquery.cookies.js") ?>"></script> | ||||
|     <script type="text/javascript" src="<?php echo getUrlWithVersion("resources/Magnific-Popup/jquery.magnific-popup.min.js") ?>"></script> | ||||
|     <link rel="stylesheet" type="text/css" href="<?php echo getUrlWithVersion("resources/Magnific-Popup/magnific-popup.css") ?>" media="screen" /> | ||||
|     <script type="text/javascript" src="<?php echo getUrlWithVersion("js/jquery.sortElements.js") ?>"></script> | ||||
|     <script type="text/javascript" src="<?php echo getUrlWithVersion("resources/doT/doT.min.js") ?>"></script> | ||||
|     <script type="text/javascript" src="<?php echo getUrlWithVersion("resources/lru/lru.js") ?>"></script> | ||||
|     <script type="text/javascript" src="<?php echo getUrlWithVersion("util.js") ?>"></script> | ||||
|     <link rel="related" href="<?php echo $config['cops_full_url'] ?>feed.php" type="application/atom+xml;profile=opds-catalog" title="<?php echo $config['cops_title_default']; ?>" />  | ||||
|     <link rel="icon" type="image/vnd.microsoft.icon" href="<?php echo $currentPage->favicon ?>" /> | ||||
|     <link rel="icon" type="image/vnd.microsoft.icon" href="favicon.ico" /> | ||||
|     <link rel='stylesheet' type='text/css' href='http://fonts.googleapis.com/css?family=Open+Sans:400,300italic,800,300,400italic,600,600italic,700,700italic,800italic' /> | ||||
|     <link rel="stylesheet" type="text/css" href="<?php echo getUrlWithVersion(getCurrentCss ()) ?>" media="screen" /> | ||||
|     <link rel="stylesheet" type="text/css" href="<?php echo getUrlWithVersion("resources/normalize/normalize.css") ?>" /> | ||||
|     <script type="text/javascript"> | ||||
|      | ||||
|         $(document).ready(function() { | ||||
|             // Handler for .ready() called.
 | ||||
|              | ||||
|             $("#sort").click(function(){ | ||||
|                 $('.books').sortElements(function(a, b){ | ||||
|                     var test = 1; | ||||
|                     if ($("#sortorder").val() == "desc") | ||||
|                     { | ||||
|                         test = -1; | ||||
|                     } | ||||
|                     return $(a).find ("." + $("#sortchoice").val()).text() > $(b).find ("." + $("#sortchoice").val()).text() ? test : -test; | ||||
|                 }); | ||||
|             }); | ||||
|             var url = "<?php echo "getJSON.php?" . addURLParameter ($_SERVER["QUERY_STRING"], "complete", 1); ?>"; | ||||
|              | ||||
| <?php if (getCurrentOption ('use_fancyapps') == 1) { ?>
 | ||||
|             $(".fancycover").fancybox({ | ||||
|                 'type' : 'image', | ||||
|                 prevEffect      : 'none', | ||||
|                 nextEffect      : 'none' | ||||
|                 <?php if ($isEink) echo ", openEffect : 'none', closeEffect : 'none', helpers : {overlay : null}"; ?>
 | ||||
|             }); | ||||
|             $.when($.get('templates/default/header.html'), | ||||
|                    $.get('templates/default/footer.html'), | ||||
|                    $.get('templates/default/bookdetail.html'), | ||||
|                    $.get('templates/default/main.html'), | ||||
|                    $.get('templates/default/page.html'), | ||||
|                    $.getJSON(url)).done(function(header, footer, bookdetail, main, page, data){ | ||||
|                 templateBookDetail = doT.template (bookdetail [0]); | ||||
|                  | ||||
|             $(".fancyabout").fancybox({ | ||||
|                 'type' : 'ajax', | ||||
|                 title           : 'COPS <?php echo VERSION ?>', | ||||
|                 prevEffect      : 'none', | ||||
|                 nextEffect      : 'none' | ||||
|                 <?php if ($isEink) echo ", openEffect : 'none', closeEffect : 'none', helpers : {overlay : null}"; ?>
 | ||||
|             }); | ||||
|                 var defMain = { | ||||
|                     bookdetail: bookdetail [0] | ||||
|                 }; | ||||
|                  | ||||
|             $(".fancydetail").fancybox({ | ||||
|                 'type' : 'ajax', | ||||
|                 prevEffect      : 'none', | ||||
|                 nextEffect      : 'none' | ||||
|                 <?php if ($isEink) echo ", openEffect : 'none', closeEffect : 'none', helpers : {overlay : null}"; ?>
 | ||||
|             }); | ||||
| <?php } ?>
 | ||||
|                 templateMain = doT.template (main [0], undefined, defMain); | ||||
|                  | ||||
|             $(".headright").click(function(){ | ||||
|                 if ($("#tool").is(":hidden")) { | ||||
|                     $("#tool").slideDown("slow"); | ||||
|                     $.cookie('toolbar', '1'); | ||||
|                 } else { | ||||
|                     $("#tool").slideUp(); | ||||
|                     $.removeCookie('toolbar'); | ||||
|                 } | ||||
|                 var defPage = { | ||||
|                     header: header [0], | ||||
|                     footer: footer [0], | ||||
|                     main  : main [0], | ||||
|                     bookdetail: bookdetail [0] | ||||
|                 }; | ||||
|                  | ||||
|                 templatePage = doT.template (page [0], undefined, defPage); | ||||
|                 currentData = data [0]; | ||||
|                  | ||||
|                 updatePage (data [0]); | ||||
|                 cache.put (url, data [0]); | ||||
|                 history.replaceState(url, "", window.location); | ||||
|             }); | ||||
|              | ||||
|         }); | ||||
|          | ||||
| <?php | ||||
|     if ($currentPage->isPaginated ()) { | ||||
|         $prevLink = $currentPage->getPrevLink (); | ||||
|         $nextLink = $currentPage->getNextLink (); | ||||
| ?>
 | ||||
|         $(document).keydown(function(e){ | ||||
| <?php | ||||
|         if (!is_null ($prevLink)) { | ||||
|             echo "if (e.keyCode == 37) {\$(location).attr('href','" . $prevLink->hrefXhtml () . "');}";  | ||||
|         } | ||||
|         if (!is_null ($nextLink)) { | ||||
|             echo "if (e.keyCode == 39) {\$(location).attr('href','" . $nextLink->hrefXhtml () . "');}";  | ||||
|         } | ||||
|          | ||||
| ?>
 | ||||
|         }); | ||||
| <?php | ||||
|     } | ||||
| ?> 
 | ||||
| 
 | ||||
|     </script> | ||||
| </head> | ||||
| <body> | ||||
| <div class="container"> | ||||
|     <header> | ||||
|         <a class="headleft" href="<?php echo $_SERVER["SCRIPT_NAME"]; if ($page != Base::PAGE_INDEX && !is_null ($database)) echo "?" . addURLParameter ("", DB, $database); ?>"> | ||||
|                 <img src="<?php echo getUrlWithVersion("images/home.png") ?>" alt="<?php echo localize ("home.alternate") ?>" /> | ||||
|         </a> | ||||
|         <img class="headright" id="searchImage" src="<?php echo getUrlWithVersion("images/setting64.png") ?>" alt="Settings and menu" /> | ||||
|         <div class="headcenter"> | ||||
|             <h1><?php echo htmlspecialchars ($currentPage->title) ?></h1>
 | ||||
|         </div> | ||||
|         <div id="tool" <?php if ($withToolbar) echo 'style="display: none"' ?>>
 | ||||
|             <div style="float: left; width: 60%"> | ||||
|                 <form action="index.php" method="get"> | ||||
|                     <div style="float: right"> | ||||
|                         <input type="image" src="images/search32.png" alt="<?php echo localize ("search.alternate") ?>" /> | ||||
|                     </div> | ||||
|                     <div class="stop"> | ||||
|                         <input type="hidden" name="current" value="<?php echo $page ?>" /> | ||||
|                         <input type="hidden" name="page" value="9" /> | ||||
|                         <?php if (!is_null ($database)) { ?>
 | ||||
|                             <input type="hidden" name="<?php echo DB ?>" value="<?php echo $database ?>" /> | ||||
|                         <?php } ?>
 | ||||
|                         <input type="search" name="query" /> | ||||
|                     </div> | ||||
|                 </form> | ||||
|             </div> | ||||
|     <?php if ($currentPage->containsBook ()) { ?>
 | ||||
|             <div style="float: right; width: 35%"> | ||||
|                 <div style="float: right"> | ||||
|                     <img id="sort" src="images/sort32.png" alt="<?php echo localize ("sort.alternate") ?>" /> | ||||
|                 </div> | ||||
|                 <div class="stop"> | ||||
|                     <select id="sortchoice"> | ||||
|                         <option value="st"><?php echo localize("bookword.title") ?></option>
 | ||||
|                         <option value="sa"><?php echo localize("authors.title") ?></option>
 | ||||
|                         <option value="ss"><?php echo localize("series.title") ?></option>
 | ||||
|                         <option value="sp"><?php echo localize("content.published") ?></option>
 | ||||
|                     </select> | ||||
|                     <select id="sortorder"> | ||||
|                         <option value="asc"><?php echo localize("search.sortorder.asc") ?></option>
 | ||||
|                         <option value="desc"><?php echo localize("search.sortorder.desc") ?></option>
 | ||||
|                     </select>  | ||||
|                 </div> | ||||
|             </div> | ||||
|     <?php } ?>
 | ||||
|         </div> | ||||
|     </header> | ||||
|     <div id="content" style="display: none;"></div> | ||||
|     <section> | ||||
| <?php | ||||
|             if ($page == Base::PAGE_BOOK_DETAIL) { | ||||
|                 include ("bookdetail.php"); | ||||
|             } else if ($page == Base::PAGE_ABOUT) { | ||||
|                 readfile ("about.xml"); | ||||
|             } | ||||
|             foreach ($currentPage->entryArray as $entry) { | ||||
|                 if (get_class ($entry) != "EntryBook") { | ||||
| ?>
 | ||||
|         <article> | ||||
|             <div class="frontpage"> | ||||
|             <?php foreach ($entry->linkArray as $link) { if ($link->type != Link::OPDS_NAVIGATION_TYPE) { continue; } ?> <a href="<?php echo $link->hrefXhtml () ?>">
 | ||||
|                     <h2><?php echo htmlspecialchars ($entry->title) ?></h2>
 | ||||
|                     <?php } ?>
 | ||||
|                     <h4><?php echo htmlspecialchars ($entry->content) ?></h4> 
 | ||||
|                 </a> | ||||
|             </div> | ||||
|         </article> | ||||
|         <?php | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|         ?>
 | ||||
|         <article class="books"> | ||||
|             <span class="cover"> | ||||
|             <?php | ||||
|                 if ($entry->book->hasCover) { | ||||
|             ?>
 | ||||
|                 <a data-fancybox-group="group" class="fancycover" href="<?php echo $entry->getCover () ?>"><img src="<?php echo $entry->getCoverThumbnail () ?>" alt="<?php echo localize("i18n.coversection") ?>" /></a> | ||||
|             <?php | ||||
|                 } | ||||
|             ?>
 | ||||
|             </span> | ||||
|             <h2 class="download"> | ||||
|             <?php | ||||
|                 $i = 0; | ||||
|                 foreach ($config['cops_prefered_format'] as $format) | ||||
|                 { | ||||
|                     if ($i == 2) { break; } | ||||
|                     if ($data = $entry->book->getDataFormat ($format)) { | ||||
|                         $i++; | ||||
|             ?>    
 | ||||
|                 <a href="<?php echo $data->getHtmlLink () ?>"><?php echo $format ?></a><br />
 | ||||
|                 <?php | ||||
|                     } | ||||
|                      | ||||
|                 } | ||||
|             ?>
 | ||||
|             </h2> | ||||
|             <a class="fancydetail" href="<?php echo $entry->book->getDetailUrl () ?>"> | ||||
|             <div class="fullclickpopup"> | ||||
|                 <h2><span class="st"><?php echo htmlspecialchars ($entry->title) ?></span>
 | ||||
| <?php | ||||
|                 if ($entry->book->getPubDate() != "") | ||||
|                 { | ||||
| ?>
 | ||||
|                     <span class="sp">(<?php echo $entry->book->getPubDate() ?>)</span>
 | ||||
| <?php | ||||
|                 } | ||||
| ?>
 | ||||
| <?php | ||||
|                 if (!is_null ($entry->book->rating)) { | ||||
| ?>
 | ||||
|                     <span class="sr"><?php echo $entry->book->getRating () ?></span>
 | ||||
| <?php | ||||
|                 } | ||||
| ?>
 | ||||
|                 </h2> | ||||
|                 <h4><?php echo localize("authors.title") . " : " ?></h4><span class="sa"><?php echo htmlspecialchars ($entry->book->getAuthorsName ()) ?></span><br />
 | ||||
| <?php | ||||
|                 $tags = $entry->book->getTagsName (); | ||||
|                 if (!empty ($tags)) { | ||||
| ?>
 | ||||
|                 <h4><?php echo localize("tags.title") . " : </h4>" . htmlspecialchars ($tags) ?><br />
 | ||||
| <?php | ||||
|                 } | ||||
| ?>
 | ||||
| <?php | ||||
|                 $serie = $entry->book->getSerie (); | ||||
|                 if (!is_null ($serie)) { | ||||
| ?>
 | ||||
|                 <h4><?php echo localize("series.title") . " : "  ?></h4><span class="ss"><?php echo htmlspecialchars ($serie->name) . " (" . $entry->book->seriesIndex . ")" ?></span><br />
 | ||||
| <?php | ||||
|                 } | ||||
| ?>
 | ||||
|             </div></a> | ||||
|         </article> | ||||
| <?php | ||||
|                 } | ||||
|             } | ||||
| ?>
 | ||||
|     </section> | ||||
|     <footer> | ||||
|         <div class="footleft"> | ||||
|             <a href="customize.php"><img src="<?php echo getUrlWithVersion("images/theme.png") ?>" alt="<?php echo localize ("customize.title") ?>" /></a> | ||||
|         </div> | ||||
|         <div class="footright"> | ||||
|             <a class="fancyabout" href="<?php if (getCurrentOption ('use_fancyapps') == 1) { echo "about.xml"; } else { echo $_SERVER["SCRIPT_NAME"] . str_replace ("&", "&", addURLParameter ("?page=16", DB, $database)); } ?>"><img src="<?php echo getUrlWithVersion("images/info.png") ?>" alt="<?php echo localize ("about.title") ?>" /></a> | ||||
|         </div> | ||||
| <?php | ||||
|     if ($currentPage->isPaginated ()) { | ||||
| ?> 
 | ||||
| 
 | ||||
|         <div class="footcenter"> | ||||
|         <?php | ||||
|             if (!is_null ($prevLink)) { | ||||
|         ?>
 | ||||
|         <a href="<?php echo $prevLink->hrefXhtml () ?>" ><img src="<?php echo getUrlWithVersion("images/previous.png") ?>" alt="<?php echo localize ("paging.previous.alternate") ?>" /></a> | ||||
|         <?php | ||||
|             } | ||||
|         ?>
 | ||||
|         <p><?php echo " " . $currentPage->n . " / " . $currentPage->getMaxPage () . " " ?></p>
 | ||||
|         <?php | ||||
|             if (!is_null ($nextLink)) { | ||||
|         ?>
 | ||||
|         <a href="<?php echo $nextLink->hrefXhtml () ?>" ><img src="<?php echo getUrlWithVersion("images/next.png") ?>" alt="<?php echo localize ("paging.next.alternate") ?>" /></a> | ||||
|         <?php | ||||
|             } | ||||
|         ?>
 | ||||
|         </div> | ||||
| <?php | ||||
|     } | ||||
| ?>
 | ||||
|     </footer> | ||||
| </div> | ||||
| </body> | ||||
| </html> | ||||
|  |  | |||
|  | @ -1,10 +0,0 @@ | |||
| /*! | ||||
|  * jQuery Cookie Plugin | ||||
|  * https://github.com/carhartl/jquery-cookie
 | ||||
|  * Copyright 2011, Klaus Hartl | ||||
|  * Dual licensed under the MIT or GPL Version 2 licenses. | ||||
|  * http://www.opensource.org/licenses/mit-license.php
 | ||||
|  * http://www.opensource.org/licenses/GPL-2.0
 | ||||
|  * Last update: Sun, 03 Mar 2013 06:56:32 +0000 | ||||
|  */ | ||||
| (function(factory){if(typeof define==='function'&&define.amd){define(['jquery'],factory)}else{factory(jQuery)}}(function($){var pluses=/\+/g;function raw(s){return s}function decoded(s){return decodeURIComponent(s.replace(pluses,' '))}function converted(s){if(s.indexOf('"')===0){s=s.slice(1,-1).replace(/\\"/g, '"').replace(/\\\\/g,'\\');}try{return config.json?JSON.parse(s):s}catch(er){}}var config=$.cookie=function(key,value,options){if(value!==undefined){options=$.extend({},config.defaults,options);if(typeof options.expires==='number'){var days=options.expires,t=options.expires=new Date();t.setDate(t.getDate()+days)}value=config.json?JSON.stringify(value):String(value);return(document.cookie=[config.raw?key:encodeURIComponent(key),'=',config.raw?value:encodeURIComponent(value),options.expires?'; expires='+options.expires.toUTCString():'',options.path?'; path='+options.path:'',options.domain?'; domain='+options.domain:'',options.secure?'; secure':''].join(''))}var decode=config.raw?raw:decoded;var cookies=document.cookie.split('; ');var result=key?undefined:{};for(var i=0,l=cookies.length;i<l;i++){var parts=cookies[i].split('=');var name=decode(parts.shift());var cookie=decode(parts.join('='));if(key&&key===name){result=converted(cookie);break}if(!key){result[name]=converted(cookie)}}return result};config.defaults={};$.removeCookie=function(key,options){if($.cookie(key)!==undefined){$.cookie(key,'',$.extend(options,{expires:-1}));return true}return false}})); | ||||
							
								
								
									
										4
									
								
								resources/Magnific-Popup/jquery.magnific-popup.min.js
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								resources/Magnific-Popup/jquery.magnific-popup.min.js
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										395
									
								
								resources/Magnific-Popup/magnific-popup.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										395
									
								
								resources/Magnific-Popup/magnific-popup.css
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,395 @@ | |||
| /* Magnific Popup CSS */ | ||||
| .mfp-bg { | ||||
|   top: 0; | ||||
|   left: 0; | ||||
|   width: 100%; | ||||
|   height: 100%; | ||||
|   z-index: 502; | ||||
|   overflow: hidden; | ||||
|   position: fixed; | ||||
|   background: #0b0b0b; | ||||
|   opacity: 0.8; | ||||
|   filter: alpha(opacity=80); } | ||||
| 
 | ||||
| .mfp-wrap { | ||||
|   top: 0; | ||||
|   left: 0; | ||||
|   width: 100%; | ||||
|   height: 100%; | ||||
|   z-index: 503; | ||||
|   position: fixed; | ||||
|   outline: none !important; | ||||
|   -webkit-backface-visibility: hidden; } | ||||
| 
 | ||||
| .mfp-container { | ||||
|   height: 100%; | ||||
|   text-align: center; | ||||
|   position: absolute; | ||||
|   width: 100%; | ||||
|   height: 100%; | ||||
|   left: 0; | ||||
|   top: 0; | ||||
|   padding: 0 8px; | ||||
|   -webkit-box-sizing: border-box; | ||||
|   -moz-box-sizing: border-box; | ||||
|   box-sizing: border-box; } | ||||
| 
 | ||||
| .mfp-container:before { | ||||
|   content: ''; | ||||
|   display: inline-block; | ||||
|   height: 100%; | ||||
|   vertical-align: middle; } | ||||
| 
 | ||||
| .mfp-align-top .mfp-container:before { | ||||
|   display: none; } | ||||
| 
 | ||||
| .mfp-content { | ||||
|   position: relative; | ||||
|   display: inline-block; | ||||
|   vertical-align: middle; | ||||
|   margin: 0 auto; | ||||
|   text-align: left; | ||||
|   z-index: 505; } | ||||
| 
 | ||||
| .mfp-inline-holder .mfp-content, | ||||
| .mfp-ajax-holder .mfp-content { | ||||
|   width: 100%; | ||||
|   cursor: auto; } | ||||
| 
 | ||||
| .mfp-ajax-cur { | ||||
|   cursor: progress; } | ||||
| 
 | ||||
| .mfp-zoom-out-cur, | ||||
| .mfp-zoom-out-cur .mfp-image-holder .mfp-close { | ||||
|   cursor: -moz-zoom-out; | ||||
|   cursor: -webkit-zoom-out; | ||||
|   cursor: zoom-out; } | ||||
| 
 | ||||
| .mfp-zoom { | ||||
|   cursor: pointer; | ||||
|   cursor: -webkit-zoom-in; | ||||
|   cursor: -moz-zoom-in; | ||||
|   cursor: zoom-in; } | ||||
| 
 | ||||
| .mfp-auto-cursor .mfp-content { | ||||
|   cursor: auto; } | ||||
| 
 | ||||
| .mfp-close, | ||||
| .mfp-arrow, | ||||
| .mfp-preloader, | ||||
| .mfp-counter { | ||||
|   -webkit-user-select: none; | ||||
|   -moz-user-select: none; | ||||
|   user-select: none; } | ||||
| 
 | ||||
| .mfp-loading.mfp-figure { | ||||
|   display: none; } | ||||
| 
 | ||||
| .mfp-hide { | ||||
|   display: none !important; } | ||||
| 
 | ||||
| .mfp-preloader { | ||||
|   color: #cccccc; | ||||
|   position: absolute; | ||||
|   top: 50%; | ||||
|   width: auto; | ||||
|   text-align: center; | ||||
|   margin-top: -0.8em; | ||||
|   left: 8px; | ||||
|   right: 8px; | ||||
|   z-index: 504; } | ||||
| 
 | ||||
| .mfp-preloader a { | ||||
|   color: #cccccc; } | ||||
| 
 | ||||
| .mfp-preloader a:hover { | ||||
|   color: white; } | ||||
| 
 | ||||
| .mfp-s-ready .mfp-preloader { | ||||
|   display: none; } | ||||
| 
 | ||||
| .mfp-s-error .mfp-content { | ||||
|   display: none; } | ||||
| 
 | ||||
| button.mfp-close, | ||||
| button.mfp-arrow { | ||||
|   overflow: visible; | ||||
|   cursor: pointer; | ||||
|   background: transparent; | ||||
|   border: 0; | ||||
|   -webkit-appearance: none; | ||||
|   display: block; | ||||
|   padding: 0; | ||||
|   z-index: 506; } | ||||
| 
 | ||||
| button::-moz-focus-inner { | ||||
|   padding: 0; | ||||
|   border: 0; } | ||||
| 
 | ||||
| .mfp-close { | ||||
|   width: 44px; | ||||
|   height: 44px; | ||||
|   line-height: 44px; | ||||
|   position: absolute; | ||||
|   right: 0; | ||||
|   top: 0; | ||||
|   text-decoration: none; | ||||
|   text-align: center; | ||||
|   opacity: 0.65; | ||||
|   padding: 0 0 18px 10px; | ||||
|   color: white; | ||||
|   font-style: normal; | ||||
|   font-size: 28px; | ||||
|   font-family: Arial, Baskerville, monospace; } | ||||
|   .mfp-close:hover, .mfp-close:focus { | ||||
|     opacity: 1; } | ||||
|   .mfp-close:active { | ||||
|     top: 1px; } | ||||
| 
 | ||||
| .mfp-close-btn-in .mfp-close { | ||||
|   color: #333333; } | ||||
| 
 | ||||
| .mfp-image-holder .mfp-close, | ||||
| .mfp-iframe-holder .mfp-close { | ||||
|   color: white; | ||||
|   right: -6px; | ||||
|   text-align: right; | ||||
|   padding-right: 6px; | ||||
|   width: 100%; } | ||||
| 
 | ||||
| .mfp-counter { | ||||
|   position: absolute; | ||||
|   top: 0; | ||||
|   right: 0; | ||||
|   color: #cccccc; | ||||
|   font-size: 12px; | ||||
|   line-height: 18px; } | ||||
| 
 | ||||
| .mfp-arrow { | ||||
|   position: absolute; | ||||
|   top: 0; | ||||
|   opacity: 0.65; | ||||
|   margin: 0; | ||||
|   top: 50%; | ||||
|   margin-top: -55px; | ||||
|   padding: 0; | ||||
|   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: solid transparent; } | ||||
| .mfp-arrow:after, | ||||
| .mfp-arrow .mfp-a { | ||||
|   opacity: 0.8; | ||||
|   border-top-width: 12px; | ||||
|   border-bottom-width: 12px; | ||||
|   top: 8px; } | ||||
| .mfp-arrow:before, | ||||
| .mfp-arrow .mfp-b { | ||||
|   border-top-width: 20px; | ||||
|   border-bottom-width: 20px; } | ||||
| 
 | ||||
| .mfp-arrow-left { | ||||
|   left: 0; } | ||||
|   .mfp-arrow-left:after, | ||||
|   .mfp-arrow-left .mfp-a { | ||||
|     border-right: 12px solid black; | ||||
|     left: 5px; } | ||||
|   .mfp-arrow-left:before, | ||||
|   .mfp-arrow-left .mfp-b { | ||||
|     border-right: 20px solid white; } | ||||
| 
 | ||||
| .mfp-arrow-right { | ||||
|   right: 0; } | ||||
|   .mfp-arrow-right:after, | ||||
|   .mfp-arrow-right .mfp-a { | ||||
|     border-left: 12px solid black; | ||||
|     left: 3px; } | ||||
|   .mfp-arrow-right:before, | ||||
|   .mfp-arrow-right .mfp-b { | ||||
|     border-left: 20px solid white; } | ||||
| 
 | ||||
| .mfp-iframe-holder { | ||||
|   padding-top: 40px; | ||||
|   padding-bottom: 40px; } | ||||
| 
 | ||||
| .mfp-iframe-holder .mfp-content { | ||||
|   line-height: 0; | ||||
|   width: 100%; | ||||
|   max-width: 900px; } | ||||
| 
 | ||||
| .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; } | ||||
| 
 | ||||
| /* Main image in popup */ | ||||
| img.mfp-img { | ||||
|   width: auto; | ||||
|   max-width: 100%; | ||||
|   height: auto; | ||||
|   display: block; | ||||
|   line-height: 0; | ||||
|   -webkit-box-sizing: border-box; | ||||
|   -moz-box-sizing: border-box; | ||||
|   box-sizing: border-box; | ||||
|   padding: 40px 0 40px; | ||||
|   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); } | ||||
| 
 | ||||
| .mfp-figure { | ||||
|   line-height: 0; } | ||||
| 
 | ||||
| .mfp-bottom-bar { | ||||
|   margin-top: -36px; | ||||
|   position: absolute; | ||||
|   top: 100%; | ||||
|   left: 0; | ||||
|   width: 100%; | ||||
|   cursor: auto; } | ||||
| 
 | ||||
| .mfp-title { | ||||
|   text-align: left; | ||||
|   line-height: 18px; | ||||
|   color: #f3f3f3; | ||||
|   word-break: 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%; } | ||||
| 
 | ||||
| .mfp-gallery .mfp-image-holder .mfp-figure { | ||||
|   cursor: pointer; } | ||||
| 
 | ||||
| @media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px) { | ||||
|   /** | ||||
|    * Remove all paddings around the image on small screen | ||||
|    */ | ||||
|   .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-bottom-bar { | ||||
|     background: rgba(0, 0, 0, 0.6); | ||||
|     bottom: 0; | ||||
|     margin: 0; | ||||
|     top: auto; | ||||
|     padding: 3px 5px; | ||||
|     position: fixed; | ||||
|     -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-counter { | ||||
|     right: 5px; | ||||
|     top: 3px; } | ||||
| 
 | ||||
|   .mfp-img-mobile .mfp-close { | ||||
|     top: 0; | ||||
|     right: 0; | ||||
|     width: 35px; | ||||
|     height: 35px; | ||||
|     line-height: 35px; | ||||
|     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; } } | ||||
| @media all and (max-width: 800px) { | ||||
|   .mfp-arrow { | ||||
|     -webkit-transform: scale(0.75); | ||||
|     transform: scale(0.75); } | ||||
| 
 | ||||
|   .mfp-arrow-left { | ||||
|     -webkit-transform-origin: 0; | ||||
|     transform-origin: 0; } | ||||
| 
 | ||||
|   .mfp-arrow-right { | ||||
|     -webkit-transform-origin: 100%; | ||||
|     transform-origin: 100%; } | ||||
| 
 | ||||
|   .mfp-container { | ||||
|     padding-left: 6px; | ||||
|     padding-right: 6px; } } | ||||
| .mfp-ie7 .mfp-img { | ||||
|   padding: 0; } | ||||
| .mfp-ie7 .mfp-bottom-bar { | ||||
|   width: 600px; | ||||
|   left: 50%; | ||||
|   margin-left: -300px; | ||||
|   margin-top: 5px; | ||||
|   padding-bottom: 5px; } | ||||
| .mfp-ie7 .mfp-container { | ||||
|   padding: 0; } | ||||
| .mfp-ie7 .mfp-content { | ||||
|   padding-top: 44px; } | ||||
| .mfp-ie7 .mfp-close { | ||||
|   top: 0; | ||||
|   right: 0; | ||||
|   padding-top: 0; } | ||||
							
								
								
									
										7
									
								
								resources/doT/doT.min.js
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								resources/doT/doT.min.js
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| /* 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, | ||||
| 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+"<l"+f+"){"+k+"=arr"+f+"["+g+"+=1];out+='"}).replace(b.evaluate||i,function(h,d){return"';"+m(d)+"out+='"})+"';return out;").replace(/\n/g,"\\n").replace(/\t/g,"\\t").replace(/\r/g,"\\r").replace(/(\s|;|\}|^|\{)out\+='';/g,"$1").replace(/\+''/g,"").replace(/(\s|;|\}|^|\{)out\+=''\+/g,"$1out+=");if(e&&b.selfcontained)a="String.prototype.encodeHTML=("+ | ||||
| o.toString()+"());"+a;try{return new Function(b.varname,a)}catch(n){typeof console!=="undefined"&&console.log("Could not create a template function: "+a);throw n;}};j.compile=function(a,b){return j.template(a,null,b)}})(); | ||||
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 43 B | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 3.8 KiB | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 1,003 B | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 1.3 KiB | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 1.1 KiB | 
|  | @ -1,96 +0,0 @@ | |||
| #fancybox-buttons { | ||||
| 	position: fixed; | ||||
| 	left: 0; | ||||
| 	width: 100%; | ||||
| 	z-index: 8050; | ||||
| } | ||||
| 
 | ||||
| #fancybox-buttons.top { | ||||
| 	top: 10px; | ||||
| } | ||||
| 
 | ||||
| #fancybox-buttons.bottom { | ||||
| 	bottom: 10px; | ||||
| } | ||||
| 
 | ||||
| #fancybox-buttons ul { | ||||
| 	display: block; | ||||
| 	width: 166px; | ||||
| 	height: 30px; | ||||
| 	margin: 0 auto; | ||||
| 	padding: 0; | ||||
| 	list-style: none; | ||||
| 	border: 1px solid #111; | ||||
| 	border-radius: 3px; | ||||
| 	-webkit-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); | ||||
| 	   -moz-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); | ||||
| 	        box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); | ||||
| 	background: rgb(50,50,50); | ||||
| 	background: -moz-linear-gradient(top, rgb(68,68,68) 0%, rgb(52,52,52) 50%, rgb(41,41,41) 50%, rgb(51,51,51) 100%); | ||||
| 	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgb(68,68,68)), color-stop(50%,rgb(52,52,52)), color-stop(50%,rgb(41,41,41)), color-stop(100%,rgb(51,51,51))); | ||||
| 	background: -webkit-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); | ||||
| 	background: -o-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); | ||||
| 	background: -ms-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); | ||||
| 	background: linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); | ||||
| 	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#444444', endColorstr='#222222',GradientType=0 ); | ||||
| } | ||||
| 
 | ||||
| #fancybox-buttons ul li { | ||||
| 	float: left; | ||||
| 	margin: 0; | ||||
| 	padding: 0; | ||||
| } | ||||
| 
 | ||||
| #fancybox-buttons a { | ||||
| 	display: block; | ||||
| 	width: 30px; | ||||
| 	height: 30px; | ||||
| 	text-indent: -9999px; | ||||
| 	background-image: url('fancybox_buttons.png'); | ||||
| 	background-repeat: no-repeat; | ||||
| 	outline: none; | ||||
| 	opacity: 0.8; | ||||
| } | ||||
| 
 | ||||
| #fancybox-buttons a:hover { | ||||
| 	opacity: 1; | ||||
| } | ||||
| 
 | ||||
| #fancybox-buttons a.btnPrev { | ||||
| 	background-position: 5px 0; | ||||
| } | ||||
| 
 | ||||
| #fancybox-buttons a.btnNext { | ||||
| 	background-position: -33px 0; | ||||
| 	border-right: 1px solid #3e3e3e; | ||||
| } | ||||
| 
 | ||||
| #fancybox-buttons a.btnPlay { | ||||
| 	background-position: 0 -30px; | ||||
| } | ||||
| 
 | ||||
| #fancybox-buttons a.btnPlayOn { | ||||
| 	background-position: -30px -30px; | ||||
| } | ||||
| 
 | ||||
| #fancybox-buttons a.btnToggle { | ||||
| 	background-position: 3px -60px; | ||||
| 	border-left: 1px solid #111; | ||||
| 	border-right: 1px solid #3e3e3e; | ||||
| 	width: 35px | ||||
| } | ||||
| 
 | ||||
| #fancybox-buttons a.btnToggleOn { | ||||
| 	background-position: -27px -60px; | ||||
| } | ||||
| 
 | ||||
| #fancybox-buttons a.btnClose { | ||||
| 	border-left: 1px solid #111; | ||||
| 	width: 35px; | ||||
| 	background-position: -56px 0px; | ||||
| } | ||||
| 
 | ||||
| #fancybox-buttons a.btnDisabled { | ||||
| 	opacity : 0.4; | ||||
| 	cursor: default; | ||||
| } | ||||
|  | @ -1,121 +0,0 @@ | |||
|  /*! | ||||
|  * Buttons helper for fancyBox | ||||
|  * version: 1.0.5 (Mon, 15 Oct 2012) | ||||
|  * @requires fancyBox v2.0 or later | ||||
|  * | ||||
|  * Usage: | ||||
|  *     $(".fancybox").fancybox({ | ||||
|  *         helpers : { | ||||
|  *             buttons: { | ||||
|  *                 position : 'top' | ||||
|  *             } | ||||
|  *         } | ||||
|  *     }); | ||||
|  * | ||||
|  */ | ||||
| (function ($) { | ||||
| 	//Shortcut for fancyBox object
 | ||||
| 	var F = $.fancybox; | ||||
| 
 | ||||
| 	//Add helper object
 | ||||
| 	F.helpers.buttons = { | ||||
| 		defaults : { | ||||
| 			skipSingle : false, // disables if gallery contains single image
 | ||||
| 			position   : 'top', // 'top' or 'bottom'
 | ||||
| 			tpl        : '<div id="fancybox-buttons"><ul><li><a class="btnPrev" title="Previous" href="javascript:;"></a></li><li><a class="btnPlay" title="Start slideshow" href="javascript:;"></a></li><li><a class="btnNext" title="Next" href="javascript:;"></a></li><li><a class="btnToggle" title="Toggle size" href="javascript:;"></a></li><li><a class="btnClose" title="Close" href="javascript:jQuery.fancybox.close();"></a></li></ul></div>' | ||||
| 		}, | ||||
| 
 | ||||
| 		list : null, | ||||
| 		buttons: null, | ||||
| 
 | ||||
| 		beforeLoad: function (opts, obj) { | ||||
| 			//Remove self if gallery do not have at least two items
 | ||||
| 
 | ||||
| 			if (opts.skipSingle && obj.group.length < 2) { | ||||
| 				obj.helpers.buttons = false; | ||||
| 				obj.closeBtn = true; | ||||
| 
 | ||||
| 				return; | ||||
| 			} | ||||
| 
 | ||||
| 			//Increase top margin to give space for buttons
 | ||||
| 			obj.margin[ opts.position === 'bottom' ? 2 : 0 ] += 30; | ||||
| 		}, | ||||
| 
 | ||||
| 		onPlayStart: function () { | ||||
| 			if (this.buttons) { | ||||
| 				this.buttons.play.attr('title', 'Pause slideshow').addClass('btnPlayOn'); | ||||
| 			} | ||||
| 		}, | ||||
| 
 | ||||
| 		onPlayEnd: function () { | ||||
| 			if (this.buttons) { | ||||
| 				this.buttons.play.attr('title', 'Start slideshow').removeClass('btnPlayOn'); | ||||
| 			} | ||||
| 		}, | ||||
| 
 | ||||
| 		afterShow: function (opts, obj) { | ||||
| 			var buttons = this.buttons; | ||||
| 
 | ||||
| 			if (!buttons) { | ||||
| 				this.list = $(opts.tpl).addClass(opts.position).appendTo('body'); | ||||
| 
 | ||||
| 				buttons = { | ||||
| 					prev   : this.list.find('.btnPrev').click( F.prev ), | ||||
| 					next   : this.list.find('.btnNext').click( F.next ), | ||||
| 					play   : this.list.find('.btnPlay').click( F.play ), | ||||
| 					toggle : this.list.find('.btnToggle').click( F.toggle ) | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			//Prev
 | ||||
| 			if (obj.index > 0 || obj.loop) { | ||||
| 				buttons.prev.removeClass('btnDisabled'); | ||||
| 			} else { | ||||
| 				buttons.prev.addClass('btnDisabled'); | ||||
| 			} | ||||
| 
 | ||||
| 			//Next / Play
 | ||||
| 			if (obj.loop || obj.index < obj.group.length - 1) { | ||||
| 				buttons.next.removeClass('btnDisabled'); | ||||
| 				buttons.play.removeClass('btnDisabled'); | ||||
| 
 | ||||
| 			} else { | ||||
| 				buttons.next.addClass('btnDisabled'); | ||||
| 				buttons.play.addClass('btnDisabled'); | ||||
| 			} | ||||
| 
 | ||||
| 			this.buttons = buttons; | ||||
| 
 | ||||
| 			this.onUpdate(opts, obj); | ||||
| 		}, | ||||
| 
 | ||||
| 		onUpdate: function (opts, obj) { | ||||
| 			var toggle; | ||||
| 
 | ||||
| 			if (!this.buttons) { | ||||
| 				return; | ||||
| 			} | ||||
| 
 | ||||
| 			toggle = this.buttons.toggle.removeClass('btnDisabled btnToggleOn'); | ||||
| 
 | ||||
| 			//Size toggle button
 | ||||
| 			if (obj.canShrink) { | ||||
| 				toggle.addClass('btnToggleOn'); | ||||
| 
 | ||||
| 			} else if (!obj.canExpand) { | ||||
| 				toggle.addClass('btnDisabled'); | ||||
| 			} | ||||
| 		}, | ||||
| 
 | ||||
| 		beforeClose: function () { | ||||
| 			if (this.list) { | ||||
| 				this.list.remove(); | ||||
| 			} | ||||
| 
 | ||||
| 			this.list    = null; | ||||
| 			this.buttons = null; | ||||
| 		} | ||||
| 	}; | ||||
| 
 | ||||
| }(jQuery)); | ||||
|  | @ -1,196 +0,0 @@ | |||
| /*! | ||||
|  * Media helper for fancyBox | ||||
|  * version: 1.0.5 (Tue, 23 Oct 2012) | ||||
|  * @requires fancyBox v2.0 or later | ||||
|  * | ||||
|  * Usage: | ||||
|  *     $(".fancybox").fancybox({ | ||||
|  *         helpers : { | ||||
|  *             media: true | ||||
|  *         } | ||||
|  *     }); | ||||
|  * | ||||
|  * Set custom URL parameters: | ||||
|  *     $(".fancybox").fancybox({ | ||||
|  *         helpers : { | ||||
|  *             media: { | ||||
|  *                 youtube : { | ||||
|  *                     params : { | ||||
|  *                         autoplay : 0 | ||||
|  *                     } | ||||
|  *                 } | ||||
|  *             } | ||||
|  *         } | ||||
|  *     }); | ||||
|  * | ||||
|  * Or: | ||||
|  *     $(".fancybox").fancybox({, | ||||
|  *	       helpers : { | ||||
|  *             media: true | ||||
|  *         }, | ||||
|  *         youtube : { | ||||
|  *             autoplay: 0 | ||||
|  *         } | ||||
|  *     }); | ||||
|  * | ||||
|  *  Supports: | ||||
|  * | ||||
|  *      Youtube | ||||
|  *          http://www.youtube.com/watch?v=opj24KnzrWo
 | ||||
|  *          http://www.youtube.com/embed/opj24KnzrWo
 | ||||
|  *          http://youtu.be/opj24KnzrWo
 | ||||
|  *      Vimeo | ||||
|  *          http://vimeo.com/40648169
 | ||||
|  *          http://vimeo.com/channels/staffpicks/38843628
 | ||||
|  *          http://vimeo.com/groups/surrealism/videos/36516384
 | ||||
|  *          http://player.vimeo.com/video/45074303
 | ||||
|  *      Metacafe | ||||
|  *          http://www.metacafe.com/watch/7635964/dr_seuss_the_lorax_movie_trailer/
 | ||||
|  *          http://www.metacafe.com/watch/7635964/
 | ||||
|  *      Dailymotion | ||||
|  *          http://www.dailymotion.com/video/xoytqh_dr-seuss-the-lorax-premiere_people
 | ||||
|  *      Twitvid | ||||
|  *          http://twitvid.com/QY7MD
 | ||||
|  *      Twitpic | ||||
|  *          http://twitpic.com/7p93st
 | ||||
|  *      Instagram | ||||
|  *          http://instagr.am/p/IejkuUGxQn/
 | ||||
|  *          http://instagram.com/p/IejkuUGxQn/
 | ||||
|  *      Google maps | ||||
|  *          http://maps.google.com/maps?q=Eiffel+Tower,+Avenue+Gustave+Eiffel,+Paris,+France&t=h&z=17
 | ||||
|  *          http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16
 | ||||
|  *          http://maps.google.com/?ll=48.859463,2.292626&spn=0.000965,0.002642&t=m&z=19&layer=c&cbll=48.859524,2.292532&panoid=YJ0lq28OOy3VT2IqIuVY0g&cbp=12,151.58,,0,-15.56
 | ||||
|  */ | ||||
| (function ($) { | ||||
| 	"use strict"; | ||||
| 
 | ||||
| 	//Shortcut for fancyBox object
 | ||||
| 	var F = $.fancybox, | ||||
| 		format = function( url, rez, params ) { | ||||
| 			params = params || ''; | ||||
| 
 | ||||
| 			if ( $.type( params ) === "object" ) { | ||||
| 				params = $.param(params, true); | ||||
| 			} | ||||
| 
 | ||||
| 			$.each(rez, function(key, value) { | ||||
| 				url = url.replace( '$' + key, value || '' ); | ||||
| 			}); | ||||
| 
 | ||||
| 			if (params.length) { | ||||
| 				url += ( url.indexOf('?') > 0 ? '&' : '?' ) + params; | ||||
| 			} | ||||
| 
 | ||||
| 			return url; | ||||
| 		}; | ||||
| 
 | ||||
| 	//Add helper object
 | ||||
| 	F.helpers.media = { | ||||
| 		defaults : { | ||||
| 			youtube : { | ||||
| 				matcher : /(youtube\.com|youtu\.be)\/(watch\?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*)).*/i, | ||||
| 				params  : { | ||||
| 					autoplay    : 1, | ||||
| 					autohide    : 1, | ||||
| 					fs          : 1, | ||||
| 					rel         : 0, | ||||
| 					hd          : 1, | ||||
| 					wmode       : 'opaque', | ||||
| 					enablejsapi : 1 | ||||
| 				}, | ||||
| 				type : 'iframe', | ||||
| 				url  : '//www.youtube.com/embed/$3' | ||||
| 			}, | ||||
| 			vimeo : { | ||||
| 				matcher : /(?:vimeo(?:pro)?.com)\/(?:[^\d]+)?(\d+)(?:.*)/, | ||||
| 				params  : { | ||||
| 					autoplay      : 1, | ||||
| 					hd            : 1, | ||||
| 					show_title    : 1, | ||||
| 					show_byline   : 1, | ||||
| 					show_portrait : 0, | ||||
| 					fullscreen    : 1 | ||||
| 				}, | ||||
| 				type : 'iframe', | ||||
| 				url  : '//player.vimeo.com/video/$1' | ||||
| 			}, | ||||
| 			metacafe : { | ||||
| 				matcher : /metacafe.com\/(?:watch|fplayer)\/([\w\-]{1,10})/, | ||||
| 				params  : { | ||||
| 					autoPlay : 'yes' | ||||
| 				}, | ||||
| 				type : 'swf', | ||||
| 				url  : function( rez, params, obj ) { | ||||
| 					obj.swf.flashVars = 'playerVars=' + $.param( params, true ); | ||||
| 
 | ||||
| 					return '//www.metacafe.com/fplayer/' + rez[1] + '/.swf'; | ||||
| 				} | ||||
| 			}, | ||||
| 			dailymotion : { | ||||
| 				matcher : /dailymotion.com\/video\/(.*)\/?(.*)/, | ||||
| 				params  : { | ||||
| 					additionalInfos : 0, | ||||
| 					autoStart : 1 | ||||
| 				}, | ||||
| 				type : 'swf', | ||||
| 				url  : '//www.dailymotion.com/swf/video/$1' | ||||
| 			}, | ||||
| 			twitvid : { | ||||
| 				matcher : /twitvid\.com\/([a-zA-Z0-9_\-\?\=]+)/i, | ||||
| 				params  : { | ||||
| 					autoplay : 0 | ||||
| 				}, | ||||
| 				type : 'iframe', | ||||
| 				url  : '//www.twitvid.com/embed.php?guid=$1' | ||||
| 			}, | ||||
| 			twitpic : { | ||||
| 				matcher : /twitpic\.com\/(?!(?:place|photos|events)\/)([a-zA-Z0-9\?\=\-]+)/i, | ||||
| 				type : 'image', | ||||
| 				url  : '//twitpic.com/show/full/$1/' | ||||
| 			}, | ||||
| 			instagram : { | ||||
| 				matcher : /(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i, | ||||
| 				type : 'image', | ||||
| 				url  : '//$1/p/$2/media/' | ||||
| 			}, | ||||
| 			google_maps : { | ||||
| 				matcher : /maps\.google\.([a-z]{2,3}(\.[a-z]{2})?)\/(\?ll=|maps\?)(.*)/i, | ||||
| 				type : 'iframe', | ||||
| 				url  : function( rez ) { | ||||
| 					return '//maps.google.' + rez[1] + '/' + rez[3] + '' + rez[4] + '&output=' + (rez[4].indexOf('layer=c') > 0 ? 'svembed' : 'embed'); | ||||
| 				} | ||||
| 			} | ||||
| 		}, | ||||
| 
 | ||||
| 		beforeLoad : function(opts, obj) { | ||||
| 			var url   = obj.href || '', | ||||
| 				type  = false, | ||||
| 				what, | ||||
| 				item, | ||||
| 				rez, | ||||
| 				params; | ||||
| 
 | ||||
| 			for (what in opts) { | ||||
| 				item = opts[ what ]; | ||||
| 				rez  = url.match( item.matcher ); | ||||
| 
 | ||||
| 				if (rez) { | ||||
| 					type   = item.type; | ||||
| 					params = $.extend(true, {}, item.params, obj[ what ] || ($.isPlainObject(opts[ what ]) ? opts[ what ].params : null)); | ||||
| 
 | ||||
| 					url = $.type( item.url ) === "function" ? item.url.call( this, rez, params, obj ) : format( item.url, rez, params ); | ||||
| 
 | ||||
| 					break; | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			if (type) { | ||||
| 				obj.href = url; | ||||
| 				obj.type = type; | ||||
| 
 | ||||
| 				obj.autoHeight = false; | ||||
| 			} | ||||
| 		} | ||||
| 	}; | ||||
| 
 | ||||
| }(jQuery)); | ||||
|  | @ -1,54 +0,0 @@ | |||
| #fancybox-thumbs { | ||||
| 	position: fixed; | ||||
| 	left: 0; | ||||
| 	width: 100%; | ||||
| 	overflow: hidden; | ||||
| 	z-index: 8050; | ||||
| } | ||||
| 
 | ||||
| #fancybox-thumbs.bottom { | ||||
| 	bottom: 2px; | ||||
| } | ||||
| 
 | ||||
| #fancybox-thumbs.top { | ||||
| 	top: 2px; | ||||
| } | ||||
| 
 | ||||
| #fancybox-thumbs ul { | ||||
| 	position: relative; | ||||
| 	list-style: none; | ||||
| 	margin: 0; | ||||
| 	padding: 0; | ||||
| } | ||||
| 
 | ||||
| #fancybox-thumbs ul li { | ||||
| 	float: left; | ||||
| 	padding: 1px; | ||||
| 	opacity: 0.5; | ||||
| } | ||||
| 
 | ||||
| #fancybox-thumbs ul li.active { | ||||
| 	opacity: 0.75; | ||||
| 	padding: 0; | ||||
| 	border: 1px solid #fff; | ||||
| } | ||||
| 
 | ||||
| #fancybox-thumbs ul li:hover { | ||||
| 	opacity: 1; | ||||
| } | ||||
| 
 | ||||
| #fancybox-thumbs ul li a { | ||||
| 	display: block; | ||||
| 	position: relative; | ||||
| 	overflow: hidden; | ||||
| 	border: 1px solid #222; | ||||
| 	background: #111; | ||||
| 	outline: none; | ||||
| } | ||||
| 
 | ||||
| #fancybox-thumbs ul li img { | ||||
| 	display: block; | ||||
| 	position: relative; | ||||
| 	border: 0; | ||||
| 	padding: 0; | ||||
| } | ||||
|  | @ -1,162 +0,0 @@ | |||
|  /*! | ||||
|  * Thumbnail helper for fancyBox | ||||
|  * version: 1.0.7 (Mon, 01 Oct 2012) | ||||
|  * @requires fancyBox v2.0 or later | ||||
|  * | ||||
|  * Usage: | ||||
|  *     $(".fancybox").fancybox({ | ||||
|  *         helpers : { | ||||
|  *             thumbs: { | ||||
|  *                 width  : 50, | ||||
|  *                 height : 50 | ||||
|  *             } | ||||
|  *         } | ||||
|  *     }); | ||||
|  * | ||||
|  */ | ||||
| (function ($) { | ||||
| 	//Shortcut for fancyBox object
 | ||||
| 	var F = $.fancybox; | ||||
| 
 | ||||
| 	//Add helper object
 | ||||
| 	F.helpers.thumbs = { | ||||
| 		defaults : { | ||||
| 			width    : 50,       // thumbnail width
 | ||||
| 			height   : 50,       // thumbnail height
 | ||||
| 			position : 'bottom', // 'top' or 'bottom'
 | ||||
| 			source   : function ( item ) {  // function to obtain the URL of the thumbnail image
 | ||||
| 				var href; | ||||
| 
 | ||||
| 				if (item.element) { | ||||
| 					href = $(item.element).find('img').attr('src'); | ||||
| 				} | ||||
| 
 | ||||
| 				if (!href && item.type === 'image' && item.href) { | ||||
| 					href = item.href; | ||||
| 				} | ||||
| 
 | ||||
| 				return href; | ||||
| 			} | ||||
| 		}, | ||||
| 
 | ||||
| 		wrap  : null, | ||||
| 		list  : null, | ||||
| 		width : 0, | ||||
| 
 | ||||
| 		init: function (opts, obj) { | ||||
| 			var that = this, | ||||
| 				list, | ||||
| 				thumbWidth  = opts.width, | ||||
| 				thumbHeight = opts.height, | ||||
| 				thumbSource = opts.source; | ||||
| 
 | ||||
| 			//Build list structure
 | ||||
| 			list = ''; | ||||
| 
 | ||||
| 			for (var n = 0; n < obj.group.length; n++) { | ||||
| 				list += '<li><a style="width:' + thumbWidth + 'px;height:' + thumbHeight + 'px;" href="javascript:jQuery.fancybox.jumpto(' + n + ');"></a></li>'; | ||||
| 			} | ||||
| 
 | ||||
| 			this.wrap = $('<div id="fancybox-thumbs"></div>').addClass(opts.position).appendTo('body'); | ||||
| 			this.list = $('<ul>' + list + '</ul>').appendTo(this.wrap); | ||||
| 
 | ||||
| 			//Load each thumbnail
 | ||||
| 			$.each(obj.group, function (i) { | ||||
| 				var href = thumbSource( obj.group[ i ] ); | ||||
| 
 | ||||
| 				if (!href) { | ||||
| 					return; | ||||
| 				} | ||||
| 
 | ||||
| 				$("<img />").load(function () { | ||||
| 					var width  = this.width, | ||||
| 						height = this.height, | ||||
| 						widthRatio, heightRatio, parent; | ||||
| 
 | ||||
| 					if (!that.list || !width || !height) { | ||||
| 						return; | ||||
| 					} | ||||
| 
 | ||||
| 					//Calculate thumbnail width/height and center it
 | ||||
| 					widthRatio  = width / thumbWidth; | ||||
| 					heightRatio = height / thumbHeight; | ||||
| 
 | ||||
| 					parent = that.list.children().eq(i).find('a'); | ||||
| 
 | ||||
| 					if (widthRatio >= 1 && heightRatio >= 1) { | ||||
| 						if (widthRatio > heightRatio) { | ||||
| 							width  = Math.floor(width / heightRatio); | ||||
| 							height = thumbHeight; | ||||
| 
 | ||||
| 						} else { | ||||
| 							width  = thumbWidth; | ||||
| 							height = Math.floor(height / widthRatio); | ||||
| 						} | ||||
| 					} | ||||
| 
 | ||||
| 					$(this).css({ | ||||
| 						width  : width, | ||||
| 						height : height, | ||||
| 						top    : Math.floor(thumbHeight / 2 - height / 2), | ||||
| 						left   : Math.floor(thumbWidth / 2 - width / 2) | ||||
| 					}); | ||||
| 
 | ||||
| 					parent.width(thumbWidth).height(thumbHeight); | ||||
| 
 | ||||
| 					$(this).hide().appendTo(parent).fadeIn(300); | ||||
| 
 | ||||
| 				}).attr('src', href); | ||||
| 			}); | ||||
| 
 | ||||
| 			//Set initial width
 | ||||
| 			this.width = this.list.children().eq(0).outerWidth(true); | ||||
| 
 | ||||
| 			this.list.width(this.width * (obj.group.length + 1)).css('left', Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5))); | ||||
| 		}, | ||||
| 
 | ||||
| 		beforeLoad: function (opts, obj) { | ||||
| 			//Remove self if gallery do not have at least two items
 | ||||
| 			if (obj.group.length < 2) { | ||||
| 				obj.helpers.thumbs = false; | ||||
| 
 | ||||
| 				return; | ||||
| 			} | ||||
| 
 | ||||
| 			//Increase bottom margin to give space for thumbs
 | ||||
| 			obj.margin[ opts.position === 'top' ? 0 : 2 ] += ((opts.height) + 15); | ||||
| 		}, | ||||
| 
 | ||||
| 		afterShow: function (opts, obj) { | ||||
| 			//Check if exists and create or update list
 | ||||
| 			if (this.list) { | ||||
| 				this.onUpdate(opts, obj); | ||||
| 
 | ||||
| 			} else { | ||||
| 				this.init(opts, obj); | ||||
| 			} | ||||
| 
 | ||||
| 			//Set active element
 | ||||
| 			this.list.children().removeClass('active').eq(obj.index).addClass('active'); | ||||
| 		}, | ||||
| 
 | ||||
| 		//Center list
 | ||||
| 		onUpdate: function (opts, obj) { | ||||
| 			if (this.list) { | ||||
| 				this.list.stop(true).animate({ | ||||
| 					'left': Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5)) | ||||
| 				}, 150); | ||||
| 			} | ||||
| 		}, | ||||
| 
 | ||||
| 		beforeClose: function () { | ||||
| 			if (this.wrap) { | ||||
| 				this.wrap.remove(); | ||||
| 			} | ||||
| 
 | ||||
| 			this.wrap  = null; | ||||
| 			this.list  = null; | ||||
| 			this.width = 0; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| }(jQuery)); | ||||
							
								
								
									
										249
									
								
								resources/fancybox/jquery.fancybox.css
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										249
									
								
								resources/fancybox/jquery.fancybox.css
									
										
									
									
										vendored
									
									
								
							|  | @ -1,249 +0,0 @@ | |||
| /*! fancyBox v2.1.4 fancyapps.com | fancyapps.com/fancybox/#license */ | ||||
| .fancybox-wrap, | ||||
| .fancybox-skin, | ||||
| .fancybox-outer, | ||||
| .fancybox-inner, | ||||
| .fancybox-image, | ||||
| .fancybox-wrap iframe, | ||||
| .fancybox-wrap object, | ||||
| .fancybox-nav, | ||||
| .fancybox-nav span, | ||||
| .fancybox-tmp | ||||
| { | ||||
| 	padding: 0; | ||||
| 	margin: 0; | ||||
| 	border: 0; | ||||
| 	outline: none; | ||||
| 	vertical-align: top; | ||||
| } | ||||
| 
 | ||||
| .fancybox-wrap { | ||||
| 	position: absolute; | ||||
| 	top: 0; | ||||
| 	left: 0; | ||||
| 	z-index: 8020; | ||||
| } | ||||
| 
 | ||||
| .fancybox-skin { | ||||
| 	position: relative; | ||||
| 	background: #f9f9f9; | ||||
| 	color: #444; | ||||
| 	text-shadow: none; | ||||
| 	-webkit-border-radius: 4px; | ||||
| 	   -moz-border-radius: 4px; | ||||
| 	        border-radius: 4px; | ||||
| } | ||||
| 
 | ||||
| .fancybox-opened { | ||||
| 	z-index: 8030; | ||||
| } | ||||
| 
 | ||||
| .fancybox-opened .fancybox-skin { | ||||
| 	-webkit-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); | ||||
| 	   -moz-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); | ||||
| 	        box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); | ||||
| } | ||||
| 
 | ||||
| .fancybox-outer, .fancybox-inner { | ||||
| 	position: relative; | ||||
| } | ||||
| 
 | ||||
| .fancybox-inner { | ||||
| 	overflow: hidden; | ||||
| } | ||||
| 
 | ||||
| .fancybox-type-iframe .fancybox-inner { | ||||
| 	-webkit-overflow-scrolling: touch; | ||||
| } | ||||
| 
 | ||||
| .fancybox-error { | ||||
| 	color: #444; | ||||
| 	font: 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif; | ||||
| 	margin: 0; | ||||
| 	padding: 15px; | ||||
| 	white-space: nowrap; | ||||
| } | ||||
| 
 | ||||
| .fancybox-image, .fancybox-iframe { | ||||
| 	display: block; | ||||
| 	width: 100%; | ||||
| 	height: 100%; | ||||
| } | ||||
| 
 | ||||
| .fancybox-image { | ||||
| 	max-width: 100%; | ||||
| 	max-height: 100%; | ||||
| } | ||||
| 
 | ||||
| #fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span { | ||||
| 	background-image: url('fancybox_sprite.png'); | ||||
| } | ||||
| 
 | ||||
| #fancybox-loading { | ||||
| 	position: fixed; | ||||
| 	top: 50%; | ||||
| 	left: 50%; | ||||
| 	margin-top: -22px; | ||||
| 	margin-left: -22px; | ||||
| 	background-position: 0 -108px; | ||||
| 	opacity: 0.8; | ||||
| 	cursor: pointer; | ||||
| 	z-index: 8060; | ||||
| } | ||||
| 
 | ||||
| #fancybox-loading div { | ||||
| 	width: 44px; | ||||
| 	height: 44px; | ||||
| 	background: url('fancybox_loading.gif') center center no-repeat; | ||||
| } | ||||
| 
 | ||||
| .fancybox-close { | ||||
| 	position: absolute; | ||||
| 	top: -18px; | ||||
| 	right: -18px; | ||||
| 	width: 36px; | ||||
| 	height: 36px; | ||||
| 	cursor: pointer; | ||||
| 	z-index: 8040; | ||||
| } | ||||
| 
 | ||||
| .fancybox-nav { | ||||
| 	position: absolute; | ||||
| 	top: 0; | ||||
| 	width: 40%; | ||||
| 	height: 100%; | ||||
| 	cursor: pointer; | ||||
| 	text-decoration: none; | ||||
| 	background: transparent url('blank.gif'); /* helps IE */ | ||||
| 	-webkit-tap-highlight-color: rgba(0,0,0,0); | ||||
| 	z-index: 8040; | ||||
| } | ||||
| 
 | ||||
| .fancybox-prev { | ||||
| 	left: 0; | ||||
| } | ||||
| 
 | ||||
| .fancybox-next { | ||||
| 	right: 0; | ||||
| } | ||||
| 
 | ||||
| .fancybox-nav span { | ||||
| 	position: absolute; | ||||
| 	top: 50%; | ||||
| 	width: 36px; | ||||
| 	height: 34px; | ||||
| 	margin-top: -18px; | ||||
| 	cursor: pointer; | ||||
| 	z-index: 8040; | ||||
| 	visibility: hidden; | ||||
| } | ||||
| 
 | ||||
| .fancybox-prev span { | ||||
| 	left: 10px; | ||||
| 	background-position: 0 -36px; | ||||
| } | ||||
| 
 | ||||
| .fancybox-next span { | ||||
| 	right: 10px; | ||||
| 	background-position: 0 -72px; | ||||
| } | ||||
| 
 | ||||
| .fancybox-nav:hover span { | ||||
| 	visibility: visible; | ||||
| } | ||||
| 
 | ||||
| .fancybox-tmp { | ||||
| 	position: absolute; | ||||
| 	top: -99999px; | ||||
| 	left: -99999px; | ||||
| 	visibility: hidden; | ||||
| 	max-width: 99999px; | ||||
| 	max-height: 99999px; | ||||
| 	overflow: visible !important; | ||||
| } | ||||
| 
 | ||||
| /* Overlay helper */ | ||||
| 
 | ||||
| .fancybox-lock { | ||||
| 	overflow: hidden; | ||||
| } | ||||
| 
 | ||||
| .fancybox-overlay { | ||||
| 	position: absolute; | ||||
| 	top: 0; | ||||
| 	left: 0; | ||||
| 	overflow: hidden; | ||||
| 	display: none; | ||||
| 	z-index: 8010; | ||||
| 	background: url('fancybox_overlay.png'); | ||||
| } | ||||
| 
 | ||||
| .fancybox-overlay-fixed { | ||||
| 	position: fixed; | ||||
| 	bottom: 0; | ||||
| 	right: 0; | ||||
| } | ||||
| 
 | ||||
| .fancybox-lock .fancybox-overlay { | ||||
| 	overflow: auto; | ||||
| 	overflow-y: scroll; | ||||
| } | ||||
| 
 | ||||
| /* Title helper */ | ||||
| 
 | ||||
| .fancybox-title { | ||||
| 	visibility: hidden; | ||||
| 	font: normal 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif; | ||||
| 	position: relative; | ||||
| 	text-shadow: none; | ||||
| 	z-index: 8050; | ||||
| } | ||||
| 
 | ||||
| .fancybox-opened .fancybox-title { | ||||
| 	visibility: visible; | ||||
| } | ||||
| 
 | ||||
| .fancybox-title-float-wrap { | ||||
| 	position: absolute; | ||||
| 	bottom: 0; | ||||
| 	right: 50%; | ||||
| 	margin-bottom: -35px; | ||||
| 	z-index: 8050; | ||||
| 	text-align: center; | ||||
| } | ||||
| 
 | ||||
| .fancybox-title-float-wrap .child { | ||||
| 	display: inline-block; | ||||
| 	margin-right: -100%; | ||||
| 	padding: 2px 20px; | ||||
| 	background: transparent; /* Fallback for web browsers that doesn't support RGBa */ | ||||
| 	background: rgba(0, 0, 0, 0.8); | ||||
| 	-webkit-border-radius: 15px; | ||||
| 	   -moz-border-radius: 15px; | ||||
| 	        border-radius: 15px; | ||||
| 	text-shadow: 0 1px 2px #222; | ||||
| 	color: #FFF; | ||||
| 	font-weight: bold; | ||||
| 	line-height: 24px; | ||||
| 	white-space: nowrap; | ||||
| } | ||||
| 
 | ||||
| .fancybox-title-outside-wrap { | ||||
| 	position: relative; | ||||
| 	margin-top: 10px; | ||||
| 	color: #fff; | ||||
| } | ||||
| 
 | ||||
| .fancybox-title-inside-wrap { | ||||
| 	padding-top: 10px; | ||||
| } | ||||
| 
 | ||||
| .fancybox-title-over-wrap { | ||||
| 	position: absolute; | ||||
| 	bottom: 0; | ||||
| 	left: 0; | ||||
| 	color: #fff; | ||||
| 	padding: 10px; | ||||
| 	background: #000; | ||||
| 	background: rgba(0, 0, 0, .8); | ||||
| } | ||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										8
									
								
								resources/jquery-cookie/jquery.cookies.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								resources/jquery-cookie/jquery.cookies.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | |||
| /*! | ||||
|  * jQuery Cookie Plugin v1.3.1 | ||||
|  * https://github.com/carhartl/jquery-cookie
 | ||||
|  * | ||||
|  * Copyright 2013 Klaus Hartl | ||||
|  * Released under the MIT license | ||||
|  */ | ||||
| (function(a,b,c){function e(a){return a}function f(a){return g(decodeURIComponent(a.replace(d," ")))}function g(a){return 0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\")),a}function h(a){return i.json?JSON.parse(a):a}var d=/\+/g,i=a.cookie=function(d,g,j){if(g!==c){if(j=a.extend({},i.defaults,j),null===g&&(j.expires=-1),"number"==typeof j.expires){var k=j.expires,l=j.expires=new Date;l.setDate(l.getDate()+k)}return g=i.json?JSON.stringify(g):g+"",b.cookie=[encodeURIComponent(d),"=",i.raw?g:encodeURIComponent(g),j.expires?"; expires="+j.expires.toUTCString():"",j.path?"; path="+j.path:"",j.domain?"; domain="+j.domain:"",j.secure?"; secure":""].join("")}for(var m=i.raw?e:f,n=b.cookie.split("; "),o=d?null:{},p=0,q=n.length;q>p;p++){var r=n[p].split("="),s=m(r.shift()),t=m(r.join("="));if(d&&d===s){o=h(t);break}d||(o[s]=h(t))}return o};i.defaults={},a.removeCookie=function(b,c){return null!==a.cookie(b)?(a.cookie(b,null,c),!0):!1}})(jQuery,document); | ||||
							
								
								
									
										249
									
								
								resources/lru/lru.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										249
									
								
								resources/lru/lru.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,249 @@ | |||
| /** | ||||
|  * A doubly linked list-based Least Recently Used (LRU) cache. Will keep most | ||||
|  * recently used items while discarding least recently used items when its limit | ||||
|  * is reached. | ||||
|  * | ||||
|  * Licensed under MIT. Copyright (c) 2010 Rasmus Andersson <http://hunch.se/>
 | ||||
|  * See README.md for details. | ||||
|  * | ||||
|  * Illustration of the design: | ||||
|  * | ||||
|  *       entry             entry             entry             entry | ||||
|  *       ______            ______            ______            ______ | ||||
|  *      | head |.newer => |      |.newer => |      |.newer => | tail | | ||||
|  *      |  A   |          |  B   |          |  C   |          |  D   | | ||||
|  *      |______| <= older.|______| <= older.|______| <= older.|______| | ||||
|  * | ||||
|  *  removed  <--  <--  <--  <--  <--  <--  <--  <--  <--  <--  <--  added | ||||
|  */ | ||||
| function LRUCache (limit) { | ||||
|   // Current size of the cache. (Read-only).
 | ||||
|   this.size = 0; | ||||
|   // Maximum number of items this cache can hold.
 | ||||
|   this.limit = limit; | ||||
|   this._keymap = {}; | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Put <value> into the cache associated with <key>. Returns the entry which was | ||||
|  * removed to make room for the new entry. Otherwise undefined is returned | ||||
|  * (i.e. if there was enough room already). | ||||
|  */ | ||||
| LRUCache.prototype.put = function(key, value) { | ||||
|   var entry = {key:key, value:value}; | ||||
|   // Note: No protection agains replacing, and thus orphan entries. By design.
 | ||||
|   this._keymap[key] = entry; | ||||
|   if (this.tail) { | ||||
|     // link previous tail to the new tail (entry)
 | ||||
|     this.tail.newer = entry; | ||||
|     entry.older = this.tail; | ||||
|   } else { | ||||
|     // we're first in -- yay
 | ||||
|     this.head = entry; | ||||
|   } | ||||
|   // add new entry to the end of the linked list -- it's now the freshest entry.
 | ||||
|   this.tail = entry; | ||||
|   if (this.size === this.limit) { | ||||
|     // we hit the limit -- remove the head
 | ||||
|     return this.shift(); | ||||
|   } else { | ||||
|     // increase the size counter
 | ||||
|     this.size++; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Purge the least recently used (oldest) entry from the cache. Returns the | ||||
|  * removed entry or undefined if the cache was empty. | ||||
|  * | ||||
|  * If you need to perform any form of finalization of purged items, this is a | ||||
|  * good place to do it. Simply override/replace this function: | ||||
|  * | ||||
|  *   var c = new LRUCache(123); | ||||
|  *   c.shift = function() { | ||||
|  *     var entry = LRUCache.prototype.shift.call(this); | ||||
|  *     doSomethingWith(entry); | ||||
|  *     return entry; | ||||
|  *   } | ||||
|  */ | ||||
| LRUCache.prototype.shift = function() { | ||||
|   // todo: handle special case when limit == 1
 | ||||
|   var entry = this.head; | ||||
|   if (entry) { | ||||
|     if (this.head.newer) { | ||||
|       this.head = this.head.newer; | ||||
|       this.head.older = undefined; | ||||
|     } else { | ||||
|       this.head = undefined; | ||||
|     } | ||||
|     // Remove last strong reference to <entry> and remove links from the purged
 | ||||
|     // entry being returned:
 | ||||
|     entry.newer = entry.older = undefined; | ||||
|     // delete is slow, but we need to do this to avoid uncontrollable growth:
 | ||||
|     delete this._keymap[entry.key]; | ||||
|   } | ||||
|   return entry; | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Get and register recent use of <key>. Returns the value associated with <key> | ||||
|  * or undefined if not in cache. | ||||
|  */ | ||||
| LRUCache.prototype.get = function(key, returnEntry) { | ||||
|   // First, find our cache entry
 | ||||
|   var entry = this._keymap[key]; | ||||
|   if (entry === undefined) return; // Not cached. Sorry.
 | ||||
|   // As <key> was found in the cache, register it as being requested recently
 | ||||
|   if (entry === this.tail) { | ||||
|     // Already the most recenlty used entry, so no need to update the list
 | ||||
|     return entry.value; | ||||
|   } | ||||
|   // HEAD--------------TAIL
 | ||||
|   //   <.older   .newer>
 | ||||
|   //  <--- add direction --
 | ||||
|   //   A  B  C  <D>  E
 | ||||
|   if (entry.newer) { | ||||
|     if (entry === this.head) | ||||
|       this.head = entry.newer; | ||||
|     entry.newer.older = entry.older; // C <-- E.
 | ||||
|   } | ||||
|   if (entry.older) | ||||
|     entry.older.newer = entry.newer; // C. --> E
 | ||||
|   entry.newer = undefined; // D --x
 | ||||
|   entry.older = this.tail; // D. --> E
 | ||||
|   if (this.tail) | ||||
|     this.tail.newer = entry; // E. <-- D
 | ||||
|   this.tail = entry; | ||||
|   return returnEntry ? entry : entry.value; | ||||
| } | ||||
| 
 | ||||
| // ----------------------------------------------------------------------------
 | ||||
| // Following code is optional and can be removed without breaking the core
 | ||||
| // functionality.
 | ||||
| 
 | ||||
| /** | ||||
|  * Check if <key> is in the cache without registering recent use. Feasible if | ||||
|  * you do not want to chage the state of the cache, but only "peek" at it. | ||||
|  * Returns the entry associated with <key> if found, or undefined if not found. | ||||
|  */ | ||||
| LRUCache.prototype.find = function(key) { | ||||
|   return this._keymap[key]; | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Update the value of entry with <key>. Returns the old value, or undefined if | ||||
|  * entry was not in the cache. | ||||
|  */ | ||||
| LRUCache.prototype.set = function(key, value) { | ||||
|   var oldvalue, entry = this.get(key, true); | ||||
|   if (entry) { | ||||
|     oldvalue = entry.value; | ||||
|     entry.value = value; | ||||
|   } else { | ||||
|     oldvalue = this.put(key, value); | ||||
|     if (oldvalue) oldvalue = oldvalue.value; | ||||
|   } | ||||
|   return oldvalue; | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Remove entry <key> from cache and return its value. Returns undefined if not | ||||
|  * found. | ||||
|  */ | ||||
| LRUCache.prototype.remove = function(key) { | ||||
|   var entry = this._keymap[key]; | ||||
|   if (!entry) return; | ||||
|   delete this._keymap[entry.key]; // need to do delete unfortunately
 | ||||
|   if (entry.newer && entry.older) { | ||||
|     // relink the older entry with the newer entry
 | ||||
|     entry.older.newer = entry.newer; | ||||
|     entry.newer.older = entry.older; | ||||
|   } else if (entry.newer) { | ||||
|     // remove the link to us
 | ||||
|     entry.newer.older = undefined; | ||||
|     // link the newer entry to head
 | ||||
|     this.head = entry.newer; | ||||
|   } else if (entry.older) { | ||||
|     // remove the link to us
 | ||||
|     entry.older.newer = undefined; | ||||
|     // link the newer entry to head
 | ||||
|     this.tail = entry.older; | ||||
|   } else {// if(entry.older === undefined && entry.newer === undefined) {
 | ||||
|     this.head = this.tail = undefined; | ||||
|   } | ||||
| 
 | ||||
|   this.size--; | ||||
|   return entry.value; | ||||
| } | ||||
| 
 | ||||
| /** Removes all entries */ | ||||
| LRUCache.prototype.removeAll = function() { | ||||
|   // This should be safe, as we never expose strong refrences to the outside
 | ||||
|   this.head = this.tail = undefined; | ||||
|   this.size = 0; | ||||
|   this._keymap = {}; | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Return an array containing all keys of entries stored in the cache object, in | ||||
|  * arbitrary order. | ||||
|  */ | ||||
| if (typeof Object.keys === 'function') { | ||||
|   LRUCache.prototype.keys = function() { return Object.keys(this._keymap); } | ||||
| } else { | ||||
|   LRUCache.prototype.keys = function() { | ||||
|     var keys = []; | ||||
|     for (var k in this._keymap) keys.push(k); | ||||
|     return keys; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Call `fun` for each entry. Starting with the newest entry if `desc` is a true | ||||
|  * value, otherwise starts with the oldest (head) enrty and moves towards the | ||||
|  * tail. | ||||
|  * | ||||
|  * `fun` is called with 3 arguments in the context `context`: | ||||
|  *   `fun.call(context, Object key, Object value, LRUCache self)` | ||||
|  */ | ||||
| LRUCache.prototype.forEach = function(fun, context, desc) { | ||||
|   if (context === true) { desc = true; context = undefined; } | ||||
|   else if (typeof context !== 'object') context = this; | ||||
|   if (desc) { | ||||
|     var entry = this.tail; | ||||
|     while (entry) { | ||||
|       fun.call(context, entry.key, entry.value, this); | ||||
|       entry = entry.older; | ||||
|     } | ||||
|   } else { | ||||
|     var entry = this.head; | ||||
|     while (entry) { | ||||
|       fun.call(context, entry.key, entry.value, this); | ||||
|       entry = entry.newer; | ||||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| /** Returns a JSON (array) representation */ | ||||
| LRUCache.prototype.toJSON = function() { | ||||
|   var s = [], entry = this.head; | ||||
|   while (entry) { | ||||
|     s.push({key:entry.key.toJSON(), value:entry.value.toJSON()}); | ||||
|     entry = entry.newer; | ||||
|   } | ||||
|   return s; | ||||
| } | ||||
| 
 | ||||
| /** Returns a String representation */ | ||||
| LRUCache.prototype.toString = function() { | ||||
|   var s = '', entry = this.head; | ||||
|   while (entry) { | ||||
|     s += String(entry.key)+':'+entry.value; | ||||
|     if (entry = entry.newer) | ||||
|       s += ' < '; | ||||
|   } | ||||
|   return s; | ||||
| } | ||||
| 
 | ||||
| // Export ourselves
 | ||||
| if (typeof this === 'object') this.LRUCache = LRUCache; | ||||
|  | @ -46,6 +46,16 @@ a:hover { color:#000; text-decoration: none; } | |||
| .books:hover { width: 100%; background-color: #778899; } | ||||
| .link a:hover { display:inline-block; width: 100%; background-color: #778899;  /*Dirty IE Hack*/  zoom: 1;  *display: inline;} | ||||
| 
 | ||||
| .mfp-content .bookpopup { | ||||
|   position: relative; | ||||
|   background: #FFF; | ||||
|   padding: 20px; | ||||
|   width: auto; | ||||
|   max-width: 700px; | ||||
|   margin: 20px auto; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| img | ||||
| { | ||||
| margin:0; | ||||
|  | @ -156,8 +166,12 @@ max-width:800px; | |||
|     text-decoration : none; | ||||
|     font-weight: bold; | ||||
|     padding: 5px 10px 5px 10px; | ||||
|     text-align: center; | ||||
| } | ||||
| 
 | ||||
| .download img { | ||||
|     vertical-align:middle; | ||||
| } | ||||
| 
 | ||||
| .books h4{ | ||||
|     display: inline; | ||||
|  |  | |||
							
								
								
									
										53
									
								
								templates/default/bookdetail.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								templates/default/bookdetail.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,53 @@ | |||
| <article class="bookpopup"> | ||||
|     <span class="cover"> | ||||
|         {{? it.book.hasCover == 1}} | ||||
|         <a href="{{=it.book.coverurl}}"> | ||||
|           <img src="{{=it.book.thumbnailurl}}" alt="{{=it.const.i18n.coverAlt}}" /> | ||||
|         </a> | ||||
|         {{?}} | ||||
|     </span> | ||||
|     <h2 class="download"> | ||||
|         {{~it.book.datas:data:i}} | ||||
|         <a href="{{=data.url}}">{{=data.format}}</a> | ||||
|         {{? data.mail == 1}} | ||||
|         <a href="customize.php" onclick="sendToMailAddress (this, {{=data.id}}); return false;"><img src="images/mail-send.png?v={{=it.const.version}}" alt="Mail" /></a> | ||||
|         {{?}} | ||||
|         <br /> | ||||
|         {{~}} | ||||
|     </h2> | ||||
|     <h1><a rel="bookmark" href="{{=strformat (it.const.url.detailUrl, it.book.id, it.databaseId)}}"><img src="images/Link.png?v={{=it.const.version}}" alt="{{=it.const.i18n.permalinkAlt}}" /></a>{{=htmlEscape (it.title)}}</h1> | ||||
|     <p class="popupless"> | ||||
|         <h3>{{=it.const.i18n.authorsTitle}}: </h3> | ||||
|         {{~it.book.authors:author:j}} | ||||
|         {{? j > 0}}, {{?}}<a href="{{=author.url}}">{{=htmlEscape (author.name)}}</a> | ||||
|         {{~}} | ||||
|     </p> | ||||
|     {{? it.book.tagsName != ""}} | ||||
|     <p class="popupless"> | ||||
|         <h3>{{=it.const.i18n.tagsTitle}}: </h3> | ||||
|         {{~it.book.tags:tag:k}} | ||||
|         {{? k > 0}}, {{?}}<a href="{{=tag.url}}">{{=htmlEscape (tag.name)}}</a> | ||||
|         {{~}} | ||||
|     </p> | ||||
|     {{?}} | ||||
|     {{? it.book.seriesName != ""}} | ||||
|     <p class="popupless"> | ||||
|         <h3><a href="{{=it.book.seriesurl}}">{{=it.const.i18n.seriesTitle}}</a> : </h3>{{=htmlEscape (it.book.seriesCompleteName)}} | ||||
|     </p> | ||||
|     {{?}} | ||||
|     {{? it.book.pubDate != ""}} | ||||
|     <p class="popupless"> | ||||
|         <h3>{{=it.const.i18n.pubdateTitle}}: </h3>{{=it.book.pubDate}} | ||||
|     </p> | ||||
|     {{?}} | ||||
|     {{? it.book.languagesName != ""}} | ||||
|     <p class="popupless"> | ||||
|         <h3>{{=it.const.i18n.languagesTitle}}: </h3>{{=it.book.languagesName}} | ||||
|     </p> | ||||
|     {{?}} | ||||
|     {{? it.book.content != ""}} | ||||
|     <br /> | ||||
|     <h4>{{=it.const.i18n.contentTitle}}</h4> | ||||
|     <div>{{=it.book.content}}</div> | ||||
|     {{?}} | ||||
| </article> | ||||
							
								
								
									
										15
									
								
								templates/default/footer.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								templates/default/footer.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| <footer> | ||||
|     <div class="footleft"> | ||||
|         <a href="customize.php"><img src="images/theme.png?v={{=it.const.version}}" alt="{{=it.const.i18n.customizeTitle}}" /></a> | ||||
|     </div> | ||||
|     <div class="footright"> | ||||
|         <a class="fancyabout" href="{{=it.abouturl}}"><img src="images/info.png?v={{=it.const.version}}" alt="{{=it.const.i18n.aboutTitle}}" /></a> | ||||
|     </div> | ||||
|     {{? it.isPaginated == 1}} | ||||
|     <div class="footcenter"> | ||||
|         {{? it.prevLink != ""}}<a id="prevLink" href="{{=it.prevLink}}" ><img src="images/previous.png?v={{=it.const.version}}" alt="{{=it.const.i18n.previousAlt}}" /></a>{{?}} | ||||
|         <p> {{=it.currentPage}} / {{=it.maxPage}} </p> | ||||
|         {{? it.nextLink != ""}}<a id="nextLink" href="{{=it.nextLink}}" ><img src="images/next.png?v={{=it.const.version}}" alt="{{=it.const.i18n.nextAlt}}" /></a>{{?}} | ||||
|     </div> | ||||
|     {{?}} | ||||
| </footer> | ||||
							
								
								
									
										43
									
								
								templates/default/header.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								templates/default/header.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,43 @@ | |||
| <header> | ||||
|     <a class="headleft" href="{{=it.homeurl}}"> | ||||
|             <img src="images/home.png?v={{=it.const.version}}" alt="{{=it.const.i18n.homeAlt}}" /> | ||||
|     </a> | ||||
|     <img class="headright" id="searchImage" src="images/setting64.png?v={{=it.const.version}}" alt="Settings and menu" /> | ||||
|     <div class="headcenter"> | ||||
|         <h1>{{=it.title}}</h1> | ||||
|     </div> | ||||
|     <div id="tool" style="display: none"> | ||||
|         <div style="float: left; width: 60%"> | ||||
|             <form id="searchForm" action="index.php" method="get"> | ||||
|                 <div style="float: right"> | ||||
|                     <input type="image" src="images/search32.png?v={{=it.const.version}}" alt="{{=it.const.i18n.searchAlt}}" /> | ||||
|                 </div> | ||||
|                 <div class="stop"> | ||||
|                     <input type="hidden" name="current" value="{{=it.page}}" /> | ||||
|                     <input type="hidden" name="page" value="9" /> | ||||
|                     {{? it.databaseId != ""}} | ||||
|                         <input type="hidden" name="db" value="{{=it.databaseId}}" /> | ||||
|                     {{?}} | ||||
|                     <input type="search" name="query" /> | ||||
|                 </div> | ||||
|             </form> | ||||
|         </div> | ||||
|         <div id="sortForm" style="float: right; width: 35%; display: none"> | ||||
|             <div style="float: right"> | ||||
|                 <img id="sort" src="images/sort32.png?v={{=it.const.version}}" alt="{{=it.const.i18n.sortAlt}}" /> | ||||
|             </div> | ||||
|             <div class="stop"> | ||||
|                 <select id="sortchoice"> | ||||
|                     <option value="st">{{=it.const.i18n.bookwordTitle}}</option> | ||||
|                     <option value="sa">{{=it.const.i18n.authorsTitle}}</option> | ||||
|                     <option value="ss">{{=it.const.i18n.seriesTitle}}</option> | ||||
|                     <option value="sp">{{=it.const.i18n.pubdateTitle}}</option> | ||||
|                 </select> | ||||
|                 <select id="sortorder"> | ||||
|                     <option value="asc">{{=it.const.i18n.sortorderAsc}}</option> | ||||
|                     <option value="desc">{{=it.const.i18n.sortorderDesc}}</option> | ||||
|                 </select>  | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
| </header> | ||||
							
								
								
									
										43
									
								
								templates/default/main.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								templates/default/main.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,43 @@ | |||
| <section> | ||||
| {{? it.page == 13}} | ||||
|     {{#def.bookdetail}} | ||||
| {{??}} | ||||
| {{~it.entries:entry:i}} | ||||
|     {{? it.containsBook == 0}} | ||||
|     <article> | ||||
|         <div class="frontpage"> | ||||
|             <a href="{{=entry.navlink}}"> | ||||
|                 <h2>{{=htmlEscape (entry.title)}}</h2> | ||||
|                 <h4>{{=entry.content}}</h4>  | ||||
|             </a> | ||||
|         </div> | ||||
|     </article> | ||||
|     {{??}} | ||||
|     <article class="books"> | ||||
|             <span class="cover"> | ||||
|             {{? entry.book.hasCover == 1}} | ||||
|                 <a data-fancybox-group="group" class="fancycover" href="{{=strformat (it.const.url.coverUrl, entry.book.id, it.databaseId)}}"> | ||||
|                     <img src="{{=strformat (it.const.url.thumbnailUrl, entry.book.id, it.databaseId)}}" alt="{{=it.const.i18n.coverAlt}}" /> | ||||
|                 </a> | ||||
|             {{?}} | ||||
|             </span> | ||||
|             <h2 class="download"> | ||||
|                 {{~entry.book.preferedData:data:j}} | ||||
|                  <a href="{{=data.url}}">{{=data.name}}</a><br /> | ||||
|                 {{~}} | ||||
|             </h2> | ||||
|             <a class="fancydetail" href="{{=strformat (it.const.url.detailUrl, entry.book.id, it.databaseId)}}"> | ||||
|             <div class="fullclickpopup"> | ||||
|                 <h2><span class="st">{{=htmlEscape (entry.title)}}</span> | ||||
|                 {{? entry.book.pubDate != ""}}<span class="sp">({{=entry.book.pubDate}})</span>{{?}} | ||||
|                 {{? entry.book.rating != ""}}<span class="sr">{{=entry.book.rating}}</span>{{?}} | ||||
|                 </h2> | ||||
|                 <h4>{{=it.const.i18n.authorsTitle}} : </h4><span class="sa">{{=htmlEscape (entry.book.authorsName)}}</span><br /> | ||||
|                 {{? entry.book.tagsName != ""}}<h4>{{=it.const.i18n.tagsTitle}} : </h4>{{=htmlEscape (entry.book.tagsName)}}<br />{{?}} | ||||
|                 {{? entry.book.seriesName != ""}}<h4>{{=it.const.i18n.seriesTitle}} : </h4><span class="ss">{{=htmlEscape (entry.book.seriesName)}}</span><br />{{?}} | ||||
|             </div></a> | ||||
|         </article> | ||||
|     {{?}} | ||||
| {{~}} | ||||
| {{?}} | ||||
| </section> | ||||
							
								
								
									
										5
									
								
								templates/default/page.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								templates/default/page.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,5 @@ | |||
| <div class="container">     | ||||
| {{#def.header}} | ||||
| {{#def.main}} | ||||
| {{#def.footer}} | ||||
| </div> | ||||
							
								
								
									
										201
									
								
								util.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										201
									
								
								util.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,201 @@ | |||
| var templatePage, templateBookDetail, templateMain, currentData, before; | ||||
| 
 | ||||
| var cache = new LRUCache(30); | ||||
| 
 | ||||
| var DEBUG = true; | ||||
| var isEink = /Kobo|Kindle|EBRD1101/i.test(navigator.userAgent); | ||||
| var isPushStateEnabled = window.history && window.history.pushState && window.history.replaceState && | ||||
|   // pushState isn't reliable on iOS until 5.
 | ||||
|   !navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]|WebApps\/.+CFNetwork)/); | ||||
| 
 | ||||
| function debug_log(text) { | ||||
|     if ( DEBUG ) { | ||||
|         console.log(text); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| function elapsed () { | ||||
|     var elapsed = new Date () - before;  | ||||
|     return "Elapsed : " + elapsed; | ||||
| } | ||||
| 
 | ||||
| function retourMail(data, textStatus, jqXHR ) { | ||||
|     alert (data); | ||||
| } | ||||
| 
 | ||||
| function sendToMailAddress (component, dataid) { | ||||
|     $toto = $.cookie ('email'); | ||||
|     if (!$.cookie ('email')) { | ||||
|         var email = window.prompt ("Please enter your email : ", ""); | ||||
|         $.cookie ('email', email); | ||||
|     } | ||||
|     email = $.cookie ('email'); | ||||
|     var url = 'sendtomail.php'; | ||||
|     if (currentData.databaseId) url = url + '?db=' + currentData.databaseId; | ||||
|     $.ajax ({url: url, type: 'post', data: { data:  dataid, email: email }, success: retourMail}); | ||||
| } | ||||
| 
 | ||||
| function strformat () { | ||||
|     var s = arguments[0]; | ||||
|     for (var i = 0; i < arguments.length - 1; i++) { | ||||
|         var reg = new RegExp("\\{" + i + "\\}", "gm"); | ||||
|         s = s.replace(reg, arguments[i + 1]); | ||||
|     } | ||||
|     return s; | ||||
| } | ||||
| 
 | ||||
| function isDefined(x) { | ||||
|     var undefined; | ||||
|     return x !== undefined; | ||||
| } | ||||
| 
 | ||||
| function getCurrentOption (option) { | ||||
|     if (!$.cookie (option)) { | ||||
|         if (currentData && currentData.const && currentData.const.config && currentData.const.config [option]) { | ||||
|             return currentData.const.config [option]; | ||||
|         } | ||||
|     } | ||||
|     return $.cookie (option); | ||||
| } | ||||
| 
 | ||||
| function htmlEscape(str) { | ||||
|     return String(str) | ||||
|             .replace(/&/g, '&') | ||||
|             .replace(/"/g, '"') | ||||
|             .replace(/'/g, ''') | ||||
|             .replace(/</g, '<') | ||||
|             .replace(/>/g, '>'); | ||||
| } | ||||
| 
 | ||||
| function navigateTo (url) { | ||||
|     before = new Date (); | ||||
|     var jsonurl = url.replace ("index", "getJSON"); | ||||
|     var cachedData = cache.get (jsonurl); | ||||
|     if (cachedData) { | ||||
|         history.pushState(jsonurl, "", url); | ||||
|         updatePage (cachedData); | ||||
|     } else { | ||||
|         $.getJSON(jsonurl, function(data) { | ||||
|             history.pushState(jsonurl, "", url); | ||||
|             cache.put (jsonurl, data); | ||||
|             updatePage (data); | ||||
|         }); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| function updatePage (data) { | ||||
|     var result; | ||||
|     data ["const"] = currentData ["const"]; | ||||
|     if (false && $("section").length && currentData.isPaginated == 0 &&  data.isPaginated == 0) { | ||||
|         // Partial update (for now disabled)
 | ||||
|         debug_log ("Partial update"); | ||||
|         result = templateMain (data); | ||||
|         $("h1").html (data.title); | ||||
|         $("section").html (result); | ||||
|     } else { | ||||
|         // Full update
 | ||||
|         result = templatePage (data); | ||||
|         $("body").html (result); | ||||
|     } | ||||
|     document.title = data.title; | ||||
|     currentData = data; | ||||
|      | ||||
|     debug_log (elapsed ()); | ||||
|      | ||||
|     if ($.cookie('toolbar') == 1) $("#tool").show (); | ||||
|     if (currentData.containsBook == 1) { | ||||
|         $("#sortForm").show (); | ||||
|     } else { | ||||
|         $("#sortForm").hide (); | ||||
|     } | ||||
|      | ||||
|     ajaxifyLinks (); | ||||
|      | ||||
|     $("#sort").click(function(){ | ||||
|         $('.books').sortElements(function(a, b){ | ||||
|             var test = 1; | ||||
|             if ($("#sortorder").val() == "desc") | ||||
|             { | ||||
|                 test = -1; | ||||
|             } | ||||
|             return $(a).find ("." + $("#sortchoice").val()).text() > $(b).find ("." + $("#sortchoice").val()).text() ? test : -test; | ||||
|         }); | ||||
|     }); | ||||
|      | ||||
|     $(".headright").click(function(){ | ||||
|         if ($("#tool").is(":hidden")) { | ||||
|             $("#tool").slideDown("slow"); | ||||
|             $.cookie('toolbar', '1'); | ||||
|         } else { | ||||
|             $("#tool").slideUp(); | ||||
|             $.removeCookie('toolbar'); | ||||
|         } | ||||
|     }); | ||||
|      | ||||
|     if (getCurrentOption ("use_fancyapps") == 1) { | ||||
|         $(".fancydetail").click(function(event){ | ||||
|             event.preventDefault();  | ||||
|             before = new Date (); | ||||
|             var url = $(this).attr("href"); | ||||
|             var jsonurl = url.replace ("index", "getJSON"); | ||||
|             $.getJSON(jsonurl, function(data) { | ||||
|                 data ["const"] = currentData ["const"]; | ||||
|                 var detail = templateBookDetail (data); | ||||
|                 $.magnificPopup.open({ | ||||
|                   items: { | ||||
|                     src: detail, | ||||
|                     type: 'inline' | ||||
|                   } | ||||
|                 }); | ||||
|                 debug_log (elapsed ()); | ||||
|             }); | ||||
|         }); | ||||
|          | ||||
| 
 | ||||
|         $('section').magnificPopup({ | ||||
|             delegate: '.fancycover', // child items selector, by clicking on it popup will open
 | ||||
|             type: 'image', | ||||
|             gallery:{enabled:true, preload: [0,2]} | ||||
|             // other options
 | ||||
|         }); | ||||
| 
 | ||||
|              | ||||
| 
 | ||||
|         $('.fancyabout').magnificPopup({ type: 'ajax' }); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| function ajaxifyLinks () { | ||||
|     if (isPushStateEnabled) { | ||||
|         var links = $("a[href^='index']"); | ||||
|         if (getCurrentOption ("use_fancyapps") == 1) links = links.not (".fancydetail"); | ||||
|         links.click (function (event) { | ||||
|             event.preventDefault();  | ||||
| 
 | ||||
|             var url = $(this).attr('href'); | ||||
|             navigateTo (url); | ||||
|         }); | ||||
|          | ||||
|         $("#searchForm").submit (function (event) { | ||||
|             event.preventDefault();  | ||||
|              | ||||
|             var url = strformat ("index.php?page=9¤t={0}&query={1}&db={2}", currentData.page, $("input[name=query]").val (), currentData.databaseId); | ||||
|             navigateTo (url); | ||||
|         }); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| window.onpopstate = function(event) { | ||||
|     before = new Date (); | ||||
|     var data = cache.get (event.state) | ||||
|     updatePage (data); | ||||
| }; | ||||
| 
 | ||||
| $(document).keydown(function(e){ | ||||
|     if (e.keyCode == 37 && $("#prevLink").length > 0) { | ||||
|         navigateTo ($("#prevLink").attr('href')); | ||||
|     } | ||||
|     if (e.keyCode == 39  && $("#nextLink").length > 0) { | ||||
|         navigateTo ($("#nextLink").attr('href')); | ||||
|     } | ||||
| }); | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue