diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..351be020 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.idea/ +.DS_Store +node_modules/ +.vscode/ +*.map \ No newline at end of file diff --git a/Classes/Helpers/CoreVersionCondition.php b/Classes/Helpers/CoreVersionCondition.php new file mode 100644 index 00000000..d9882467 --- /dev/null +++ b/Classes/Helpers/CoreVersionCondition.php @@ -0,0 +1,105 @@ +| + * [global] + * + */ +class CoreVersionCondition extends AbstractCondition +{ + /** + * Evaluate condition + * + * @param array $conditionParameters + * @return bool + */ + public function matchCondition(array $conditionParameters) + { + if (empty($conditionParameters)) { + return false; + } + + $coreVersion = VersionNumberUtility::getNumericTypo3Version(); + $coreVersionInteger = VersionNumberUtility::convertVersionNumberToInteger($coreVersion); + foreach ($conditionParameters as $expression) { + if (\TYPO3\CMS\Core\Utility\MathUtility::canBeInterpretedAsInteger($expression)) { + $expression = '=' . $expression; + } + if ($this->compareNumber($expression, $coreVersionInteger)) { + return true; + } + } + + return false; + } + + /** + * Evaluates a $leftValue based on an operator: "<", ">", "<=", ">=", "!=" or "=" + * + * @param string $test The value to compare with on the form [operator][number]. Eg. "< 123 + * @param float $leftValue The value on the left side + * @return bool If $value is "50" and $test is "< 123" then it will return TRUE. + */ + protected function compareNumber($test, $leftValue) + { + if (preg_match('/^(!?=+|<=?|>=?)\\s*([^\\s]*)\\s*$/', $test, $matches)) { + $operator = $matches[1]; + $rightValue = $matches[2]; + switch ($operator) { + case '>=': + return $leftValue >= VersionNumberUtility::convertVersionNumberToInteger($rightValue); + case '<=': + return $leftValue <= VersionNumberUtility::convertVersionNumberToInteger($rightValue); + case '!=': + // multiple values may be split with '|' + // see if none matches ("not in list") + $found = false; + $rightValueParts = GeneralUtility::trimExplode('|', $rightValue); + foreach ($rightValueParts as $rightValueSingle) { + if ($leftValue == VersionNumberUtility::convertVersionNumberToInteger($rightValueSingle)) { + $found = true; + break; + } + } + return $found === false; + case '<': + return $leftValue < VersionNumberUtility::convertVersionNumberToInteger($rightValue); + case '>': + return $leftValue > VersionNumberUtility::convertVersionNumberToInteger($rightValue); + default: + // nothing valid found except '=', use '=' + // multiple values may be split with '|' + // see if one matches ("in list") + $found = false; + $rightValueParts = GeneralUtility::trimExplode('|', $rightValue); + foreach ($rightValueParts as $rightValueSingle) { + if ($leftValue == VersionNumberUtility::convertVersionNumberToInteger($rightValueSingle)) { + $found = true; + break; + } + } + return $found; + } + } + return false; + } +} diff --git a/Classes/Helpers/GetDoc.php b/Classes/Helpers/GetDoc.php new file mode 100644 index 00000000..cea879a9 --- /dev/null +++ b/Classes/Helpers/GetDoc.php @@ -0,0 +1,202 @@ + + * All rights reserved + * + * This script is part of the TYPO3 project. The TYPO3 project is + * free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * The GNU General Public License can be found at + * http://www.gnu.org/copyleft/gpl.html. + * + * This script is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * This copyright notice MUST APPEAR in all copies of the script! + ***************************************************************/ +use TYPO3\CMS\Core\Utility\GeneralUtility; + +if (!defined('TYPO3_DLOG')) { + define('TYPO3_DLOG', 0); +} + +class GetDoc +{ + /** + * This holds the current document + * + * @var tx_dlf_document + * @access protected + */ + protected $doc; + + /** + * Get page's download link + * + * @access public + * + * @param integer $pagenumber:The current page numbert + * + * @return string: The left and right download url + */ + public function getPageLink($pagenumber) + { + + if (!$this->init()) { + return ''; + } + + $details = $this->doc->physicalStructureInfo[$this->doc->physicalStructure[$pagenumber]]; + $file = $details['files']['DOWNLOAD']; + + if (!empty($file)) { + + $pageLink = $this->doc->getFileLocation($file); + + } + + return $pageLink; + } + + /** + * Get work's download link + * + * @access public + * + * @return string: The left and right download url + */ + public function getWorkLink() + { + + if (!$this->init()) { + return ''; + } + + // Get work link. + if (!empty($this->doc->physicalStructureInfo[$this->doc->physicalStructure[0]]['files']['DOWNLOAD'])) { + + $workLink = $this->doc->getFileLocation($this->doc->physicalStructureInfo[$this->doc->physicalStructure[0]]['files']['DOWNLOAD']); + + } else { + + $details = $this->doc->getLogicalStructure($this->doc->toplevelId); + + if (!empty($details['files']['DOWNLOAD'])) { + + $workLink = $this->doc->getFileLocation($details['files']['DOWNLOAD']); + + } + + } + + return $workLink; + } + + /** + * get xpath result + * + * @access public + * + * @param string $content: The PlugIn content + * + * @return string The content that is displayed on the website + */ + public function getXpath($xpath) + { + if (!$this->init()) { + return ''; + } + return $this->doc->mets->xpath($xpath); + } + + /** + * Initialize and load the document + * + * @access protected + * + * @return boolean + */ + protected function init() + { + // Load current document. + $this->loadDocument(); + + if ($this->doc === null) { + + // Quit without doing anything if required variables are not set. + return null; + + } + + $this->doc->mets->registerXPathNamespace('mets', 'http://www.loc.gov/METS/'); + $this->doc->mets->registerXPathNamespace('mods', 'http://www.loc.gov/mods/v3'); + $this->doc->mets->registerXPathNamespace('dv', 'http://dfg-viewer.de/'); + $this->doc->mets->registerXPathNamespace('slub', 'http://slub-dresden.de/'); + + return true; + } + + /** + * Loads the current document into $this->doc + * + * @access protected + * + * @return void + */ + protected function loadDocument() + { + $piVarsSet = GeneralUtility::_GPmerged('set'); + + $piVars = GeneralUtility::_GPmerged('tx_dlf'); + + // overwrite tx_dlf[] parameters by (old) set[] ones + if (!empty($piVarsSet['mets'])) { + $piVars['id'] = $piVarsSet['mets']; + } + if (!empty($piVarsSet['double'])) { + $piVars['double'] = $piVarsSet['double']; + } + if (!empty($piVarsSet['image'])) { + $piVars['page'] = $piVarsSet['image']; + } + + // Check for required variable. + if (!empty($piVars['id'])) { + + // Get instance of tx_dlf_document. + if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getNumericTypo3Version(), '8.7.0', '>=')) { + $this->doc =& \Kitodo\Dlf\Common\Document::getInstance($piVars['id'], 0); + } else { + $this->doc =& \tx_dlf_document::getInstance($piVars['id'], 0); + } + + + if (!$this->doc->ready) { + + // Destroy the incomplete object. + $this->doc = null; + + if (TYPO3_DLOG) { + \TYPO3\CMS\Core\Utility\GeneralUtility::devLog('[tx_dlf_plugin->loadDocument()] Failed to load document with UID "'.$piVars['id'].'"', $this->extKey, SYSLOG_SEVERITY_ERROR); + } + } else { + + // Set configuration PID. + $this->doc->cPid = $this->conf['pages']; + } + } else { + if (TYPO3_DLOG) { + \TYPO3\CMS\Core\Utility\GeneralUtility::devLog('[tx_dlf_plugin->loadDocument()] Failed to load document with record ID "'.$this->piVars['recordId'].'"', $this->extKey, SYSLOG_SEVERITY_ERROR); + } + } + } +} diff --git a/Classes/ViewHelpers/CalcViewHelper.php b/Classes/ViewHelpers/CalcViewHelper.php new file mode 100644 index 00000000..4012b5a5 --- /dev/null +++ b/Classes/ViewHelpers/CalcViewHelper.php @@ -0,0 +1,86 @@ + + * All rights reserved + * + * This script is part of the TYPO3 project. The TYPO3 project is + * free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * The GNU General Public License can be found at + * http://www.gnu.org/copyleft/gpl.html. + * + * This script is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * This copyright notice MUST APPEAR in all copies of the script! + ***************************************************************/ +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Fluid\Core\Rendering\RenderingContextInterface; +use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic; + +/** + * ViewHelper to calculate two integers + * + * # Example: Basic example + * + * + * 1 + * + * + * Will output the value of tx_dlf[page] + * + * + * @package TYPO3 + */ +class CalcViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper +{ + use CompileWithRenderStatic; + + /** + * Initialize arguments. + */ + public function initializeArguments() + { + parent::initializeArguments(); + $this->registerArgument('val1', 'integer', 'first value', true); + $this->registerArgument('val2', 'integer', 'second value', true); + $this->registerArgument('operator', 'string', 'operator', false, '+'); + } + + /** + * @param array $arguments + * @param \Closure $renderChildrenClosure + * @param RenderingContextInterface $renderingContext + */ + public static function renderStatic( + array $arguments, + \Closure $renderChildrenClosure, + RenderingContextInterface $renderingContext + ) { + $val1 = $arguments['val1']; + $val2 = $arguments['val2']; + $operator = $arguments['operator']; + + switch ($operator) { + case '+': $result = (int)$val1 + (int)$val2; + break; + case '-': $result = (int)$val1 - (int)$val2; + break; + case '*': $result = (int)$val1 * (int)$val2; + break; + case '/': $result = (int)((int)$val1 / (int)$val2); + break; + } + + return $result; + } +} diff --git a/Classes/ViewHelpers/CollectionsViewHelper.php b/Classes/ViewHelpers/CollectionsViewHelper.php new file mode 100644 index 00000000..9f9d7c2f --- /dev/null +++ b/Classes/ViewHelpers/CollectionsViewHelper.php @@ -0,0 +1,86 @@ + + * All rights reserved + * + * This script is part of the TYPO3 project. The TYPO3 project is + * free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * The GNU General Public License can be found at + * http://www.gnu.org/copyleft/gpl.html. + * + * This script is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * This copyright notice MUST APPEAR in all copies of the script! + ***************************************************************/ +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Fluid\Core\Rendering\RenderingContextInterface; +use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic; + +/** + * ViewHelper to get kitodo collections froms olr + * + * @package TYPO3 + */ +class CollectionsViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper +{ + use CompileWithRenderStatic; + + /** + * Initialize arguments. + */ + public function initializeArguments() + { + parent::initializeArguments(); + $this->registerArgument('kitodoId', 'integer', 'Id of Kitodo document', true); + $this->registerArgument('solrHost', 'string', 'Id of Kitodo document', false, "http://sdvsolr2.slub-dresden.de:8983/solr/dlfCore0/"); + $this->registerArgument('solrTimeout', 'integer', 'Id of Kitodo document', false, 5); + } + + /** + * @param array $arguments + * @param \Closure $renderChildrenClosure + * @param RenderingContextInterface $renderingContext + */ + public static function renderStatic( + array $arguments, + \Closure $renderChildrenClosure, + RenderingContextInterface $renderingContext + ) { + $kitodoId = $arguments['kitodoId']; + $solrHost = rtrim($arguments['solrHost'], "/"); + $solrTimeout = $arguments['solrTimeout']; + if (\TYPO3\CMS\Core\Utility\MathUtility::canBeInterpretedAsInteger($kitodoId)) { + // calculate cache identifier + $cacheIdentifier = $kitodoId; + $cache = GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Cache\\CacheManager')->getCache('slub_digitalcollections_collections'); + + if (($entry = $cache->get($cacheIdentifier)) === FALSE) { + $context = stream_context_create(array( + 'http' => array( + 'timeout' => $solrTimeout + ) + ) + ); + $apiAnswer = file_get_contents( $solrHost . '/select?q=uid:' . $kitodoId . '%20AND%20toplevel:true&rows=1&wt=json', false, $context); + $entry = json_decode($apiAnswer); + // Save value in cache + if ($entry) { + $cache->set($cacheIdentifier, $entry); + } + } + } else { + return FALSE; + } + return $entry; + } +} diff --git a/Classes/ViewHelpers/DownloadLinksViewHelper.php b/Classes/ViewHelpers/DownloadLinksViewHelper.php new file mode 100644 index 00000000..e0fe7eb7 --- /dev/null +++ b/Classes/ViewHelpers/DownloadLinksViewHelper.php @@ -0,0 +1,88 @@ + + * All rights reserved + * + * This script is part of the TYPO3 project. The TYPO3 project is + * free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * The GNU General Public License can be found at + * http://www.gnu.org/copyleft/gpl.html. + * + * This script is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * This copyright notice MUST APPEAR in all copies of the script! + ***************************************************************/ +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Fluid\Core\Rendering\RenderingContextInterface; +use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic; + +/** + * ViewHelper to get page info + * + * # Example: Basic example + * + * + * 123 + * + * + * Will output the page record + * + * + * @package TYPO3 + */ +class DownloadLinksViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper +{ + use CompileWithRenderStatic; + + /** + * Initialize arguments. + */ + public function initializeArguments() + { + parent::initializeArguments(); + $this->registerArgument('type', 'string', 'type of download ("page-left", "page-right" or "work")', false, 'page-left'); + $this->registerArgument('pagenumber', 'integer', 'current page number', false, 1); + } + + /** + * @param array $arguments + * @param \Closure $renderChildrenClosure + * @param RenderingContextInterface $renderingContext + */ + public static function renderStatic( + array $arguments, + \Closure $renderChildrenClosure, + RenderingContextInterface $renderingContext + ) { + $type = $arguments['type']; + $pagenumber = $arguments['pagenumber']; + + $doc = GeneralUtility::makeInstance(\Slub\DigitalCollections\Helpers\GetDoc::class); + + switch ($type) { + case 'page-right': + $result = $doc->getPageLink((int)$pagenumber + 1); + break; + case 'work': + $result = $doc->getWorkLink((int)$pagenumber); + break; + case 'page-left': + default: + $result = $doc->getPageLink((int)$pagenumber); + break; + } + + return $result; + } +} diff --git a/Classes/ViewHelpers/ExtractFulltextViewHelper.php b/Classes/ViewHelpers/ExtractFulltextViewHelper.php new file mode 100644 index 00000000..6e88a712 --- /dev/null +++ b/Classes/ViewHelpers/ExtractFulltextViewHelper.php @@ -0,0 +1,80 @@ + + * All rights reserved + * + * This script is part of the TYPO3 project. The TYPO3 project is + * free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * The GNU General Public License can be found at + * http://www.gnu.org/copyleft/gpl.html. + * + * This script is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * This copyright notice MUST APPEAR in all copies of the script! + ***************************************************************/ +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Fluid\Core\Rendering\RenderingContextInterface; +use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic; + +/** + * ViewHelper to parse the ALTO fulltext + * + * # Example: Basic example + * + * + * + * + * Will output all words out of the ALTO files + * + * + * @package TYPO3 + */ +class ExtractFulltextViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper +{ + use CompileWithRenderStatic; + + /** + * Initialize arguments. + */ + public function initializeArguments() + { + parent::initializeArguments(); + $this->registerArgument('file', 'string', 'URI of the ALTO fulltext file', true); + } + + /** + * @param array $arguments + * @param \Closure $renderChildrenClosure + * @param RenderingContextInterface $renderingContext + */ + public static function renderStatic( + array $arguments, + \Closure $renderChildrenClosure, + RenderingContextInterface $renderingContext + ) { + $file= $arguments['file']; + + $altoXml = simplexml_load_file($file); + + $altoXml->registerXPathNamespace('alto', 'http://www.loc.gov/standards/alto/ns-v2#'); + // Get all (presumed) words of the text. + $words = $altoXml->xpath('./alto:Layout/alto:Page/alto:PrintSpace//alto:TextBlock/alto:TextLine/alto:String/@CONTENT'); + if (!empty($words)) { + $rawText = implode(' ', $words); + } + return $rawText; + + } + +} \ No newline at end of file diff --git a/Classes/ViewHelpers/PageInfoViewHelper.php b/Classes/ViewHelpers/PageInfoViewHelper.php new file mode 100644 index 00000000..e103608f --- /dev/null +++ b/Classes/ViewHelpers/PageInfoViewHelper.php @@ -0,0 +1,80 @@ + + * All rights reserved + * + * This script is part of the TYPO3 project. The TYPO3 project is + * free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * The GNU General Public License can be found at + * http://www.gnu.org/copyleft/gpl.html. + * + * This script is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * This copyright notice MUST APPEAR in all copies of the script! + ***************************************************************/ +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Fluid\Core\Rendering\RenderingContextInterface; +use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic; + +/** + * ViewHelper to get page info + * + * # Example: Basic example + * + * + * 123 + * + * + * Will output the page record + * + * + * @package TYPO3 + */ +class PageInfoViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper +{ + use CompileWithRenderStatic; + + /** + * Initialize arguments. + */ + public function initializeArguments() + { + parent::initializeArguments(); + $this->registerArgument('uid', 'integer', 'uid of page', true); + $this->registerArgument('field', 'string', 'field to fetch from page record', false, 'title'); + } + + /** + * @param array $arguments + * @param \Closure $renderChildrenClosure + * @param RenderingContextInterface $renderingContext + */ + public static function renderStatic( + array $arguments, + \Closure $renderChildrenClosure, + RenderingContextInterface $renderingContext + ) { + $pageUid = $arguments['uid']; + $field = $arguments['field']; + if (0 === $uid) { + $pageUid = $GLOBALS['TSFE']->id; + } + $pageRepository = GeneralUtility::makeInstance(\TYPO3\CMS\Frontend\Page\PageRepository::class); + $page = $pageRepository->getPage($pageUid); + + $output = $page[$field]; + + return $output; + } +} diff --git a/Classes/ViewHelpers/PiVarsViewHelper.php b/Classes/ViewHelpers/PiVarsViewHelper.php new file mode 100644 index 00000000..587a15c8 --- /dev/null +++ b/Classes/ViewHelpers/PiVarsViewHelper.php @@ -0,0 +1,78 @@ + + * All rights reserved + * + * This script is part of the TYPO3 project. The TYPO3 project is + * free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * The GNU General Public License can be found at + * http://www.gnu.org/copyleft/gpl.html. + * + * This script is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * This copyright notice MUST APPEAR in all copies of the script! + ***************************************************************/ +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Fluid\Core\Rendering\RenderingContextInterface; +use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic; + +/** + * ViewHelper to get piVars (GET variables) + * + * # Example: Basic example + * + * + * 1 + * + * + * Will output the value of tx_dlf[page] + * + * + * @package TYPO3 + */ +class PiVarsViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper +{ + use CompileWithRenderStatic; + + /** + * Initialize arguments. + */ + public function initializeArguments() + { + parent::initializeArguments(); + $this->registerArgument('var', 'string', 'variable name', true); + $this->registerArgument('default', 'string', 'default value if variable is empty', false, ''); + } + + /** + * @param array $arguments + * @param \Closure $renderChildrenClosure + * @param RenderingContextInterface $renderingContext + */ + public static function renderStatic( + array $arguments, + \Closure $renderChildrenClosure, + RenderingContextInterface $renderingContext + ) { + $var = $arguments['var']; + $default = $arguments['default']; + $piVars = GeneralUtility::_GP('tx_dlf'); + + if (!isset($piVars[$var])) { + return $default; + } + + return $piVars[$var]; + } +} diff --git a/Classes/ViewHelpers/XpathViewHelper.php b/Classes/ViewHelpers/XpathViewHelper.php new file mode 100644 index 00000000..db9c1c3e --- /dev/null +++ b/Classes/ViewHelpers/XpathViewHelper.php @@ -0,0 +1,102 @@ + + * All rights reserved + * + * This script is part of the TYPO3 project. The TYPO3 project is + * free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * The GNU General Public License can be found at + * http://www.gnu.org/copyleft/gpl.html. + * + * This script is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * This copyright notice MUST APPEAR in all copies of the script! + ***************************************************************/ +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Fluid\Core\Rendering\RenderingContextInterface; +use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic; + +/** + * ViewHelper to get page info + * + * # Example: Basic example + * + * + * 123 + * + * + * Will output the page record + * + * + * @package TYPO3 + */ +class XpathViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper +{ + + use CompileWithRenderStatic; + + /** + * Initialize arguments. + */ + public function initializeArguments() + { + parent::initializeArguments(); + $this->registerArgument('xpath', 'string', 'Xpath Expression', true); + $this->registerArgument('htmlspecialchars', 'boolean', 'Use htmlspecialchars() on the found result.', false, true); + $this->registerArgument('returnArray', 'boolean', 'Return results in an array instead of string.', false, false); + } + + /** + * Render the supplied DateTime object as a formatted date. + * + * @param array $arguments + * @param \Closure $renderChildrenClosure + * @param RenderingContextInterface $renderingContext + */ + public static function renderStatic( + array $arguments, + \Closure $renderChildrenClosure, + RenderingContextInterface $renderingContext + ) { + $xpath = $arguments['xpath']; + $htmlspecialchars = $arguments['htmlspecialchars']; + $returnArray = $arguments['returnArray']; + + $doc = GeneralUtility::makeInstance(\Slub\DigitalCollections\Helpers\GetDoc::class); + + $result = $doc->getXpath($xpath); + + if (is_array($result)) { + foreach ($result as $row) { + if ($returnArray) { + $output[] = $htmlspecialchars ? htmlspecialchars(trim($row)) : trim($row); + } else { + $output .= $htmlspecialchars ? htmlspecialchars(trim($row)) : trim($row) . ' '; + } + } + } else { + if ($returnArray) { + $output[] = $htmlspecialchars ? htmlspecialchars(trim($row)) : trim($row); + } else { + $output = $htmlspecialchars ? htmlspecialchars(trim($row)) : trim($row); + } + } + + if (! $returnArray) { + return trim($output); + } else { + return $output; + } + } +} diff --git a/Configuration/TCA/Overrides/pages.php b/Configuration/TCA/Overrides/pages.php new file mode 100644 index 00000000..235e6969 --- /dev/null +++ b/Configuration/TCA/Overrides/pages.php @@ -0,0 +1,20 @@ + jQuery must be provided by Kitodo.Presentation --> include Template "Basis Configuration" + includeJSFooterlibs { + kitodo-frontend = EXT:slub_digitalcollections/Resources/Public/Javascript/DigitalcollectionsListScripts.js + } +} + +[globalVar = TSFE:page|backend_layout = pagets__kitodo]||[globalVar = TSFE:page|backend_layout = pagets__emptyworkview] + config.disableWrapInBaseClass = 1 + + # switch to viewer css + page.includeCSS.kitodo = {$config.kitodo.css.page} + + # switch to viewer js + page.includeJSFooterlibs.kitodo = EXT:slub_digitalcollections/Resources/Public/Javascript/DigitalcollectionsScripts.js + + # clear not required js + page.includeJSFooterlibs.kitodo-frontend > + +[global] + +# -------------------------------------------------------------------------------------------------------------------- +# add opengraph social metatags in single view with a valid id +# -------------------------------------------------------------------------------------------------------------------- +[globalVar = GP:tx_dlf|id > 0] + + page.2 = LOAD_REGISTER + page.2 { + + pageUrlDigital { + cObject = TEXT + cObject { + dataWrap = DB:tx_dlf_documents:{GP:tx_dlf|id}:purl + wrap3={|} + insertData=1 + } + } + + # sometimes partOf is set... + partOf { + cObject = TEXT + cObject { + dataWrap = DB:tx_dlf_documents:{GP:tx_dlf|id}:partof + wrap3={|} + insertData=1 + } + } + + postDescription { + cObject = COA + cObject { + 10 = CONTENT + 10 { + table = tx_dlf_documents + select { + pidInList = 4152 + selectFields=title,author,year,place + where=uid=###postid### + markers { + #postid.data = GP:tx_dlf|id + postid.data = register:partOf + } + } + + renderObj=COA + renderObj { + 10 = TEXT + 10 { + field = author + stdWrap.if.isTrue.field = author + stdWrap.noTrimWrap = ||: | + } + 20 = TEXT + 20 { + field = title + stdWrap.if.isTrue.field = title + stdWrap.noTrimWrap = ||, | + } + 30 = TEXT + 30 {pagets__ + field = place + stdWrap.if.isTrue.field = place + } + 40 = TEXT + 40 { + field = year + stdWrap.if.isTrue.field = year + stdWrap.noTrimWrap = |, || + } + } + } + + 20 = CONTENT + 20 { + + table = tx_dlf_documents + select { + pidInList = 4152 + selectFields=title,author,year,place + where=uid=###postid### + markers { + # would work, but we want the year too... + #postid.data = register:partOf // GP:tx_dlf|id + postid.data = GP:tx_dlf|id + } + } + + renderObj=COA + renderObj { + 10 = TEXT + 10 { + field = author + stdWrap.if.isTrue.field = author + stdWrap.noTrimWrap = ||: | + } + 20 = TEXT + 20 { + field = title + stdWrap.if.isTrue.field = title + stdWrap.noTrimWrap = ||, | + } + 30 = TEXT + 30 { + field = place + stdWrap.if.isTrue.field = place + } + 40 = TEXT + 40 { + field = year + stdWrap.if.isTrue.field = year + stdWrap.noTrimWrap = | | | + } + } + } + } + } + + postTitle { + cObject = COA + cObject { + 10 = TEXT + 10 { + dataWrap = DB:tx_dlf_documents:{GP:tx_dlf|id}:title + wrap3 = {|} + insertData = 1 + if { + value = 1 + isEmpty.data = register:partOf + } + } + + 20 = TEXT + 20 { + dataWrap = DB:tx_dlf_documents:{register:partOf}:title + wrap3={|} + insertData = 1 + if { + value = 1 + isTrue.data = register:partOf + } + } + } + } + + } + + + # overwrite page title: + config.noPageTitle = 2 + page.headerData.10 > + page.headerData.10 = TEXT + page.headerData.10 { + wrap = | + value = {register:postTitle} - {$config.kitodo.rootPage.title} + insertData = 1 + htmlSpecialChars = 1 + } + + # overwrite page.meta.description with blog teaser + page.meta.description.data = register:postDescription + + page.headerData.300 = COA + page.headerData.300 { + 10 = TEXT + 10.value ( + + + + + + ) + 10.insertData = 1 + + 11 = TEXT + 11 { + data = register:postDescription + wrap = + required = {register:postDescription} + trim = 1 + htmlSpecialChars = 1 + htmlSpecialChars.preserveEntities = 1 + } + + } + +[global] diff --git a/Configuration/TypoScript/Plugin/Kitodo/setup7.ts b/Configuration/TypoScript/Plugin/Kitodo/setup7.ts new file mode 100644 index 00000000..ca7cb818 --- /dev/null +++ b/Configuration/TypoScript/Plugin/Kitodo/setup7.ts @@ -0,0 +1,294 @@ + + +# -------------------------------------------------------------------------------------------------------------------- +# search +# -------------------------------------------------------------------------------------------------------------------- +plugin.tx_dlf_search { + templateFile = {$config.kitodo.templates.search} +} + +lib.kitodo.fulltext.search = USER +lib.kitodo.fulltext.search { + includeLibs = EXT:dlf/plugins/search/class.tx_dlf_search.php + userFunc = tx_dlf_search->main + // storagePid of SLUB Digitale Sammlungen + pages = {$config.kitodo.storagePid} + // UID of dlfCore0 + solrcore = {$config.kitodo.solr.core} + limit = {$config.kitodo.solr.searchLimit} + // we activate fulltext here and search only in fulltext (see template) + fulltext = 1 + // search only in current document + searchIn = document + // doesn't work due to javascript inclusion of autocomplete in header + suggest = 0 + targetPid = {$config.kitodo.listView} + // this feature doesn't work in our case. It always jumps to page 1 + showSingleResult = 0 + templateFile = {$config.kitodo.templates.searchFullText} +} + +# -------------------------------------------------------------------------------------------------------------------- +# ajax search in workview +# -------------------------------------------------------------------------------------------------------------------- +plugin.tx_dlf_toolsSearchindocument { + toolTemplateFile = {$config.kitodo.templates.searchInDocumentTool} + pages = {$config.kitodo.storagePid} + // UID of dlfCore0 + solrcore = {$config.kitodo.solr.core} +} + +# -------------------------------------------------------------------------------------------------------------------- +# collections +# -------------------------------------------------------------------------------------------------------------------- +plugin.tx_dlf_collection { + templateFile = {$config.kitodo.templates.collections} +} + +# -------------------------------------------------------------------------------------------------------------------- +# listview +# -------------------------------------------------------------------------------------------------------------------- +plugin.tx_dlf_listview { + templateFile = {$config.kitodo.templates.listView} + # getTitle = 1 +} + +# -------------------------------------------------------------------------------------------------------------------- +# metadata +# -------------------------------------------------------------------------------------------------------------------- +plugin.tx_dlf_metadata { + pages = {$config.kitodo.storagePid} + excludeOther = 0 + linkTitle = 0 + getTitle = 0 + showFull = 1 + rootline = 1 + separator = # + templateFile = {$config.kitodo.templates.metadata} +} + +lib.kitodo.metadata.title = USER +lib.kitodo.metadata.title { + includeLibs = typo3conf/ext/dlf/plugins/metadata/class.tx_dlf_metadata.php + userFunc = tx_dlf_metadata->main + pages = {$config.kitodo.storagePid} + excludeOther = 1 + linkTitle = 0 + getTitle = 1 + showFull = 0 + rootline = 2 + separator = # + templateFile = {$config.kitodo.templates.titledata} +} + +lib.kitodo.metadata.full = USER +lib.kitodo.metadata.full { + includeLibs = typo3conf/ext/dlf/plugins/metadata/class.tx_dlf_metadata.php + userFunc = tx_dlf_metadata->main + pages = {$config.kitodo.storagePid} + excludeOther = 0 + linkTitle = 0 + getTitle = 0 + showFull = 1 + rootline = 1 + separator = # + templateFile = {$config.kitodo.templates.metadata} +} + +# -------------------------------------------------------------------------------------------------------------------- +# pageview / workview +# -------------------------------------------------------------------------------------------------------------------- +plugin.tx_dlf_pageview { + pages = {$config.kitodo.storagePid} + excludeOther = 0 + features = + elementId = tx-dlf-map + templateFile = {$config.kitodo.templates.pageView} +} + +# -------------------------------------------------------------------------------------------------------------------- +# thumbnail previews +# -------------------------------------------------------------------------------------------------------------------- +plugin.tx_dlf_pagegrid { + pages = {$config.kitodo.storagePid} + limit = {$config.kitodo.pagegrid.limit} + targetPid = # + templateFile = {$config.kitodo.templates.gridView} +} +# -------------------------------------------------------------------------------------------------------------------- +# table of contents +# -------------------------------------------------------------------------------------------------------------------- +plugin.tx_dlf_toc { + pages = {$config.kitodo.storagePid} + excludeOther = 0 + targetPid.data = TSFE:page|uid + templateFile = {$config.kitodo.templates.tableOfContents} + menuConf { + expAll = 0 + 1 = TMENU + 1 { + noBlur = 1 + wrap = + NO = 1 + NO { + stdWrap { + htmlSpecialChars = 1 + htmlSpecialChars.preserveEntities = 1 + crop = 65 |  ... | 1 + ifEmpty { + field = type + append.fieldRequired = volume + append = TEXT + append.field = volume + append.wrap =  | + } + # show metadata type in front of menu item "Illustrierte Magazine"-Style + dataWrap = {field:type} | {field:pagination} + + # do not show metadata type + # dataWrap = | {field:pagination} + } + allWrap.cObject = TEXT + allWrap.cObject { + insertData = 1 + value = | + override.cObject = TEXT + override.cObject { + value = |{field:basketButtonHref} + if { + isTrue.field = basketButtonHref + } + } + } + doNotLinkIt.field = doNotLinkIt + ATagTitle.field = title // type // orderlabel + allWrap = | + allWrap.fieldRequired = doNotLinkIt + wrapItemAndSub =
  • |
  • + } + IFSUB < .NO + IFSUB.wrapItemAndSub = + CUR < .NO + CUR.wrapItemAndSub =
  • |
  • + CURIFSUB < .NO + CURIFSUB.wrapItemAndSub = + ACT < .NO + ACT.wrapItemAndSub =
  • |
  • + ACTIFSUB < .NO + ACTIFSUB.wrapItemAndSub = + } + 2 < .1 + 3 < .2 + 4 < .3 + 5 < .4 + 6 < .5 + 7 < .6 + } +} + + +# -------------------------------------------------------------------------------------------------------------------- +# navigation +# -------------------------------------------------------------------------------------------------------------------- + +# -------------------------------------------------------------------------------------------------------------------- +# foward and back buttons in page view +# -------------------------------------------------------------------------------------------------------------------- +lib.kitodo.navigation.pagecontrol = USER +lib.kitodo.navigation.pagecontrol { + includeLibs = typo3conf/ext/dlf/plugins/navigation/class.tx_dlf_navigation.php + userFunc = tx_dlf_navigation->main + pages = {$config.kitodo.storagePid} + pageStep = 10 + templateFile = {$config.kitodo.templates.navigationPagecontrol} +} + +# -------------------------------------------------------------------------------------------------------------------- +# rotate and zoom buttons in page view +# -------------------------------------------------------------------------------------------------------------------- +lib.kitodo.navigation.viewfunction = USER +lib.kitodo.navigation.viewfunction { + includeLibs = typo3conf/ext/dlf/plugins/navigation/class.tx_dlf_navigation.php + userFunc = tx_dlf_navigation->main + pages = {$config.kitodo.storagePid} + pageStep = 10 + templateFile = {$config.kitodo.templates.navigationViewfunction} +} + +lib.kitodo.navigation.viewfunction_deactivated = USER +lib.kitodo.navigation.viewfunction_deactivated { + includeLibs = typo3conf/ext/dlf/plugins/navigation/class.tx_dlf_navigation.php + userFunc = tx_dlf_navigation->main + pages = {$config.kitodo.storagePid} + pageStep = 10 + templateFile = {$config.kitodo.templates.navigationViewfunction-deactivated} +} + +# -------------------------------------------------------------------------------------------------------------------- +# Tools like imagemanipulation, fulltext and downloads eg. +# -------------------------------------------------------------------------------------------------------------------- +plugin.tx_dlf_toolbox { + pages = {$config.kitodo.storagePid} + fileGrpsImageDownload = MIN,DEFAULT,MAX + + # this overwrites the backend plugin settings --> avoid it here + tools = tx_slubdlfhacks_pdfdownload,tx_dlf_toolsImagedownload,tx_dlf_toolsFulltext,tx_dlf_toolsImagemanipulation + templateFile = {$config.kitodo.templates.toolbox} +} + +plugin.tx_dlf_toolsPdf { + pages = {$config.kitodo.storagePid} + toolTemplateFile = {$config.kitodo.templates.toolsPdf} +} + +plugin.tx_dlf_toolsFulltext { + pages = {$config.kitodo.storagePid} + toolTemplateFile = {$config.kitodo.templates.toolFullText} +} + +plugin.tx_dlf_toolsImagemanipulation { + pages = {$config.kitodo.storagePid} + toolTemplateFile = {$config.kitodo.templates.toolsImageManipulation} +} + +# -------------------------------------------------------------------------------------------------------------------- +# newspaper navigation +# -------------------------------------------------------------------------------------------------------------------- +lib.kitodo.newspaper.years = USER +lib.kitodo.newspaper.years { + includeLibs = typo3conf/ext/dlf/plugins/newspaper/class.tx_dlf_newspaper.php + userFunc = tx_dlf_newspaper->years + pages = {$config.kitodo.storagePid} + targetPid = {$config.kitodo.pageView} + templateFile = {$config.kitodo.templates.newspaperYear} +} + +lib.kitodo.newspaper.calendar = USER +lib.kitodo.newspaper.calendar { + includeLibs = typo3conf/ext/dlf/plugins/newspaper/class.tx_dlf_newspaper.php + userFunc = tx_dlf_newspaper->calendar + pages = {$config.kitodo.storagePid} + targetPid = {$config.kitodo.pageView} + templateFile = {$config.kitodo.templates.newspaperCalendar} +} + +[userFunc = user_dlf_docTypeCheck(newspaper)] +page.10.variables { + isNewspaper = TEXT + isNewspaper.value = newspaper_anchor +} +[END] + +[userFunc = user_dlf_docTypeCheck(year)] +page.10.variables { + isNewspaper = TEXT + isNewspaper.value = newspaper_year +} +[END] + +[userFunc = user_dlf_docTypeCheck(issue)] +page.10.variables { + isNewspaper = TEXT + isNewspaper.value = newspaper_issue +} +[END] diff --git a/Configuration/TypoScript/Plugin/Kitodo/setup9.typoscript b/Configuration/TypoScript/Plugin/Kitodo/setup9.typoscript new file mode 100644 index 00000000..8336fd3c --- /dev/null +++ b/Configuration/TypoScript/Plugin/Kitodo/setup9.typoscript @@ -0,0 +1,288 @@ + + +# -------------------------------------------------------------------------------------------------------------------- +# search +# -------------------------------------------------------------------------------------------------------------------- +plugin.tx_dlf_search { + templateFile = {$config.kitodo.templates.search} +} + +lib.kitodo.fulltext.search = USER +lib.kitodo.fulltext.search { + userFunc = Kitodo\Dlf\Plugin\Search->main + // storagePid of SLUB Digitale Sammlungen + pages = {$config.kitodo.storagePid} + // UID of dlfCore0 + solrcore = {$config.kitodo.solr.core} + limit = {$config.kitodo.solr.searchLimit} + // we activate fulltext here and search only in fulltext (see template) + fulltext = 0 + // search only in current document + searchIn = document + // doesn't work due to javascript inclusion of autocomplete in header + suggest = 0 + targetPid = {$config.kitodo.listView} + // this feature doesn't work in our case. It always jumps to page 1 + showSingleResult = 0 + templateFile = {$config.kitodo.templates.searchFullText} +} + +# -------------------------------------------------------------------------------------------------------------------- +# ajax search in workview +# -------------------------------------------------------------------------------------------------------------------- +plugin.tx_dlf_searchindocumenttool { + templateFile = {$config.kitodo.templates.searchInDocumentTool} + pages = {$config.kitodo.storagePid} + // UID of dlfCore0 + solrcore = {$config.kitodo.solr.core} +} +# For compatibiltiy of Fluid templates with Kitodo.Presentation 2.x +plugin.tx_dlf_toolsSearchindocument < plugin.tx_dlf_searchindocumenttool + +# -------------------------------------------------------------------------------------------------------------------- +# collections +# -------------------------------------------------------------------------------------------------------------------- +plugin.tx_dlf_collection { + templateFile = {$config.kitodo.templates.collections} +} + +# -------------------------------------------------------------------------------------------------------------------- +# listview +# -------------------------------------------------------------------------------------------------------------------- +plugin.tx_dlf_listview { + templateFile = {$config.kitodo.templates.listView} + # getTitle = 1 +} + +# -------------------------------------------------------------------------------------------------------------------- +# metadata +# -------------------------------------------------------------------------------------------------------------------- +plugin.tx_dlf_metadata { + pages = {$config.kitodo.storagePid} + excludeOther = 0 + linkTitle = 0 + getTitle = 0 + showFull = 1 + rootline = 1 + separator = # + templateFile = {$config.kitodo.templates.metadata} +} + +lib.kitodo.metadata.title = USER +lib.kitodo.metadata.title { + userFunc = Kitodo\Dlf\Plugin\Metadata->main + pages = {$config.kitodo.storagePid} + excludeOther = 1 + linkTitle = 0 + getTitle = 1 + showFull = 0 + rootline = 2 + separator = # + templateFile = {$config.kitodo.templates.titledata} +} + +lib.kitodo.metadata.full = USER +lib.kitodo.metadata.full { + userFunc = Kitodo\Dlf\Plugin\Metadata->main + pages = {$config.kitodo.storagePid} + excludeOther = 0 + linkTitle = 0 + getTitle = 0 + showFull = 1 + rootline = 1 + separator = # + templateFile = {$config.kitodo.templates.metadata} +} + +# -------------------------------------------------------------------------------------------------------------------- +# pageview / workview +# -------------------------------------------------------------------------------------------------------------------- +plugin.tx_dlf_pageview { + pages = {$config.kitodo.storagePid} + excludeOther = 0 + features = + elementId = tx-dlf-map + templateFile = {$config.kitodo.templates.pageView} +} + +# -------------------------------------------------------------------------------------------------------------------- +# thumbnail previews +# -------------------------------------------------------------------------------------------------------------------- +plugin.tx_dlf_pagegrid { + pages = {$config.kitodo.storagePid} + limit = {$config.kitodo.pagegrid.limit} + targetPid = # + templateFile = {$config.kitodo.templates.gridView} +} +# -------------------------------------------------------------------------------------------------------------------- +# table of contents +# -------------------------------------------------------------------------------------------------------------------- +plugin.tx_dlf_tableofcontents { + pages = {$config.kitodo.storagePid} + excludeOther = 0 + targetPid.data = TSFE:page|uid + templateFile = {$config.kitodo.templates.tableOfContents} + menuConf { + expAll = 0 + 1 = TMENU + 1 { + noBlur = 1 + wrap = + NO = 1 + NO { + stdWrap { + htmlSpecialChars = 1 + htmlSpecialChars.preserveEntities = 1 + crop = 65 |  ... | 1 + ifEmpty { + field = type + append.fieldRequired = volume + append = TEXT + append.field = volume + append.wrap =  | + } + # show metadata type in front of menu item "Illustrierte Magazine"-Style + dataWrap = {field:type} | {field:pagination} + + # do not show metadata type + # dataWrap = | {field:pagination} + } + allWrap.cObject = TEXT + allWrap.cObject { + insertData = 1 + value = | + override.cObject = TEXT + override.cObject { + value = |{field:basketButtonHref} + if { + isTrue.field = basketButtonHref + } + } + } + doNotLinkIt.field = doNotLinkIt + ATagTitle.field = title // type // orderlabel + allWrap = | + allWrap.fieldRequired = doNotLinkIt + wrapItemAndSub =
  • |
  • + } + IFSUB < .NO + IFSUB.wrapItemAndSub = + CUR < .NO + CUR.wrapItemAndSub =
  • |
  • + CURIFSUB < .NO + CURIFSUB.wrapItemAndSub = + ACT < .NO + ACT.wrapItemAndSub =
  • |
  • + ACTIFSUB < .NO + ACTIFSUB.wrapItemAndSub = + } + 2 < .1 + 3 < .2 + 4 < .3 + 5 < .4 + 6 < .5 + 7 < .6 + } +} +# For compatibiltiy of Fluid templates with Kitodo.Presentation 2.x +plugin.tx_dlf_toc < plugin.tx_dlf_tableofcontents + +# -------------------------------------------------------------------------------------------------------------------- +# navigation +# -------------------------------------------------------------------------------------------------------------------- + +# -------------------------------------------------------------------------------------------------------------------- +# foward and back buttons in page view +# -------------------------------------------------------------------------------------------------------------------- +lib.kitodo.navigation.pagecontrol = USER +lib.kitodo.navigation.pagecontrol { + userFunc = Kitodo\Dlf\Plugin\Navigation->main + pages = {$config.kitodo.storagePid} + pageStep = 10 + templateFile = {$config.kitodo.templates.navigationPagecontrol} +} + +# -------------------------------------------------------------------------------------------------------------------- +# rotate and zoom buttons in page view +# -------------------------------------------------------------------------------------------------------------------- +lib.kitodo.navigation.viewfunction = USER +lib.kitodo.navigation.viewfunction { + userFunc = Kitodo\Dlf\Plugin\Navigation->main + pages = {$config.kitodo.storagePid} + pageStep = 10 + templateFile = {$config.kitodo.templates.navigationViewfunction} +} + +lib.kitodo.navigation.viewfunction_deactivated = USER +lib.kitodo.navigation.viewfunction_deactivated { + userFunc = Kitodo\Dlf\Plugin\Navigation->main + pages = {$config.kitodo.storagePid} + pageStep = 10 + templateFile = {$config.kitodo.templates.navigationViewfunction-deactivated} +} + +# -------------------------------------------------------------------------------------------------------------------- +# Tools like imagemanipulation, fulltext and downloads eg. +# -------------------------------------------------------------------------------------------------------------------- +plugin.tx_dlf_toolbox { + pages = {$config.kitodo.storagePid} + fileGrpsImageDownload = MIN,DEFAULT,MAX + + # this overwrites the backend plugin settings --> avoid it here + tools = tx_slubdlfhacks_pdfdownload,tx_dlf_toolsImagedownload,tx_dlf_toolsFulltext,tx_dlf_toolsImagemanipulation + templateFile = {$config.kitodo.templates.toolbox} +} + +plugin.tx_dlf_fulltexttool { + pages = {$config.kitodo.storagePid} + templateFile = {$config.kitodo.templates.toolFullText} +} +# For compatibiltiy of Fluid templates with Kitodo.Presentation 2.x +plugin.tx_dlf_toolsFulltext < plugin.tx_dlf_fulltexttool + +plugin.tx_dlf_imagemanipulationtool { + pages = {$config.kitodo.storagePid} + templateFile = {$config.kitodo.templates.toolsImageManipulation} +} +# For compatibiltiy of Fluid templates with Kitodo.Presentation 2.x +plugin.tx_dlf_toolsImagemanipulation < plugin.tx_dlf_imagemanipulationtool + +# -------------------------------------------------------------------------------------------------------------------- +# newspaper navigation +# -------------------------------------------------------------------------------------------------------------------- +lib.kitodo.newspaper.years = USER +lib.kitodo.newspaper.years { + userFunc = Kitodo\Dlf\Plugin\Calendar->years + pages = {$config.kitodo.storagePid} + targetPid = {$config.kitodo.pageView} + templateFile = {$config.kitodo.templates.newspaperYear} +} + +lib.kitodo.newspaper.calendar = USER +lib.kitodo.newspaper.calendar { + userFunc = Kitodo\Dlf\Plugin\Calendar->calendar + pages = {$config.kitodo.storagePid} + targetPid = {$config.kitodo.pageView} + templateFile = {$config.kitodo.templates.newspaperCalendar} +} + +[userFunc = user_dlf_docTypeCheck(newspaper, {$config.kitodo.storagePid})] +page.10.variables { + isNewspaper = TEXT + isNewspaper.value = newspaper_anchor +} +[global] + +[userFunc = user_dlf_docTypeCheck(year, {$config.kitodo.storagePid})] +page.10.variables { + isNewspaper = TEXT + isNewspaper.value = newspaper_year +} +[global] + +[userFunc = user_dlf_docTypeCheck(issue, {$config.kitodo.storagePid})] +page.10.variables { + isNewspaper = TEXT + isNewspaper.value = newspaper_issue +} +[global] diff --git a/Configuration/TypoScript/constants.ts b/Configuration/TypoScript/constants.ts new file mode 100644 index 00000000..f2a67703 --- /dev/null +++ b/Configuration/TypoScript/constants.ts @@ -0,0 +1,140 @@ +################################################### +# All used Constants for SLUB Digital Collections +################################################### +config { + kitodo { + + # basic solr config + solr { + # cat=plugin.tx_slubdigitalcollections/links/0200; type=int+; label= solr core uid + core = 1 + + # cat=plugin.tx_slubdigitalcollections/links/0201; type=int+; label= solr search query limit + searchLimit = 1000 + + # cat=plugin.tx_slubdigitalcollections/links/0202; type=string; label= solr url including scheme, port and path + host = http://sdvsolr2.slub-dresden.de:8983/solr + + # cat=plugin.tx_slubdigitalcollections/links/0203; type=string; label= solr core name + coreName = dlfCore0 + + # cat=plugin.tx_slubdigitalcollections/links/0204; type=int+; label= solr connection timeout (s) + timeout = 5 + } + + # basic id config + rootPage { + # cat=plugin.tx_slubdigitalcollections/links/0300; type=int+; label= Kitodo Rootpage + pid = 5346 + + # cat=plugin.tx_slubdigitalcollections/links/0301; type=string; label= Kitodo Title + title = Digitale Sammlungen + + # cat=plugin.tx_slubdigitalcollections/links/0302; type=string; label= Kitodo CSS-class + cssClass = dlf-slub-logo + } + + # cat=plugin.tx_slubdigitalcollections/links/0320; type=int+; label= Dlf Storage Pid + storagePid = 4152 + + # cat=plugin.tx_slubdigitalcollections/links/0321; type=int+; label= Kitodo Terms of Use Page + termsOfUsePid = 5345 + + # cat=plugin.tx_slubdigitalcollections/links/0322; type=list; label= Pids for Navigation + viewerNavigationPids = 4010, 5346, 9259, 4012, 10105 + + # cat=plugin.tx_slubdigitalcollections/links/0323; type=int+; label= Kitodo Pageview + pageView = 5363 + + # cat=plugin.tx_slubdigitalcollections/links/0324; type=int+; label= pagegrid limit (thumbnail preview) + pagegrid.limit = 35 + + # cat=plugin.tx_slubdigitalcollections/links/0325; type=int+; label= Kitodo Collection Page + collectionView = 5362 + + # cat=plugin.tx_slubdigitalcollections/links/0326; type=int+; label= Kitodo List Page + listView = 5364 + + css { + # cat=plugin.tx_slubdigitalcollections/advanced/0500; type=string; label=CSS file for all lists (eg. collections) + lists = EXT:slub_digitalcollections/Resources/Public/Css/DigitalcollectionsLists.css + + # cat=plugin.tx_slubdigitalcollections/advanced/0501; type=string; label=CSS file for kitodo pageview + page = EXT:slub_digitalcollections/Resources/Public/Css/Digitalcollections.css + } + + templates { + + # cat=plugin.tx_slubdigitalcollections/advanced/0400; type=string; label=Collections Template + collections = EXT:slub_digitalcollections/Resources/Private/Plugins/Kitodo/Collections.html + + # cat=plugin.tx_slubdigitalcollections/advanced/0401; type=string; label=Listview Template + listView = EXT:slub_digitalcollections/Resources/Private/Plugins/Kitodo/Listview.html + + # cat=plugin.tx_slubdigitalcollections/advanced/0402; type=string; label=Gridview Template + gridView = EXT:slub_digitalcollections/Resources/Private/Plugins/Kitodo/Gridview.html + + # cat=plugin.tx_slubdigitalcollections/advanced/0403; type=string; label=Pageview Template + pageView = EXT:slub_digitalcollections/Resources/Private/Plugins/Kitodo/Pageview.html + + # cat=plugin.tx_slubdigitalcollections/advanced/0404; type=string; label=Search Template + search = EXT:slub_digitalcollections/Resources/Private/Plugins/Kitodo/Search.html + + # cat=plugin.tx_slubdigitalcollections/advanced/0405; type=string; label=SearchFullText Template + searchFullText = EXT:slub_digitalcollections/Resources/Private/Plugins/Kitodo/SearchFullText.html + + # cat=plugin.tx_slubdigitalcollections/advanced/0406; type=string; label=SearchInDocumentTool Template + searchInDocumentTool = EXT:slub_digitalcollections/Resources/Private/Plugins/Kitodo/SearchInDocumentTool.html + + # cat=plugin.tx_slubdigitalcollections/advanced/0407; type=string; label=Metadata Template + metadata = EXT:slub_digitalcollections/Resources/Private/Plugins/Kitodo/Metadata.html + + # cat=plugin.tx_slubdigitalcollections/advanced/0408; type=string; label=Titledata Template + titledata = EXT:slub_digitalcollections/Resources/Private/Plugins/Kitodo/Titledata.html + + # cat=plugin.tx_slubdigitalcollections/advanced/0409; type=string; label=TableOfContents Template + tableOfContents = EXT:slub_digitalcollections/Resources/Private/Plugins/Kitodo/TableOfContents.html + + # cat=plugin.tx_slubdigitalcollections/advanced/0410; type=string; label=NavigationPagecontrol Template + navigationPagecontrol = EXT:slub_digitalcollections/Resources/Private/Plugins/Kitodo/NavigationPagecontrol.html + + # cat=plugin.tx_slubdigitalcollections/advanced/0411; type=string; label=NavigationViewfunction Template + navigationViewfunction = EXT:slub_digitalcollections/Resources/Private/Plugins/Kitodo/NavigationViewfunction.html + + # cat=plugin.tx_slubdigitalcollections/advanced/0412; type=string; label=NavigationViewfunction deactivated Template + navigationViewfunction-deactivated = EXT:slub_digitalcollections/Resources/Private/Plugins/Kitodo/NavigationViewfunction-deactivated.html + + # cat=plugin.tx_slubdigitalcollections/advanced/0413; type=string; label=Toolbox Template + toolbox = EXT:slub_digitalcollections/Resources/Private/Plugins/Kitodo/Toolbox.html + + # cat=plugin.tx_slubdigitalcollections/advanced/0414; type=string; label=ToolsPdf Template + toolsPdf = EXT:slub_digitalcollections/Resources/Private/Plugins/Kitodo/ToolsPdf.html + + # cat=plugin.tx_slubdigitalcollections/advanced/0415; type=string; label=ToolFullText Template + toolFullText = EXT:slub_digitalcollections/Resources/Private/Plugins/Kitodo/ToolFullText.html + + # cat=plugin.tx_slubdigitalcollections/advanced/0416; type=string; label=ToolsImagemanipulation Template + toolsImageManipulation = EXT:slub_digitalcollections/Resources/Private/Plugins/Kitodo/ToolsImagemanipulation.html + + # cat=plugin.tx_slubdigitalcollections/advanced/0417; type=string; label=NewspaperYear Template + newspaperYear = EXT:slub_digitalcollections/Resources/Private/Plugins/Kitodo/NewspaperYear.html + + # cat=plugin.tx_slubdigitalcollections/advanced/0418; type=string; label=NewspaperCalendar Template + newspaperCalendar = EXT:slub_digitalcollections/Resources/Private/Plugins/Kitodo/NewspaperCalendar.html + } + + } + + # matomo configuration (maybe overwritten) + # cat=plugin.tx_slubdigitalcollections/piwik/0310; type=string; label=Matomo Hostname + piwik_hostname = piwik.slub-dresden.de + # cat=plugin.tx_slubdigitalcollections/piwik/0320; type=int+; label=Matomo Idsite + piwik_idsite = + # cat=plugin.tx_slubdigitalcollections/piwik/0330; type=string; label=Matomo Domains (optional) + piwik_domains = *.slub-dresden.de + + # template path config + templateRootPath = EXT:slub_digitalcollections/Resources/Private/Templates/ + partialRootPath = EXT:slub_digitalcollections/Resources/Private/Partials/ + layoutRootPath = EXT:slub_digitalcollections/Resources/Private/Layouts/ +} \ No newline at end of file diff --git a/Configuration/TypoScript/setup.ts b/Configuration/TypoScript/setup.ts new file mode 100644 index 00000000..64d15fc8 --- /dev/null +++ b/Configuration/TypoScript/setup.ts @@ -0,0 +1,151 @@ +# -------------------------------------------------------------------------------------------------------------------- +# Typoscript setup for SLUB Digital Collections +# -------------------------------------------------------------------------------------------------------------------- + +# -------------------------------------------------------------------------------------------------------------------- +# pageview navigation +# -------------------------------------------------------------------------------------------------------------------- + +lib.navigation.kitodo = HMENU +lib.navigation.kitodo { + special = list + special.value = {$config.kitodo.viewerNavigationPids} + includeNotInMenu = 1 + 1 = TMENU + 1 { + expAll = 1 + insertData = 1 + noBlur = 1 + NO = 1 + NO { + wrapItemAndSub =
  • |
  • + ATagTitle.field = description // title + } + } +} + +# -------------------------------------------------------------------------------------------------------------------- +# render new page in pageview / workview +# -------------------------------------------------------------------------------------------------------------------- + +page { + # assume "10" + 10 { + # Template names will be generated automatically by converting the applied + # backend_layout, there is no explicit mapping necessary anymore. + # + # BackendLayout Key + # subnavigation_right_2_columns -> SubnavigationRight2Columns.html + # + # Backend Record + # uid: 1 -> 1.html + # + # Database Entry + # value: -1 -> None.html + # value: pagets__subnavigation_right_2_columns -> SubnavigationRight2Columns.html + templateName = TEXT + templateName { + cObject = TEXT + cObject { + data = pagelayout + required = 1 + case = uppercamelcase + split { + token = pagets__ + cObjNum = 1 + 1.current = 1 + } + } + ifEmpty = Default + } + + layoutRootPaths.10 = {$config.layoutRootPath} + partialRootPaths.10 = {$config.partialRootPath} + templateRootPaths.10 = {$config.templateRootPath} + settings { + rootPage { + pid = {$config.kitodo.rootPage.pid} + title = {$config.kitodo.rootPage.title} + cssClass = {$config.kitodo.rootPage.cssClass} + } + + termsOfUsePid = {$config.kitodo.termsOfUsePid} + + matomo { + hostname = {$config.piwik_hostname} + siteId = {$config.piwik_idsite} + setdomains = {$config.piwik_domains} + } + + collections { + solrHost = {$config.kitodo.solr.host}/{$config.kitodo.solr.coreName} + solrTimeout = {$config.kitodo.solr.timeout} + } + } + variables { + content < styles.content.get + sidebar < styles.content.get + sidebar.select.where = colPos=1 + + isKitodoPageView = TEXT + isKitodoPageView.value = 1 + + docTitle = TEXT + docTitle { + value = {register:postTitle} + insertData = 1 + } + + # kitodo vars + gp-id = TEXT + gp-id { + data = GP:tx_dlf|id + ifEmpty = 1 + } + + gp-page = TEXT + gp-page { + data = GP:tx_dlf|page + ifEmpty = 1 + } + + gp-page2 = TEXT + gp-page2 { + cObject = TEXT + cObject.data = GP:tx_dlf|page + cObject.wrap = | +1 + prioriCalc = 1 + } + + gp-double = TEXT + gp-double.data = GP:tx_dlf|double + + gp-pagegrid = TEXT + gp-pagegrid.data = GP:tx_dlf|pagegrid + + } + } +} + +# -------------------------------------------------------------------------------------------------------------------- +# load kitodo configs depending on TYPO3 version +# -------------------------------------------------------------------------------------------------------------------- +# The condition is necessary because you cannot nest TypoScript conditions. But inside the included TypoScript files, +# more conditions appear. + +# for TYPO3 8.7 and 9.5 with Kitodo.Presentation 3.x + +# for TYPO3 7.6 with Kitodo.Presentation 2.x + + +# -------------------------------------------------------------------------------------------------------------------- +# body class overrides +# -------------------------------------------------------------------------------------------------------------------- +[globalVar = TSFE:id={$config.kitodo.collectionView}] +page.bodyTag = +# render content parts only +[END] + +[globalVar = TSFE:id={$config.kitodo.listView}] +page.bodyTag = +[END] \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 00000000..ea287d25 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# SLUB Digital Collections + +The Digital Collections by SLUB Dresden. \ No newline at end of file diff --git a/Resources/Private/Javascript/Cookies.js b/Resources/Private/Javascript/Cookies.js new file mode 100644 index 00000000..1d83ea44 --- /dev/null +++ b/Resources/Private/Javascript/Cookies.js @@ -0,0 +1,163 @@ +/*! + * JavaScript Cookie v2.2.1 + * https://github.com/js-cookie/js-cookie + * + * Copyright 2006, 2015 Klaus Hartl & Fagner Brack + * Released under the MIT license + */ +;(function (factory) { + var registeredInModuleLoader; + if (typeof define === 'function' && define.amd) { + define(factory); + registeredInModuleLoader = true; + } + if (typeof exports === 'object') { + module.exports = factory(); + registeredInModuleLoader = true; + } + if (!registeredInModuleLoader) { + var OldCookies = window.Cookies; + var api = window.Cookies = factory(); + api.noConflict = function () { + window.Cookies = OldCookies; + return api; + }; + } +}(function () { + function extend () { + var i = 0; + var result = {}; + for (; i < arguments.length; i++) { + var attributes = arguments[ i ]; + for (var key in attributes) { + result[key] = attributes[key]; + } + } + return result; + } + + function decode (s) { + return s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent); + } + + function init (converter) { + function api() {} + + function set (key, value, attributes) { + if (typeof document === 'undefined') { + return; + } + + attributes = extend({ + path: '/' + }, api.defaults, attributes); + + if (typeof attributes.expires === 'number') { + attributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5); + } + + // We're using "expires" because "max-age" is not supported by IE + attributes.expires = attributes.expires ? attributes.expires.toUTCString() : ''; + + try { + var result = JSON.stringify(value); + if (/^[\{\[]/.test(result)) { + value = result; + } + } catch (e) {} + + value = converter.write ? + converter.write(value, key) : + encodeURIComponent(String(value)) + .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent); + + key = encodeURIComponent(String(key)) + .replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent) + .replace(/[\(\)]/g, escape); + + var stringifiedAttributes = ''; + for (var attributeName in attributes) { + if (!attributes[attributeName]) { + continue; + } + stringifiedAttributes += '; ' + attributeName; + if (attributes[attributeName] === true) { + continue; + } + + // Considers RFC 6265 section 5.2: + // ... + // 3. If the remaining unparsed-attributes contains a %x3B (";") + // character: + // Consume the characters of the unparsed-attributes up to, + // not including, the first %x3B (";") character. + // ... + stringifiedAttributes += '=' + attributes[attributeName].split(';')[0]; + } + + return (document.cookie = key + '=' + value + stringifiedAttributes); + } + + function get (key, json) { + if (typeof document === 'undefined') { + return; + } + + var jar = {}; + // To prevent the for loop in the first place assign an empty array + // in case there are no cookies at all. + var cookies = document.cookie ? document.cookie.split('; ') : []; + var i = 0; + + for (; i < cookies.length; i++) { + var parts = cookies[i].split('='); + var cookie = parts.slice(1).join('='); + + if (!json && cookie.charAt(0) === '"') { + cookie = cookie.slice(1, -1); + } + + try { + var name = decode(parts[0]); + cookie = (converter.read || converter)(cookie, name) || + decode(cookie); + + if (json) { + try { + cookie = JSON.parse(cookie); + } catch (e) {} + } + + jar[name] = cookie; + + if (key === name) { + break; + } + } catch (e) {} + } + + return key ? jar[key] : jar; + } + + api.set = set; + api.get = function (key) { + return get(key, false /* read as raw */); + }; + api.getJSON = function (key) { + return get(key, true /* read as json */); + }; + api.remove = function (key, attributes) { + set(key, '', extend(attributes, { + expires: -1 + })); + }; + + api.defaults = {}; + + api.withConverter = init; + + return api; + } + + return init(function () {}); +})); \ No newline at end of file diff --git a/Resources/Private/Javascript/DigitalcollectionsListScripts.js b/Resources/Private/Javascript/DigitalcollectionsListScripts.js new file mode 100644 index 00000000..9146b0dc --- /dev/null +++ b/Resources/Private/Javascript/DigitalcollectionsListScripts.js @@ -0,0 +1,150 @@ +/* + * + * JS functions + * ================================================ + * functions and adjustments to + * the list views + * + */ + +$(function () { + + // setup mobile event + var mobileEvent = mobileCheck() ? 'touchstart' : 'click'; + + // sub entry toggle in list views + $('.tx-dlf-morevolumes, .tx-dlf-hidevolumes').on(mobileEvent, function (event) { + $(this).parent().toggleClass('tx-dlf-volumes-open').find('.tx-dlf-volume').slideToggle(); + }); + + // Additional transformations for sidebar search box to use it as offcanvas element in smaller views + $('#rightcol .tx-dlf-search').parent().addClass('tx-dlf-enable-offcanvas').append('
    '); + $transition = 'all .3s ease-out'; + setTimeout(function () { + $('#rightcol .tx-dlf-search').parent().css({ + '-webkit-transition': $transition, + '-o-transition': $transition, + 'transition': $transition + }); + }, 250); + + // Menu toggles for offcanvas toc and metadata + $('.offcanvas-toggle').on(mobileEvent, function (event) { + $(this).parent().toggleClass('open'); + }); + + // Init collection overview on intro page + var layoutColumns = '
  • '; + $('.tx-dlf-collection-list').prepend(layoutColumns).append($('.tx-dlf-collection-list-additionals').html()).randomize('li.tx-dlf-collection-item').colcade({ + columns: '.tx-dlf-collection-col', + items: '.tx-dlf-collection-item' + }); + + // Add toggle element and corresponding function to facets + $('.tx-dlf-search-facets > ul > li').each(function () { + var facetsToShow = 5, + facetCount = $(this).find('ul').children('li').length, + facetShowLabel = ($('html[lang="de-DE"]')[0]) ? 'Zeige ' + (facetCount - facetsToShow) + ' weitere Facetten' : 'Show ' + (facetCount - facetsToShow) + ' more facets', + facetHideLabel = ($('html[lang="de-DE"]')[0]) ? 'Letzten ' + (facetCount - facetsToShow) + ' Facetten ausblenden' : 'Hide ' + (facetCount - facetsToShow) + ' last facets'; + if (facetCount > facetsToShow) { + $(this).find('ul li:gt(' + (facetsToShow - 1) + ')').hide(); + $(this).append('
    ' + facetShowLabel + '
    '); + $(this).find('.facets-toggle').on(mobileEvent, function () { + $(this).text(($(this).parent().hasClass('facets-expanded')) ? facetShowLabel : facetHideLabel).parent().toggleClass('facets-expanded'); + $(this).parent().find('ul li:gt(' + (facetsToShow - 1) + ')').slideToggle(); + }); + } + }); + + // Add click event to complete collections element on intro page + $('.tx-dlf-collection-item .tx-dlf-collection-thumbnail img').on(mobileEvent, function () { + window.location = $(this).parent().parent().find('h4 a').attr('href'); + return false; + }); + + // Add a switch and function for alphabetical order of collections elements on intro page + var labelGallery = ($('html[lang="de-DE"]')[0]) ? 'Galerie' : 'Gallery', + labelAlphabetical = ($('html[lang="de-DE"]')[0]) ? 'Alphabetisch' : 'Alphabetical', + sortItems = $('.tx-dlf-collection-list li.tx-dlf-collection-item').get(), + storedItems = sortItems; + $('.tx-dlf-collection').prepend('
    ' + labelGallery + '
    ' + labelAlphabetical + '
    '); + $('.tx-dlf-list-toggle-container').on(mobileEvent, function () { + if ($(this).hasClass('alphabetical')) { + $('.tx-dlf-collection-list li.order-label').remove(); + $.each(storedItems, function (i, li) { + $('.tx-dlf-collection-list').append(li); + }); + $('.tx-dlf-collection-list').removeClass('alphabetical alphabetical-ready').colcade({ + columns: '.tx-dlf-collection-col', + items: '.tx-dlf-collection-item' + }); + document.cookie = 'tx-dlf-galleryview-state=gallery; path=/'; + } else { + $('.tx-dlf-collection-list').colcade('destroy').addClass('alphabetical'); + sortAlphabetical(this, sortItems); + document.cookie = 'tx-dlf-galleryview-state=alphabetical; path=/'; + } + $(this).toggleClass('alphabetical').find('.label').toggleClass('active'); + }); + + // Add toggle and function for extended search + var extendedSearchLabel = $('html[lang="de-DE"]')[0] ? 'Erweiterte Suche ausblenden' : 'Hide Extended Search'; + $('#c15323 .tx-dlf-search form').append('
    ' + extendedSearchLabel + '
    '); + $('.extended-search-toggle').on(mobileEvent, function () { + $(this).parent().toggleClass('extendend-search-active'); + }); + +}); + +// check mobile device to specify click events and set a global variable. Simple use it via $('selector').on(mobileEvent, function() { do something }); +function mobileCheck() { + var check = false; + (function (a) { + if (/(android|ipad|playbook|silk|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) check = true + })(navigator.userAgent || navigator.vendor || window.opera); + return check; +} + +// randomizer to shuffle collection elements on intro page +$.fn.randomize = function (selector) { + (selector ? this.find(selector) : this).parent().each(function () { + $(this).children(selector).sort(function () { + return Math.random() - 0.5; + }).detach().appendTo(this); + }); + return this; +}; + +// Sort function for collection entries on intro page +sortAlphabetical = function (element, sortItems) { + sortItems.sort(function (a, b) { + var sortA = $(a).find('h4').text(); + var sortB = $(b).find('h4').text(); + if (sortA < sortB) return -1; + if (sortA > sortB) return 1; + return 0; + }); + var prevFirstChar, + isAlreadyShown = false; + $.each(sortItems, function (i, li) { + $('.tx-dlf-collection-list').append(li); + currentFirstChar = $(this).find('h4').text().charAt(0); + if (prevFirstChar !== currentFirstChar && isNaN(currentFirstChar)) { + $(this).before('
  • ' + $(this).find('h4').text().charAt(0) + '
  • '); + } + if (!isNaN(currentFirstChar) && !isAlreadyShown) { + $(this).before('
  • 0–9
  • '); + isAlreadyShown = true; + } + prevFirstChar = $(this).find('h4').text().charAt(0); + currentFirstChar = undefined; + }); + + function showAlphabeticalList() { + $('.tx-dlf-collection-list').addClass('alphabetical-ready'); + } + window.setTimeout(showAlphabeticalList, 100); +}; + + +// EOF \ No newline at end of file diff --git a/Resources/Private/Javascript/DigitalcollectionsScripts.js b/Resources/Private/Javascript/DigitalcollectionsScripts.js new file mode 100644 index 00000000..d91348be --- /dev/null +++ b/Resources/Private/Javascript/DigitalcollectionsScripts.js @@ -0,0 +1,226 @@ +/* + * + * JS functions + * ================================================ + * a few additional calls to + * enhance the user experience + * + */ + +$(function () { + + // inital javascript "hello, i'm here!" + $('html').removeClass('no-js'); + + // setup mobile event + var mobileEvent = mobileCheck() ? 'touchstart' : 'click'; + + // menu toggles for offcanvas toc and metadata + $('.offcanvas-toggle').on(mobileEvent, function (event) { + $(this).parent().toggleClass('open'); + }); + + // active toggle for submenus + $('li.submenu > a').on(mobileEvent, function (event) { + $('li.submenu.open a').not(this).parent().removeClass('open'); + $(this).parent().toggleClass('open'); + }); + + // secondary nav toggle + $('nav .nav-toggle').on(mobileEvent, function (event) { + $(this).toggleClass('active'); + $('nav .secondary-nav').toggleClass('open'); + }); + + // calendar dropdowns on click/touch + $('.calendar-view div.issues h4').on(mobileEvent, function (event) { + var issuelinks = $(this).parents('div.issues').find('div ul li a'); + if (issuelinks.length == 1) { + // if only one issue, open this directly + window.open(issuelinks[0].href, '_self'); + } else { + $('.calendar-view table td.open').not($(this).parents('td')).removeClass('open'); + $(this).parents('td').toggleClass('open'); + } + }); + + // add body class if any calendar is present + $('.tx-dlf-calendar, .tx-dlf-calendar-years').parents('body').addClass('calendar'); + + // add body class if gridview is shown + $('.tx-dlf-pagegrid-list').parents('body').addClass('gridview'); + + // Inject view switch functions for calendar/list view (initial show calendar) + if ($('.tx-dlf-calendar .calendar-list-selection a.select-calendar-view').hasClass('active')) { + $('.tx-dlf-calendar .calendar-list-selection a.select-calendar-view').removeClass('active'); + } + $('.tx-dlf-calendar .calendar-list-selection a.select-calendar-view, .tx-dlf-calendar .calendar-view').addClass('active'); + $('.tx-dlf-calendar .calendar-list-selection a').on(mobileEvent, function (event) { + if (!$(this).hasClass('active')) { + var targetElement = '.' + $(this).attr('class').replace('select-', ''); + $('.tx-dlf-calendar .active').removeClass('active'); + $(this).addClass('active'); + $(targetElement).addClass('active'); + } + }); + + // Copy selected page number to mobile meta (in order to transform select field to ui button) + if ($('.pages select option[selected]')[0]) { + $('dl.mobile-meta').append('
    No.
    ' + $('.pages select option[selected]').text() + '
    '); + } + + $('.provider').append('
    '); + $('.view-functions .pages form, .view-functions .zoom a.fullscreen').clone().appendTo('.provider .mobile-controls'); + + // Shorten mobile meta title + shortenMobileMetaElement = $('.provider dl.mobile-meta dd.tx-dlf-title a'); + shortenMobileMetaTitle = shortenMobileMetaElement.text(); + if (shortenMobileMetaTitle.length > 140) { + shortenMobileMetaTitle = shortenMobileMetaTitle.substr(0, 140) + '...'; + shortenMobileMetaElement.text(shortenMobileMetaTitle); + } + + // Check if there are is a download list. Otherwise change a to span to disable button + if (!$('.submenu.downloads ul li')[0]) { + $(".submenu.downloads>a").replaceWith(function () { + return $("" + $(this).html() + ""); + }); + } + + // Toggle function for full meta data view + if ($('.tx-dlf-metadata dl.tx-dlf-metadata-titledata').length > 1) { + metadataToggleLabelMore = ($('html[lang^="de"]')[0]) ? 'mehr Metadaten' : 'more Metadata'; + metadataToggleLabelLess = ($('html[lang^="de"]')[0]) ? 'weniger Metadaten' : 'less Metadata'; + $('.control-bar .metadata-wrapper').append(''); + $('.metadata-toggle').on(mobileEvent, function () { + if (!$('.control-bar').hasClass('all-metadata')) { + Cookies.set('tx-dlf-allmetadata', 'true'); + $(this).text(metadataToggleLabelLess); + } else { + Cookies.remove('tx-dlf-allmetadata'); + $(this).text(metadataToggleLabelMore); + } + $('.control-bar').toggleClass('all-metadata').find('dl:nth-child(n+3)').slideToggle(); + }); + } + + // enable click on fullscreen button + $('a.fullscreen').on(mobileEvent, function () { + if ($('body.fullscreen')[0]) { + exitFullscreen(); + } else { + enterFullscreen(); + } + }); + + // if cookie for fullscreen view is present adapat initial page rendering + if (Cookies.get('tx-dlf-pageview-zoomFullscreen')) { + $('body').addClass('fullscreen static'); + $('.zoom .fullscreen').addClass('active'); + } + + // TOC folding function to make sure that active pages are in viewport + if ($('ul.toc ul li.current')[0]) { + tocPlaceholderLabel = ($('html[lang^="de"]')[0]) ? 'Einige Einträge sind ausgeblendet' : 'Some entires are hidden'; + tocPlaceholderTitle = ($('html[lang^="de"]')[0]) ? 'Hier klicken um alle Einträge zu ziegen' : 'Click to show all entries'; + $('ul.toc ul li.current').first().prevAll(':eq(4)').prevUntil(':nth-child(2)').hide(); + $('ul.toc ul li:nth-child(2)').after('
  • ' + tocPlaceholderLabel + '
  • '); + $('ul.toc ul li.placeholder').on(mobileEvent, function () { + $(this).remove(); + $('ul.toc ul li').slideDown(); + }); + } + + // Toggle and setup for the 'in document search' + if ($('.tx-dlf-toolsFulltextsearch form')[0]) { + $('.fulltext-search-toggle').on(mobileEvent, function () { // selector should be semantically: .search-indocument-toggle + $('body').toggleClass('search-indocument-active'); + $('#tx-dlf-search-in-document-query').trigger('focus'); + }); + } else { + $('.fulltext-search-toggle').addClass('disabled'); + } + + // Check if a click on page navigation is made and unfold next/back navigation + $('.fwds, .backs') + .on('mouseenter', function () { + $(this).addClass('over'); + }) + .on('mouseleave', function () { + $(this).removeClass('over'); + }) + .on('click', function () { + localStorage.txDlfFromPage = $(this).attr('class').split(' ')[0]; + }); + if (localStorage.txDlfFromPage) { + $('.' + localStorage.txDlfFromPage).addClass('no-transition over'); + } + + // Add a error message if no map element in document viewer given + if (!$('.tx-dlf-pageview').children()[0]) { + emptyMessage = ($('html[lang^="de"]')[0]) ? 'Kein Band ausgewählt. Klicken Sie hier um zum ersten Band dieses Werks zu gelangen.' : 'No volume selected. Click to jump to the first available volume.'; + $('.tx-dlf-pageview').append(''); + } + + // Add class to collection related DD elements in metadata lists + $('dl.tx-dlf-metadata-titledata').find('dt:contains(mmlung), dt:contains(llection)').nextUntil('dt', 'dd').addClass('tx-dlf-metadata-collection'); + + // Finally all things are settled. Curtain up and bring back animations a second later. + $('body').removeClass('hidden'); + setTimeout(function () { + localStorage.clear(); + $('.fwds, .backs').removeClass('no-transition'); + $('body').removeClass('static'); + }, 1000); + +}); + +$(document).keyup(function (e) { + + // Check if ESC key is pressed. Then end fullscreen mode or close SRU form. + if (e.keyCode == 27) { + if ($('body.fullscreen')[0]) { + return exitFullscreen(); + } + if ($('.document-functions .search.open')[0]) { + $('.document-functions .search').removeClass('open'); + } + } + // Check if the F key is pressed and no text input in SRU form is taking place. + if (e.keyCode == 70 && !$('#tx-dlf-search-in-document-query').is(':focus')) { + return enterFullscreen(); + } + +}); + +// Activate fullscreen mode and set corresponding cookie +function enterFullscreen() { + setTimeout(function () { + window.dispatchEvent(new Event('resize')); + }, 220); + $("body").addClass('fullscreen'); + $('a.fullscreen').addClass('active'); + Cookies.set('tx-dlf-pageview-zoomFullscreen', 'true'); +} + +// Exit fullscreen mode and drop cookie +function exitFullscreen() { + setTimeout(function () { + window.dispatchEvent(new Event('resize')); + }, 220); + $("body").removeClass('fullscreen'); + $('a.fullscreen').removeClass('active'); + Cookies.remove('tx-dlf-pageview-zoomFullscreen'); +} + +// check mobile device to specify click events and set a global variable. Simple use it via $('selector').on(mobileEvent, function() { do something }); +function mobileCheck() { + var check = false; + (function (a) { + if (/(android|ipad|playbook|silk|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) check = true + })(navigator.userAgent || navigator.vendor || window.opera); + return check; +} + + +// EOF \ No newline at end of file diff --git a/Resources/Private/Javascript/colcade.js b/Resources/Private/Javascript/colcade.js new file mode 100644 index 00000000..67261adf --- /dev/null +++ b/Resources/Private/Javascript/colcade.js @@ -0,0 +1,366 @@ +/*! + * Colcade v0.2.0 + * Lightweight masonry layout + * by David DeSandro + * MIT license + */ + +/*jshint browser: true, undef: true, unused: true */ + +( function( window, factory ) { + // universal module definition + /*jshint strict: false */ + /*global define: false, module: false */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( factory ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory(); + } else { + // browser global + window.Colcade = factory(); + } + +}( window, function factory() { + +// -------------------------- Colcade -------------------------- // + +function Colcade( element, options ) { + element = getQueryElement( element ); + + // do not initialize twice on same element + if ( element && element.colcadeGUID ) { + var instance = instances[ element.colcadeGUID ]; + instance.option( options ); + return instance; + } + + this.element = element; + // options + this.options = {}; + this.option( options ); + // kick things off + this.create(); +} + +var proto = Colcade.prototype; + +proto.option = function( options ) { + this.options = extend( this.options, options ); +}; + +// globally unique identifiers +var GUID = 0; +// internal store of all Colcade intances +var instances = {}; + +proto.create = function() { + this.errorCheck(); + // add guid for Colcade.data + var guid = this.guid = ++GUID; + this.element.colcadeGUID = guid; + instances[ guid ] = this; // associate via id + // update initial properties & layout + this.reload(); + // events + this._windowResizeHandler = this.onWindowResize.bind( this ); + this._loadHandler = this.onLoad.bind( this ); + window.addEventListener( 'resize', this._windowResizeHandler ); + this.element.addEventListener( 'load', this._loadHandler, true ); +}; + +proto.errorCheck = function() { + var errors = []; + if ( !this.element ) { + errors.push( 'Bad element: ' + this.element ); + } + if ( !this.options.columns ) { + errors.push( 'columns option required: ' + this.options.columns ); + } + if ( !this.options.items ) { + errors.push( 'items option required: ' + this.options.items ); + } + + if ( errors.length ) { + throw new Error( '[Colcade error] ' + errors.join('. ') ); + } +}; + +// update properties and do layout +proto.reload = function() { + this.updateColumns(); + this.updateItems(); + this.layout(); +}; + +proto.updateColumns = function() { + this.columns = querySelect( this.options.columns, this.element ); +}; + +proto.updateItems = function() { + this.items = querySelect( this.options.items, this.element ); +}; + +proto.getActiveColumns = function() { + return this.columns.filter( function( column ) { + var style = getComputedStyle( column ); + return style.display != 'none'; + }); +}; + +// ----- layout ----- // + +// public, updates activeColumns +proto.layout = function() { + this.activeColumns = this.getActiveColumns(); + this._layout(); +}; + +// private, does not update activeColumns +proto._layout = function() { + // reset column heights + this.columnHeights = this.activeColumns.map( function() { + return 0; + }); + // layout all items + this.layoutItems( this.items ); +}; + +proto.layoutItems = function( items ) { + items.forEach( this.layoutItem, this ); +}; + +proto.layoutItem = function( item ) { + // layout item by appending to column + var minHeight = Math.min.apply( Math, this.columnHeights ); + var index = this.columnHeights.indexOf( minHeight ); + this.activeColumns[ index ].appendChild( item ); + // at least 1px, if item hasn't loaded + // Not exactly accurate, but it's cool + this.columnHeights[ index ] += item.offsetHeight || 1; +}; + +// ----- adding items ----- // + +proto.append = function( elems ) { + var items = this.getQueryItems( elems ); + // add items to collection + this.items = this.items.concat( items ); + // lay them out + this.layoutItems( items ); +}; + +proto.prepend = function( elems ) { + var items = this.getQueryItems( elems ); + // add items to collection + this.items = items.concat( this.items ); + // lay out everything + this._layout(); +}; + +proto.getQueryItems = function( elems ) { + elems = makeArray( elems ); + var fragment = document.createDocumentFragment(); + elems.forEach( function( elem ) { + fragment.appendChild( elem ); + }); + return querySelect( this.options.items, fragment ); +}; + +// ----- measure column height ----- // + +proto.measureColumnHeight = function( elem ) { + var boundingRect = this.element.getBoundingClientRect(); + this.activeColumns.forEach( function( column, i ) { + // if elem, measure only that column + // if no elem, measure all columns + if ( !elem || column.contains( elem ) ) { + var lastChildRect = column.lastElementChild.getBoundingClientRect(); + // not an exact calculation as it includes top border, and excludes item bottom margin + this.columnHeights[ i ] = lastChildRect.bottom - boundingRect.top; + } + }, this ); +}; + +// ----- events ----- // + +proto.onWindowResize = function() { + clearTimeout( this.resizeTimeout ); + this.resizeTimeout = setTimeout( function() { + this.onDebouncedResize(); + }.bind( this ), 100 ); +}; + +proto.onDebouncedResize = function() { + var activeColumns = this.getActiveColumns(); + // check if columns changed + var isSameLength = activeColumns.length == this.activeColumns.length; + var isSameColumns = true; + this.activeColumns.forEach( function( column, i ) { + isSameColumns = isSameColumns && column == activeColumns[i]; + }); + if ( isSameLength && isSameColumns ) { + return; + } + // activeColumns changed + this.activeColumns = activeColumns; + this._layout(); +}; + +proto.onLoad = function( event ) { + this.measureColumnHeight( event.target ); +}; + +// ----- destroy ----- // + +proto.destroy = function() { + // move items back to container + this.items.forEach( function( item ) { + this.element.appendChild( item ); + }, this ); + // remove events + window.removeEventListener( 'resize', this._windowResizeHandler ); + this.element.removeEventListener( 'load', this._loadHandler, true ); + // remove data + delete this.element.colcadeGUID; + delete instances[ this.guid ]; +}; + +// -------------------------- HTML init -------------------------- // + +docReady( function() { + var dataElems = querySelect('[data-colcade]'); + dataElems.forEach( htmlInit ); +}); + +function htmlInit( elem ) { + // convert attribute "foo: bar, qux: baz" into object + var attr = elem.getAttribute('data-colcade'); + var attrParts = attr.split(','); + var options = {}; + attrParts.forEach( function( part ) { + var pair = part.split(':'); + var key = pair[0].trim(); + var value = pair[1].trim(); + options[ key ] = value; + }); + + new Colcade( elem, options ); +} + +Colcade.data = function( elem ) { + elem = getQueryElement( elem ); + var id = elem && elem.colcadeGUID; + return id && instances[ id ]; +}; + +// -------------------------- jQuery -------------------------- // + +Colcade.makeJQueryPlugin = function( $ ) { + $ = $ || window.jQuery; + if ( !$ ) { + return; + } + + $.fn.colcade = function( arg0 /*, arg1 */) { + // method call $().colcade( 'method', { options } ) + if ( typeof arg0 == 'string' ) { + // shift arguments by 1 + var args = Array.prototype.slice.call( arguments, 1 ); + return methodCall( this, arg0, args ); + } + // just $().colcade({ options }) + plainCall( this, arg0 ); + return this; + }; + + function methodCall( $elems, methodName, args ) { + var returnValue; + $elems.each( function( i, elem ) { + // get instance + var colcade = $.data( elem, 'colcade' ); + if ( !colcade ) { + return; + } + // apply method, get return value + var value = colcade[ methodName ].apply( colcade, args ); + // set return value if value is returned, use only first value + returnValue = returnValue === undefined ? value : returnValue; + }); + return returnValue !== undefined ? returnValue : $elems; + } + + function plainCall( $elems, options ) { + $elems.each( function( i, elem ) { + var colcade = $.data( elem, 'colcade' ); + if ( colcade ) { + // set options & init + colcade.option( options ); + colcade.layout(); + } else { + // initialize new instance + colcade = new Colcade( elem, options ); + $.data( elem, 'colcade', colcade ); + } + }); + } +}; + +// try making plugin +Colcade.makeJQueryPlugin(); + +// -------------------------- utils -------------------------- // + +function extend( a, b ) { + for ( var prop in b ) { + a[ prop ] = b[ prop ]; + } + return a; +} + +// turn element or nodeList into an array +function makeArray( obj ) { + var ary = []; + if ( Array.isArray( obj ) ) { + // use object if already an array + ary = obj; + } else if ( obj && typeof obj.length == 'number' ) { + // convert nodeList to array + for ( var i=0; i < obj.length; i++ ) { + ary.push( obj[i] ); + } + } else { + // array of single index + ary.push( obj ); + } + return ary; +} + +// get array of elements +function querySelect( selector, elem ) { + elem = elem || document; + var elems = elem.querySelectorAll( selector ); + return makeArray( elems ); +} + +function getQueryElement( elem ) { + if ( typeof elem == 'string' ) { + elem = document.querySelector( elem ); + } + return elem; +} + +function docReady( onReady ) { + if ( document.readyState == 'complete' ) { + onReady(); + return; + } + document.addEventListener( 'DOMContentLoaded', onReady ); +} + +// -------------------------- end -------------------------- // + +return Colcade; + +})); diff --git a/Resources/Private/Javascript/modernizrCustom.js b/Resources/Private/Javascript/modernizrCustom.js new file mode 100644 index 00000000..255141a8 --- /dev/null +++ b/Resources/Private/Javascript/modernizrCustom.js @@ -0,0 +1,3 @@ +/*! modernizr 3.5.0 (Custom Build) | MIT * + * https://modernizr.com/download/?-csstransforms3d-csstransitions-objectfit-touchevents-domprefixes-prefixed-prefixes-setclasses-testallprops-testprop-teststyles !*/ +!function(e,t,n){function r(e,t){return typeof e===t}function o(){var e,t,n,o,i,s,a;for(var f in S)if(S.hasOwnProperty(f)){if(e=[],t=S[f],t.name&&(e.push(t.name.toLowerCase()),t.options&&t.options.aliases&&t.options.aliases.length))for(n=0;nc;c++)if(m=e[c],h=A.style[m],a(m,"-")&&(m=s(m)),A.style[m]!==n){if(i||r(o,"undefined"))return l(),"pfx"==t?m:!0;try{A.style[m]=o}catch(y){}if(A.style[m]!=h)return l(),"pfx"==t?m:!0}return l(),!1}function g(e,t,n,o,i){var s=e.charAt(0).toUpperCase()+e.slice(1),a=(e+" "+E.join(s+" ")+s).split(" ");return r(t,"string")||r(t,"undefined")?h(a,t,o,i):(a=(e+" "+P.join(s+" ")+s).split(" "),c(a,t,n))}function y(e,t,r){return g(e,n,n,t,r)}var C=[],S=[],x={_version:"3.5.0",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,t){var n=this;setTimeout(function(){t(n[e])},0)},addTest:function(e,t,n){S.push({name:e,fn:t,options:n})},addAsyncTest:function(e){S.push({name:null,fn:e})}},Modernizr=function(){};Modernizr.prototype=x,Modernizr=new Modernizr;var w=x._config.usePrefixes?" -webkit- -moz- -o- -ms- ".split(" "):["",""];x._prefixes=w;var _=t.documentElement,b="svg"===_.nodeName.toLowerCase(),z="Moz O ms Webkit",P=x._config.usePrefixes?z.toLowerCase().split(" "):[];x._domPrefixes=P;var T="CSS"in e&&"supports"in e.CSS,j="supportsCSS"in e;Modernizr.addTest("supports",T||j);var E=x._config.usePrefixes?z.split(" "):[];x._cssomPrefixes=E;var k=function(t){var r,o=w.length,i=e.CSSRule;if("undefined"==typeof i)return n;if(!t)return!1;if(t=t.replace(/^@/,""),r=t.replace(/-/g,"_").toUpperCase()+"_RULE",r in i)return"@"+t;for(var s=0;o>s;s++){var a=w[s],f=a.toUpperCase()+"_"+r;if(f in i)return"@-"+a.toLowerCase()+"-"+t}return!1};x.atRule=k;var N=x.testStyles=u;Modernizr.addTest("touchevents",function(){var n;if("ontouchstart"in e||e.DocumentTouch&&t instanceof DocumentTouch)n=!0;else{var r=["@media (",w.join("touch-enabled),("),"heartz",")","{#modernizr{top:9px;position:absolute}}"].join("");N(r,function(e){n=9===e.offsetTop})}return n});var L={elem:f("modernizr")};Modernizr._q.push(function(){delete L.elem});var A={style:L.elem.style};Modernizr._q.unshift(function(){delete A.style});x.testProp=function(e,t,r){return h([e],n,t,r)};x.testAllProps=g;var O=x.prefixed=function(e,t,n){return 0===e.indexOf("@")?k(e):(-1!=e.indexOf("-")&&(e=s(e)),t?g(e,t,n):g(e,"pfx"))};x.testAllProps=y,Modernizr.addTest("csstransforms3d",function(){var e=!!y("perspective","1px",!0),t=Modernizr._config.usePrefixes;if(e&&(!t||"webkitPerspective"in _.style)){var n,r="#modernizr{width:0;height:0}";Modernizr.supports?n="@supports (perspective: 1px)":(n="@media (transform-3d)",t&&(n+=",(-webkit-transform-3d)")),n+="{#modernizr{width:7px;height:18px;margin:0;padding:0;border:0}}",N(r+n,function(t){e=7===t.offsetWidth&&18===t.offsetHeight})}return e}),Modernizr.addTest("csstransitions",y("transition","all",!0)),Modernizr.addTest("objectfit",!!O("objectFit"),{aliases:["object-fit"]}),o(),i(C),delete x.addTest,delete x.addAsyncTest;for(var R=0;R + + +
    + LFEditor +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    \ No newline at end of file diff --git a/Resources/Private/Language/locallang.xlf b/Resources/Private/Language/locallang.xlf new file mode 100644 index 00000000..0358c37a --- /dev/null +++ b/Resources/Private/Language/locallang.xlf @@ -0,0 +1,88 @@ + + + +
    + LFEditor +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    \ No newline at end of file diff --git a/Resources/Private/Layouts/KitodoPage.html b/Resources/Private/Layouts/KitodoPage.html new file mode 100644 index 00000000..a6c88992 --- /dev/null +++ b/Resources/Private/Layouts/KitodoPage.html @@ -0,0 +1,6 @@ +
    + +
    + + + \ No newline at end of file diff --git a/Resources/Private/Less/Controls.less b/Resources/Private/Less/Controls.less new file mode 100644 index 00000000..13407284 --- /dev/null +++ b/Resources/Private/Less/Controls.less @@ -0,0 +1,930 @@ +/* + * + * Controls + * ================================================ + * Control elements like next and previous buttons, + * download buttons and so on... + * + * Author: Thomas Jung + * + */ + +/* ==============[ basic settings for document control and view buttons ]================= */ +.document-functions, +.view-functions { + > ul { + position: absolute; + text-align: center; + .text-hide(); + z-index: 10; + > li { + position: relative; + display: inline-block; + > a, > span { + position: relative; + display: inline-block; + width: 40px; + height: 40px; + .text-hide(); + border-radius: 20px; + margin: 0 5px; + background: white url('@{control-icons}') no-repeat 0 0; + background-size: auto 120px; + } + > span { + opacity: 0.5; + } + @media screen and (min-width: @tabletLandscapeViewportWidth) { + > a, > span { + margin: 0 2px; + } + a { + .no-touchevents & { + .transition(); + cursor: pointer; + &:hover { + .transform(scale(1.2)); + } + } + } + } + @media screen and (min-width: @desktopViewportWidth) { + > a, > span { + margin: 0 4px; + } + } + } + } +} + +/* ==============[ document functions for downloads, double page eg. ]===================== */ +.document-functions { + > ul { + bottom: 15px; + left: 15px; + right: 15px; + > li { + &.submenu { + &:before { + position: absolute; + top: -17.5px; + left: 50%; + width: 0; + height: 0; + margin-left: -10px; + border: solid transparent; + border-width: 0 10px; + border-top-color: fade(@secondary-color, 97%); + content: " "; + z-index: 200; + opacity: 0; + .transition(); + } + > ul { + position: fixed; + bottom: 80px; + left: 40px; + right: 40px; + padding: 20px; + background: fade(@secondary-color, 97%); + font-family: Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.4; + text-align: left; + transform-origin: center bottom; + .transition(); + .transform(scaleY(0) translateY(100px)); + opacity: 0; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); + li { + a { + position: relative; + color: white; + display: block; + padding-left: 40px; + margin: 15px 0; + + &:before { + position: absolute; + top: 50%; + left: 0; + margin-top: -20px; + width: 40px; + height: 40px; + content: " "; + background: url('@{control-icons}') no-repeat 0 0; + background-size: auto 120px; + } + &.download-fulltext:before { + background-position: -280px -40px; + } + &.local-presentation:before { + background-position: -440px -80px; + } + &.local-catalog:before { + background-position: -400px -80px; + } + &.local-contact:before { + background-position: -400px -40px; + } + &.download-document:before, + &[title$="Seite"]:before, + &[title$="Page"]:before { + background-position: -360px -40px; + } + &.download-page:before, + &[title$="ument"]:before { + background-position: -320px -40px; + } + &.persistence-document:before { + background-position: -360px -80px; + } + &.persistence-page:before { + background-position: -320px -80px; + } + &.terms-of-use:before { + background-position: -640px -80px; + } + } + } + } + &.open { + &:before { + top: -13.5px; + border-top-width: 10px; + opacity: 1; + } + ul { + .transform(scaleY(1) translateY(0)); + opacity: 1; + } + } + } + &.downloads { + > a, > span { + background-position: -40px 0; + } + } + &.fulltext { + > a, > span { + background-position: -120px 0; + } + } + &.doublepage { + display: none; + > a, > span { + background-position: -80px 0; + } + a.tx-dlf-navigation-doubleOff:before { + position: absolute; + top: 2px; + right: 0; + width: 8px; + height: 8px; + border-radius: 8px; + border: 2px solid white; + background: @primary-color; + display: block; + content: " "; + } + a.tx-dlf-navigation-doublePlusOne { + position: absolute; + bottom: 2px; + right: -1px; + width: 0; + height: 0; + border: solid transparent; + border-width: 9px 0 9px 13px; + border-left-color: white; + border-radius: 0; + background: transparent; + span { + position: absolute; + bottom: -5px; + right: 3px; + width: 0; + height: 0; + display: block; + overflow: hidden; + border: solid transparent; + border-width: 5px 0 5px 8px; + border-left-color: @primary-color; + } + } + } + &.fulltext { + a.select { + &.active:before { + position: absolute; + top: 2px; + right: 0; + width: 8px; + height: 8px; + border-radius: 8px; + border: 2px solid white; + background: @primary-color; + display: block; + content: " "; + } + } + } + &.grid { + > a, > span { + background-position: -160px 0; + } + a.active:before { + position: absolute; + top: 2px; + right: 0; + width: 8px; + height: 8px; + border-radius: 8px; + border: 2px solid white; + background: @primary-color; + display: block; + content: " "; + } + } + &.disabled { + opacity: .5; + pointer-events: none; + } + } + } + @media screen and (min-width: @tabletViewportWidth) { + > ul { + li.submenu { + > ul { + position: absolute; + width: auto; + left: 20px; + right: auto; + bottom: 53px; + transform-origin: center top; + .transform(scaleY(0) translateY(100px)); + li a { + white-space: nowrap; + } + } + &.open { + > ul { + .transform(scaleY(1) translateY(0)); + } + } + } + } + } + @media screen and (min-width: @tabletLandscapeViewportWidth) { + > ul { + top: 20px; + left: 20px; + right: auto; + bottom: auto; + li.doublepage { + display: inline-block; + } + li { + &.submenu { + &:before { + top: auto; + bottom: -60px; + border-width: 0 10px; + border-bottom-color: fade(@secondary-color, 97%); + } + > ul { + top: 50px; + left: -20px; + right: auto; + bottom: auto; + width: auto; + font-size: 12px; + padding: 15px; + z-index: 3000; + transform-origin: center top; + .transform(scaleY(0) translateY(-100px)); + li { + a { + margin: 0; + padding-right: 5px; + min-height: 40px; + line-height: 40px; + .no-touchevents & { + &:hover { + .transform(scale(1)); + background: rgba(255, 255, 255, 0.2); + } + } + } + } + } + &.open { + &:before { + top: auto; + bottom: -10px; + border-width: 0 10px 10px 10px; + } + } + } + } + } + } +} + +/* ==============[ view functions for zoom, rotate and other view related functions ]===== */ +.view-functions { + ul { + position: relative; + li { + display: none; + } + @media screen and (min-width: @tabletLandscapeViewportWidth) { + position: absolute; + top: 20px; + right: 50px; + display: block; + height: 40px; + li { + display: inline-block; + &.rotate { + display: none; + } + &.pages { + position: relative; + top: auto; + right: auto; + display: inline-block; + form { + position: absolute; + top: 0; + right: 0; + select { + border: 1px solid @secondary-color; + color: @secondary-color; + background: white url('data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjAiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAyMCAxMiI+PHN0eWxlPi5zdDB7ZmlsbDpub25lO3N0cm9rZTojNGU2NDY2O3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMH08L3N0eWxlPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMy40IDMuMkw3IDkuNi42IDMuMiIgaWQ9IlhNTElEXzFfIi8+PC9zdmc+') no-repeat right center; + background-size: 16px auto; + font-weight: 700; + line-height: 1.2; + -webkit-appearance: none; + -moz-appearance: none; + padding: 10px 20px 10px 14px; + background-size: 20px 12px; + margin: 0 6px; + font-size: 16px; + outline: none; + border-radius: 20px; + cursor: pointer; + .no-touchevents & { + .transition(); + &:hover { + border: 1px solid @secondary-color; + background-color: desaturate(lighten(@secondary-color, 65%), 25%); + color: @basegrey-color; + } + } + } + } + } + &.tx-dlf-toolsImagemanipulation { + > span { + opacity: 1; + overflow: hidden; + width: auto; + height: auto; + display: inline; + margin: 0; + > span > a { + position: relative; + display: inline-block; + width: 40px; + height: 40px; + .text-hide(); + border-radius: 20px; + margin: 0 5px; + background: white url('@{control-icons}') no-repeat -200px 0; + background-size: auto 120px; + &.active:before { + position: absolute; + top: 2px; + right: 0; + width: 8px; + height: 8px; + border-radius: 8px; + border: 2px solid white; + background: @primary-color; + display: block; + content: " "; + } + } + } + } + &.rotate { + .rotate-left { + background-position: -240px 0; + } + .rotate-right { + background-position: -240px -40px; + } + .upend { + background-position: -280px 0; + } + } + &.zoom { + .in { + background-position: -360px 0; + } + .out { + background-position: -400px 0; + } + .fullscreen { // The fullscreen button + position: relative; + flex: 0 0 40px; + width: 40px; + height: 40px; + border-radius: 20px; + .text-hide(); + z-index: 1000; + background: white; + &:before, + &:after { + position: absolute; + width: 12px; + height: 12px; + background: url('@{control-icons}') no-repeat -575px -54px; + background-size: auto 120px; + display: block; + content: " "; + .transition(); + pointer-events: none; + .static & { + .transition(none); + } + } + &:before { + top: 9px; + right: 9px; + } + &:after { + bottom: 9px; + left: 9px; + .transform(rotate(180deg)); + } + &.active { + &:before { + .transform(rotate(180deg)); + } + &:after { + .transform(rotate(0)); + } + } + .fullscreen & { + top: 5px !important; + } + } + } + } + } + @media screen and (min-width: @desktopViewportWidth) { + li { + &.rotate { + display: inline-block; + } + &.pages { + form { + select { + margin: 0 4px; + } + } + } + } + } + } +} + +/* ==============[ the image manipulation tools ]========================================= */ +.image-manipulation { + position: absolute; + top: 70px; + right: 55px; + z-index: 1010; + .slider-container { + background: fade(@secondary-color, 90%); + padding: 30px 20px 10px 56px; + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2); + &:before { + position: absolute; + top: -10px; + right: 10px; + width: 0; + height: 0; + border: 10px solid transparent; + border-bottom-color: fade(@secondary-color, 90%); + border-top: 0; + content: " "; + } + .slider { + position: relative; + width: 200px; + height: 30px; + border: 0 none; + border-radius: 0; + background: transparent; + -webkit-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; + margin-right: 24px; + &:before { + position: absolute; + top: -19px; + left: -36px; + width: 40px; + height: 40px; + content: " "; + background: url('@{control-icons}') no-repeat 0 0; + background-size: auto 120px; + } + &:after { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 2px; + border-radius: 2px; + background: white; + content: ""; + } + .tooltip { + position: absolute; + opacity: 1; + top: -4px; + left: 210px !important; + color: white; + font-size: 10px; + text-align: left; + } + } + .slider-contrast .tooltip, .slider-saturation .tooltip { + left: 100%; + } + .slider-brightness .tooltip, .slider-hue .tooltip { + left: 50%; + } + .slider-contrast:before { + background-position: -480px 0; + } + .slider-saturation:before { + background-position: -480px -40px; + } + .slider-brightness:before { + background-position: -480px -80px; + } + .slider-hue:before { + background-position: -520px 0; + } + .checkbox, button.reset-btn { + position: relative; + border: 0 none; + color: white; + font-size: 11px; + margin-top: -15px; + padding-left: 36px; + line-height: 40px; + display: inline-block; + background: transparent; + &:before { + position: absolute; + top: 0; + left: 0; + width: 40px; + height: 40px; + background: url('@{control-icons}') no-repeat 0 0; + background-size: auto 120px; + content: " "; + } + } + button.reset-btn { + margin-left: 10px; + outline: none; + &:before { + background-position: -520px -80px; + } + } + .checkbox { + margin-left: -36px; + &:before { + background-position: -520px -40px; + } + label input { + margin-right: 4px; + } + } + } +} + +.slider-imagemanipulation.ui-slider-horizontal { + .ui-slider-handle { + position: absolute; + z-index: 2; + top: -7px; + width: 14px; + height: 14px; + background: white; + border: 0 none; + border-radius: 7px; + box-shadow: 1px 1px 0 @primary-color; + cursor: col-resize; + margin-left: -6px; + &:after { + content: none; + } + .ui-slider-handle { + &:focus, &:active { + border: 0; + outline: none; + } + } + } + .ui-slider-range { + background: rgba(0, 177, 158, 0.5); + } +} + +/* ==============[ page control buttons (fwd/back) ]====================================== */ +.page-control { + position: absolute; + bottom: 15px; + height: 1px; + width: 290px; + left: 50%; + margin-left: -145px; + line-height: 0; + > div { + position: absolute; + bottom: 0; + z-index: 1020; + span { + display: none; + a, span { + position: relative; + display: inline-block; + .text-hide(); + &:before { + position: absolute; + bottom: -1px; + width: 40px; + height: 40px; + border-radius: 20px; + background: white url('@{control-icons}') no-repeat 0 0; + background-size: auto 120px; + content: " "; + } + } + span { + opacity: 0.3; + } + &.next { + display: block; + a:before, span:before { + right: 0; + background-position: -280px -80px; + } + } + &.prev { + display: block; + a:before, span:before { + left: 0; + background-position: -240px -80px; + } + } + } + } + .backs { + left: 0; + } + .fwds { + right: 0; + } + @media screen and (min-width: @tabletLandscapeViewportWidth) { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + margin: 0; + pointer-events: none; + > div { + height: 80px; + min-width: 80px; + pointer-events: all; + span { + display: block; + a, span { + position: absolute; + font-size: 14px; + color: @primary-color; + white-space: nowrap; + display: block; + height: 40px; + line-height: 40px; + .transition(); + &:before { + .transition(); + } + } + .no-touchevents & { + a:hover { + .transform(scale(1.1)); + } + } + span { + cursor: not-allowed; + } + } + bottom: 50%; + margin-bottom: -20px; + &.no-transition { + a, span, a:before, span:before { + -webkit-transition: none !important; + -moz-transition: none !important; + -o-transition: none !important; + transition: none !important; + } + } + &.backs { + left: 10px; + span { + a, span { + left: 0; + text-align: left; + padding-left: 80px; + &:before { + left: 20px; + } + } + &.prev { + a, span { + top: 0; + height: 80px; + line-height: 80px; + color: fade(@primary-color, 0%); + &:before { + left: 0; + width: 80px; + height: 80px; + border-radius: 40px; + background-position: 0 -40px; + } + } + } + &.rwnd { + a, span { + top: 0; + color: fade(@primary-color, 0%); + z-index: 301; + &:before { + left: 41px; + width: 32px; + height: 32px; + background-position: -86px -43px; + } + } + span { + opacity: 0; + } + } + &.first { + a, span { + bottom: 0; + opacity: 0; + z-index: 302; + &:before { + background-position: -80px -80px; + } + } + } + } + &.over { + span { + &.prev { + a, span { + color: @primary-color; + } + } + &.rwnd { + a, span { + top: -45px; + color: @primary-color; + &:before { + bottom: -1px; + left: 20px; + width: 40px; + height: 40px; + background-position: -80px -40px; + } + } + span { + opacity: .3; + } + } + &.first { + a, span { + bottom: -45px; + } + a { + opacity: 1; + } + span { + opacity: 0.3; + } + } + } + } + } + &.fwds { + right: 10px; + span { + a, span { + right: 0; + text-align: right; + padding-right: 80px; + &:before { + right: 20px; + } + } + &.next { + a, span { + top: 0; + height: 80px; + line-height: 80px; + color: fade(@primary-color, 0%); + &:before { + right: 0; + width: 80px; + height: 80px; + border-radius: 40px; + background-position: -160px -40px; + } + } + } + &.fwd { + a, span { + top: 0; + color: fade(@primary-color, 0%); + &:before { + right: 41px; + width: 32px; + height: 32px; + background-position: -122px -42px; + } + } + } + &.last { + a, span { + bottom: 0; + opacity: 0; + &:before { + background-position: -120px -80px; + } + } + } + } + &.over { + span { + &.next { + a, span { + color: @primary-color; + } + } + &.fwd { + a, span { + top: -45px; + color: @primary-color; + &:before { + bottom: -1px; + right: 20px; + width: 40px; + height: 40px; + background-position: -120px -40px; + } + } + } + &.last { + a, span { + bottom: -45px; + } + a { + opacity: 1; + } + span { + opacity: 0.3; + } + } + } + } + } + } + } + .calendar & { + display: none; + } +} + +// EOF \ No newline at end of file diff --git a/Resources/Private/Less/Digitalcollections.less b/Resources/Private/Less/Digitalcollections.less new file mode 100644 index 00000000..4d222426 --- /dev/null +++ b/Resources/Private/Less/Digitalcollections.less @@ -0,0 +1,30 @@ +/* + * + * Digital Collections design + * ================================================ + * The complete LESS bindings for the + * Digital Collections by SLUB Dresden + * + * Author: Thomas Jung + * + */ + +// Helpers & variables +@import "Helper/Variables.less"; +@import "Helper/Mixins.less"; +@import "Helper/Normalize.less"; + +// Basic Settings +@import "Structure.less"; +@import "Sidebar.less"; +@import "Controls.less"; + +// Modules linkage +@import "Modules/Newspapers.less"; +@import "Modules/Pagegrid.less"; +@import "Modules/Fulltext.less"; +@import "Modules/Indocsearch.less"; + +// Theming Options (see '/Resources/Private/Less/Themes' for more) +// @import "Themes/Basictheme.less"; +@import "Themes/Slubtheme.less"; \ No newline at end of file diff --git a/Resources/Private/Less/DigitalcollectionsLists.less b/Resources/Private/Less/DigitalcollectionsLists.less new file mode 100644 index 00000000..bb7cc723 --- /dev/null +++ b/Resources/Private/Less/DigitalcollectionsLists.less @@ -0,0 +1,26 @@ +/* + * + * Lists + * ================================================ + * Design for lists and collection views + * + * Author: Thomas Jung + * + */ + +// Helpers & variables +@import "Helper/Variables.less"; +@import "Helper/Mixins.less"; +@import "Helper/Normalize.less"; + +// Theming Options (see '/Resources/Private/Less/Themes' for more) +// @import "Themes/Basictheme.less"; +@import "Themes/Slubtheme.less"; + +// Additional imports for lists +@import "Modules/Listresults.less"; +@import "Modules/Listsearch.less"; +@import "Modules/Listfacets.less"; +@import "Modules/Listintro.less"; + +// EOF \ No newline at end of file diff --git a/Resources/Private/Less/Helper/Mixins.less b/Resources/Private/Less/Helper/Mixins.less new file mode 100644 index 00000000..08af069f --- /dev/null +++ b/Resources/Private/Less/Helper/Mixins.less @@ -0,0 +1,49 @@ +/* + * + * Mixins + * ================================================ + * Own mixins for clearfixes, text removal, + * gradients and some other minor stuff + * + * Author: Thomas Jung + * + */ + +.clearfix() { // Guess what. ;-) + &:before, &:after { + content: " "; + display: table; + } + &:after { + clear: both; + } +} + +.text-overflow() { // If you need the three dots on the end of a text element + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.text-hide() { // Fully hide the text of an element (Often used as image replacement) + font: ~"0/0" 'Open Sans', Helvetica, Arial, sans-serif; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.transition(@transition: all .3s ease-out) { // Standardized CSS transitions + -webkit-transition: @transition; + -o-transition: @transition; + transition: @transition; +} + +.transform(@transform) { // Use this to ensure all transforms are proper prefixed + -webkit-transform: @transform; + -moz-transform: @transform; + -ms-transform: @transform; + transform: @transform; +} + +// EOF \ No newline at end of file diff --git a/Resources/Private/Less/Helper/Normalize.less b/Resources/Private/Less/Helper/Normalize.less new file mode 100644 index 00000000..11d1a768 --- /dev/null +++ b/Resources/Private/Less/Helper/Normalize.less @@ -0,0 +1,22 @@ +/* + * + * Normalize + * ================================================ + * Reset some browser based settings to start from + * a clean white sheet of paper + * + * Author: Thomas Jung + * + */ + +html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td { background: transparent; border: 0; margin: 0; padding: 0; vertical-align: baseline; } +body { line-height: 1; } +h1, h2, h3, h4, h5, h6 { clear: both; font-weight: normal; } +ol, ul { list-style: none; } +blockquote { quotes: none; } +blockquote:before, blockquote:after { content: ''; content: none; } +del { text-decoration: line-through; } +table { border-collapse: collapse; border-spacing: 0; } +a img { border: none; } + +// EOF \ No newline at end of file diff --git a/Resources/Private/Less/Helper/Variables.less b/Resources/Private/Less/Helper/Variables.less new file mode 100644 index 00000000..0773912d --- /dev/null +++ b/Resources/Private/Less/Helper/Variables.less @@ -0,0 +1,24 @@ +/* + * + * Variables + * ================================================ + * Value settings for type, breakpoints and + * base settings for calculations + * + * Author: Thomas Jung + * + */ + +// Base value +@base-calc: 16px; + +// Media queries +@phoneLandscapeViewportWidth: 480px; +@tabletViewportWidth: 768px; +@tabletLandscapeViewportWidth: 1024px; +@desktopViewportWidth: 1200px; + +// Paths +@basepath: '/typo3conf/ext/slub_digitalcollections/'; + +// EOF \ No newline at end of file diff --git a/Resources/Private/Less/Modules/Fulltext.less b/Resources/Private/Less/Modules/Fulltext.less new file mode 100644 index 00000000..ea0f6a6d --- /dev/null +++ b/Resources/Private/Less/Modules/Fulltext.less @@ -0,0 +1,77 @@ +/* + * + * Fulltext + * ================================================ + * Specials for the fulltext view + * + * Author: Thomas Jung + * + */ + +.fulltext-container { + position: absolute; + top: 55px; + right: 0; + bottom: 0; + background: rgba(255, 255, 255, 0.95); + text-align: left; + .transition(); + #tx-dlf-fulltextselection { + position: relative; + top: 0; + right: 0; + width: 100%; + height: 100%; + padding: 60px 20px; + overflow: hidden; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + line-height: 1.6em; + font-size: 16px; + color: @basegrey-color; + display: none; + &:empty { + padding: 0; + } + .textline { + &:after { + content: " "; + } + } + .fulltext-visible & { + display: block; + } + } + .fullscreen & { + top: 0; + } + @media screen and (min-width: @tabletViewportWidth) { + #tx-dlf-fulltextselection { + padding: 60px 15%; + } + } + @media screen and (min-width: @tabletLandscapeViewportWidth) { + top: 0; + max-width: 71.7%; + &:before { + height: 100px; + } + &:after { + height: 80px; + } + #tx-dlf-fulltextselection { + padding: 80px 100px 60px 30px; + line-height: 1.8; + border-left: 1px solid @secondary-color-light; + .highlight { + padding: 3px 0; + background: lighten(@secondary-color-light,30%); + } + } + } + @media screen and (min-width: @desktopViewportWidth) { + max-width: 50%; + } +} + +// EOF \ No newline at end of file diff --git a/Resources/Private/Less/Modules/Indocsearch.less b/Resources/Private/Less/Modules/Indocsearch.less new file mode 100644 index 00000000..d2eb1c71 --- /dev/null +++ b/Resources/Private/Less/Modules/Indocsearch.less @@ -0,0 +1,312 @@ +/* + * + * In Document Search + * ================================================ + * The ajax based search inside the work view + * + * Author: Thomas Jung + * + */ + +.tx-dlf-toolsFulltextsearch { // should be semantically: .tx-dlf-tools-search-indocument + position: absolute; + top: 0; + right: 106px; + .fulltext-search-toggle { // should be semantically: .search-indocument-toggle + position: absolute; + top: 10px; + right: 0; + width: 40px; + height: 40px; + background: white url('@{control-icons}') no-repeat -560px 0; + background-size: auto 120px; + border-radius: 20px; + cursor: pointer; + &:after { + position: absolute; + top: 0; + right: 0; + height: 40px; + width: 40px; + text-align: center; + content: "+"; + font-size: 42px; + line-height: 32px; + color: @secondary-color; + .transition(); + opacity: 0; + } + .search-indocument-active & { + background: lighten(@secondary-color-light, 40%); + &:after { + .transform(rotate(45deg)); + opacity: 1; + } + } + &.disabled { + opacity: .5; + pointer-events: none; + } + .no-touchevents & { + .transition(); + &:hover { + .transform(scale(1.2)); + } + } + } + form { + position: absolute; + top: 60px; + right: -106px; + height: 40px; + width: 100vw; + padding: 0 15px; + opacity: 0; + pointer-events: none; + .transition(); + .transform(translateY(-100%)); + label { + display: none; + } + input { + &[type="text"] { + position: relative; + width: 100%; + font-family: @font-sans-normal; + background: white; + border-radius: 20px; + border: 0; + font-size: 14px; + line-height: 1.1; + padding: 4px 10px; + height: 40px; + color: @basegrey-color; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); + &:focus { + color: @secondary-color; + } + } + } + button, + input { + &[type="submit"] { + position: absolute; + top: 0; + right: 15px; + width: 40px; + height: 40px; + .text-hide(); + background: lighten(@secondary-color-light, 40%) url('@{control-icons}') no-repeat -560px 0; + background-size: auto 120px; + border-radius: 20px; + } + } + .search-indocument-active & { + pointer-events: all; + opacity: 1; + .transform(translateY(0)); + } + } + #tx-dlf-search-in-document-loading, + #tx-dlf-search-in-document-clearing { + display: none; + } + #tx-dlf-search-in-document-results { + position: fixed; + top: 230px; + right: 15px; + max-height: calc(100vh - 310px); + left: 15px; + background: white; + text-align: center; + border-radius: 20px; + font-family: @font-sans-normal; + overflow: hidden; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + pointer-events: none; + opacity: 0; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); + .transition(); + .transform(translateY(-100%)); + li { + padding: 15px 10px; + border-bottom: 1px solid @lightgrey-color; + line-height: 1.2; + .structure { + font-size: 14px; + position: relative; + display: block; + font-family: @font-sans-bold; + text-transform: uppercase; + color: darken(@lightgrey-color, 20%); + } + .highlight, + em { + font-family: @font-sans-bold; + color: @primary-color; + font-style: normal; + } + .textsnippet { + a { + color: #333; + } + &:before, + &:after { + content: "…"; + } + } + } + .button-previous, + .button-next { + position: relative; + margin: 30px 10px; + background: @secondary-color-light; + appearance: none; + border: 0; + padding: 10px 20px; + line-height: 1; + font-family: @font-sans-bold; + text-transform: uppercase; + color: white; + } + .search-indocument-active & { + pointer-events: all; + opacity: 1; + .transform(translateY(0)); + &:empty { + pointer-events: none; + opacity: 0; + .transform(translateY(-100%)); + } + } + } + @media screen and (min-width: @phoneLandscapeViewportWidth) { + form { + top: 10px; + right: 40px; + width: 400px; + } + #tx-dlf-search-in-document-results { + top: 165px; + z-index: 1030; + max-height: calc(100vh - 170px); + li { + .structure { + display: inline; + } + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + } + } + @media screen and (min-width: @tabletViewportWidth) { + #tx-dlf-search-in-document-results { + top: 180px; + max-height: calc(100vh - 280px); + } + } + @media screen and (min-width: @tabletLandscapeViewportWidth) { + top: 10px; + right: 8px; + form { + top: 80px; + right: 0; + width: 450px; + height: 70px; + margin: 0; + border-radius: 0; + background: fade(@secondary-color, 90%); + padding: 15px; + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2); + input[type="text"] { + border-radius: 0; + } + button, + input { + &[type="submit"] { + top: 15px; + border-radius: 20px 0 0 20px; + background-color: lighten(@secondary-color-light, 30%); + } + } + &:before { + position: absolute; + top: -10px; + right: 10px; + width: 0; + height: 0; + border: 10px solid transparent; + border-bottom-color: fade(@secondary-color, 90%); + border-top: 0; + content: " "; + } + } + #tx-dlf-search-in-document-results { + position: absolute; + top: 150px; + right: 0; + left: auto; + bottom: auto; + width: 450px; + height: 400px; + border-radius: 0; + background: fade(@secondary-color, 90%); + padding: 0 15px 15px 15px; + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2); + li { + text-align: left; + padding: 10px 0; + color: white; + .structure { + color: white; + opacity: .6; + } + a { + color: white; + .highlight, + em { + color: white; + } + } + } + } + } + @media screen and (min-width: @desktopViewportWidth) { + form { + width: 600px; + } + #tx-dlf-search-in-document-results { + width: 600px; + font-size: 14px; + height: auto; + max-height: 70vh; + } + } +} + +body.calendar .tx-dlf-toolsFulltextsearch { // If the search appears in calendar view + top: -20px; + right: 15px; + form { + right: -15px; + } + @media screen and (min-width: @phoneLandscapeViewportWidth) { + form { + right: 40px; + } + } + @media screen and (min-width: @tabletLandscapeViewportWidth) { + top: 30px; + right: 35px; + .fulltext-search-toggle { + border: 1px solid @secondary-color; + } + form { + right: 0; + } + } +} + +// EOF \ No newline at end of file diff --git a/Resources/Private/Less/Modules/Listfacets.less b/Resources/Private/Less/Modules/Listfacets.less new file mode 100644 index 00000000..2c523c03 --- /dev/null +++ b/Resources/Private/Less/Modules/Listfacets.less @@ -0,0 +1,92 @@ +/* + * + * Facets styling + * ================================================ + * Styling for the facets in list views + * + * Author: Thomas Jung + * + */ + +#rightcol .tx-dlf-search-facets { + position: relative; + font-family: @font-sans-normal; + color: white; + ul { + padding: 0; + margin: 0; + li { + font-size: 18px; + font-family: @font-sans-bold; + text-transform: uppercase; + padding: 0; + display: none; + margin: 30px 0; + &.tx-dlf-search-ifsub { + display: block; + } + ul { + border-top: 1px solid rgba(255, 255, 255, .3); + li { + font-family: @font-sans-normal; + text-transform: none; + opacity: 1; + display: block; + margin: 0; + a { + position: relative; + color: white; + font-size: 14px; + padding: 5px 0; + display: inline-block; + } + &.tx-dlf-search-cur { + font-family: @font-sans-bold; + } + } + } + .facets-toggle { + font-size: 14px; + border-top: 1px solid rgba(255, 255, 255, .6); + padding-top: 5px; + opacity: .5; + .no-touchevents & { + cursor: pointer; + } + } + + @media screen and (min-width: @tabletLandscapeViewportWidth) { + color: lighten(@basegrey-color, 20%); + font-size: 16px; + ul { + margin: 5px 0; + border-top: 1px solid @lightgrey-color; + li { + a { + color: @secondary-color; + } + &.tx-dlf-search-cur a { + position: relative; + padding-left: 18px; + &:after { + position: absolute; + top: 50%; + left: 0; + margin-top: -16px; + content: "+"; + font-size: 30px; + line-height: 30px; + .transform(rotate(45deg)); + } + } + } + } + .facets-toggle { + border-top: 1px solid @lightgrey-color; + } + } + } + } +} + +// EOF \ No newline at end of file diff --git a/Resources/Private/Less/Modules/Listintro.less b/Resources/Private/Less/Modules/Listintro.less new file mode 100644 index 00000000..1a9e5928 --- /dev/null +++ b/Resources/Private/Less/Modules/Listintro.less @@ -0,0 +1,601 @@ +/* + * + * Collection Overview + * ================================================ + * Styling for the full size overview + * on all collections + * + * Author: Thomas Jung + * + */ + +body.collections { + #leftcol { + #c15323 { // The search on intropage + h3 { + margin-top: 0; + font-size: 14px; + bottom: -11px; + padding: 0 5px; + left: 15px; + text-transform: uppercase; + color: darken(@lightgrey-color, 39%); + background: white; + display: inline-block; + } + .tx-dlf-search { + border: solid @lightgrey-color; + border-width: 1px 0; + padding: 20px 0 15px 0; + form { // The input fields and buttons + position: relative; + margin: 0; + font-family: @font-sans-normal; + font-size: 14px; + label { + width: auto; + margin: 0; + display: inline-block; + float: none; + vertical-align: middle; + } + input { + &[type="text"] { + position: relative; + width: 100%; + font-family: @font-sans-normal; + font-size: 14px; + background: white; + border: 1px solid @secondary-color; + line-height: 1.1; + padding: 4px 10px; + height: 40px; + color: @basegrey-color; + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3); + margin-bottom: 10px; + float: none; + &:focus { + color: @secondary-color; + } + } + &[type="submit"] { + position: absolute; + top: 1px; + right: 1px; + width: 38px; + height: 38px; + .text-hide(); + background: lighten(@secondary-color-light, 40%) url('@{control-icons}') no-repeat -560px 0; + background-size: auto 120px; + border-radius: 20px 0 0 20px; + } + &[type="radio"] { + position: relative; + appearance: none; + -webkit-appearance: none; + width: 16px; + height: 16px; + border-radius: 10px; + vertical-align: middle; + margin: 0 3px 0 0; + float: none; + background: lighten(@secondary-color, 10%); + &:after { + position: absolute; + top: 5px; + left: 5px; + width: 6px; + height: 6px; + border-radius: 4px; + background: white; + content: " "; + opacity: 0; + } + &:hover { + border-color: white; + } + &:checked { + background: @secondary-color; + &:after { + opacity: 1; + } + } + } + } + label { + margin-right: 10px; + &[for="tx-dlf-search-query"] { + display: none; + } + } + #tx-dlf-search-suggest { + position: absolute; + &:after { + position: absolute; + top: 0; + left: 20px; + width: 0; + height: 0; + border: 10px solid transparent; + border-top-width: 0; + border-bottom-color: white; + content: " "; + z-index: 301; + } + ul { + z-index: 300; + margin: 10px 0 0 0; + padding: 0; + background: white; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.4); + li { + color: @secondary-color; + padding: 10px 15px; + font-family: @font-sans-bold; + border-bottom: 1px solid @lightgrey-color; + .no-touchevents & { + .transition(all .15s ease-in); + cursor: pointer; + &:hover { + background: white; + color: @secondary-color; + } + } + } + } + } + .tx-dlf-search-extended, + .extended-search-toggle { + display: none; + } + } + } + } + .tx-dlf-collection { + position: relative; + padding-top: 30px; + margin-top: 20px; + } + .tx-dlf-collection-list { // The listing + margin: 0 -5px; + padding: 0; + .clearfix(); + .tx-dlf-collection-col { + width: 100%; + &.col-2, &.col-3 { + display: none; + } + .tx-dlf-collection-item { + position: relative; + padding: 15px 0; + .tx-dlf-collection-thumbnail { + overflow: hidden; + border: 1px solid @lightgrey-color; + img { + border: 2px solid white; + min-width: 100%; + } + } + .tx-dlf-collection-meta-information { + position: absolute; + right: 3px; + bottom: 18px; + left: 3px; + background: white; + overflow: hidden; + padding: 10px; + line-height: 1.3; + .tx-dlf-collection-counts { + font-size: 14px; + margin: 0; + + } + h4 { + margin: 0 0 4px 0; + font-family: @font-sans-bold; + font-size: 16px; + text-transform: uppercase; + a { + font-color: @secondary-color; + text-decoration: none; + } + } + > a[href*="rss"] { + display: none; + } + } + .no-touchevents & { + cursor: pointer; + .tx-dlf-collection-thumbnail img, + .tx-dlf-collection-meta-information, + .tx-dlf-collection-meta-information h4 a { + .transition(); + } + .tx-dlf-collection-meta-information { + h4 { + padding-right: 30px; + } + > a { + position: absolute; + top: 50%; + right: 10px; + width: 30px; + height: 30px; + margin-top: -15px; + display: block; + .text-hide(); + background: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCI+PHBhdGggZD0iTTE1IDM4LjFoM2MwLTExIDguOS0xOS41IDIwLjMtMTkuNXYtM2MtMTMtLjEtMjMuMyA5LjgtMjMuMyAyMi41eiIvPjxwYXRoIGQ9Ik0yLjMgMzguMWgzQzUuMyAxOS41IDE5LjggNSAzOC4zIDVWMmMtMjAuMiAwLTM2IDE1LjgtMzYgMzYuMXoiLz48Y2lyY2xlIGN4PSIzMy44IiBjeT0iMzMuNiIgcj0iNC41Ii8+PC9zdmc+") no-repeat center center; + background-size: 30px auto; + .transition(); + .transform(translateX(60px)); + opacity: 0; + img { + display: none; + } + } + } + &:hover { + .tx-dlf-collection-thumbnail img { + .transform(scale(1.2)); + opacity: .8; + } + .tx-dlf-collection-meta-information { + padding-bottom: 20px; + h4 a { + color: @primary-color; + } + > a { + .transform(translateX(0)); + opacity: .3; + &:hover { + opacity: 1; + .transform(scale(1.1)); + } + } + } + } + } + } + } + &.alphabetical { + position: relative; + min-height: 2000px; + margin-top: 30px; + li { + position: relative; + width: 100%; + border-top: 1px dotted #ccc; + padding: 20px 0; + display: flex; + align-items: center; + &.tx-dlf-collection-col { + display: none; + } + &.order-label { + border: 0 none; + height: 0; + padding: 0; + z-index: 122; + .order-label-value { + position: absolute; + top: -25px; + right: 50%; + height: 50px; + min-width: 50px; + border-radius: 25px; + background: fade(#d8e9ed, 70%); + border: 1px solid white; + color: @secondary-color; + padding: 5px 15px; + text-align: center; + font-size: 30px; + font-family: @font-sans-normal; + white-space: nowrap; + line-height: 1.1; + .transform(translateX(50%)); + -moz-font-feature-settings: "lnum"; + -webkit-font-feature-settings: "lnum"; + font-feature-settings: "lnum"; + } + &:hover { + &:before { + display: none; + } + } + } + .tx-dlf-collection-thumbnail { + width: 70px; + height: 100px; + background: white; + z-index: 120; + img { + height: 100%; + min-width: 70px; + object-fit: cover; + border: 1px solid @lightgrey-color; + } + } + .tx-dlf-collection-meta-information { + position: relative; + bottom: auto; + left: auto; + right: auto; + background: transparent; + padding: 0 0 0 20px; + overflow: visible; + h4 { + font-size: 18px; + font-weight: normal; + margin: 0; + a { + color: #333; + text-decoration: none; + &:hover { + text-decoration: none; + } + } + } + > a { + display: none; + } + p { + height: auto; + opacity: 1; + font-size: 16px; + padding: 5px 0 0 0; + margin: 0; + color: #333; + } + > a { + right: -25px; + top: 0; + bottom: auto; + } + } + &:before { + position: absolute; + top: 5px; + right: -5px; + bottom: 5px; + left: -5px; + background: #d8e9ed; + content: " "; + opacity: 0; + pointer-events: none; + .transition(); + } + &:hover { + .tx-dlf-collection-thumbnail img, + &:before { + opacity: 1; + } + .tx-dlf-collection-meta-information { + p { + border-top-color: transparent; + } + > a { + bottom: auto; + } + } + } + } + } + &.alphabetical-ready { + li { + opacity: 1; + } + } + } + .tx-dlf-list-toggle-container { + position: absolute; + top: 0; + left: 0; + display: flex; + align-items: center; + cursor: pointer; + z-index: 130; + font-family: @font-sans-normal; + .tx-dlf-list-toggle { + position: relative; + width: 35px; + height: 20px; + background: white; + border-radius: 20px; + border: 1px solid @secondary-color; + margin: 0 10px; + .toggle-state { + position: absolute; + top: 2px; + left: 2px; + width: 14px; + height: 14px; + border-radius: 7px; + background: @secondary-color; + .transition(); + } + } + &.alphabetical { + .tx-dlf-list-toggle { + .toggle-state { + left: 17px; + } + } + } + .label { + font-size: 14px; + opacity: .4; + .transition(); + &.active { + opacity: 1; + font-family: @font-sans-bold; + } + } + } + .tx-dlf-collection-list-additionals { + display: none; + } + @media screen and (min-width: @phoneLandscapeViewportWidth) { + .tx-dlf-collection { + padding-top: 0; + } + .tx-dlf-list-toggle-container { + right: 0; + top: -45px; + left: auto; + } + .tx-dlf-collection-list { + .tx-dlf-collection-col { + width: 50%; + float: left; + &.col-2 { + display: block; + } + &.col-3 { + display: none; + } + .tx-dlf-collection-item { + padding: 5px; + .tx-dlf-collection-meta-information { + right: 8px; + bottom: 8px; + left: 8px; + } + } + } + &.alphabetical { + margin-top: 0; + } + } + } + @media screen and (min-width: @tabletLandscapeViewportWidth) { + padding: 0; + width: 100%; + float: none; + .tx-dlf-statistics { + font-family: @font-sans-normal; + strong { + font-family: @font-sans-normal; + font-size: 26px; + white-space: nowrap; + color: @primary-color; + } + } + #c15323 .tx-dlf-search { + padding: 30px 10% 30px 0; + form { + input { + &[type="text"] { + border-color: fade(@secondary-color, 50%); + } + &[type="submit"] { + .transition(); + } + } + .tx-dlf-search-extended { + position: relative; + display: block; + margin: 0; + height: 0; + opacity: 0; + pointer-events: none; + .transition(); + select { + position: absolute; + top: 0; + display: block; + appearance: none; + -webkit-appearance: none; + height: 40px; + background: transparent url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMiA0MCI+PHBhdGggZmlsbD0iIzE2NyIgZD0iTTguNiAxOGwtNC4xIDYuMDRMLjQgMTh6Ii8+PC9zdmc+") no-repeat right center; + background-size: auto 40px; + border-right: 1px solid; + border-color: transparent @secondary-color transparent transparent; + border-radius: 0; + font-family: @font-sans-bold; + z-index: 100; + padding: 10px; + color: @secondary-color; + font-size: 14px; + &.tx-dlf-search-operator { + left: 0; + width: 70px; + } + &.tx-dlf-search-field { + left: 70px; + } + } + } + .extended-search-toggle { + position: absolute; + right: 0; + bottom: 0; + display: block; + cursor: pointer; + text-decoration: underline; + span { + display: none; + } + } + &.extendend-search-active { + padding-bottom: 40px; + input[type="submit"] { + top: 267px; + right: -10%; + height: 50px; + width: 50px; + border-radius: 25px; + background-position: -555px 5px; + } + .tx-dlf-search-extended { + margin: 15px 0 -5px 0; + height: 40px; + opacity: 1; + pointer-events: all; + } + .extended-search-toggle { + span { + display: inline; + } + } + } + } + } + .tx-dlf-collection-list { + margin: 20px -15px; + .tx-dlf-collection-col { + width: 33.333333%; + float: left; + &.col-3 { + display: block; + } + .tx-dlf-collection-item { + padding: 15px; + .tx-dlf-collection-meta-information { + right: 16px; + left: 16px; + bottom: 16px; + padding: 15px 15px 15px 15px; + h4 { + margin: 0; + } + .tx-dlf-collection-counts { + font-family: @font-sans-normal; + font-size: 12px; + } + } + } + } + } + } + @media screen and (min-width: @desktopViewportWidth) { + .tx-dlf-statistics { + padding-right: 20%; + } + #c15323 .tx-dlf-search { + padding: 30px 20% 30px 0; + } + } + } +} + +// EOF \ No newline at end of file diff --git a/Resources/Private/Less/Modules/Listresults.less b/Resources/Private/Less/Modules/Listresults.less new file mode 100644 index 00000000..bba0dddd --- /dev/null +++ b/Resources/Private/Less/Modules/Listresults.less @@ -0,0 +1,327 @@ +/* + * + * Results styling + * ================================================ + * CSS for the listing and its controls + * + * Author: Thomas Jung + * + */ + +.listview { + h2, + #rightcol .rightnav { + display: none; + } +} + +.tx-dlf-listview { // The basic setup and the control fields above the listing + #leftcol & { + h2 { + font-size: 24px; + display: block; + margin: 0; + } + p.tx-dlf-search-numHits { + font-family: @font-sans-normal; + margin-top: 0; + font-size: 14px; + } + p.tx-dlf-sortinfo ~ form { + display: none; + } + p.tx-dlf-sortinfo { + text-align: center; + margin: 0; + font-family: @font-sans-bold; + clear: both; + } + p.tx-dlf-pagebrowser { + margin: 20px 0; + font-family: @font-sans-bold; + -moz-font-feature-settings: "lnum"; + -webkit-font-feature-settings: "lnum"; + font-feature-settings: "lnum"; + color: @basegrey-color; + text-align: center; + a { + display: inline-block; + min-width: 30px; + height: 30px; + border: 1px solid @lightgrey-color; + text-decoration: none; + border-radius: 15px; + margin: 0 5px; + background: white; + padding: 0 5px; + } + } + @media screen and (min-width: @phoneLandscapeViewportWidth) { + h2 { + font-size: 28px; + } + } + @media screen and (min-width: @tabletLandscapeViewportWidth) { + p.tx-dlf-sortinfo ~ form { + position: relative; + display: block; + > div { + position: absolute; + top: -45px; + right: 0; + width: 65%; + display: flex; + font-family: @font-sans-normal; + font-size: 14px; + label { + white-space: nowrap; + text-align: right; + line-height: 35px; + margin: 0 5px 0 0; + } + select { + position: relative; + appearance: none; + -webkit-appearance: none; + border: 1px solid @lightgrey-color; + height: 35px; + background: white url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MCAyMDAiPjxwYXRoIGQ9Ik0xMC4zIDMzLjVsMi4yLTIuMSA3LjctNy44LTIuMS0yLjEtNy44IDcuNy03LjctNy43LTIuMiAyLjEgNy44IDcuOCAyLjEgMi4xeiIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9IiMwNzgwNzgiLz48cGF0aCBkPSJNMTAuMyAxMzMuNWwyLjItMi4xIDcuNy03LjgtMi4xLTIuMS03LjggNy43LTcuNy03LjctMi4yIDIuMSA3LjggNy44IDIuMSAyLjF6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZmlsbD0iI2MwMCIvPjwvc3ZnPg==") no-repeat right 3px; + background-size: auto 100px; + padding: 5px 20px 5px 5px; + border-radius: 0; + font-family: @font-sans-bold; + font-size: 14px; + line-height: 1; + box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.1); + color: lighten(@basegrey-color, 20%); + .transition(); + &:hover { + background-position: right -47px; + border-color: @secondary-color; + color: @primary-color; + } + } + + } + } + p.tx-dlf-sortinfo { + text-align: left; + height: 40px; + border-bottom: 1px solid @lightgrey-color; + } + } + @media screen and (min-width: @desktopViewportWidth) { + h2 { + font-size: 36px; + } + } + } +} + +.tx-dlf-listview { // The List itself + #leftcol & { + .tx-dlf-abstracts { + list-style: none; + margin: 0; + padding: 0; + li { + position: relative; + padding: 30px 0; + text-align: center; + border-bottom: 1px solid @lightgrey-color; + &:before { + display: none; + } + .tx-dlf-listview-thumbnail { + margin-bottom: 10px; + img { + max-height: 150px; + } + } + dl { + font-family: @font-sans-normal; + font-size: 14px; + -moz-font-feature-settings: "lnum"; + -webkit-font-feature-settings: "lnum"; + font-feature-settings: "lnum"; + dt, dd { + display: inline; + } + dt { + font-family: @font-sans-bold; + &:after { + content: ": "; + } + &.tx-dlf-title { + display: none + } + } + dd { + &.tx-dlf-title { + font-size: 22px; + display: block; + a { + text-decoration: none; + font-family: @font-sans-bold; + } + &:after { + display: none; + } + } + &:after { + content: "//"; + margin: 0 5px; + } + &:last-child:after { + display: none; + } + } + } + .tx-dlf-morevolumes { + position: relative; + width: 40px; + height: 40px; + .text-hide(); + display: inline-block; + .transform(rotate(90deg)); + .transition(); + transform-origin: center center; + cursor: pointer; + &:before { + position: absolute; + top: -5px; + left: 5px; + content: ">>"; + font-size: 40px; + line-height: 40px; + font-family: @font-sans-bold; + color: @secondary-color; + display: block; + letter-spacing: -.1em; + } + } + .tx-dlf-hidevolumes { + display: none; + } + &.tx-dlf-volumes-open { + .tx-dlf-morevolumes { + .transform(rotate(-90deg)); + } + } + .tx-dlf-volume { + position: relative; + background: desaturate(lighten(@secondary-color-light, 40%), 15%); + padding: 15px 0; + display: none; + li { + border-bottom: 1px solid white; + padding: 15px; + .tx-dlf-listview-thumbnail img { + width: 60px; + margin-left: 15px; + } + dl dd.tx-dlf-title { + font-size: 18px; + a { + color: darken(@secondary-color, 5%); + } + } + &:first-child { + border-top: 1px solid white; + } + } + &:before { + position: absolute; + top: -15px; + left: 50%; + margin-left: -15px; + height: 0; + width: 0; + border: 15px solid transparent; + border-top-width: 0; + border-bottom-color: desaturate(lighten(@secondary-color-light, 40%), 15%); + content: " "; + } + } + } + @media screen and (min-width: @phoneLandscapeViewportWidth) { + border-top: 1px solid @lightgrey-color; + li { + text-align: left; + display: flex; + align-items: center; + line-height: 1.7; + flex-wrap: wrap; + .tx-dlf-listview-thumbnail { + position: relative; + margin: 0 25px 0 0; + line-height: 0; + flex: 0 1 auto; + img { + width: 90px; + height: auto; + } + &:empty { + width: 90px; + min-height: 90px; + border: 1px solid @lightgrey-color; + &:before, + &:after { + margin: -25px -3px 0 0; + position: absolute; + top: 50%; + right: 50%; + width: 1px; + height: 50px; + background: @lightgrey-color; + content: " "; + } + &:before { + .transform(rotate(-45deg)); + } + &:after { + .transform(rotate(45deg)); + } + } + } + dl { + flex: 1 1 60%; + dd.tx-dlf-title { + line-height: 1.2; + margin-bottom: 5px; + } + } + .tx-dlf-volume { + flex: 0 0 100%; + &:before { + left: auto; + right: 5px; + } + } + } + } + } + } +} + +.tx-dlf-listview { // styling for collection headers (Image and some paragraphs) + > img { + width: 100%; + height: auto; + border: 1px solid @lightgrey-color; + margin-top: 20px; + max-height: 350px; + } + > p > img { // Hide old inline images + display: none; + } + @media screen and (min-width: @tabletViewportWidth) { + > img { + float: left; + width: auto; + margin: 30px 15px 15px 0; + } + } +} + +// EOF \ No newline at end of file diff --git a/Resources/Private/Less/Modules/Listsearch.less b/Resources/Private/Less/Modules/Listsearch.less new file mode 100644 index 00000000..838bf03e --- /dev/null +++ b/Resources/Private/Less/Modules/Listsearch.less @@ -0,0 +1,255 @@ +/* + * + * List search elements + * ================================================ + * Styling for simple and extended + * search forms in list views + * + * Author: Thomas Jung + * + */ + +#rightcol .tx-dlf-enable-offcanvas { // the basic setup for the off-canvas behaviour + position: fixed; + top: 0; + right: 0; + bottom: 0; + width: 90%; + background: fade(@secondary-color, 97%); + z-index: 102; + text-align: left; + padding: 15px; + margin: 0; + border: none; + color: white; + .transform(translateX(100%)); + .offcanvas-toggle { + position: absolute; + left: -30px; + border-radius: 30px 0 0 30px; + bottom: 100px; + width: 30px; + height: 60px; + background: fade(@secondary-color, 97%); + &:before { + position: absolute; + top: 20px; + left: 7px; + width: 14px; + height: 14px; + border-radius: 14px; + border: 2px solid white; + content: " "; + } + &:after { + position: absolute; + right: 4px; + bottom: 20px; + width: 2px; + height: 8px; + background: white; + content: " "; + .transform(rotate(-45deg)); + } + } + &.open { + .transform(translateX(0)); + z-index: 1100; + .offcanvas-toggle { + border-color: white; + } + } + h3 { + color: white; + } + @media screen and (min-width: @tabletViewportWidth) { + width: 60%; + } + @media screen and (min-width: @tabletLandscapeViewportWidth) { + position: relative; + top: auto; + right: auto; + bottom: auto; + width: auto; + background: white; + color: @basegrey-color; + .transform(none); + .offcanvas-toggle { + display: none; + } + h3 { + color: @primary-color; + } + } +} + +#rightcol .tx-dlf-search { // the scrolling container with search elements + position: absolute; + top: 60px; + right: 15px; + bottom: 15px; + left: 15px; + overflow: hidden; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + form { // The input fields and buttons + position: relative; + margin-bottom: 20px; + font-family: @font-sans-normal; + font-size: 14px; + input { + &[type="text"] { + position: relative; + width: 100%; + font-family: @font-sans-normal; + font-size: 14px; + background: white; + border: 0; + line-height: 1.1; + padding: 4px 10px; + height: 40px; + color: @basegrey-color; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + margin-bottom: 10px; + &:focus { + color: @secondary-color; + } + } + &[type="submit"] { + position: absolute; + top: 0; + right: 0; + width: 40px; + height: 40px; + .text-hide(); + background: lighten(@secondary-color-light, 40%) url('@{control-icons}') no-repeat -560px 0; + background-size: auto 120px; + border-radius: 20px 0 0 20px; + } + &[type="radio"] { + position: relative; + appearance: none; + -webkit-appearance: none; + border: 2px solid rgba(255, 255, 255, 0.4); + width: 20px; + height: 20px; + border-radius: 10px; + vertical-align: middle; + &:after { + position: absolute; + top: 4px; + left: 4px; + width: 8px; + height: 8px; + border-radius: 4px; + background: white; + content: " "; + opacity: 0; + } + &:hover { + border-color: white; + } + &:checked { + background: lighten(@secondary-color, 10%); + &:after { + opacity: 1; + } + } + } + } + label { + margin-right: 10px; + &[for="tx-dlf-search-query"] { + display: none; + } + } + #tx-dlf-search-suggest { + position: absolute; + ul { + z-index: 300; + margin: 10px 0 0 0; + padding: 0; + background: white; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.4); + li { + color: @secondary-color; + padding: 10px 15px; + font-family: @font-sans-bold; + border-bottom: 1px solid @lightgrey-color; + .no-touchevents & { + .transition(all .15s ease-in); + cursor: pointer; + &:hover { + background: white; + color: @secondary-color; + } + } + } + &:after { + position: absolute; + top: -10px; + left: 20px; + width: 0; + height: 0; + border: 10px solid transparent; + border-top-width: 0; + border-bottom-color: white; + content: " "; + z-index: 301; + } + } + } + } + @media screen and (min-width: @tabletLandscapeViewportWidth) { + position: relative; + top: auto; + right: auto; + bottom: auto; + left: auto; + overflow: visible; + form { + input { + &[type="text"] { + box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.1); + border: 1px solid rgb(175, 175, 175); + } + &[type="submit"] { + top: 1px; + right: 1px; + height: 38px; + } + &[type="radio"] { + border-color: @secondary-color; + height: 16px; + width: 16px; + border-radius: 8px; + &:after { + top: 2px; + left: 2px; + } + &:hover { + border-color: @primary-color; + } + } + } + label { + &:hover { + color: @primary-color; + } + } + #tx-dlf-search-suggest { + ul { + background: rgba(@secondary-color, .9); + li { + color: white; + } + &:after { + border-bottom-color: rgba(@secondary-color, .9); + } + } + } + } + } +} + +// EOF \ No newline at end of file diff --git a/Resources/Private/Less/Modules/Newspapers.less b/Resources/Private/Less/Modules/Newspapers.less new file mode 100644 index 00000000..d5fe6f31 --- /dev/null +++ b/Resources/Private/Less/Modules/Newspapers.less @@ -0,0 +1,423 @@ +/* + * + * Newspapers + * ================================================ + * All styles for newspaper specials like + * calendar and issue views + * + * Author: Thomas Jung + * + */ + +/* ==============[ general settings for newspaper related things ]======================== */ +.tx-dlf-calendar-years, +.tx-dlf-calendar { + padding: 0 10px 60px 10px; + max-height: 100%; + overflow: hidden; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + text-align: left; + font-family: @font-sans-normal; + font-feature-settings: 'lnum'; + @media screen and (min-width: @tabletLandscapeViewportWidth) { + position: relative; + height: 100%; + padding: 30px 30px 60px 30px; + } +} + +body.calendar { + .document-functions, + .view-functions { + display: none; + } + .step-back-button { + top: 60px; + left: 10px; + border: 1px solid @lightgrey-color; + } + @media screen and (min-width: @tabletLandscapeViewportWidth) { + .step-back-button { + border: 0 none; + top: 80px; + left: 15px; + } + } +} + +/* ==============[ all volumes of this newspapers ]======================================== */ +.tx-dlf-calendar-years { + .year-anchor { + border-bottom: 1px solid @lightgrey-color; + line-height: 1.4; + font-family: @font-sans-bold; + font-size: 14px; + padding: 5px 0 10px 50px; + a { + color: @secondary-color; + } + } + .meta-hint-year { + display: none; + } + ul { + li { + margin: 20px; + a { + display: block; + padding: 25px 20px; + text-align: center; + color: @secondary-color; + font-family: @font-sans-bold; + background: lighten(@secondary-color-light, 40%); + } + } + } + @media screen and (min-width: @tabletLandscapeViewportWidth) { + vertical-align: middle; + .year-anchor { + padding: 0 0 10px 30px; + } + .meta-hint-year { + display: block; + opacity: .5; + padding: 5px 0 0 30px; + font-size: 14px; + } + ul { + position: relative; + margin-top: 30px; + min-height: calc(100% - 60px); + display: flex; + flex-wrap: wrap; + justify-content: center; + align-content: center; + li { + display: inline-block; + a { + .no-touchevents & { + .transition(); + &:hover { + .transform(scale(1.2)); + } + } + } + } + } + } + @media screen and (min-width: @desktopViewportWidth) { + ul { + li { + margin: 30px; + a { + font-size: 20px; + font-family: @font-sans-normal; + } + } + } + } +} + +/* ==============[ monthly navigation with day dropdowns ]================================ */ +.tx-dlf-calendar { + .calendar-list-selection, .list-view { + display: none; + } + .year-anchor { + border-bottom: 1px solid @lightgrey-color; + line-height: 1.4; + font-family: @font-sans-bold; + font-size: 14px; + padding: 5px 0 10px 50px; + a { + color: @secondary-color; + } + } + .year { + font-size: 20px; + margin: 20px 0 -20px 0; + font-weight: bold; + line-height: 1.4; + text-align: center; + } + .calendar-view { + position: relative; + margin: 30px 0 0 0; + .year { + flex: 0 0 calc(100% - 60px); + font-family: @font-serif-bold; + font-size: 20px; + margin: 20px 30px; + border-bottom: 1px solid @lightgrey-color; + color: @secondary-color; + text-shadow: -4px 0 3px white, 4px 0 3px white; + height: 16px; + } + table { + width: 100%; + margin: 50px 0; + text-align: center; + border-bottom: 1px solid @lightgrey-color; + caption { + font-family: @font-sans-bold; + border-bottom: 1px solid @lightgrey-color; + font-size: 12px; + text-transform: uppercase; + padding-bottom: 5px; + color: @basegrey-color; + } + tr { + td, th { + width: 14.285%; + padding: 6px; + } + th { + font-family: @font-sans-bold; + font-size: 14px; + color: lighten(@basegrey-color, 25%); + } + td { + color: @secondary-color; + h4, + .day-label { + position: relative; + color: @secondary-color; + .transition(); + font-weight: bold; + display: block; + border: 1px solid transparent; + &:after { + position: absolute; + top: 19px; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border: 5px solid transparent; + border-top-width: 0; + border-bottom-color: fade(@secondary-color, 93%); + content: " "; + opacity: 0; + .transform(translateY(15px)); + .transition(); + } + } + h4 { + font-family: @font-sans-bold; + border-color: rgba(@secondary-color,.2); + background: lighten(@secondary-color-light, 40%); + border-radius: 100%; + } + .no-touchevents & { + cursor: pointer; + } + ul { + position: absolute; + left: 0; + right: 0; + padding: 10px; + margin-top: 10px; + background: fade(@secondary-color, 93%); + opacity: 0; + .transform(scaleY(0)); + .transition(); + transform-origin: center top; + li { + margin: 10px 0; + a { + display: block; + padding: 10px; + color: #fff; + } + } + } + &.open { + h4, + .day-label{ + .transform(scale(1.2)); + &:after { + opacity: 1; + .transform(translateY(0)); + } + } + ul { + opacity: 1; + z-index: 10000; + .transform(scaleY(1)); + } + } + } + &:nth-child(even) { + td { + background: lighten(@secondary-color-light, 40%); + h4 { + border-color: rgba(@secondary-color,.4); + background: white; + } + } + } + } + } + } + @media screen and (min-width: @tabletLandscapeViewportWidth) { + .calendar-list-selection { + display: block; + } + .calendar-list-selection { + position: absolute; + top: 85px; + right: 85px; + a { + position: relative; + border: 1px solid @secondary-color; + color: @secondary-color; + background: white; + font-size: 14px; + font-family: @font-sans-bold; + line-height: 18px; + padding: 10px; + height: 40px; + border-radius: 30px; + display: inline-block; + margin-left: 5px; + .no-touchevents & { + cursor: pointer; + } + &.active { + background: @secondary-color; + color: white; + &:before { + position: absolute; + bottom: -5px; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border: 5px solid transparent; + border-bottom-width: 0; + border-top-color: @secondary-color; + content: " "; + } + } + } + } + .year-anchor { + padding: 0 0 10px 30px + } + .year { + font-weight: normal; + font-size: 30px; + } + .calendar-view, .list-view { + position: absolute; + top: 160px; + right: 30px; + left: 30px; + opacity: 0; + .transform(translateY(-100px) scaleY(0)); + .transition(); + display: block; + pointer-events: none; + padding-bottom: 60px; + height: 0; + &.active { + .transform(translateY(0) scaleY(1)); + opacity: 1; + pointer-events: all; + } + } + .calendar-view { + margin: 0 -30px; + display: flex; + flex-wrap: wrap; + .month { + position: relative; + padding: 30px; + flex: 1 0 auto; + table { + width: 100%; + margin: 0; + tr { + td { + position: relative; + h4, + .day-label { + padding: 5px; + } + ul { + left: 50%; + right: auto; + padding: 0 10px; + .transform(translateX(-50%)); + } + &.open { + h4, + .day-label { + .transform(scale(1.4)); + &:after { + top: 26px; + opacity: 1; + .transform(translateY(0)); + } + } + ul { + z-index: 200; + } + } + } + } + } + } + } + .list-view { + ul { + li { + padding: 10px; + margin: 10px 0; + font-size: 14px; + .transition(); + &:nth-child(even) { + background: lighten(@secondary-color-light, 40%); + } + .listview-date { + line-height: 25px; + &:after { + content: ": "; + } + } + a { + background: @secondary-color; + color: #fff; + display: inline-block; + border-radius: 6px; + padding: 5px 10px; + margin: 0 5px; + .transition(); + &:last-child { + margin-right: 0; + } + .no-touchevents & { + &:hover { + background: fade(@primary-color, 50%); + } + } + } + } + } + } + } + @media screen and (min-width: @desktopViewportWidth) { + .calendar-list-selection { + top: 40px; + } + .calendar-view { + justify-content: center; + .month { + flex: 0 0 auto; + } + } + } +} + +// EOF diff --git a/Resources/Private/Less/Modules/Pagegrid.less b/Resources/Private/Less/Modules/Pagegrid.less new file mode 100644 index 00000000..eb529d08 --- /dev/null +++ b/Resources/Private/Less/Modules/Pagegrid.less @@ -0,0 +1,179 @@ +/* + * + * Gridview + * ================================================ + * All special styles for the gridview which shows + * multiple pages of one document side by side + * + * Author: Thomas Jung + * + */ + +body.gridview { + .view-functions { + display: none; + } + .step-back-button { + top: 60px; + left: 10px; + border: 1px solid @lightgrey-color; + } + @media screen and (min-width: @tabletLandscapeViewportWidth) { + .step-back-button { + border: 0 none; + top: 80px; + left: 15px; + } + } +} + +.tx-dlf-pagegrid-list { + position: absolute; + top: 60px; + right: 0; + bottom: 0; + left: 0; + overflow: hidden; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + li { + width: 100px; + height: 160px; + display: inline-block; + margin: 10px; + .no-touchevents & { + .transition(); + &:hover { + .transform(scale(1.1)); + } + } + img { + position: relative; + height: 100%; + width: 100%; + object-fit: contain; + max-height: 150px; + } + .tx-dlf-pagegrid-pagination { + margin-top: 5px; + font-weight: 700; + font-size: 12px; + color: @secondary-color; + } + &.current { + .transform(scale(1.1)); + img { + border: 6px solid @secondary-color; + } + } + } + @media screen and (min-width: @tabletViewportWidth) { + top: 0; + padding-top: 70px; + li { + width: 120px; + height: 180px; + margin: 20px; + } + } + @media screen and (min-width: @tabletLandscapeViewportWidth) { + li { + width: 150px; + height: 200px; + .tx-dlf-pagegrid-pagination { + font-size: 14px; + } + } + } +} + +.tx-dlf-pagegrid-pagebrowser { // The stupid old paging. YEAH! + position: absolute; + bottom: 15px; + height: 1px; + width: 290px; + left: 50%; + margin-left: -145px; + line-height: 0; + background: green; + .text-hide(); + a { + position: absolute; + bottom: 0; + display: none; + width: 40px; + height: 40px; + &:before { + position: absolute; + top: 0; + left: 0; + bottom: -1px; + width: 40px; + height: 40px; + border-radius: 20px; + background: white url('@{control-icons}') no-repeat 0 0; + content: " "; + } + &:first-child { + display: block; + left: 0; + &:before { + background-position: -240px -80px; + } + } + &:last-child { + display: block; + right: 0; + &:before { + background-position: -280px -80px; + } + } + } + @media screen and (min-width: @tabletLandscapeViewportWidth) { + height: 70px; + padding: 15px; + font-family: @font-sans-bold; + font-size: 14px; + line-height: 30px; + color: white; + white-space: nowrap; + width: auto; + margin: 0; + .transform(translateX(-50%)); + -moz-font-feature-settings: "lnum"; + -webkit-font-feature-settings: "lnum"; + font-feature-settings: "lnum"; + background: fade(@secondary-color, 90%); + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2); + a, + a:first-child, + a:last-child { + color: @secondary-color; + position: relative; + display: inline-block; + bottom: auto; + margin: 0 3px; + left: auto; + right: auto; + background: white; + border-radius: 20px; + width: 30px; + height: 30px; + &:before { + display: none; + } + } + } + @media screen and (min-width: @desktopViewportWidth) { + font-size: 18px; + line-height: 40px; + a, + a:first-child, + a:last-child { + width: 40px; + height: 40px; + } + } +} + +// EOF \ No newline at end of file diff --git a/Resources/Private/Less/Sidebar.less b/Resources/Private/Less/Sidebar.less new file mode 100644 index 00000000..6c83a126 --- /dev/null +++ b/Resources/Private/Less/Sidebar.less @@ -0,0 +1,771 @@ +/* + * + * Sidebar + * ================================================ + * Special styles for the sidebar which + * represents the base control unit + * + * Author: Thomas Jung + * + */ + +/* ==============[ Basic settings for the control bar ]===== */ +.control-bar { + -moz-font-feature-settings: "lnum"; + -webkit-font-feature-settings: "lnum"; + font-feature-settings: "lnum"; + .fullscreen & { + width: 0; + overflow: hidden; + } + .static & { + .transition(none); + } + .header-bar { // header bar (with logo, secondary navigation and language switch) + position: fixed; + top: 0; + right: 0; + left: 0; + min-height: 50px; + z-index: 100; + overflow: hidden; + background: @primary-color; + font-family: @font-sans-normal; + .brand { + position: absolute; + top: 15px; + left: 10px; + height: 22px; + text-transform: uppercase; + white-space: nowrap; + .logo-replacement { + display: none; + } + a { + position: relative; + width: 100%; + height: 100%; + color: white; + font-size: 14px; + line-height: 28px; + text-align: left; + background: url('@{header-logo}') no-repeat left center; + background-size: auto 100%; + display: block; + padding-left: 80px; + &:before { + content: "> "; + } + } + } + nav { + .nav-toggle { + position: absolute; + top: 13px; + right: 15px; + width: 25px; + height: 30px; + padding: 0; + border: 0 none; + background: transparent; + outline: none; + .nav-label { + display: none; + } + .nav-button-bar { + position: relative; + width: 100%; + height: 2px; + border-radius: 2px; + margin-bottom: 4px; + background: white; + display: block; + .transition(); + } + &.active { + .nav-button-bar { + &:nth-of-type(2) { + .transform(translateY(6px) rotate(45deg)); + } + &:nth-of-type(3) { + .transform(scale(0)); + opacity: 0; + } + &:nth-of-type(4) { + .transform(translateY(-6px) rotate(-45deg)); + } + } + } + } + .language-nav { + position: absolute; + right: 45px; + top: 15px; + font-size: 12px; + li { + position: relative; + display: inline-block; + margin-right: 4px; + a, + span { + position: relative; + padding: 6px; + display: block; + color: white; + } + &.text-muted { + opacity: .4; + } + } + &:before { + position: absolute; + top: 0; + left: 50%; + margin-left: -6px; + content: "/"; + opacity: 0.2; + font-size: 24px; + color: white; + font-weight: 100; + text-align: center; + width: 10px; + } + } + .secondary-nav { + position: relative; + top: 55px; + width: 100%; + text-align: left; + padding-bottom: 0; + max-height: 0; + opacity: 0; + background: @secondary-color; + .transition(all .3s ease-out); + border-top: 2px solid white; + font-family: @font-sans-bold; + li { + a { + padding: 15px; + display: block; + border-bottom: 1px solid rgba(255, 255, 255, 0.2); + color: white; + } + &:first-child { + a { + border-top: 1px solid rgba(255, 255, 255, 0.2); + } + } + } + &.open { + padding-bottom: 65px; + max-height: 320px; + min-height: 60px; + opacity: 1; + } + } + } + .fullscreen & { + min-height: 0; + } + } + .step-back-button { + position: absolute; + top: 120px; + left: 15px; + width: 40px; + height: 40px; + border-radius: 20px; + z-index: 50; + .text-hide(); + background: white url('@{control-icons}') no-repeat -600px -40px; + background-size: auto 120px; + } + .metadata-wrapper, .toc-wrapper { // metadata and table of contents (as off canvas elements in mobile) + position: absolute; + top: 55px; + bottom: 0; + width: 90%; + background: fade(@secondary-color, 97%); + z-index: 102; + text-align: left; + padding: 15px; + .transition(); + .offcanvas-toggle { + position: absolute; + bottom: 5px; + width: 30px; + height: 60px; + background: fade(@secondary-color, 97%) url('@{control-icons}') no-repeat 0 0; + background-size: auto 120px; + border: 1px solid fade(white, 50%); + } + &.open { + .transform(translateX(0)); + z-index: 1100; + .offcanvas-toggle { + border-color: white; + } + } + h3 { + display: none; + } + } + .metadata-wrapper { + right: 0; + .transform(translateX(100%)); + .offcanvas-toggle { + left: -30px; + border-radius: 30px 0 0 30px; + background-position: -442px 9px; + border-right: 0 none; + } + .metadata-toggle { + display: none; + } + + } + .toc-wrapper { + left: 0; + .transform(translateX(-100%)); + .offcanvas-toggle { + right: -30px; + border-radius: 0 30px 30px 0; + background-position: -447px -30px; + border-left: 0 none; + } + } + @media screen and (min-width: @tabletLandscapeViewportWidth) { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 33%; + z-index: 1100; + color: @basegrey-color; + border-right: 2px solid white; + .transition(); + &:before { + position: absolute; + top: 0; + left: 0; + right: 0; + height: 70px; + background: @primary-color; + content: " "; + pointer-events: none; + } + &:after { + position: absolute; + top: 90px; + right: 0; + bottom: 15px; + width: 1px; + content: " "; + background: @lightgrey-color; + } + .header-bar { + position: absolute; + top: 10px; + background: transparent; + overflow: visible; + .brand a { + font-size: 12px; + } + &:after { + display: none; + content: none; + } + nav { + .nav-toggle { + top: 12px; + right: 12px; + } + .language-nav { + right: 35px; + top: 14px; + } + .secondary-nav { + position: absolute; + top: -5px; + right: 0; + width: 200px; + background: fade(@secondary-color, 97%); + max-height: none; + font-size: 14px; + .transform(scaleX(0)); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); + padding: 15px; + border-top: 0; + &:before { + position: absolute; + top: 20px; + left: -10px; + width: 0; + height: 0; + border: 10px solid transparent; + border-left-width: 0; + border-right-color: fade(@secondary-color, 97%);; + content: " "; + } + li { + a { + padding: 0 10px; + border: 0 none; + line-height: 30px; + .transition(); + color: white; + &:hover { + background: rgba(255, 255, 255, 0.2); + } + } + &:first-child { + a { + border: 0 none; + } + } + } + &.open { + padding: 15px; + opacity: 1; + right: -220px; + .transform(scaleX(1)); + } + } + } + } + .step-back-button { + top: 80px; + left: 20px; + width: auto; + background: transparent; + font-size: 12px; + color: @secondary-color; + font-family: @font-sans-bold; + line-height: 1.1; + text-transform: uppercase; + cursor: pointer; + &:before { + content: "<"; + font-size: 16px; + margin-right: 5px; + } + } + .ctrldata-container { + position: absolute; + top: 105px; + right: 15px; + bottom: 20px; + left: 15px; + overflow: hidden; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + } + .metadata-wrapper, .toc-wrapper { + position: relative; + .transform(translateX(0)); + text-align: left; + background: transparent; + padding: 20px 0; + width: 100%; + .offcanvas-toggle { + display: none; + } + } + .metadata-wrapper { + top: auto; + bottom: auto; + padding-bottom: 40px; + .transition(); + .tx-dlf-metadata { + overflow: hidden; + } + .metadata-toggle { + position: absolute; + bottom: 0; + right: 20px; + padding: 4px 20px 4px 0; + font-size: 12px; + color: @primary-color; + display: block; + cursor: pointer; + &:before { + position: absolute; + top: -5px; + right: -5px; + width: 30px; + height: 30px; + background: white url('@{control-icons}') no-repeat -564px -84px; + background-size: auto 120px; + content: " "; + .transform(scale(.6)); + } + } + } + .toc-wrapper { + top: auto; + bottom: auto; + } + } + @media screen and (min-width: @desktopViewportWidth) { + width: 25%; + .header-bar { + .brand { + top: 5px; + left: 20px; + height: 40px; + a { + font-size: 11px; + line-height: 11px; + padding: 30px 0 0 31px; + background-size: auto 30px; + background-position: 0 0; + } + } + } + .metadata-wrapper, .toc-wrapper { + padding: 20px 5px; + } + .metadata-wrapper { + padding-bottom: 40px; + } + } + @media screen and (min-width: 1600px) { + width: 22%; + } + @media screen and (min-width: 2000px) { + width: 20%; + } +} + +/* ==============[ toc (inside the respective wrap > see above) ]========================= */ +.tx-dlf-toc { + position: relative; + height: 100%; + ul.toc { + position: relative; + overflow: hidden; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + height: 100%; + line-height: 1.2; + font-size: 14px; + border-top: 1px solid @lightgrey-color; + ul li { + position: relative; + &.submenu { + a { + padding-right: 10px; + } + &:before { + position: absolute; + top: 15px; + right: 0; + width: 0; + height: 0; + content: " "; + border: 3px solid transparent; + border-bottom-width: 0; + border-top-color: white; + } + } + &.current { + background: white; + a { + color: @secondary-color; + .meta-type-icon { + background-position-y: -30px !important; + } + } + } + &.placeholder { + position: relative; + padding: 15px 0 15px 30px; + color: white; + font-family: @font-sans-bold; + &:before { + position: absolute; + top: 0; + bottom: 0; + left: 12px; + width: 1px; + background: white; + opacity: .4; + content: " "; + } + &:after { + position: absolute; + top: 16px; + left: 3px; + height: 15px; + font-size: 24px; + line-height: 0; + content: "..."; + background: lighten(@secondary-color, 1%); + } + } + a, span.a, > span.title { + position: relative; + padding: 8px 0 8px 30px; + display: block; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + color: white; + .pagination { + margin-left: 3px; + opacity: 0.4; + } + .meta-type-icon { + position: absolute; + top: 1px; + left: -2px; + width: 30px; + height: 30px; + text-indent: 100%; + overflow: hidden; + background: url('@{basepath}Resources/Public/Images/viewerTocIcons.svg') no-repeat -90px 0; + background-size: auto 60px; + display: block; + .transform(scale(.6)); + &.meta-type-Abbildung { + background-position: 0 0; + } + &.meta-type-Werbung { + background-position: -30px 0; + } + &.meta-type-Artikel { + background-position: -60px 0; + } + } + } + span.a, > span.title { + opacity: 0.5; + font-weight: normal; + } + } + } + .tx-dlf-wincontent > ul.toc > li > a { // Based on old shitty markup, it selects the issue title + color: white; + font-size: 16px; + padding: 5px 0; + display: block; + .meta-type-icon { + margin-right: 5px; + opacity: .6; + } + } + @media screen and (min-width: @tabletLandscapeViewportWidth) { + &:after { + position: absolute; + top: 0; + right: 0; + left: 0; + height: 1px; + background: @lightgrey-color; + content: " "; + } + ul.toc { + font-size: 12px; + .transition(); + ul li { + &:nth-child(even) { + background: lighten(@secondary-color-light, 40%); + } + &.submenu { + a { + padding-right: 15px; + } + &:before { + top: 12px; + right: 5px; + border-top-color: fade(@secondary-color-light, 40%); + } + } + &.current { + background: @secondary-color-light; + a { + color: white; + .meta-type-icon { + background-position-y: 0 !important; + opacity: .8; + } + } + } + &.placeholder { + padding: 20px 0 20px 30px; + color: lighten(@basegrey-color, 30%); + cursor: pointer; + &:before { + left: 10px; + background: @secondary-color-light; + } + &:after { + top: 20px; + left: 1px; + background: white; + } + } + a, span.a, > span.title { + padding: 6px 0 6px 20px; + margin: 2px 0; + color: @basegrey-color; + .meta-type-icon { + top: -3px; + left: -6px; + opacity: .5; + .transform(scale(.5)); + background-position: -90px -30px; + &.meta-type-Abbildung { + background-position: 0 -30px; + } + &.meta-type-Werbung { + background-position: -30px -30px; + } + &.meta-type-Artikel { + background-position: -60px -30px; + } + } + } + .no-touchevents & a { + .transition(); + &:hover { + background: fade(@secondary-color-light, 30%); + } + } + } + } + .tx-dlf-wincontent > ul.toc > li > a { // Based on old shitty markup, it selects the issue title (again) + color: @basegrey-color; + } + } +} + +/* ==============[ metadata (inside the respective wrap > see above) ]==================== */ +.tx-dlf-metadata { + position: relative; + overflow: hidden; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + height: 100%; + line-height: 1.4; + h1 { + font-size: 20px; + font-weight: normal; + font-family: @font-serif-bold;; + border-bottom: 1px solid @lightgrey-color; + padding-bottom: 10px; + margin-bottom: 5px; + line-height: 1.1; + color: white; + } + dl { + color: white; + margin: 20px 0; + dt, dd { + display: block; + } + dt { + font-size: 12px; + font-family: @font-serif-bold;; + margin-top: 20px; + &:first-child { + margin-top: 0; + } + } + dd a { + color: white; + } + } + @media screen and (min-width: @tabletLandscapeViewportWidth) { + line-height: 1.4; + h1 { + color: black; + margin-bottom: -5px; + } + dl { + color: black; + border-bottom: 1px solid @lightgrey-color; + padding: 10px 0; + margin: 0; + dt, dd { + font-size: 14px; + display: inline; + line-height: 20px; + } + dd { + margin-right: 4px; + & + dd { + display: inline-block; + } + &.tx-dlf-metadata-collection { + background: lighten(@lightgrey-color,5%); + border-radius: 20px; + padding: 2px 5px; + margin-right: 6px; + } + &.tx-dlf-metadata-author a { + background: lighten(@secondary-color-light,25%); + border-radius: 20px; + padding: 2px 5px; + margin-right: 2px; + } + } + dt { + &:before { + position: relative; + width: 100%; + height: 1px; + display: table; + clear: both; + content: " "; + } + &:after { + content: ": "; + } + } + /* + * Disable following styles in order to match new (a bit buggy) meta data markup + * + * dt.tx-dlf-type { + * display: none; + * } + * dd.tx-dlf-type { + * font-size: 12px; + * font-weight: 400; + * opacity: 0.5; + * display: inline; + * } + * dt.tx-dlf-title { + * display: none; + * } + * dd.tx-dlf-title { + * font-weight: 300; + * font-size: 22px; + * a { + * color: @slub-basegrey; + * } + * } + * + */ + &:nth-of-type(n+2) { + display: none; + } + dd { + a { + color: black; + &[href*="digital.slub"] { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + display: inline-block; + width: 80%; + line-height: 16px; + vertical-align: text-bottom; + } + } + } + } + } +} + +// EOF \ No newline at end of file diff --git a/Resources/Private/Less/Structure.less b/Resources/Private/Less/Structure.less new file mode 100644 index 00000000..3f3837c5 --- /dev/null +++ b/Resources/Private/Less/Structure.less @@ -0,0 +1,360 @@ +/* + * + * Structure + * ================================================ + * Basic definition of body, containers and other + * structural elements + * + * Author: Thomas Jung + * + */ + +/* ==============[ basic html element settings ]========================================== */ +* { + box-sizing: border-box; +} + +html, body { + position: relative; + height: 100%; +} + +body { + text-align: center; + font-family: @font-serif-normal; + background: @secondary-color-light; + line-height: 1; +} + +a { + color: @primary-color; + text-decoration: none; +} + +/* ==============[ 'window' structure with small offset ]================================= */ +.main-wrapper { + position: absolute; + top: 0; + right: 0; + bottom: 12px; + left: 0; + background: white; + box-shadow: 0 3px 8px rgba(0, 0, 0, 0.2); + overflow: hidden; + .transition(); + .hidden & { + opacity: 0; + } + .static & { + .transition(none); + } + .fullscreen & { + bottom: 0; + } + @media screen and (min-width: @tabletLandscapeViewportWidth) { + top: 5px; + right: 5px; + bottom: 5px; + left: 5px; + .fullscreen & { + top: 0; + right: 0; + bottom: 0; + left: 0; + } + } + @media screen and (min-width: @desktopViewportWidth) { + top: 20px; + right: 20px; + bottom: 25px; + left: 20px; + } +} + +.document-view { + position: absolute; + top: 55px; + right: 0; + bottom: 0; + left: 0; + .transition(); + .fullscreen & { + top: 0; + right: 0; + bottom: 0; + left: 0; + } + .static & { + .transition(none); + } + #tx-dlf-map, + .tx-dlf-map { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + } + .tx-dlf-logobar { + position: absolute; + pointer-events: none; + right: 0; + bottom: 80px; + left: 0; + height: 30px; + opacity: .15; + display: flex; + align-items: center; + justify-content: center; + li { + position: relative; + flex: 0 0 auto; + padding: 0 15px; + height: 40px; + img { + max-height: 30px; + -webkit-filter: grayscale(100%); + filter: grayscale(100%); + } + } + } + .document-functions { + .provider { + position: absolute; + top: 0; + left: 0; + right: 0; + text-align: left; + background: rgba(white, 92%); + display: flex; + align-items: center; + padding: 10px; + border-bottom: 1px solid @lightgrey-color; + .transition(); + > a { + display: none; // Kill the logo inside the control bar in order to use the new logobar (.tx-dlf-logobar) + } + .mobile-meta { + position: relative; + font-size: 12px; + line-height: 1.3; + flex: 0 1 auto; + dt { + display: none; + } + dd { + &.tx-dlf-title a { + position: relative; + font-weight: bold; + color: @basegrey-color; + font-size: 16px; + } + } + } + .mobile-controls { + position: absolute; + bottom: -50px; + right: 15px; + display: flex; + form { // The goto page button + position: relative; + width: 40px; + height: 40px; + flex: 0 0 40px; + margin-right: 5px; + label { + display: none; + } + select { + position: relative; + width: 40px; + height: 40px; + padding-left: 40px; + background: white url('@{control-icons}') no-repeat -600px -80px; + background-size: auto 120px; + outline: none; + border-radius: 20px; + -webkit-appearance: none; + border: 0 none; + &[disabled] { + display: none; + } + } + } + .fullscreen { // The fullscreen button + position: relative; + flex: 0 0 40px; + width: 40px; + height: 40px; + border-radius: 20px; + .text-hide(); + z-index: 98; + background: white; + &:before, + &:after { + position: absolute; + width: 12px; + height: 12px; + background: url('@{control-icons}') no-repeat -576px -54px; + background-size: auto 120px; + display: block; + content: " "; + .transition(); + pointer-events: none; + .static & { + .transition(none); + } + } + &:before { + top: 9px; + right: 9px; + } + &:after { + bottom: 9px; + left: 9px; + .transform(rotate(180deg)); + } + &.active { + &:before { + .transform(rotate(180deg)); + } + &:after { + .transform(rotate(0)); + } + } + } + } + .fullscreen & { + .transform(translateY(-100%)); + } + } + } + @media screen and (min-width: @phoneLandscapeViewportWidth) { + .tx-dlf-logobar { + top: 5px; + right: 5px; + bottom: auto; + left: auto; + width: 40%; + height: 40px; + z-index: 200; + justify-content: flex-end; + li { + flex: 0 1 auto; + height: auto; + img { + max-width: 100%; + } + } + } + .document-functions .provider { + padding-right: 40%; + } + } + @media screen and (min-width: @tabletLandscapeViewportWidth) { + top: 0; + left: 33%; + padding: 0; + #tx-dlf-map { + top: 0; + } + .tx-dlf-logobar { + top: auto; + right: 15px; + bottom: 15px; + z-index: auto; + } + .document-functions { + .provider { + top: 10px; + left: 10px; + right: auto; + background: transparent; + padding: 0; + .mobile-meta, + .mobile-controls { + display: none; + } + } + } + } + @media screen and (min-width: @desktopViewportWidth) { + left: 25%; + } + @media screen and (min-width: 1600px) { + left: 22%; + } + @media screen and (min-width: 2000px) { + left: 20%; + } +} + +/* ==============[ empty pageview element message ]======================================= */ +.tx-dlf-empty { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: flex; + align-items: center; + padding: 30px; + font-family: @font-sans-bold; + line-height: 1.4; + a { + position: relative; + color: @secondary-color; + padding-bottom: 60px; + .error-arrow { + position: absolute; + bottom: 0; + left: 50%; + width: 40px; + height: 40px; + margin-left: -20px; + text-align: center; + font-size: 40px; + line-height: 40px; + font-family: @font-sans-normal; + .transform(rotate(-45deg)); + opacity: .3; + } + } + @media screen and (min-width: @phoneLandscapeViewportWidth) { + padding: 30px 20%; + a { + padding: 0; + .error-arrow { + display: none; + } + } + } + @media screen and (min-width: @tabletViewportWidth) { + a { + padding-top: 300px; + &:before { + position: absolute; + top: 0; + left: 50%; + width: 260px; + height: 260px; + border-radius: 130px; + margin-left: -130px; + border: 1px solid @lightgrey-color; + content: " "; + } + &:after { + position: absolute; + top: 30px; + left: 50%; + width: 1px; + height: 200px; + background: @lightgrey-color; + content: " "; + .transform(rotate(-45deg)); + } + } + } +} + +// EOF \ No newline at end of file diff --git a/Resources/Private/Less/Themes/Basictheme.less b/Resources/Private/Less/Themes/Basictheme.less new file mode 100644 index 00000000..f208c27e --- /dev/null +++ b/Resources/Private/Less/Themes/Basictheme.less @@ -0,0 +1,29 @@ +/* + * + * Basic Styles + * ================================================ + * Color typography and adjustments as a + * basic styling for out of the box implementation + * + * Author: Thomas Jung + * + */ + +// The paths to external Resources +@header-logo: '@{basepath}Resources/Public/Images/Basiclogo.svg'; +@control-icons: '@{basepath}Resources/Public/Images/viewerControlIcons.svg'; + +// Colors +@primary-color: rgb(0, 119, 204); +@secondary-color: rgb(102, 102, 102); +@secondary-color-light: lighten(@secondary-color, 30%); +@basegrey-color: rgb(51, 51, 51); +@lightgrey-color: lighten(@basegrey-color, 65%); + +// Typography +@font-sans-normal: 'Calibri', 'Helvetica', Sans-serif; +@font-sans-bold: 'Calibri-Bold', 'Helvetica', Sans-serif; +@font-serif-normal: 'Rockwell', 'Georgia', "Times New Roman", 'Times', serif; +@font-serif-bold: 'Rockwell-Bold', 'Georgia', 'Times', serif; + +// EOF \ No newline at end of file diff --git a/Resources/Private/Less/Themes/Slubtheme.less b/Resources/Private/Less/Themes/Slubtheme.less new file mode 100644 index 00000000..89c00c8f --- /dev/null +++ b/Resources/Private/Less/Themes/Slubtheme.less @@ -0,0 +1,65 @@ +/* + * + * SLUB Styles + * ================================================ + * Color typography and adjustments + * for custom styling + * + * Author: Thomas Jung + * + */ + +// The paths to external Resources +@header-logo: '@{basepath}Resources/Public/Images/Slub/Slublogo.svg'; +@control-icons: '@{basepath}Resources/Public/Images/Slub/viewerControlIcons.svg'; + +// Colors +@primary-color: rgb(204, 0, 0); +@secondary-color: rgb(17, 102, 119); +@secondary-color-light: desaturate(lighten(@secondary-color, 27%), 22%); +@basegrey-color: rgb(51, 51, 51); +@lightgrey-color: lighten(@basegrey-color, 65%); + +// Typography +@font-sans-normal: 'VistaSansBook', 'Calibri', 'Helvetica', Sans-serif; +@font-sans-bold: 'VistaSansBold', 'Calibri-Bold', 'Helvetica', Sans-serif; +@font-serif-normal: 'VistaSlabReg', 'Rockwell', 'Georgia', "Times New Roman", 'Times', serif; +@font-serif-bold: 'VistaSlabBold', 'Rockwell-Bold', 'Georgia', 'Times', serif; + +// Dedicated restyling +.control-bar { + .header-bar .brand a { + line-height: 24px; + } + @media screen and (min-width: @tabletLandscapeViewportWidth) { + &:before { + position: absolute; + top: 0; + left: 0; + right: -60px; + height: 85px; + background: url('@{basepath}Resources/Public/Images/Slub/headerbarBg.svg') no-repeat left top; + background-size: 100% 100%; + content: " "; + pointer-events: none; + } + .header-bar nav { + .nav-toggle { + right: 0; + } + .language-nav { + right: 24px; + } + } + } +} + +.document-functions { + @media screen and (min-width: @tabletLandscapeViewportWidth) { + > ul { + left: 40px; + } + } +} + +// EOF \ No newline at end of file diff --git a/Resources/Private/Partials/EmptyPageView.html b/Resources/Private/Partials/EmptyPageView.html new file mode 100644 index 00000000..41412ba3 --- /dev/null +++ b/Resources/Private/Partials/EmptyPageView.html @@ -0,0 +1,9 @@ +{namespace dc=Slub\DigitalCollections\ViewHelpers} + +
    + {content} +
    + {sidebar} +
    +
    +
    diff --git a/Resources/Private/Partials/KitodoControlBar.html b/Resources/Private/Partials/KitodoControlBar.html new file mode 100644 index 00000000..47643f12 --- /dev/null +++ b/Resources/Private/Partials/KitodoControlBar.html @@ -0,0 +1,32 @@ + +
    +
    +
    {settings.rootPage.title}
    + +
    +
    + +
    + +
    +
    +
    +
    +
    diff --git a/Resources/Private/Partials/KitodoPageView.html b/Resources/Private/Partials/KitodoPageView.html new file mode 100644 index 00000000..7c717d8a --- /dev/null +++ b/Resources/Private/Partials/KitodoPageView.html @@ -0,0 +1,366 @@ +{namespace dc=Slub\DigitalCollections\ViewHelpers} + +
    + + + + + + + + +
    +
    +
    + +
    +
    +
    +
    + + + + + +
    +
    +
    + +
    +
    +
    +
    + + + + +
    + + +
      +
    • Logo SLUB
    • +
    • Logo Uni Erfurt
    • +
    • Logo DFG
    • +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    Titel
    +
    + {docTitle} +
    +
    Autor
    +
    +
    +
    +
    + +
      + + + + + + +
    • + + + + + + + + + +
    • + + + "> +
    • + + + + + + + + + + + + + + + +
    • +
      + + +
    • + "> + + + + + + + + + + + + + + +
    • + + + "> + + + + +
    +
    + + +
    + + +
      + +
    +
    + +
      + +
    • +
    +
    +
    + +
    +
    + + + + + + +
    + +
    +
    +
    + +
    +
    diff --git a/Resources/Private/Partials/Matomo.html b/Resources/Private/Partials/Matomo.html new file mode 100644 index 00000000..8f5a846b --- /dev/null +++ b/Resources/Private/Partials/Matomo.html @@ -0,0 +1,38 @@ +{namespace dc=Slub\DigitalCollections\ViewHelpers} + + + + diff --git a/Resources/Private/Partials/Toolbox.html b/Resources/Private/Partials/Toolbox.html new file mode 100644 index 00000000..82954481 --- /dev/null +++ b/Resources/Private/Partials/Toolbox.html @@ -0,0 +1,188 @@ +{namespace dc=Slub\DigitalCollections\ViewHelpers} + + +
    +
    +
    +
    +

    +
    +
      + + + + + + + + + +
    • + " + class="download-page image" + target="_blank" + title=""> + +
    • +
      +
      + + + "> + + + + + +
    • + " + class="download-page ocr" + target="_blank" + title=""> + +
    • +
      +
      +
      + + + "> + +
    • + + + +
    • +
      + +
    • + +
    • +
      +
      + + +
    • + {dc:pageInfo(uid:'{settings.termsOfUsePid}', field:'title')} + +
    • + + + + + +
    • +
      + + +
      +
    • + + + "> + + + +
    +
    +
    +
    +
    + + +
    diff --git a/Resources/Private/Plugins/Kitodo/Collections.html b/Resources/Private/Plugins/Kitodo/Collections.html new file mode 100644 index 00000000..aab13058 --- /dev/null +++ b/Resources/Private/Plugins/Kitodo/Collections.html @@ -0,0 +1,14 @@ + +
      + +
    • +
      ###THUMBNAIL###
      +
      +

      ###TITLE###

      +

      (###COUNT_TITLES###/###COUNT_VOLUMES###)

      + ###FEED### +
      +
    • + +
    + diff --git a/Resources/Private/Plugins/Kitodo/Gridview.html b/Resources/Private/Plugins/Kitodo/Gridview.html new file mode 100644 index 00000000..46a2b2ca --- /dev/null +++ b/Resources/Private/Plugins/Kitodo/Gridview.html @@ -0,0 +1,11 @@ + +
      + +
    1. +
      ###THUMBNAIL###
      +
      ###PAGINATION###
      +
    2. + +
    +
    ###PAGEBROWSER###
    + diff --git a/Resources/Private/Plugins/Kitodo/Listview.html b/Resources/Private/Plugins/Kitodo/Listview.html new file mode 100644 index 00000000..a7bec281 --- /dev/null +++ b/Resources/Private/Plugins/Kitodo/Listview.html @@ -0,0 +1,37 @@ + +

    ###LISTTITLE###

    +###LISTTHUMBNAIL### +###LISTDESCRIPTION### +

    ###COUNT###

    +###SORTING### +

    ###PAGEBROWSER###

    +
      + +
    1. +
      ###THUMBNAIL###
      +
      + ###METADATA### +
      +
      ###PREVIEW###
      +
      + +
      Details einblenden
      +
      Details ausblenden
      +
        + +
      1. +
        ###SUBTHUMBNAIL###
        +
        + ###SUBMETADATA### +
        +
        ###SUBPREVIEW###
        +
        +
      2. + +
      + +
    2. + +
    +

    ###PAGEBROWSER###

    + diff --git a/Resources/Private/Plugins/Kitodo/Metadata.html b/Resources/Private/Plugins/Kitodo/Metadata.html new file mode 100644 index 00000000..95d9a211 --- /dev/null +++ b/Resources/Private/Plugins/Kitodo/Metadata.html @@ -0,0 +1,7 @@ + + + + + diff --git a/Resources/Private/Plugins/Kitodo/NavigationPagecontrol.html b/Resources/Private/Plugins/Kitodo/NavigationPagecontrol.html new file mode 100644 index 00000000..31847fa3 --- /dev/null +++ b/Resources/Private/Plugins/Kitodo/NavigationPagecontrol.html @@ -0,0 +1,12 @@ + +
    + ###FIRST### + ###BACK### + ###PREVIOUS### +
    +
    + ###NEXT### + ###FORWARD### + ###LAST### +
    + diff --git a/Resources/Private/Plugins/Kitodo/NavigationViewfunction-deactivated.html b/Resources/Private/Plugins/Kitodo/NavigationViewfunction-deactivated.html new file mode 100644 index 00000000..cf7f1b3b --- /dev/null +++ b/Resources/Private/Plugins/Kitodo/NavigationViewfunction-deactivated.html @@ -0,0 +1,13 @@ + +
  • ###PAGESELECT###
  • +
  • + ###ROTATE_LEFT### + ###ROTATE_RIGHT### + ###ROTATE_RESET### +
  • +
  • + ###ZOOM_IN### + ###ZOOM_OUT### + ###ZOOM_FULLSCREEN### +
  • + diff --git a/Resources/Private/Plugins/Kitodo/NavigationViewfunction.html b/Resources/Private/Plugins/Kitodo/NavigationViewfunction.html new file mode 100644 index 00000000..611a301a --- /dev/null +++ b/Resources/Private/Plugins/Kitodo/NavigationViewfunction.html @@ -0,0 +1,13 @@ + +
  • ###PAGESELECT###
  • +
  • + ###ROTATE_LEFT### + ###ROTATE_RIGHT### + ###ROTATE_RESET### +
  • +
  • + ###ZOOM_IN### + ###ZOOM_OUT### + ###ZOOM_FULLSCREEN### +
  • + diff --git a/Resources/Private/Plugins/Kitodo/NewspaperCalendar.html b/Resources/Private/Plugins/Kitodo/NewspaperCalendar.html new file mode 100644 index 00000000..e5402031 --- /dev/null +++ b/Resources/Private/Plugins/Kitodo/NewspaperCalendar.html @@ -0,0 +1,57 @@ + +
    +
    + ###CALALLYEARS### +
    +
    + ###CALYEAR### +
    + +
    + + ###CALYEAR### +
    + + + + + + + + + + + + + + + + + + + + + + +
    ###MONTHNAME###
    ###DAYMON_NAME######DAYTUE_NAME######DAYWED_NAME######DAYTHU_NAME######DAYFRI_NAME######DAYSAT_NAME######DAYSUN_NAME###
    ###DAYMON######DAYTUE######DAYWED######DAYTHU######DAYFRI######DAYSAT######DAYSUN###
    +
    + +
    + +
    +
      + +
    • + ###DATE_STRING### + ###ITEMS### +
    • + +
    +
    + + +
    + diff --git a/Resources/Private/Plugins/Kitodo/NewspaperYear.html b/Resources/Private/Plugins/Kitodo/NewspaperYear.html new file mode 100644 index 00000000..070cd799 --- /dev/null +++ b/Resources/Private/Plugins/Kitodo/NewspaperYear.html @@ -0,0 +1,21 @@ + +
    +
    +
    + ###CALALLYEARS### +
    +
    + ###LABEL_CHOOSE_YEAR### +
    +
    +
    +
      + +
    • + ###YEARNAME### +
    • + +
    +
    +
    + diff --git a/Resources/Private/Plugins/Kitodo/Pageview.html b/Resources/Private/Plugins/Kitodo/Pageview.html new file mode 100644 index 00000000..d562b89c --- /dev/null +++ b/Resources/Private/Plugins/Kitodo/Pageview.html @@ -0,0 +1,4 @@ + +
    +
    ###VIEWER_JS###
    + diff --git a/Resources/Private/Plugins/Kitodo/Search.html b/Resources/Private/Plugins/Kitodo/Search.html new file mode 100644 index 00000000..fd3b253c --- /dev/null +++ b/Resources/Private/Plugins/Kitodo/Search.html @@ -0,0 +1,19 @@ + +
    + + + ###LOGICAL_PAGE### + +
    + ###FULLTEXTSWITCH### + ###FIELD_DOC### + ###FIELD_COLL### + ###ADDITIONAL_INPUTS### + + +
    ###EXT_SEARCH_OPERATOR### ###EXT_SEARCH_FIELDSELECTOR### ###EXT_SEARCH_FIELDQUERY###
    + +
    +
    +
    ###FACETS_MENU###
    + diff --git a/Resources/Private/Plugins/Kitodo/SearchFullText.html b/Resources/Private/Plugins/Kitodo/SearchFullText.html new file mode 100644 index 00000000..0dc00086 --- /dev/null +++ b/Resources/Private/Plugins/Kitodo/SearchFullText.html @@ -0,0 +1,9 @@ + +
    + +
    + + + ###FIELD_DOC### +
    + diff --git a/Resources/Private/Plugins/Kitodo/SearchInDocumentTool.html b/Resources/Private/Plugins/Kitodo/SearchInDocumentTool.html new file mode 100644 index 00000000..0b8136a9 --- /dev/null +++ b/Resources/Private/Plugins/Kitodo/SearchInDocumentTool.html @@ -0,0 +1,32 @@ + + +
    +
    + + + + + + + + + +
    +
    + +
    ###LABEL_DELETE_SEARCH###...
    +
    + + diff --git a/Resources/Private/Plugins/Kitodo/TableOfContents.html b/Resources/Private/Plugins/Kitodo/TableOfContents.html new file mode 100644 index 00000000..653e2d3d --- /dev/null +++ b/Resources/Private/Plugins/Kitodo/TableOfContents.html @@ -0,0 +1,11 @@ + +
    +
    +
    +

    Inhaltsverzeichnis

    +
    + ###TOCMENU### +
    +
    +
    + diff --git a/Resources/Private/Plugins/Kitodo/Titledata.html b/Resources/Private/Plugins/Kitodo/Titledata.html new file mode 100644 index 00000000..3809732f --- /dev/null +++ b/Resources/Private/Plugins/Kitodo/Titledata.html @@ -0,0 +1,9 @@ + + + diff --git a/Resources/Private/Plugins/Kitodo/ToolFullText.html b/Resources/Private/Plugins/Kitodo/ToolFullText.html new file mode 100644 index 00000000..3a405c3a --- /dev/null +++ b/Resources/Private/Plugins/Kitodo/ToolFullText.html @@ -0,0 +1,3 @@ + +###FULLTEXT_SELECT### + diff --git a/Resources/Private/Plugins/Kitodo/Toolbox.html b/Resources/Private/Plugins/Kitodo/Toolbox.html new file mode 100644 index 00000000..049c9be9 --- /dev/null +++ b/Resources/Private/Plugins/Kitodo/Toolbox.html @@ -0,0 +1,5 @@ + + + ###TOOL### + + diff --git a/Resources/Private/Plugins/Kitodo/ToolsImagemanipulation.html b/Resources/Private/Plugins/Kitodo/ToolsImagemanipulation.html new file mode 100644 index 00000000..1b94af0f --- /dev/null +++ b/Resources/Private/Plugins/Kitodo/ToolsImagemanipulation.html @@ -0,0 +1,3 @@ + + ###IMAGEMANIPULATION_SELECT### + \ No newline at end of file diff --git a/Resources/Private/Plugins/Kitodo/ToolsPdf.html b/Resources/Private/Plugins/Kitodo/ToolsPdf.html new file mode 100644 index 00000000..d6585232 --- /dev/null +++ b/Resources/Private/Plugins/Kitodo/ToolsPdf.html @@ -0,0 +1,12 @@ + + +###PAGE### + diff --git a/Resources/Private/Templates/Emptyworkview.html b/Resources/Private/Templates/Emptyworkview.html new file mode 100644 index 00000000..d91910ce --- /dev/null +++ b/Resources/Private/Templates/Emptyworkview.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/Resources/Private/Templates/Kitodo.html b/Resources/Private/Templates/Kitodo.html new file mode 100644 index 00000000..43e368fd --- /dev/null +++ b/Resources/Private/Templates/Kitodo.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/Resources/Public/Css/Digitalcollections.css b/Resources/Public/Css/Digitalcollections.css new file mode 100644 index 00000000..5c1786df --- /dev/null +++ b/Resources/Public/Css/Digitalcollections.css @@ -0,0 +1 @@ +html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{background:transparent;border:0;margin:0;padding:0;vertical-align:baseline}body{line-height:1}h1,h2,h3,h4,h5,h6{clear:both;font-weight:normal}ol,ul{list-style:none}blockquote{quotes:none}blockquote:before,blockquote:after{content:'';content:none}del{text-decoration:line-through}table{border-collapse:collapse;border-spacing:0}a img{border:none}*{box-sizing:border-box}html,body{position:relative;height:100%}body{text-align:center;font-family:'VistaSlabReg','Rockwell','Georgia',"Times New Roman",'Times',serif;background:#4ab3c7;line-height:1}a{color:#c00;text-decoration:none}.main-wrapper{position:absolute;top:0;right:0;bottom:12px;left:0;background:white;box-shadow:0 3px 8px rgba(0,0,0,0.2);overflow:hidden;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.hidden .main-wrapper{opacity:0}.static .main-wrapper{-webkit-transition:none;-o-transition:none;transition:none}.fullscreen .main-wrapper{bottom:0}@media screen and (min-width:1024px){.main-wrapper{top:5px;right:5px;bottom:5px;left:5px}.fullscreen .main-wrapper{top:0;right:0;bottom:0;left:0}}@media screen and (min-width:1200px){.main-wrapper{top:20px;right:20px;bottom:25px;left:20px}}.document-view{position:absolute;top:55px;right:0;bottom:0;left:0;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.fullscreen .document-view{top:0;right:0;bottom:0;left:0}.static .document-view{-webkit-transition:none;-o-transition:none;transition:none}.document-view #tx-dlf-map,.document-view .tx-dlf-map{position:absolute;top:0;right:0;bottom:0;left:0}.document-view .tx-dlf-logobar{position:absolute;pointer-events:none;right:0;bottom:80px;left:0;height:30px;opacity:.15;display:flex;align-items:center;justify-content:center}.document-view .tx-dlf-logobar li{position:relative;flex:0 0 auto;padding:0 15px;height:40px}.document-view .tx-dlf-logobar li img{max-height:30px;-webkit-filter:grayscale(100%);filter:grayscale(100%)}.document-view .document-functions .provider{position:absolute;top:0;left:0;right:0;text-align:left;background:rgba(255,255,255,0.92);display:flex;align-items:center;padding:10px;border-bottom:1px solid #d9d9d9;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.document-view .document-functions .provider>a{display:none}.document-view .document-functions .provider .mobile-meta{position:relative;font-size:12px;line-height:1.3;flex:0 1 auto}.document-view .document-functions .provider .mobile-meta dt{display:none}.document-view .document-functions .provider .mobile-meta dd.tx-dlf-title a{position:relative;font-weight:bold;color:#333;font-size:16px}.document-view .document-functions .provider .mobile-controls{position:absolute;bottom:-50px;right:15px;display:flex}.document-view .document-functions .provider .mobile-controls form{position:relative;width:40px;height:40px;flex:0 0 40px;margin-right:5px}.document-view .document-functions .provider .mobile-controls form label{display:none}.document-view .document-functions .provider .mobile-controls form select{position:relative;width:40px;height:40px;padding-left:40px;background:white url('/typo3conf/ext/slub_digitalcollections/Resources/Public/Images/Slub/viewerControlIcons.svg') no-repeat -600px -80px;background-size:auto 120px;outline:none;border-radius:20px;-webkit-appearance:none;border:0 none}.document-view .document-functions .provider .mobile-controls form select[disabled]{display:none}.document-view .document-functions .provider .mobile-controls .fullscreen{position:relative;flex:0 0 40px;width:40px;height:40px;border-radius:20px;font:0/0 'Open Sans',Helvetica,Arial,sans-serif;color:transparent;text-shadow:none;background-color:transparent;border:0;z-index:98;background:white}.document-view .document-functions .provider .mobile-controls .fullscreen:before,.document-view .document-functions .provider .mobile-controls .fullscreen:after{position:absolute;width:12px;height:12px;background:url('/typo3conf/ext/slub_digitalcollections/Resources/Public/Images/Slub/viewerControlIcons.svg') no-repeat -576px -54px;background-size:auto 120px;display:block;content:" ";-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;pointer-events:none}.static .document-view .document-functions .provider .mobile-controls .fullscreen:before,.static .document-view .document-functions .provider .mobile-controls .fullscreen:after{-webkit-transition:none;-o-transition:none;transition:none}.document-view .document-functions .provider .mobile-controls .fullscreen:before{top:9px;right:9px}.document-view .document-functions .provider .mobile-controls .fullscreen:after{bottom:9px;left:9px;-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.document-view .document-functions .provider .mobile-controls .fullscreen.active:before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.document-view .document-functions .provider .mobile-controls .fullscreen.active:after{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}.fullscreen .document-view .document-functions .provider{-webkit-transform:translateY(-100%);-moz-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%)}@media screen and (min-width:480px){.document-view .tx-dlf-logobar{top:5px;right:5px;bottom:auto;left:auto;width:40%;height:40px;z-index:200;justify-content:flex-end}.document-view .tx-dlf-logobar li{flex:0 1 auto;height:auto}.document-view .tx-dlf-logobar li img{max-width:100%}.document-view .document-functions .provider{padding-right:40%}}@media screen and (min-width:1024px){.document-view{top:0;left:33%;padding:0}.document-view #tx-dlf-map{top:0}.document-view .tx-dlf-logobar{top:auto;right:15px;bottom:15px;z-index:auto}.document-view .document-functions .provider{top:10px;left:10px;right:auto;background:transparent;padding:0}.document-view .document-functions .provider .mobile-meta,.document-view .document-functions .provider .mobile-controls{display:none}}@media screen and (min-width:1200px){.document-view{left:25%}}@media screen and (min-width:1600px){.document-view{left:22%}}@media screen and (min-width:2000px){.document-view{left:20%}}.tx-dlf-empty{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;padding:30px;font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif;line-height:1.4}.tx-dlf-empty a{position:relative;color:#167;padding-bottom:60px}.tx-dlf-empty a .error-arrow{position:absolute;bottom:0;left:50%;width:40px;height:40px;margin-left:-20px;text-align:center;font-size:40px;line-height:40px;font-family:'VistaSansBook','Calibri','Helvetica',Sans-serif;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg);opacity:.3}@media screen and (min-width:480px){.tx-dlf-empty{padding:30px 20%}.tx-dlf-empty a{padding:0}.tx-dlf-empty a .error-arrow{display:none}}@media screen and (min-width:768px){.tx-dlf-empty a{padding-top:300px}.tx-dlf-empty a:before{position:absolute;top:0;left:50%;width:260px;height:260px;border-radius:130px;margin-left:-130px;border:1px solid #d9d9d9;content:" "}.tx-dlf-empty a:after{position:absolute;top:30px;left:50%;width:1px;height:200px;background:#d9d9d9;content:" ";-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}}.control-bar{-moz-font-feature-settings:"lnum";-webkit-font-feature-settings:"lnum";font-feature-settings:"lnum"}.fullscreen .control-bar{width:0;overflow:hidden}.static .control-bar{-webkit-transition:none;-o-transition:none;transition:none}.control-bar .header-bar{position:fixed;top:0;right:0;left:0;min-height:50px;z-index:100;overflow:hidden;background:#c00;font-family:'VistaSansBook','Calibri','Helvetica',Sans-serif}.control-bar .header-bar .brand{position:absolute;top:15px;left:10px;height:22px;text-transform:uppercase;white-space:nowrap}.control-bar .header-bar .brand .logo-replacement{display:none}.control-bar .header-bar .brand a{position:relative;width:100%;height:100%;color:white;font-size:14px;line-height:28px;text-align:left;background:url('/typo3conf/ext/slub_digitalcollections/Resources/Public/Images/Slub/Slublogo.svg') no-repeat left center;background-size:auto 100%;display:block;padding-left:80px}.control-bar .header-bar .brand a:before{content:"> "}.control-bar .header-bar nav .nav-toggle{position:absolute;top:13px;right:15px;width:25px;height:30px;padding:0;border:0 none;background:transparent;outline:none}.control-bar .header-bar nav .nav-toggle .nav-label{display:none}.control-bar .header-bar nav .nav-toggle .nav-button-bar{position:relative;width:100%;height:2px;border-radius:2px;margin-bottom:4px;background:white;display:block;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.control-bar .header-bar nav .nav-toggle.active .nav-button-bar:nth-of-type(2){-webkit-transform:translateY(6px) rotate(45deg);-moz-transform:translateY(6px) rotate(45deg);-ms-transform:translateY(6px) rotate(45deg);transform:translateY(6px) rotate(45deg)}.control-bar .header-bar nav .nav-toggle.active .nav-button-bar:nth-of-type(3){-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);transform:scale(0);opacity:0}.control-bar .header-bar nav .nav-toggle.active .nav-button-bar:nth-of-type(4){-webkit-transform:translateY(-6px) rotate(-45deg);-moz-transform:translateY(-6px) rotate(-45deg);-ms-transform:translateY(-6px) rotate(-45deg);transform:translateY(-6px) rotate(-45deg)}.control-bar .header-bar nav .language-nav{position:absolute;right:45px;top:15px;font-size:12px}.control-bar .header-bar nav .language-nav li{position:relative;display:inline-block;margin-right:4px}.control-bar .header-bar nav .language-nav li a,.control-bar .header-bar nav .language-nav li span{position:relative;padding:6px;display:block;color:white}.control-bar .header-bar nav .language-nav li.text-muted{opacity:.4}.control-bar .header-bar nav .language-nav:before{position:absolute;top:0;left:50%;margin-left:-6px;content:"/";opacity:.2;font-size:24px;color:white;font-weight:100;text-align:center;width:10px}.control-bar .header-bar nav .secondary-nav{position:relative;top:55px;width:100%;text-align:left;padding-bottom:0;max-height:0;opacity:0;background:#167;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;border-top:2px solid white;font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif}.control-bar .header-bar nav .secondary-nav li a{padding:15px;display:block;border-bottom:1px solid rgba(255,255,255,0.2);color:white}.control-bar .header-bar nav .secondary-nav li:first-child a{border-top:1px solid rgba(255,255,255,0.2)}.control-bar .header-bar nav .secondary-nav.open{padding-bottom:65px;max-height:320px;min-height:60px;opacity:1}.fullscreen .control-bar .header-bar{min-height:0}.control-bar .step-back-button{position:absolute;top:120px;left:15px;width:40px;height:40px;border-radius:20px;z-index:50;font:0/0 'Open Sans',Helvetica,Arial,sans-serif;color:transparent;text-shadow:none;background-color:transparent;border:0;background:white url('/typo3conf/ext/slub_digitalcollections/Resources/Public/Images/Slub/viewerControlIcons.svg') no-repeat -600px -40px;background-size:auto 120px}.control-bar .metadata-wrapper,.control-bar .toc-wrapper{position:absolute;top:55px;bottom:0;width:90%;background:rgba(17,102,119,0.97);z-index:102;text-align:left;padding:15px;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.control-bar .metadata-wrapper .offcanvas-toggle,.control-bar .toc-wrapper .offcanvas-toggle{position:absolute;bottom:5px;width:30px;height:60px;background:rgba(17,102,119,0.97) url('/typo3conf/ext/slub_digitalcollections/Resources/Public/Images/Slub/viewerControlIcons.svg') no-repeat 0 0;background-size:auto 120px;border:1px solid rgba(255,255,255,0.5)}.control-bar .metadata-wrapper.open,.control-bar .toc-wrapper.open{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);z-index:1100}.control-bar .metadata-wrapper.open .offcanvas-toggle,.control-bar .toc-wrapper.open .offcanvas-toggle{border-color:white}.control-bar .metadata-wrapper h3,.control-bar .toc-wrapper h3{display:none}.control-bar .metadata-wrapper{right:0;-webkit-transform:translateX(100%);-moz-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%)}.control-bar .metadata-wrapper .offcanvas-toggle{left:-30px;border-radius:30px 0 0 30px;background-position:-442px 9px;border-right:0 none}.control-bar .metadata-wrapper .metadata-toggle{display:none}.control-bar .toc-wrapper{left:0;-webkit-transform:translateX(-100%);-moz-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%)}.control-bar .toc-wrapper .offcanvas-toggle{right:-30px;border-radius:0 30px 30px 0;background-position:-447px -30px;border-left:0 none}@media screen and (min-width:1024px){.control-bar{position:absolute;top:0;bottom:0;left:0;width:33%;z-index:1100;color:#333;border-right:2px solid white;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.control-bar:before{position:absolute;top:0;left:0;right:0;height:70px;background:#c00;content:" ";pointer-events:none}.control-bar:after{position:absolute;top:90px;right:0;bottom:15px;width:1px;content:" ";background:#d9d9d9}.control-bar .header-bar{position:absolute;top:10px;background:transparent;overflow:visible}.control-bar .header-bar .brand a{font-size:12px}.control-bar .header-bar:after{display:none;content:none}.control-bar .header-bar nav .nav-toggle{top:12px;right:12px}.control-bar .header-bar nav .language-nav{right:35px;top:14px}.control-bar .header-bar nav .secondary-nav{position:absolute;top:-5px;right:0;width:200px;background:rgba(17,102,119,0.97);max-height:none;font-size:14px;-webkit-transform:scaleX(0);-moz-transform:scaleX(0);-ms-transform:scaleX(0);transform:scaleX(0);box-shadow:0 2px 8px rgba(0,0,0,0.3);padding:15px;border-top:0}.control-bar .header-bar nav .secondary-nav:before{position:absolute;top:20px;left:-10px;width:0;height:0;border:10px solid transparent;border-left-width:0;border-right-color:rgba(17,102,119,0.97);content:" "}.control-bar .header-bar nav .secondary-nav li a{padding:0 10px;border:0 none;line-height:30px;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;color:white}.control-bar .header-bar nav .secondary-nav li a:hover{background:rgba(255,255,255,0.2)}.control-bar .header-bar nav .secondary-nav li:first-child a{border:0 none}.control-bar .header-bar nav .secondary-nav.open{padding:15px;opacity:1;right:-220px;-webkit-transform:scaleX(1);-moz-transform:scaleX(1);-ms-transform:scaleX(1);transform:scaleX(1)}.control-bar .step-back-button{top:80px;left:20px;width:auto;background:transparent;font-size:12px;color:#167;font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif;line-height:1.1;text-transform:uppercase;cursor:pointer}.control-bar .step-back-button:before{content:"<";font-size:16px;margin-right:5px}.control-bar .ctrldata-container{position:absolute;top:105px;right:15px;bottom:20px;left:15px;overflow:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.control-bar .metadata-wrapper,.control-bar .toc-wrapper{position:relative;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);text-align:left;background:transparent;padding:20px 0;width:100%}.control-bar .metadata-wrapper .offcanvas-toggle,.control-bar .toc-wrapper .offcanvas-toggle{display:none}.control-bar .metadata-wrapper{top:auto;bottom:auto;padding-bottom:40px;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.control-bar .metadata-wrapper .tx-dlf-metadata{overflow:hidden}.control-bar .metadata-wrapper .metadata-toggle{position:absolute;bottom:0;right:20px;padding:4px 20px 4px 0;font-size:12px;color:#c00;display:block;cursor:pointer}.control-bar .metadata-wrapper .metadata-toggle:before{position:absolute;top:-5px;right:-5px;width:30px;height:30px;background:white url('/typo3conf/ext/slub_digitalcollections/Resources/Public/Images/Slub/viewerControlIcons.svg') no-repeat -564px -84px;background-size:auto 120px;content:" ";-webkit-transform:scale(.6);-moz-transform:scale(.6);-ms-transform:scale(.6);transform:scale(.6)}.control-bar .toc-wrapper{top:auto;bottom:auto}}@media screen and (min-width:1200px){.control-bar{width:25%}.control-bar .header-bar .brand{top:5px;left:20px;height:40px}.control-bar .header-bar .brand a{font-size:11px;line-height:11px;padding:30px 0 0 31px;background-size:auto 30px;background-position:0 0}.control-bar .metadata-wrapper,.control-bar .toc-wrapper{padding:20px 5px}.control-bar .metadata-wrapper{padding-bottom:40px}}@media screen and (min-width:1600px){.control-bar{width:22%}}@media screen and (min-width:2000px){.control-bar{width:20%}}.tx-dlf-toc{position:relative;height:100%}.tx-dlf-toc ul.toc{position:relative;overflow:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;height:100%;line-height:1.2;font-size:14px;border-top:1px solid #d9d9d9}.tx-dlf-toc ul.toc ul li{position:relative}.tx-dlf-toc ul.toc ul li.submenu a{padding-right:10px}.tx-dlf-toc ul.toc ul li.submenu:before{position:absolute;top:15px;right:0;width:0;height:0;content:" ";border:3px solid transparent;border-bottom-width:0;border-top-color:white}.tx-dlf-toc ul.toc ul li.current{background:white}.tx-dlf-toc ul.toc ul li.current a{color:#167}.tx-dlf-toc ul.toc ul li.current a .meta-type-icon{background-position-y:-30px !important}.tx-dlf-toc ul.toc ul li.placeholder{position:relative;padding:15px 0 15px 30px;color:white;font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif}.tx-dlf-toc ul.toc ul li.placeholder:before{position:absolute;top:0;bottom:0;left:12px;width:1px;background:white;opacity:.4;content:" "}.tx-dlf-toc ul.toc ul li.placeholder:after{position:absolute;top:16px;left:3px;height:15px;font-size:24px;line-height:0;content:"...";background:#126a7b}.tx-dlf-toc ul.toc ul li a,.tx-dlf-toc ul.toc ul li span.a,.tx-dlf-toc ul.toc ul li>span.title{position:relative;padding:8px 0 8px 30px;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:white}.tx-dlf-toc ul.toc ul li a .pagination,.tx-dlf-toc ul.toc ul li span.a .pagination,.tx-dlf-toc ul.toc ul li>span.title .pagination{margin-left:3px;opacity:.4}.tx-dlf-toc ul.toc ul li a .meta-type-icon,.tx-dlf-toc ul.toc ul li span.a .meta-type-icon,.tx-dlf-toc ul.toc ul li>span.title .meta-type-icon{position:absolute;top:1px;left:-2px;width:30px;height:30px;text-indent:100%;overflow:hidden;background:url('/typo3conf/ext/slub_digitalcollections/Resources/Public/Images/viewerTocIcons.svg') no-repeat -90px 0;background-size:auto 60px;display:block;-webkit-transform:scale(.6);-moz-transform:scale(.6);-ms-transform:scale(.6);transform:scale(.6)}.tx-dlf-toc ul.toc ul li a .meta-type-icon.meta-type-Abbildung,.tx-dlf-toc ul.toc ul li span.a .meta-type-icon.meta-type-Abbildung,.tx-dlf-toc ul.toc ul li>span.title .meta-type-icon.meta-type-Abbildung{background-position:0 0}.tx-dlf-toc ul.toc ul li a .meta-type-icon.meta-type-Werbung,.tx-dlf-toc ul.toc ul li span.a .meta-type-icon.meta-type-Werbung,.tx-dlf-toc ul.toc ul li>span.title .meta-type-icon.meta-type-Werbung{background-position:-30px 0}.tx-dlf-toc ul.toc ul li a .meta-type-icon.meta-type-Artikel,.tx-dlf-toc ul.toc ul li span.a .meta-type-icon.meta-type-Artikel,.tx-dlf-toc ul.toc ul li>span.title .meta-type-icon.meta-type-Artikel{background-position:-60px 0}.tx-dlf-toc ul.toc ul li span.a,.tx-dlf-toc ul.toc ul li>span.title{opacity:.5;font-weight:normal}.tx-dlf-toc .tx-dlf-wincontent>ul.toc>li>a{color:white;font-size:16px;padding:5px 0;display:block}.tx-dlf-toc .tx-dlf-wincontent>ul.toc>li>a .meta-type-icon{margin-right:5px;opacity:.6}@media screen and (min-width:1024px){.tx-dlf-toc:after{position:absolute;top:0;right:0;left:0;height:1px;background:#d9d9d9;content:" "}.tx-dlf-toc ul.toc{font-size:12px;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.tx-dlf-toc ul.toc ul li:nth-child(even){background:#e6f5f7}.tx-dlf-toc ul.toc ul li.submenu a{padding-right:15px}.tx-dlf-toc ul.toc ul li.submenu:before{top:12px;right:5px;border-top-color:rgba(74,179,199,0.4)}.tx-dlf-toc ul.toc ul li.current{background:#4ab3c7}.tx-dlf-toc ul.toc ul li.current a{color:white}.tx-dlf-toc ul.toc ul li.current a .meta-type-icon{background-position-y:0 !important;opacity:.8}.tx-dlf-toc ul.toc ul li.placeholder{padding:20px 0 20px 30px;color:#808080;cursor:pointer}.tx-dlf-toc ul.toc ul li.placeholder:before{left:10px;background:#4ab3c7}.tx-dlf-toc ul.toc ul li.placeholder:after{top:20px;left:1px;background:white}.tx-dlf-toc ul.toc ul li a,.tx-dlf-toc ul.toc ul li span.a,.tx-dlf-toc ul.toc ul li>span.title{padding:6px 0 6px 20px;margin:2px 0;color:#333}.tx-dlf-toc ul.toc ul li a .meta-type-icon,.tx-dlf-toc ul.toc ul li span.a .meta-type-icon,.tx-dlf-toc ul.toc ul li>span.title .meta-type-icon{top:-3px;left:-6px;opacity:.5;-webkit-transform:scale(.5);-moz-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5);background-position:-90px -30px}.tx-dlf-toc ul.toc ul li a .meta-type-icon.meta-type-Abbildung,.tx-dlf-toc ul.toc ul li span.a .meta-type-icon.meta-type-Abbildung,.tx-dlf-toc ul.toc ul li>span.title .meta-type-icon.meta-type-Abbildung{background-position:0 -30px}.tx-dlf-toc ul.toc ul li a .meta-type-icon.meta-type-Werbung,.tx-dlf-toc ul.toc ul li span.a .meta-type-icon.meta-type-Werbung,.tx-dlf-toc ul.toc ul li>span.title .meta-type-icon.meta-type-Werbung{background-position:-30px -30px}.tx-dlf-toc ul.toc ul li a .meta-type-icon.meta-type-Artikel,.tx-dlf-toc ul.toc ul li span.a .meta-type-icon.meta-type-Artikel,.tx-dlf-toc ul.toc ul li>span.title .meta-type-icon.meta-type-Artikel{background-position:-60px -30px}.no-touchevents .tx-dlf-toc ul.toc ul li a{-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.no-touchevents .tx-dlf-toc ul.toc ul li a:hover{background:rgba(74,179,199,0.3)}.tx-dlf-toc .tx-dlf-wincontent>ul.toc>li>a{color:#333}}.tx-dlf-metadata{position:relative;overflow:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;height:100%;line-height:1.4}.tx-dlf-metadata h1{font-size:20px;font-weight:normal;font-family:'VistaSlabBold','Rockwell-Bold','Georgia','Times',serif;border-bottom:1px solid #d9d9d9;padding-bottom:10px;margin-bottom:5px;line-height:1.1;color:white}.tx-dlf-metadata dl{color:white;margin:20px 0}.tx-dlf-metadata dl dt,.tx-dlf-metadata dl dd{display:block}.tx-dlf-metadata dl dt{font-size:12px;font-family:'VistaSlabBold','Rockwell-Bold','Georgia','Times',serif;margin-top:20px}.tx-dlf-metadata dl dt:first-child{margin-top:0}.tx-dlf-metadata dl dd a{color:white}@media screen and (min-width:1024px){.tx-dlf-metadata{line-height:1.4}.tx-dlf-metadata h1{color:black;margin-bottom:-5px}.tx-dlf-metadata dl{color:black;border-bottom:1px solid #d9d9d9;padding:10px 0;margin:0}.tx-dlf-metadata dl dt,.tx-dlf-metadata dl dd{font-size:14px;display:inline;line-height:20px}.tx-dlf-metadata dl dd{margin-right:4px}.tx-dlf-metadata dl dd+dd{display:inline-block}.tx-dlf-metadata dl dd.tx-dlf-metadata-collection{background:#e6e6e6;border-radius:20px;padding:2px 5px;margin-right:6px}.tx-dlf-metadata dl dd.tx-dlf-metadata-author a{background:#acdce5;border-radius:20px;padding:2px 5px;margin-right:2px}.tx-dlf-metadata dl dt:before{position:relative;width:100%;height:1px;display:table;clear:both;content:" "}.tx-dlf-metadata dl dt:after{content:": "}.tx-dlf-metadata dl:nth-of-type(n+2){display:none}.tx-dlf-metadata dl dd a{color:black}.tx-dlf-metadata dl dd a[href*="digital.slub"]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;width:80%;line-height:16px;vertical-align:text-bottom}}.document-functions>ul,.view-functions>ul{position:absolute;text-align:center;font:0/0 'Open Sans',Helvetica,Arial,sans-serif;color:transparent;text-shadow:none;background-color:transparent;border:0;z-index:10}.document-functions>ul>li,.view-functions>ul>li{position:relative;display:inline-block}.document-functions>ul>li>a,.view-functions>ul>li>a,.document-functions>ul>li>span,.view-functions>ul>li>span{position:relative;display:inline-block;width:40px;height:40px;font:0/0 'Open Sans',Helvetica,Arial,sans-serif;color:transparent;text-shadow:none;background-color:transparent;border:0;border-radius:20px;margin:0 5px;background:white url('/typo3conf/ext/slub_digitalcollections/Resources/Public/Images/Slub/viewerControlIcons.svg') no-repeat 0 0;background-size:auto 120px}.document-functions>ul>li>span,.view-functions>ul>li>span{opacity:.5}@media screen and (min-width:1024px){.document-functions>ul>li>a,.view-functions>ul>li>a,.document-functions>ul>li>span,.view-functions>ul>li>span{margin:0 2px}.no-touchevents .document-functions>ul>li a,.no-touchevents .view-functions>ul>li a{-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;cursor:pointer}.no-touchevents .document-functions>ul>li a:hover,.no-touchevents .view-functions>ul>li a:hover{-webkit-transform:scale(1.2);-moz-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2)}}@media screen and (min-width:1200px){.document-functions>ul>li>a,.view-functions>ul>li>a,.document-functions>ul>li>span,.view-functions>ul>li>span{margin:0 4px}}.document-functions>ul{bottom:15px;left:15px;right:15px}.document-functions>ul>li.submenu:before{position:absolute;top:-17.5px;left:50%;width:0;height:0;margin-left:-10px;border:solid transparent;border-width:0 10px;border-top-color:rgba(17,102,119,0.97);content:" ";z-index:200;opacity:0;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.document-functions>ul>li.submenu>ul{position:fixed;bottom:80px;left:40px;right:40px;padding:20px;background:rgba(17,102,119,0.97);font-family:Helvetica,Arial,sans-serif;font-size:14px;line-height:1.4;text-align:left;transform-origin:center bottom;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;-webkit-transform:scaleY(0) translateY(100px);-moz-transform:scaleY(0) translateY(100px);-ms-transform:scaleY(0) translateY(100px);transform:scaleY(0) translateY(100px);opacity:0;box-shadow:0 2px 8px rgba(0,0,0,0.3)}.document-functions>ul>li.submenu>ul li a{position:relative;color:white;display:block;padding-left:40px;margin:15px 0}.document-functions>ul>li.submenu>ul li a:before{position:absolute;top:50%;left:0;margin-top:-20px;width:40px;height:40px;content:" ";background:url('/typo3conf/ext/slub_digitalcollections/Resources/Public/Images/Slub/viewerControlIcons.svg') no-repeat 0 0;background-size:auto 120px}.document-functions>ul>li.submenu>ul li a.download-fulltext:before{background-position:-280px -40px}.document-functions>ul>li.submenu>ul li a.local-presentation:before{background-position:-440px -80px}.document-functions>ul>li.submenu>ul li a.local-catalog:before{background-position:-400px -80px}.document-functions>ul>li.submenu>ul li a.local-contact:before{background-position:-400px -40px}.document-functions>ul>li.submenu>ul li a.download-document:before,.document-functions>ul>li.submenu>ul li a[title$="Seite"]:before,.document-functions>ul>li.submenu>ul li a[title$="Page"]:before{background-position:-360px -40px}.document-functions>ul>li.submenu>ul li a.download-page:before,.document-functions>ul>li.submenu>ul li a[title$="ument"]:before{background-position:-320px -40px}.document-functions>ul>li.submenu>ul li a.persistence-document:before{background-position:-360px -80px}.document-functions>ul>li.submenu>ul li a.persistence-page:before{background-position:-320px -80px}.document-functions>ul>li.submenu>ul li a.terms-of-use:before{background-position:-640px -80px}.document-functions>ul>li.submenu.open:before{top:-13.5px;border-top-width:10px;opacity:1}.document-functions>ul>li.submenu.open ul{-webkit-transform:scaleY(1) translateY(0);-moz-transform:scaleY(1) translateY(0);-ms-transform:scaleY(1) translateY(0);transform:scaleY(1) translateY(0);opacity:1}.document-functions>ul>li.downloads>a,.document-functions>ul>li.downloads>span{background-position:-40px 0}.document-functions>ul>li.fulltext>a,.document-functions>ul>li.fulltext>span{background-position:-120px 0}.document-functions>ul>li.doublepage{display:none}.document-functions>ul>li.doublepage>a,.document-functions>ul>li.doublepage>span{background-position:-80px 0}.document-functions>ul>li.doublepage a.tx-dlf-navigation-doubleOff:before{position:absolute;top:2px;right:0;width:8px;height:8px;border-radius:8px;border:2px solid white;background:#c00;display:block;content:" "}.document-functions>ul>li.doublepage a.tx-dlf-navigation-doublePlusOne{position:absolute;bottom:2px;right:-1px;width:0;height:0;border:solid transparent;border-width:9px 0 9px 13px;border-left-color:white;border-radius:0;background:transparent}.document-functions>ul>li.doublepage a.tx-dlf-navigation-doublePlusOne span{position:absolute;bottom:-5px;right:3px;width:0;height:0;display:block;overflow:hidden;border:solid transparent;border-width:5px 0 5px 8px;border-left-color:#c00}.document-functions>ul>li.fulltext a.select.active:before{position:absolute;top:2px;right:0;width:8px;height:8px;border-radius:8px;border:2px solid white;background:#c00;display:block;content:" "}.document-functions>ul>li.grid>a,.document-functions>ul>li.grid>span{background-position:-160px 0}.document-functions>ul>li.grid a.active:before{position:absolute;top:2px;right:0;width:8px;height:8px;border-radius:8px;border:2px solid white;background:#c00;display:block;content:" "}.document-functions>ul>li.disabled{opacity:.5;pointer-events:none}@media screen and (min-width:768px){.document-functions>ul li.submenu>ul{position:absolute;width:auto;left:20px;right:auto;bottom:53px;transform-origin:center top;-webkit-transform:scaleY(0) translateY(100px);-moz-transform:scaleY(0) translateY(100px);-ms-transform:scaleY(0) translateY(100px);transform:scaleY(0) translateY(100px)}.document-functions>ul li.submenu>ul li a{white-space:nowrap}.document-functions>ul li.submenu.open>ul{-webkit-transform:scaleY(1) translateY(0);-moz-transform:scaleY(1) translateY(0);-ms-transform:scaleY(1) translateY(0);transform:scaleY(1) translateY(0)}}@media screen and (min-width:1024px){.document-functions>ul{top:20px;left:20px;right:auto;bottom:auto}.document-functions>ul li.doublepage{display:inline-block}.document-functions>ul li.submenu:before{top:auto;bottom:-60px;border-width:0 10px;border-bottom-color:rgba(17,102,119,0.97)}.document-functions>ul li.submenu>ul{top:50px;left:-20px;right:auto;bottom:auto;width:auto;font-size:12px;padding:15px;z-index:3000;transform-origin:center top;-webkit-transform:scaleY(0) translateY(-100px);-moz-transform:scaleY(0) translateY(-100px);-ms-transform:scaleY(0) translateY(-100px);transform:scaleY(0) translateY(-100px)}.document-functions>ul li.submenu>ul li a{margin:0;padding-right:5px;min-height:40px;line-height:40px}.no-touchevents .document-functions>ul li.submenu>ul li a:hover{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);transform:scale(1);background:rgba(255,255,255,0.2)}.document-functions>ul li.submenu.open:before{top:auto;bottom:-10px;border-width:0 10px 10px 10px}}.view-functions ul{position:relative}.view-functions ul li{display:none}@media screen and (min-width:1024px){.view-functions ul{position:absolute;top:20px;right:50px;display:block;height:40px}.view-functions ul li{display:inline-block}.view-functions ul li.rotate{display:none}.view-functions ul li.pages{position:relative;top:auto;right:auto;display:inline-block}.view-functions ul li.pages form{position:absolute;top:0;right:0}.view-functions ul li.pages form select{border:1px solid #167;color:#167;background:white url('data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjAiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAyMCAxMiI+PHN0eWxlPi5zdDB7ZmlsbDpub25lO3N0cm9rZTojNGU2NDY2O3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMH08L3N0eWxlPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMy40IDMuMkw3IDkuNi42IDMuMiIgaWQ9IlhNTElEXzFfIi8+PC9zdmc+') no-repeat right center;background-size:16px auto;font-weight:700;line-height:1.2;-webkit-appearance:none;-moz-appearance:none;padding:10px 20px 10px 14px;background-size:20px 12px;margin:0 6px;font-size:16px;outline:none;border-radius:20px;cursor:pointer}.no-touchevents .view-functions ul li.pages form select{-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.no-touchevents .view-functions ul li.pages form select:hover{border:1px solid #167;background-color:#dff1f4;color:#333}.view-functions ul li.tx-dlf-toolsImagemanipulation>span{opacity:1;overflow:hidden;width:auto;height:auto;display:inline;margin:0}.view-functions ul li.tx-dlf-toolsImagemanipulation>span>span>a{position:relative;display:inline-block;width:40px;height:40px;font:0/0 'Open Sans',Helvetica,Arial,sans-serif;color:transparent;text-shadow:none;background-color:transparent;border:0;border-radius:20px;margin:0 5px;background:white url('/typo3conf/ext/slub_digitalcollections/Resources/Public/Images/Slub/viewerControlIcons.svg') no-repeat -200px 0;background-size:auto 120px}.view-functions ul li.tx-dlf-toolsImagemanipulation>span>span>a.active:before{position:absolute;top:2px;right:0;width:8px;height:8px;border-radius:8px;border:2px solid white;background:#c00;display:block;content:" "}.view-functions ul li.rotate .rotate-left{background-position:-240px 0}.view-functions ul li.rotate .rotate-right{background-position:-240px -40px}.view-functions ul li.rotate .upend{background-position:-280px 0}.view-functions ul li.zoom .in{background-position:-360px 0}.view-functions ul li.zoom .out{background-position:-400px 0}.view-functions ul li.zoom .fullscreen{position:relative;flex:0 0 40px;width:40px;height:40px;border-radius:20px;font:0/0 'Open Sans',Helvetica,Arial,sans-serif;color:transparent;text-shadow:none;background-color:transparent;border:0;z-index:1000;background:white}.view-functions ul li.zoom .fullscreen:before,.view-functions ul li.zoom .fullscreen:after{position:absolute;width:12px;height:12px;background:url('/typo3conf/ext/slub_digitalcollections/Resources/Public/Images/Slub/viewerControlIcons.svg') no-repeat -575px -54px;background-size:auto 120px;display:block;content:" ";-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;pointer-events:none}.static .view-functions ul li.zoom .fullscreen:before,.static .view-functions ul li.zoom .fullscreen:after{-webkit-transition:none;-o-transition:none;transition:none}.view-functions ul li.zoom .fullscreen:before{top:9px;right:9px}.view-functions ul li.zoom .fullscreen:after{bottom:9px;left:9px;-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.view-functions ul li.zoom .fullscreen.active:before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.view-functions ul li.zoom .fullscreen.active:after{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}.fullscreen .view-functions ul li.zoom .fullscreen{top:5px !important}}@media screen and (min-width:1200px){.view-functions ul li.rotate{display:inline-block}.view-functions ul li.pages form select{margin:0 4px}}.image-manipulation{position:absolute;top:70px;right:55px;z-index:1010}.image-manipulation .slider-container{background:rgba(17,102,119,0.9);padding:30px 20px 10px 56px;box-shadow:0 2px 6px rgba(0,0,0,0.2)}.image-manipulation .slider-container:before{position:absolute;top:-10px;right:10px;width:0;height:0;border:10px solid transparent;border-bottom-color:rgba(17,102,119,0.9);border-top:0;content:" "}.image-manipulation .slider-container .slider{position:relative;width:200px;height:30px;border:0 none;border-radius:0;background:transparent;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;margin-right:24px}.image-manipulation .slider-container .slider:before{position:absolute;top:-19px;left:-36px;width:40px;height:40px;content:" ";background:url('/typo3conf/ext/slub_digitalcollections/Resources/Public/Images/Slub/viewerControlIcons.svg') no-repeat 0 0;background-size:auto 120px}.image-manipulation .slider-container .slider:after{position:absolute;top:0;left:0;width:100%;height:2px;border-radius:2px;background:white;content:""}.image-manipulation .slider-container .slider .tooltip{position:absolute;opacity:1;top:-4px;left:210px !important;color:white;font-size:10px;text-align:left}.image-manipulation .slider-container .slider-contrast .tooltip,.image-manipulation .slider-container .slider-saturation .tooltip{left:100%}.image-manipulation .slider-container .slider-brightness .tooltip,.image-manipulation .slider-container .slider-hue .tooltip{left:50%}.image-manipulation .slider-container .slider-contrast:before{background-position:-480px 0}.image-manipulation .slider-container .slider-saturation:before{background-position:-480px -40px}.image-manipulation .slider-container .slider-brightness:before{background-position:-480px -80px}.image-manipulation .slider-container .slider-hue:before{background-position:-520px 0}.image-manipulation .slider-container .checkbox,.image-manipulation .slider-container button.reset-btn{position:relative;border:0 none;color:white;font-size:11px;margin-top:-15px;padding-left:36px;line-height:40px;display:inline-block;background:transparent}.image-manipulation .slider-container .checkbox:before,.image-manipulation .slider-container button.reset-btn:before{position:absolute;top:0;left:0;width:40px;height:40px;background:url('/typo3conf/ext/slub_digitalcollections/Resources/Public/Images/Slub/viewerControlIcons.svg') no-repeat 0 0;background-size:auto 120px;content:" "}.image-manipulation .slider-container button.reset-btn{margin-left:10px;outline:none}.image-manipulation .slider-container button.reset-btn:before{background-position:-520px -80px}.image-manipulation .slider-container .checkbox{margin-left:-36px}.image-manipulation .slider-container .checkbox:before{background-position:-520px -40px}.image-manipulation .slider-container .checkbox label input{margin-right:4px}.slider-imagemanipulation.ui-slider-horizontal .ui-slider-handle{position:absolute;z-index:2;top:-7px;width:14px;height:14px;background:white;border:0 none;border-radius:7px;box-shadow:1px 1px 0 #c00;cursor:col-resize;margin-left:-6px}.slider-imagemanipulation.ui-slider-horizontal .ui-slider-handle:after{content:none}.slider-imagemanipulation.ui-slider-horizontal .ui-slider-handle .ui-slider-handle:focus,.slider-imagemanipulation.ui-slider-horizontal .ui-slider-handle .ui-slider-handle:active{border:0;outline:none}.slider-imagemanipulation.ui-slider-horizontal .ui-slider-range{background:rgba(0,177,158,0.5)}.page-control{position:absolute;bottom:15px;height:1px;width:290px;left:50%;margin-left:-145px;line-height:0}.page-control>div{position:absolute;bottom:0;z-index:1020}.page-control>div span{display:none}.page-control>div span a,.page-control>div span span{position:relative;display:inline-block;font:0/0 'Open Sans',Helvetica,Arial,sans-serif;color:transparent;text-shadow:none;background-color:transparent;border:0}.page-control>div span a:before,.page-control>div span span:before{position:absolute;bottom:-1px;width:40px;height:40px;border-radius:20px;background:white url('/typo3conf/ext/slub_digitalcollections/Resources/Public/Images/Slub/viewerControlIcons.svg') no-repeat 0 0;background-size:auto 120px;content:" "}.page-control>div span span{opacity:.3}.page-control>div span.next{display:block}.page-control>div span.next a:before,.page-control>div span.next span:before{right:0;background-position:-280px -80px}.page-control>div span.prev{display:block}.page-control>div span.prev a:before,.page-control>div span.prev span:before{left:0;background-position:-240px -80px}.page-control .backs{left:0}.page-control .fwds{right:0}@media screen and (min-width:1024px){.page-control{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;pointer-events:none}.page-control>div{height:80px;min-width:80px;pointer-events:all;bottom:50%;margin-bottom:-20px}.page-control>div span{display:block}.page-control>div span a,.page-control>div span span{position:absolute;font-size:14px;color:#c00;white-space:nowrap;display:block;height:40px;line-height:40px;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.page-control>div span a:before,.page-control>div span span:before{-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.no-touchevents .page-control>div span a:hover{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}.page-control>div span span{cursor:not-allowed}.page-control>div.no-transition a,.page-control>div.no-transition span,.page-control>div.no-transition a:before,.page-control>div.no-transition span:before{-webkit-transition:none !important;-moz-transition:none !important;-o-transition:none !important;transition:none !important}.page-control>div.backs{left:10px}.page-control>div.backs span a,.page-control>div.backs span span{left:0;text-align:left;padding-left:80px}.page-control>div.backs span a:before,.page-control>div.backs span span:before{left:20px}.page-control>div.backs span.prev a,.page-control>div.backs span.prev span{top:0;height:80px;line-height:80px;color:rgba(204,0,0,0)}.page-control>div.backs span.prev a:before,.page-control>div.backs span.prev span:before{left:0;width:80px;height:80px;border-radius:40px;background-position:0 -40px}.page-control>div.backs span.rwnd a,.page-control>div.backs span.rwnd span{top:0;color:rgba(204,0,0,0);z-index:301}.page-control>div.backs span.rwnd a:before,.page-control>div.backs span.rwnd span:before{left:41px;width:32px;height:32px;background-position:-86px -43px}.page-control>div.backs span.rwnd span{opacity:0}.page-control>div.backs span.first a,.page-control>div.backs span.first span{bottom:0;opacity:0;z-index:302}.page-control>div.backs span.first a:before,.page-control>div.backs span.first span:before{background-position:-80px -80px}.page-control>div.backs.over span.prev a,.page-control>div.backs.over span.prev span{color:#c00}.page-control>div.backs.over span.rwnd a,.page-control>div.backs.over span.rwnd span{top:-45px;color:#c00}.page-control>div.backs.over span.rwnd a:before,.page-control>div.backs.over span.rwnd span:before{bottom:-1px;left:20px;width:40px;height:40px;background-position:-80px -40px}.page-control>div.backs.over span.rwnd span{opacity:.3}.page-control>div.backs.over span.first a,.page-control>div.backs.over span.first span{bottom:-45px}.page-control>div.backs.over span.first a{opacity:1}.page-control>div.backs.over span.first span{opacity:.3}.page-control>div.fwds{right:10px}.page-control>div.fwds span a,.page-control>div.fwds span span{right:0;text-align:right;padding-right:80px}.page-control>div.fwds span a:before,.page-control>div.fwds span span:before{right:20px}.page-control>div.fwds span.next a,.page-control>div.fwds span.next span{top:0;height:80px;line-height:80px;color:rgba(204,0,0,0)}.page-control>div.fwds span.next a:before,.page-control>div.fwds span.next span:before{right:0;width:80px;height:80px;border-radius:40px;background-position:-160px -40px}.page-control>div.fwds span.fwd a,.page-control>div.fwds span.fwd span{top:0;color:rgba(204,0,0,0)}.page-control>div.fwds span.fwd a:before,.page-control>div.fwds span.fwd span:before{right:41px;width:32px;height:32px;background-position:-122px -42px}.page-control>div.fwds span.last a,.page-control>div.fwds span.last span{bottom:0;opacity:0}.page-control>div.fwds span.last a:before,.page-control>div.fwds span.last span:before{background-position:-120px -80px}.page-control>div.fwds.over span.next a,.page-control>div.fwds.over span.next span{color:#c00}.page-control>div.fwds.over span.fwd a,.page-control>div.fwds.over span.fwd span{top:-45px;color:#c00}.page-control>div.fwds.over span.fwd a:before,.page-control>div.fwds.over span.fwd span:before{bottom:-1px;right:20px;width:40px;height:40px;background-position:-120px -40px}.page-control>div.fwds.over span.last a,.page-control>div.fwds.over span.last span{bottom:-45px}.page-control>div.fwds.over span.last a{opacity:1}.page-control>div.fwds.over span.last span{opacity:.3}}.calendar .page-control{display:none}.tx-dlf-calendar-years,.tx-dlf-calendar{padding:0 10px 60px 10px;max-height:100%;overflow:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;text-align:left;font-family:'VistaSansBook','Calibri','Helvetica',Sans-serif;font-feature-settings:'lnum'}@media screen and (min-width:1024px){.tx-dlf-calendar-years,.tx-dlf-calendar{position:relative;height:100%;padding:30px 30px 60px 30px}}body.calendar .document-functions,body.calendar .view-functions{display:none}body.calendar .step-back-button{top:60px;left:10px;border:1px solid #d9d9d9}@media screen and (min-width:1024px){body.calendar .step-back-button{border:0 none;top:80px;left:15px}}.tx-dlf-calendar-years .year-anchor{border-bottom:1px solid #d9d9d9;line-height:1.4;font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif;font-size:14px;padding:5px 0 10px 50px}.tx-dlf-calendar-years .year-anchor a{color:#167}.tx-dlf-calendar-years .meta-hint-year{display:none}.tx-dlf-calendar-years ul li{margin:20px}.tx-dlf-calendar-years ul li a{display:block;padding:25px 20px;text-align:center;color:#167;font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif;background:#e6f5f7}@media screen and (min-width:1024px){.tx-dlf-calendar-years{vertical-align:middle}.tx-dlf-calendar-years .year-anchor{padding:0 0 10px 30px}.tx-dlf-calendar-years .meta-hint-year{display:block;opacity:.5;padding:5px 0 0 30px;font-size:14px}.tx-dlf-calendar-years ul{position:relative;margin-top:30px;min-height:calc(100% - 60px);display:flex;flex-wrap:wrap;justify-content:center;align-content:center}.tx-dlf-calendar-years ul li{display:inline-block}.no-touchevents .tx-dlf-calendar-years ul li a{-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.no-touchevents .tx-dlf-calendar-years ul li a:hover{-webkit-transform:scale(1.2);-moz-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2)}}@media screen and (min-width:1200px){.tx-dlf-calendar-years ul li{margin:30px}.tx-dlf-calendar-years ul li a{font-size:20px;font-family:'VistaSansBook','Calibri','Helvetica',Sans-serif}}.tx-dlf-calendar .calendar-list-selection,.tx-dlf-calendar .list-view{display:none}.tx-dlf-calendar .year-anchor{border-bottom:1px solid #d9d9d9;line-height:1.4;font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif;font-size:14px;padding:5px 0 10px 50px}.tx-dlf-calendar .year-anchor a{color:#167}.tx-dlf-calendar .year{font-size:20px;margin:20px 0 -20px 0;font-weight:bold;line-height:1.4;text-align:center}.tx-dlf-calendar .calendar-view{position:relative;margin:30px 0 0 0}.tx-dlf-calendar .calendar-view .year{flex:0 0 calc(100% - 60px);font-family:'VistaSlabBold','Rockwell-Bold','Georgia','Times',serif;font-size:20px;margin:20px 30px;border-bottom:1px solid #d9d9d9;color:#167;text-shadow:-4px 0 3px white,4px 0 3px white;height:16px}.tx-dlf-calendar .calendar-view table{width:100%;margin:50px 0;text-align:center;border-bottom:1px solid #d9d9d9}.tx-dlf-calendar .calendar-view table caption{font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif;border-bottom:1px solid #d9d9d9;font-size:12px;text-transform:uppercase;padding-bottom:5px;color:#333}.tx-dlf-calendar .calendar-view table tr td,.tx-dlf-calendar .calendar-view table tr th{width:14.285%;padding:6px}.tx-dlf-calendar .calendar-view table tr th{font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif;font-size:14px;color:#737373}.tx-dlf-calendar .calendar-view table tr td{color:#167}.tx-dlf-calendar .calendar-view table tr td h4,.tx-dlf-calendar .calendar-view table tr td .day-label{position:relative;color:#167;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;font-weight:bold;display:block;border:1px solid transparent}.tx-dlf-calendar .calendar-view table tr td h4:after,.tx-dlf-calendar .calendar-view table tr td .day-label:after{position:absolute;top:19px;left:50%;margin-left:-5px;width:0;height:0;border:5px solid transparent;border-top-width:0;border-bottom-color:rgba(17,102,119,0.93);content:" ";opacity:0;-webkit-transform:translateY(15px);-moz-transform:translateY(15px);-ms-transform:translateY(15px);transform:translateY(15px);-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.tx-dlf-calendar .calendar-view table tr td h4{font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif;border-color:rgba(17,102,119,0.2);background:#e6f5f7;border-radius:100%}.no-touchevents .tx-dlf-calendar .calendar-view table tr td{cursor:pointer}.tx-dlf-calendar .calendar-view table tr td ul{position:absolute;left:0;right:0;padding:10px;margin-top:10px;background:rgba(17,102,119,0.93);opacity:0;-webkit-transform:scaleY(0);-moz-transform:scaleY(0);-ms-transform:scaleY(0);transform:scaleY(0);-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;transform-origin:center top}.tx-dlf-calendar .calendar-view table tr td ul li{margin:10px 0}.tx-dlf-calendar .calendar-view table tr td ul li a{display:block;padding:10px;color:#fff}.tx-dlf-calendar .calendar-view table tr td.open h4,.tx-dlf-calendar .calendar-view table tr td.open .day-label{-webkit-transform:scale(1.2);-moz-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2)}.tx-dlf-calendar .calendar-view table tr td.open h4:after,.tx-dlf-calendar .calendar-view table tr td.open .day-label:after{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}.tx-dlf-calendar .calendar-view table tr td.open ul{opacity:1;z-index:10000;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);transform:scaleY(1)}.tx-dlf-calendar .calendar-view table tr:nth-child(even) td{background:#e6f5f7}.tx-dlf-calendar .calendar-view table tr:nth-child(even) td h4{border-color:rgba(17,102,119,0.4);background:white}@media screen and (min-width:1024px){.tx-dlf-calendar .calendar-list-selection{display:block}.tx-dlf-calendar .calendar-list-selection{position:absolute;top:85px;right:85px}.tx-dlf-calendar .calendar-list-selection a{position:relative;border:1px solid #167;color:#167;background:white;font-size:14px;font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif;line-height:18px;padding:10px;height:40px;border-radius:30px;display:inline-block;margin-left:5px}.no-touchevents .tx-dlf-calendar .calendar-list-selection a{cursor:pointer}.tx-dlf-calendar .calendar-list-selection a.active{background:#167;color:white}.tx-dlf-calendar .calendar-list-selection a.active:before{position:absolute;bottom:-5px;left:50%;margin-left:-5px;width:0;height:0;border:5px solid transparent;border-bottom-width:0;border-top-color:#167;content:" "}.tx-dlf-calendar .year-anchor{padding:0 0 10px 30px}.tx-dlf-calendar .year{font-weight:normal;font-size:30px}.tx-dlf-calendar .calendar-view,.tx-dlf-calendar .list-view{position:absolute;top:160px;right:30px;left:30px;opacity:0;-webkit-transform:translateY(-100px) scaleY(0);-moz-transform:translateY(-100px) scaleY(0);-ms-transform:translateY(-100px) scaleY(0);transform:translateY(-100px) scaleY(0);-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;display:block;pointer-events:none;padding-bottom:60px;height:0}.tx-dlf-calendar .calendar-view.active,.tx-dlf-calendar .list-view.active{-webkit-transform:translateY(0) scaleY(1);-moz-transform:translateY(0) scaleY(1);-ms-transform:translateY(0) scaleY(1);transform:translateY(0) scaleY(1);opacity:1;pointer-events:all}.tx-dlf-calendar .calendar-view{margin:0 -30px;display:flex;flex-wrap:wrap}.tx-dlf-calendar .calendar-view .month{position:relative;padding:30px;flex:1 0 auto}.tx-dlf-calendar .calendar-view .month table{width:100%;margin:0}.tx-dlf-calendar .calendar-view .month table tr td{position:relative}.tx-dlf-calendar .calendar-view .month table tr td h4,.tx-dlf-calendar .calendar-view .month table tr td .day-label{padding:5px}.tx-dlf-calendar .calendar-view .month table tr td ul{left:50%;right:auto;padding:0 10px;-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.tx-dlf-calendar .calendar-view .month table tr td.open h4,.tx-dlf-calendar .calendar-view .month table tr td.open .day-label{-webkit-transform:scale(1.4);-moz-transform:scale(1.4);-ms-transform:scale(1.4);transform:scale(1.4)}.tx-dlf-calendar .calendar-view .month table tr td.open h4:after,.tx-dlf-calendar .calendar-view .month table tr td.open .day-label:after{top:26px;opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}.tx-dlf-calendar .calendar-view .month table tr td.open ul{z-index:200}.tx-dlf-calendar .list-view ul li{padding:10px;margin:10px 0;font-size:14px;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.tx-dlf-calendar .list-view ul li:nth-child(even){background:#e6f5f7}.tx-dlf-calendar .list-view ul li .listview-date{line-height:25px}.tx-dlf-calendar .list-view ul li .listview-date:after{content:": "}.tx-dlf-calendar .list-view ul li a{background:#167;color:#fff;display:inline-block;border-radius:6px;padding:5px 10px;margin:0 5px;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.tx-dlf-calendar .list-view ul li a:last-child{margin-right:0}.no-touchevents .tx-dlf-calendar .list-view ul li a:hover{background:rgba(204,0,0,0.5)}}@media screen and (min-width:1200px){.tx-dlf-calendar .calendar-list-selection{top:40px}.tx-dlf-calendar .calendar-view{justify-content:center}.tx-dlf-calendar .calendar-view .month{flex:0 0 auto}}body.gridview .view-functions{display:none}body.gridview .step-back-button{top:60px;left:10px;border:1px solid #d9d9d9}@media screen and (min-width:1024px){body.gridview .step-back-button{border:0 none;top:80px;left:15px}}.tx-dlf-pagegrid-list{position:absolute;top:60px;right:0;bottom:0;left:0;overflow:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.tx-dlf-pagegrid-list li{width:100px;height:160px;display:inline-block;margin:10px}.no-touchevents .tx-dlf-pagegrid-list li{-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.no-touchevents .tx-dlf-pagegrid-list li:hover{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}.tx-dlf-pagegrid-list li img{position:relative;height:100%;width:100%;object-fit:contain;max-height:150px}.tx-dlf-pagegrid-list li .tx-dlf-pagegrid-pagination{margin-top:5px;font-weight:700;font-size:12px;color:#167}.tx-dlf-pagegrid-list li.current{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}.tx-dlf-pagegrid-list li.current img{border:6px solid #167}@media screen and (min-width:768px){.tx-dlf-pagegrid-list{top:0;padding-top:70px}.tx-dlf-pagegrid-list li{width:120px;height:180px;margin:20px}}@media screen and (min-width:1024px){.tx-dlf-pagegrid-list li{width:150px;height:200px}.tx-dlf-pagegrid-list li .tx-dlf-pagegrid-pagination{font-size:14px}}.tx-dlf-pagegrid-pagebrowser{position:absolute;bottom:15px;height:1px;width:290px;left:50%;margin-left:-145px;line-height:0;background:green;font:0/0 'Open Sans',Helvetica,Arial,sans-serif;color:transparent;text-shadow:none;background-color:transparent;border:0}.tx-dlf-pagegrid-pagebrowser a{position:absolute;bottom:0;display:none;width:40px;height:40px}.tx-dlf-pagegrid-pagebrowser a:before{position:absolute;top:0;left:0;bottom:-1px;width:40px;height:40px;border-radius:20px;background:white url('/typo3conf/ext/slub_digitalcollections/Resources/Public/Images/Slub/viewerControlIcons.svg') no-repeat 0 0;content:" "}.tx-dlf-pagegrid-pagebrowser a:first-child{display:block;left:0}.tx-dlf-pagegrid-pagebrowser a:first-child:before{background-position:-240px -80px}.tx-dlf-pagegrid-pagebrowser a:last-child{display:block;right:0}.tx-dlf-pagegrid-pagebrowser a:last-child:before{background-position:-280px -80px}@media screen and (min-width:1024px){.tx-dlf-pagegrid-pagebrowser{height:70px;padding:15px;font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif;font-size:14px;line-height:30px;color:white;white-space:nowrap;width:auto;margin:0;-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);-moz-font-feature-settings:"lnum";-webkit-font-feature-settings:"lnum";font-feature-settings:"lnum";background:rgba(17,102,119,0.9);box-shadow:0 2px 6px rgba(0,0,0,0.2)}.tx-dlf-pagegrid-pagebrowser a,.tx-dlf-pagegrid-pagebrowser a:first-child,.tx-dlf-pagegrid-pagebrowser a:last-child{color:#167;position:relative;display:inline-block;bottom:auto;margin:0 3px;left:auto;right:auto;background:white;border-radius:20px;width:30px;height:30px}.tx-dlf-pagegrid-pagebrowser a:before,.tx-dlf-pagegrid-pagebrowser a:first-child:before,.tx-dlf-pagegrid-pagebrowser a:last-child:before{display:none}}@media screen and (min-width:1200px){.tx-dlf-pagegrid-pagebrowser{font-size:18px;line-height:40px}.tx-dlf-pagegrid-pagebrowser a,.tx-dlf-pagegrid-pagebrowser a:first-child,.tx-dlf-pagegrid-pagebrowser a:last-child{width:40px;height:40px}}.fulltext-container{position:absolute;top:55px;right:0;bottom:0;background:rgba(255,255,255,0.95);text-align:left;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.fulltext-container #tx-dlf-fulltextselection{position:relative;top:0;right:0;width:100%;height:100%;padding:60px 20px;overflow:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;line-height:1.6em;font-size:16px;color:#333;display:none}.fulltext-container #tx-dlf-fulltextselection:empty{padding:0}.fulltext-container #tx-dlf-fulltextselection .textline:after{content:" "}.fulltext-visible .fulltext-container #tx-dlf-fulltextselection{display:block}.fullscreen .fulltext-container{top:0}@media screen and (min-width:768px){.fulltext-container #tx-dlf-fulltextselection{padding:60px 15%}}@media screen and (min-width:1024px){.fulltext-container{top:0;max-width:71.7%}.fulltext-container:before{height:100px}.fulltext-container:after{height:80px}.fulltext-container #tx-dlf-fulltextselection{padding:80px 100px 60px 30px;line-height:1.8;border-left:1px solid #4ab3c7}.fulltext-container #tx-dlf-fulltextselection .highlight{padding:3px 0;background:#bfe4eb}}@media screen and (min-width:1200px){.fulltext-container{max-width:50%}}.tx-dlf-toolsFulltextsearch{position:absolute;top:0;right:106px}.tx-dlf-toolsFulltextsearch .fulltext-search-toggle{position:absolute;top:10px;right:0;width:40px;height:40px;background:white url('/typo3conf/ext/slub_digitalcollections/Resources/Public/Images/Slub/viewerControlIcons.svg') no-repeat -560px 0;background-size:auto 120px;border-radius:20px;cursor:pointer}.tx-dlf-toolsFulltextsearch .fulltext-search-toggle:after{position:absolute;top:0;right:0;height:40px;width:40px;text-align:center;content:"+";font-size:42px;line-height:32px;color:#167;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;opacity:0}.search-indocument-active .tx-dlf-toolsFulltextsearch .fulltext-search-toggle{background:#e6f5f7}.search-indocument-active .tx-dlf-toolsFulltextsearch .fulltext-search-toggle:after{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);opacity:1}.tx-dlf-toolsFulltextsearch .fulltext-search-toggle.disabled{opacity:.5;pointer-events:none}.no-touchevents .tx-dlf-toolsFulltextsearch .fulltext-search-toggle{-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.no-touchevents .tx-dlf-toolsFulltextsearch .fulltext-search-toggle:hover{-webkit-transform:scale(1.2);-moz-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2)}.tx-dlf-toolsFulltextsearch form{position:absolute;top:60px;right:-106px;height:40px;width:100vw;padding:0 15px;opacity:0;pointer-events:none;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;-webkit-transform:translateY(-100%);-moz-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%)}.tx-dlf-toolsFulltextsearch form label{display:none}.tx-dlf-toolsFulltextsearch form input[type="text"]{position:relative;width:100%;font-family:'VistaSansBook','Calibri','Helvetica',Sans-serif;background:white;border-radius:20px;border:0;font-size:14px;line-height:1.1;padding:4px 10px;height:40px;color:#333;box-shadow:0 2px 10px rgba(0,0,0,0.2)}.tx-dlf-toolsFulltextsearch form input[type="text"]:focus{color:#167}.tx-dlf-toolsFulltextsearch form button[type="submit"],.tx-dlf-toolsFulltextsearch form input[type="submit"]{position:absolute;top:0;right:15px;width:40px;height:40px;font:0/0 'Open Sans',Helvetica,Arial,sans-serif;color:transparent;text-shadow:none;background-color:transparent;border:0;background:#e6f5f7 url('/typo3conf/ext/slub_digitalcollections/Resources/Public/Images/Slub/viewerControlIcons.svg') no-repeat -560px 0;background-size:auto 120px;border-radius:20px}.search-indocument-active .tx-dlf-toolsFulltextsearch form{pointer-events:all;opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}.tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-loading,.tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-clearing{display:none}.tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-results{position:fixed;top:230px;right:15px;max-height:calc(100vh - 310px);left:15px;background:white;text-align:center;border-radius:20px;font-family:'VistaSansBook','Calibri','Helvetica',Sans-serif;overflow:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;pointer-events:none;opacity:0;box-shadow:0 2px 10px rgba(0,0,0,0.2);-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;-webkit-transform:translateY(-100%);-moz-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%)}.tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-results li{padding:15px 10px;border-bottom:1px solid #d9d9d9;line-height:1.2}.tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-results li .structure{font-size:14px;position:relative;display:block;font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif;text-transform:uppercase;color:#a6a6a6}.tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-results li .highlight,.tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-results li em{font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif;color:#c00;font-style:normal}.tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-results li .textsnippet a{color:#333}.tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-results li .textsnippet:before,.tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-results li .textsnippet:after{content:"…"}.tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-results .button-previous,.tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-results .button-next{position:relative;margin:30px 10px;background:#4ab3c7;appearance:none;border:0;padding:10px 20px;line-height:1;font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif;text-transform:uppercase;color:white}.search-indocument-active .tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-results{pointer-events:all;opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}.search-indocument-active .tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-results:empty{pointer-events:none;opacity:0;-webkit-transform:translateY(-100%);-moz-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%)}@media screen and (min-width:480px){.tx-dlf-toolsFulltextsearch form{top:10px;right:40px;width:400px}.tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-results{top:165px;z-index:1030;max-height:calc(100vh - 170px)}.tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-results li{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-results li .structure{display:inline}}@media screen and (min-width:768px){.tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-results{top:180px;max-height:calc(100vh - 280px)}}@media screen and (min-width:1024px){.tx-dlf-toolsFulltextsearch{top:10px;right:8px}.tx-dlf-toolsFulltextsearch form{top:80px;right:0;width:450px;height:70px;margin:0;border-radius:0;background:rgba(17,102,119,0.9);padding:15px;box-shadow:0 2px 6px rgba(0,0,0,0.2)}.tx-dlf-toolsFulltextsearch form input[type="text"]{border-radius:0}.tx-dlf-toolsFulltextsearch form button[type="submit"],.tx-dlf-toolsFulltextsearch form input[type="submit"]{top:15px;border-radius:20px 0 0 20px;background-color:#bfe4eb}.tx-dlf-toolsFulltextsearch form:before{position:absolute;top:-10px;right:10px;width:0;height:0;border:10px solid transparent;border-bottom-color:rgba(17,102,119,0.9);border-top:0;content:" "}.tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-results{position:absolute;top:150px;right:0;left:auto;bottom:auto;width:450px;height:400px;border-radius:0;background:rgba(17,102,119,0.9);padding:0 15px 15px 15px;box-shadow:0 2px 6px rgba(0,0,0,0.2)}.tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-results li{text-align:left;padding:10px 0;color:white}.tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-results li .structure{color:white;opacity:.6}.tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-results li a{color:white}.tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-results li a .highlight,.tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-results li a em{color:white}}@media screen and (min-width:1200px){.tx-dlf-toolsFulltextsearch form{width:600px}.tx-dlf-toolsFulltextsearch #tx-dlf-search-in-document-results{width:600px;font-size:14px;height:auto;max-height:70vh}}body.calendar .tx-dlf-toolsFulltextsearch{top:-20px;right:15px}body.calendar .tx-dlf-toolsFulltextsearch form{right:-15px}@media screen and (min-width:480px){body.calendar .tx-dlf-toolsFulltextsearch form{right:40px}}@media screen and (min-width:1024px){body.calendar .tx-dlf-toolsFulltextsearch{top:30px;right:35px}body.calendar .tx-dlf-toolsFulltextsearch .fulltext-search-toggle{border:1px solid #167}body.calendar .tx-dlf-toolsFulltextsearch form{right:0}}.control-bar .header-bar .brand a{line-height:24px}@media screen and (min-width:1024px){.control-bar:before{position:absolute;top:0;left:0;right:-60px;height:85px;background:url('/typo3conf/ext/slub_digitalcollections/Resources/Public/Images/Slub/headerbarBg.svg') no-repeat left top;background-size:100% 100%;content:" ";pointer-events:none}.control-bar .header-bar nav .nav-toggle{right:0}.control-bar .header-bar nav .language-nav{right:24px}}@media screen and (min-width:1024px){.document-functions>ul{left:40px}}/*# sourceMappingURL=Resources/Public/Css/Digitalcollections.css.map */ \ No newline at end of file diff --git a/Resources/Public/Css/DigitalcollectionsLists.css b/Resources/Public/Css/DigitalcollectionsLists.css new file mode 100644 index 00000000..2bc88b90 --- /dev/null +++ b/Resources/Public/Css/DigitalcollectionsLists.css @@ -0,0 +1 @@ +html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{background:transparent;border:0;margin:0;padding:0;vertical-align:baseline}body{line-height:1}h1,h2,h3,h4,h5,h6{clear:both;font-weight:normal}ol,ul{list-style:none}blockquote{quotes:none}blockquote:before,blockquote:after{content:'';content:none}del{text-decoration:line-through}table{border-collapse:collapse;border-spacing:0}a img{border:none}.control-bar .header-bar .brand a{line-height:24px}@media screen and (min-width:1024px){.control-bar:before{position:absolute;top:0;left:0;right:-60px;height:85px;background:url('/typo3conf/ext/slub_digitalcollections/Resources/Public/Images/Slub/headerbarBg.svg') no-repeat left top;background-size:100% 100%;content:" ";pointer-events:none}.control-bar .header-bar nav .nav-toggle{right:0}.control-bar .header-bar nav .language-nav{right:24px}}@media screen and (min-width:1024px){.document-functions>ul{left:40px}}.listview h2,.listview #rightcol .rightnav{display:none}#leftcol .tx-dlf-listview h2{font-size:24px;display:block;margin:0}#leftcol .tx-dlf-listview p.tx-dlf-search-numHits{font-family:'VistaSansBook','Calibri','Helvetica',Sans-serif;margin-top:0;font-size:14px}#leftcol .tx-dlf-listview p.tx-dlf-sortinfo~form{display:none}#leftcol .tx-dlf-listview p.tx-dlf-sortinfo{text-align:center;margin:0;font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif;clear:both}#leftcol .tx-dlf-listview p.tx-dlf-pagebrowser{margin:20px 0;font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif;-moz-font-feature-settings:"lnum";-webkit-font-feature-settings:"lnum";font-feature-settings:"lnum";color:#333;text-align:center}#leftcol .tx-dlf-listview p.tx-dlf-pagebrowser a{display:inline-block;min-width:30px;height:30px;border:1px solid #d9d9d9;text-decoration:none;border-radius:15px;margin:0 5px;background:white;padding:0 5px}@media screen and (min-width:480px){#leftcol .tx-dlf-listview h2{font-size:28px}}@media screen and (min-width:1024px){#leftcol .tx-dlf-listview p.tx-dlf-sortinfo~form{position:relative;display:block}#leftcol .tx-dlf-listview p.tx-dlf-sortinfo~form>div{position:absolute;top:-45px;right:0;width:65%;display:flex;font-family:'VistaSansBook','Calibri','Helvetica',Sans-serif;font-size:14px}#leftcol .tx-dlf-listview p.tx-dlf-sortinfo~form>div label{white-space:nowrap;text-align:right;line-height:35px;margin:0 5px 0 0}#leftcol .tx-dlf-listview p.tx-dlf-sortinfo~form>div select{position:relative;appearance:none;-webkit-appearance:none;border:1px solid #d9d9d9;height:35px;background:white url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MCAyMDAiPjxwYXRoIGQ9Ik0xMC4zIDMzLjVsMi4yLTIuMSA3LjctNy44LTIuMS0yLjEtNy44IDcuNy03LjctNy43LTIuMiAyLjEgNy44IDcuOCAyLjEgMi4xeiIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9IiMwNzgwNzgiLz48cGF0aCBkPSJNMTAuMyAxMzMuNWwyLjItMi4xIDcuNy03LjgtMi4xLTIuMS03LjggNy43LTcuNy03LjctMi4yIDIuMSA3LjggNy44IDIuMSAyLjF6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZmlsbD0iI2MwMCIvPjwvc3ZnPg==") no-repeat right 3px;background-size:auto 100px;padding:5px 20px 5px 5px;border-radius:0;font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif;font-size:14px;line-height:1;box-shadow:2px 2px 4px rgba(0,0,0,0.1);color:#666;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}#leftcol .tx-dlf-listview p.tx-dlf-sortinfo~form>div select:hover{background-position:right -47px;border-color:#167;color:#c00}#leftcol .tx-dlf-listview p.tx-dlf-sortinfo{text-align:left;height:40px;border-bottom:1px solid #d9d9d9}}@media screen and (min-width:1200px){#leftcol .tx-dlf-listview h2{font-size:36px}}#leftcol .tx-dlf-listview .tx-dlf-abstracts{list-style:none;margin:0;padding:0}#leftcol .tx-dlf-listview .tx-dlf-abstracts li{position:relative;padding:30px 0;text-align:center;border-bottom:1px solid #d9d9d9}#leftcol .tx-dlf-listview .tx-dlf-abstracts li:before{display:none}#leftcol .tx-dlf-listview .tx-dlf-abstracts li .tx-dlf-listview-thumbnail{margin-bottom:10px}#leftcol .tx-dlf-listview .tx-dlf-abstracts li .tx-dlf-listview-thumbnail img{max-height:150px}#leftcol .tx-dlf-listview .tx-dlf-abstracts li dl{font-family:'VistaSansBook','Calibri','Helvetica',Sans-serif;font-size:14px;-moz-font-feature-settings:"lnum";-webkit-font-feature-settings:"lnum";font-feature-settings:"lnum"}#leftcol .tx-dlf-listview .tx-dlf-abstracts li dl dt,#leftcol .tx-dlf-listview .tx-dlf-abstracts li dl dd{display:inline}#leftcol .tx-dlf-listview .tx-dlf-abstracts li dl dt{font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif}#leftcol .tx-dlf-listview .tx-dlf-abstracts li dl dt:after{content:": "}#leftcol .tx-dlf-listview .tx-dlf-abstracts li dl dt.tx-dlf-title{display:none}#leftcol .tx-dlf-listview .tx-dlf-abstracts li dl dd.tx-dlf-title{font-size:22px;display:block}#leftcol .tx-dlf-listview .tx-dlf-abstracts li dl dd.tx-dlf-title a{text-decoration:none;font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif}#leftcol .tx-dlf-listview .tx-dlf-abstracts li dl dd.tx-dlf-title:after{display:none}#leftcol .tx-dlf-listview .tx-dlf-abstracts li dl dd:after{content:"//";margin:0 5px}#leftcol .tx-dlf-listview .tx-dlf-abstracts li dl dd:last-child:after{display:none}#leftcol .tx-dlf-listview .tx-dlf-abstracts li .tx-dlf-morevolumes{position:relative;width:40px;height:40px;font:0/0 'Open Sans',Helvetica,Arial,sans-serif;color:transparent;text-shadow:none;background-color:transparent;border:0;display:inline-block;-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;transform-origin:center center;cursor:pointer}#leftcol .tx-dlf-listview .tx-dlf-abstracts li .tx-dlf-morevolumes:before{position:absolute;top:-5px;left:5px;content:">>";font-size:40px;line-height:40px;font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif;color:#167;display:block;letter-spacing:-0.1em}#leftcol .tx-dlf-listview .tx-dlf-abstracts li .tx-dlf-hidevolumes{display:none}#leftcol .tx-dlf-listview .tx-dlf-abstracts li.tx-dlf-volumes-open .tx-dlf-morevolumes{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}#leftcol .tx-dlf-listview .tx-dlf-abstracts li .tx-dlf-volume{position:relative;background:#e9f3f5;padding:15px 0;display:none}#leftcol .tx-dlf-listview .tx-dlf-abstracts li .tx-dlf-volume li{border-bottom:1px solid white;padding:15px}#leftcol .tx-dlf-listview .tx-dlf-abstracts li .tx-dlf-volume li .tx-dlf-listview-thumbnail img{width:60px;margin-left:15px}#leftcol .tx-dlf-listview .tx-dlf-abstracts li .tx-dlf-volume li dl dd.tx-dlf-title{font-size:18px}#leftcol .tx-dlf-listview .tx-dlf-abstracts li .tx-dlf-volume li dl dd.tx-dlf-title a{color:#0e5361}#leftcol .tx-dlf-listview .tx-dlf-abstracts li .tx-dlf-volume li:first-child{border-top:1px solid white}#leftcol .tx-dlf-listview .tx-dlf-abstracts li .tx-dlf-volume:before{position:absolute;top:-15px;left:50%;margin-left:-15px;height:0;width:0;border:15px solid transparent;border-top-width:0;border-bottom-color:#e9f3f5;content:" "}@media screen and (min-width:480px){#leftcol .tx-dlf-listview .tx-dlf-abstracts{border-top:1px solid #d9d9d9}#leftcol .tx-dlf-listview .tx-dlf-abstracts li{text-align:left;display:flex;align-items:center;line-height:1.7;flex-wrap:wrap}#leftcol .tx-dlf-listview .tx-dlf-abstracts li .tx-dlf-listview-thumbnail{position:relative;margin:0 25px 0 0;line-height:0;flex:0 1 auto}#leftcol .tx-dlf-listview .tx-dlf-abstracts li .tx-dlf-listview-thumbnail img{width:90px;height:auto}#leftcol .tx-dlf-listview .tx-dlf-abstracts li .tx-dlf-listview-thumbnail:empty{width:90px;min-height:90px;border:1px solid #d9d9d9}#leftcol .tx-dlf-listview .tx-dlf-abstracts li .tx-dlf-listview-thumbnail:empty:before,#leftcol .tx-dlf-listview .tx-dlf-abstracts li .tx-dlf-listview-thumbnail:empty:after{margin:-25px -3px 0 0;position:absolute;top:50%;right:50%;width:1px;height:50px;background:#d9d9d9;content:" "}#leftcol .tx-dlf-listview .tx-dlf-abstracts li .tx-dlf-listview-thumbnail:empty:before{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}#leftcol .tx-dlf-listview .tx-dlf-abstracts li .tx-dlf-listview-thumbnail:empty:after{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}#leftcol .tx-dlf-listview .tx-dlf-abstracts li dl{flex:1 1 60%}#leftcol .tx-dlf-listview .tx-dlf-abstracts li dl dd.tx-dlf-title{line-height:1.2;margin-bottom:5px}#leftcol .tx-dlf-listview .tx-dlf-abstracts li .tx-dlf-volume{flex:0 0 100%}#leftcol .tx-dlf-listview .tx-dlf-abstracts li .tx-dlf-volume:before{left:auto;right:5px}}.tx-dlf-listview>img{width:100%;height:auto;border:1px solid #d9d9d9;margin-top:20px;max-height:350px}.tx-dlf-listview>p>img{display:none}@media screen and (min-width:768px){.tx-dlf-listview>img{float:left;width:auto;margin:30px 15px 15px 0}}#rightcol .tx-dlf-enable-offcanvas{position:fixed;top:0;right:0;bottom:0;width:90%;background:rgba(17,102,119,0.97);z-index:102;text-align:left;padding:15px;margin:0;border:none;color:white;-webkit-transform:translateX(100%);-moz-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%)}#rightcol .tx-dlf-enable-offcanvas .offcanvas-toggle{position:absolute;left:-30px;border-radius:30px 0 0 30px;bottom:100px;width:30px;height:60px;background:rgba(17,102,119,0.97)}#rightcol .tx-dlf-enable-offcanvas .offcanvas-toggle:before{position:absolute;top:20px;left:7px;width:14px;height:14px;border-radius:14px;border:2px solid white;content:" "}#rightcol .tx-dlf-enable-offcanvas .offcanvas-toggle:after{position:absolute;right:4px;bottom:20px;width:2px;height:8px;background:white;content:" ";-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}#rightcol .tx-dlf-enable-offcanvas.open{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);z-index:1100}#rightcol .tx-dlf-enable-offcanvas.open .offcanvas-toggle{border-color:white}#rightcol .tx-dlf-enable-offcanvas h3{color:white}@media screen and (min-width:768px){#rightcol .tx-dlf-enable-offcanvas{width:60%}}@media screen and (min-width:1024px){#rightcol .tx-dlf-enable-offcanvas{position:relative;top:auto;right:auto;bottom:auto;width:auto;background:white;color:#333;-webkit-transform:none;-moz-transform:none;-ms-transform:none;transform:none}#rightcol .tx-dlf-enable-offcanvas .offcanvas-toggle{display:none}#rightcol .tx-dlf-enable-offcanvas h3{color:#c00}}#rightcol .tx-dlf-search{position:absolute;top:60px;right:15px;bottom:15px;left:15px;overflow:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}#rightcol .tx-dlf-search form{position:relative;margin-bottom:20px;font-family:'VistaSansBook','Calibri','Helvetica',Sans-serif;font-size:14px}#rightcol .tx-dlf-search form input[type="text"]{position:relative;width:100%;font-family:'VistaSansBook','Calibri','Helvetica',Sans-serif;font-size:14px;background:white;border:0;line-height:1.1;padding:4px 10px;height:40px;color:#333;box-shadow:0 2px 4px rgba(0,0,0,0.4);margin-bottom:10px}#rightcol .tx-dlf-search form input[type="text"]:focus{color:#167}#rightcol .tx-dlf-search form input[type="submit"]{position:absolute;top:0;right:0;width:40px;height:40px;font:0/0 'Open Sans',Helvetica,Arial,sans-serif;color:transparent;text-shadow:none;background-color:transparent;border:0;background:#e6f5f7 url('/typo3conf/ext/slub_digitalcollections/Resources/Public/Images/Slub/viewerControlIcons.svg') no-repeat -560px 0;background-size:auto 120px;border-radius:20px 0 0 20px}#rightcol .tx-dlf-search form input[type="radio"]{position:relative;appearance:none;-webkit-appearance:none;border:2px solid rgba(255,255,255,0.4);width:20px;height:20px;border-radius:10px;vertical-align:middle}#rightcol .tx-dlf-search form input[type="radio"]:after{position:absolute;top:4px;left:4px;width:8px;height:8px;border-radius:4px;background:white;content:" ";opacity:0}#rightcol .tx-dlf-search form input[type="radio"]:hover{border-color:white}#rightcol .tx-dlf-search form input[type="radio"]:checked{background:#178ca4}#rightcol .tx-dlf-search form input[type="radio"]:checked:after{opacity:1}#rightcol .tx-dlf-search form label{margin-right:10px}#rightcol .tx-dlf-search form label[for="tx-dlf-search-query"]{display:none}#rightcol .tx-dlf-search form #tx-dlf-search-suggest{position:absolute}#rightcol .tx-dlf-search form #tx-dlf-search-suggest ul{z-index:300;margin:10px 0 0 0;padding:0;background:white;box-shadow:0 2px 8px rgba(0,0,0,0.4)}#rightcol .tx-dlf-search form #tx-dlf-search-suggest ul li{color:#167;padding:10px 15px;font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif;border-bottom:1px solid #d9d9d9}.no-touchevents #rightcol .tx-dlf-search form #tx-dlf-search-suggest ul li{-webkit-transition:all .15s ease-in;-o-transition:all .15s ease-in;transition:all .15s ease-in;cursor:pointer}.no-touchevents #rightcol .tx-dlf-search form #tx-dlf-search-suggest ul li:hover{background:white;color:#167}#rightcol .tx-dlf-search form #tx-dlf-search-suggest ul:after{position:absolute;top:-10px;left:20px;width:0;height:0;border:10px solid transparent;border-top-width:0;border-bottom-color:white;content:" ";z-index:301}@media screen and (min-width:1024px){#rightcol .tx-dlf-search{position:relative;top:auto;right:auto;bottom:auto;left:auto;overflow:visible}#rightcol .tx-dlf-search form input[type="text"]{box-shadow:2px 2px 4px rgba(0,0,0,0.1);border:1px solid #afafaf}#rightcol .tx-dlf-search form input[type="submit"]{top:1px;right:1px;height:38px}#rightcol .tx-dlf-search form input[type="radio"]{border-color:#167;height:16px;width:16px;border-radius:8px}#rightcol .tx-dlf-search form input[type="radio"]:after{top:2px;left:2px}#rightcol .tx-dlf-search form input[type="radio"]:hover{border-color:#c00}#rightcol .tx-dlf-search form label:hover{color:#c00}#rightcol .tx-dlf-search form #tx-dlf-search-suggest ul{background:rgba(17,102,119,0.9)}#rightcol .tx-dlf-search form #tx-dlf-search-suggest ul li{color:white}#rightcol .tx-dlf-search form #tx-dlf-search-suggest ul:after{border-bottom-color:rgba(17,102,119,0.9)}}#rightcol .tx-dlf-search-facets{position:relative;font-family:'VistaSansBook','Calibri','Helvetica',Sans-serif;color:white}#rightcol .tx-dlf-search-facets ul{padding:0;margin:0}#rightcol .tx-dlf-search-facets ul li{font-size:18px;font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif;text-transform:uppercase;padding:0;display:none;margin:30px 0}#rightcol .tx-dlf-search-facets ul li.tx-dlf-search-ifsub{display:block}#rightcol .tx-dlf-search-facets ul li ul{border-top:1px solid rgba(255,255,255,0.3)}#rightcol .tx-dlf-search-facets ul li ul li{font-family:'VistaSansBook','Calibri','Helvetica',Sans-serif;text-transform:none;opacity:1;display:block;margin:0}#rightcol .tx-dlf-search-facets ul li ul li a{position:relative;color:white;font-size:14px;padding:5px 0;display:inline-block}#rightcol .tx-dlf-search-facets ul li ul li.tx-dlf-search-cur{font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif}#rightcol .tx-dlf-search-facets ul li .facets-toggle{font-size:14px;border-top:1px solid rgba(255,255,255,0.6);padding-top:5px;opacity:.5}.no-touchevents #rightcol .tx-dlf-search-facets ul li .facets-toggle{cursor:pointer}@media screen and (min-width:1024px){#rightcol .tx-dlf-search-facets ul li{color:#666;font-size:16px}#rightcol .tx-dlf-search-facets ul li ul{margin:5px 0;border-top:1px solid #d9d9d9}#rightcol .tx-dlf-search-facets ul li ul li a{color:#167}#rightcol .tx-dlf-search-facets ul li ul li.tx-dlf-search-cur a{position:relative;padding-left:18px}#rightcol .tx-dlf-search-facets ul li ul li.tx-dlf-search-cur a:after{position:absolute;top:50%;left:0;margin-top:-16px;content:"+";font-size:30px;line-height:30px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}#rightcol .tx-dlf-search-facets ul li .facets-toggle{border-top:1px solid #d9d9d9}}body.collections #leftcol #c15323 h3{margin-top:0;font-size:14px;bottom:-11px;padding:0 5px;left:15px;text-transform:uppercase;color:#757575;background:white;display:inline-block}body.collections #leftcol #c15323 .tx-dlf-search{border:solid #d9d9d9;border-width:1px 0;padding:20px 0 15px 0}body.collections #leftcol #c15323 .tx-dlf-search form{position:relative;margin:0;font-family:'VistaSansBook','Calibri','Helvetica',Sans-serif;font-size:14px}body.collections #leftcol #c15323 .tx-dlf-search form label{width:auto;margin:0;display:inline-block;float:none;vertical-align:middle}body.collections #leftcol #c15323 .tx-dlf-search form input[type="text"]{position:relative;width:100%;font-family:'VistaSansBook','Calibri','Helvetica',Sans-serif;font-size:14px;background:white;border:1px solid #167;line-height:1.1;padding:4px 10px;height:40px;color:#333;box-shadow:0 2px 6px rgba(0,0,0,0.3);margin-bottom:10px;float:none}body.collections #leftcol #c15323 .tx-dlf-search form input[type="text"]:focus{color:#167}body.collections #leftcol #c15323 .tx-dlf-search form input[type="submit"]{position:absolute;top:1px;right:1px;width:38px;height:38px;font:0/0 'Open Sans',Helvetica,Arial,sans-serif;color:transparent;text-shadow:none;background-color:transparent;border:0;background:#e6f5f7 url('/typo3conf/ext/slub_digitalcollections/Resources/Public/Images/Slub/viewerControlIcons.svg') no-repeat -560px 0;background-size:auto 120px;border-radius:20px 0 0 20px}body.collections #leftcol #c15323 .tx-dlf-search form input[type="radio"]{position:relative;appearance:none;-webkit-appearance:none;width:16px;height:16px;border-radius:10px;vertical-align:middle;margin:0 3px 0 0;float:none;background:#178ca4}body.collections #leftcol #c15323 .tx-dlf-search form input[type="radio"]:after{position:absolute;top:5px;left:5px;width:6px;height:6px;border-radius:4px;background:white;content:" ";opacity:0}body.collections #leftcol #c15323 .tx-dlf-search form input[type="radio"]:hover{border-color:white}body.collections #leftcol #c15323 .tx-dlf-search form input[type="radio"]:checked{background:#167}body.collections #leftcol #c15323 .tx-dlf-search form input[type="radio"]:checked:after{opacity:1}body.collections #leftcol #c15323 .tx-dlf-search form label{margin-right:10px}body.collections #leftcol #c15323 .tx-dlf-search form label[for="tx-dlf-search-query"]{display:none}body.collections #leftcol #c15323 .tx-dlf-search form #tx-dlf-search-suggest{position:absolute}body.collections #leftcol #c15323 .tx-dlf-search form #tx-dlf-search-suggest:after{position:absolute;top:0;left:20px;width:0;height:0;border:10px solid transparent;border-top-width:0;border-bottom-color:white;content:" ";z-index:301}body.collections #leftcol #c15323 .tx-dlf-search form #tx-dlf-search-suggest ul{z-index:300;margin:10px 0 0 0;padding:0;background:white;box-shadow:0 2px 8px rgba(0,0,0,0.4)}body.collections #leftcol #c15323 .tx-dlf-search form #tx-dlf-search-suggest ul li{color:#167;padding:10px 15px;font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif;border-bottom:1px solid #d9d9d9}.no-touchevents body.collections #leftcol #c15323 .tx-dlf-search form #tx-dlf-search-suggest ul li{-webkit-transition:all .15s ease-in;-o-transition:all .15s ease-in;transition:all .15s ease-in;cursor:pointer}.no-touchevents body.collections #leftcol #c15323 .tx-dlf-search form #tx-dlf-search-suggest ul li:hover{background:white;color:#167}body.collections #leftcol #c15323 .tx-dlf-search form .tx-dlf-search-extended,body.collections #leftcol #c15323 .tx-dlf-search form .extended-search-toggle{display:none}body.collections #leftcol .tx-dlf-collection{position:relative;padding-top:30px;margin-top:20px}body.collections #leftcol .tx-dlf-collection-list{margin:0 -5px;padding:0}body.collections #leftcol .tx-dlf-collection-list:before,body.collections #leftcol .tx-dlf-collection-list:after{content:" ";display:table}body.collections #leftcol .tx-dlf-collection-list:after{clear:both}body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col{width:100%}body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col.col-2,body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col.col-3{display:none}body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item{position:relative;padding:15px 0}body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item .tx-dlf-collection-thumbnail{overflow:hidden;border:1px solid #d9d9d9}body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item .tx-dlf-collection-thumbnail img{border:2px solid white;min-width:100%}body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item .tx-dlf-collection-meta-information{position:absolute;right:3px;bottom:18px;left:3px;background:white;overflow:hidden;padding:10px;line-height:1.3}body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item .tx-dlf-collection-meta-information .tx-dlf-collection-counts{font-size:14px;margin:0}body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item .tx-dlf-collection-meta-information h4{margin:0 0 4px 0;font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif;font-size:16px;text-transform:uppercase}body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item .tx-dlf-collection-meta-information h4 a{font-color:#167;text-decoration:none}body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item .tx-dlf-collection-meta-information>a[href*="rss"]{display:none}.no-touchevents body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item{cursor:pointer}.no-touchevents body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item .tx-dlf-collection-thumbnail img,.no-touchevents body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item .tx-dlf-collection-meta-information,.no-touchevents body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item .tx-dlf-collection-meta-information h4 a{-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.no-touchevents body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item .tx-dlf-collection-meta-information h4{padding-right:30px}.no-touchevents body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item .tx-dlf-collection-meta-information>a{position:absolute;top:50%;right:10px;width:30px;height:30px;margin-top:-15px;display:block;font:0/0 'Open Sans',Helvetica,Arial,sans-serif;color:transparent;text-shadow:none;background-color:transparent;border:0;background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCI+PHBhdGggZD0iTTE1IDM4LjFoM2MwLTExIDguOS0xOS41IDIwLjMtMTkuNXYtM2MtMTMtLjEtMjMuMyA5LjgtMjMuMyAyMi41eiIvPjxwYXRoIGQ9Ik0yLjMgMzguMWgzQzUuMyAxOS41IDE5LjggNSAzOC4zIDVWMmMtMjAuMiAwLTM2IDE1LjgtMzYgMzYuMXoiLz48Y2lyY2xlIGN4PSIzMy44IiBjeT0iMzMuNiIgcj0iNC41Ii8+PC9zdmc+") no-repeat center center;background-size:30px auto;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;-webkit-transform:translateX(60px);-moz-transform:translateX(60px);-ms-transform:translateX(60px);transform:translateX(60px);opacity:0}.no-touchevents body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item .tx-dlf-collection-meta-information>a img{display:none}.no-touchevents body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item:hover .tx-dlf-collection-thumbnail img{-webkit-transform:scale(1.2);-moz-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2);opacity:.8}.no-touchevents body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item:hover .tx-dlf-collection-meta-information{padding-bottom:20px}.no-touchevents body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item:hover .tx-dlf-collection-meta-information h4 a{color:#c00}.no-touchevents body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item:hover .tx-dlf-collection-meta-information>a{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);opacity:.3}.no-touchevents body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item:hover .tx-dlf-collection-meta-information>a:hover{opacity:1;-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}body.collections #leftcol .tx-dlf-collection-list.alphabetical{position:relative;min-height:2000px;margin-top:30px}body.collections #leftcol .tx-dlf-collection-list.alphabetical li{position:relative;width:100%;border-top:1px dotted #ccc;padding:20px 0;display:flex;align-items:center}body.collections #leftcol .tx-dlf-collection-list.alphabetical li.tx-dlf-collection-col{display:none}body.collections #leftcol .tx-dlf-collection-list.alphabetical li.order-label{border:0 none;height:0;padding:0;z-index:122}body.collections #leftcol .tx-dlf-collection-list.alphabetical li.order-label .order-label-value{position:absolute;top:-25px;right:50%;height:50px;min-width:50px;border-radius:25px;background:rgba(216,233,237,0.7);border:1px solid white;color:#167;padding:5px 15px;text-align:center;font-size:30px;font-family:'VistaSansBook','Calibri','Helvetica',Sans-serif;white-space:nowrap;line-height:1.1;-webkit-transform:translateX(50%);-moz-transform:translateX(50%);-ms-transform:translateX(50%);transform:translateX(50%);-moz-font-feature-settings:"lnum";-webkit-font-feature-settings:"lnum";font-feature-settings:"lnum"}body.collections #leftcol .tx-dlf-collection-list.alphabetical li.order-label:hover:before{display:none}body.collections #leftcol .tx-dlf-collection-list.alphabetical li .tx-dlf-collection-thumbnail{width:70px;height:100px;background:white;z-index:120}body.collections #leftcol .tx-dlf-collection-list.alphabetical li .tx-dlf-collection-thumbnail img{height:100%;min-width:70px;object-fit:cover;border:1px solid #d9d9d9}body.collections #leftcol .tx-dlf-collection-list.alphabetical li .tx-dlf-collection-meta-information{position:relative;bottom:auto;left:auto;right:auto;background:transparent;padding:0 0 0 20px;overflow:visible}body.collections #leftcol .tx-dlf-collection-list.alphabetical li .tx-dlf-collection-meta-information h4{font-size:18px;font-weight:normal;margin:0}body.collections #leftcol .tx-dlf-collection-list.alphabetical li .tx-dlf-collection-meta-information h4 a{color:#333;text-decoration:none}body.collections #leftcol .tx-dlf-collection-list.alphabetical li .tx-dlf-collection-meta-information h4 a:hover{text-decoration:none}body.collections #leftcol .tx-dlf-collection-list.alphabetical li .tx-dlf-collection-meta-information>a{display:none}body.collections #leftcol .tx-dlf-collection-list.alphabetical li .tx-dlf-collection-meta-information p{height:auto;opacity:1;font-size:16px;padding:5px 0 0 0;margin:0;color:#333}body.collections #leftcol .tx-dlf-collection-list.alphabetical li .tx-dlf-collection-meta-information>a{right:-25px;top:0;bottom:auto}body.collections #leftcol .tx-dlf-collection-list.alphabetical li:before{position:absolute;top:5px;right:-5px;bottom:5px;left:-5px;background:#d8e9ed;content:" ";opacity:0;pointer-events:none;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}body.collections #leftcol .tx-dlf-collection-list.alphabetical li:hover .tx-dlf-collection-thumbnail img,body.collections #leftcol .tx-dlf-collection-list.alphabetical li:hover:before{opacity:1}body.collections #leftcol .tx-dlf-collection-list.alphabetical li:hover .tx-dlf-collection-meta-information p{border-top-color:transparent}body.collections #leftcol .tx-dlf-collection-list.alphabetical li:hover .tx-dlf-collection-meta-information>a{bottom:auto}body.collections #leftcol .tx-dlf-collection-list.alphabetical-ready li{opacity:1}body.collections #leftcol .tx-dlf-list-toggle-container{position:absolute;top:0;left:0;display:flex;align-items:center;cursor:pointer;z-index:130;font-family:'VistaSansBook','Calibri','Helvetica',Sans-serif}body.collections #leftcol .tx-dlf-list-toggle-container .tx-dlf-list-toggle{position:relative;width:35px;height:20px;background:white;border-radius:20px;border:1px solid #167;margin:0 10px}body.collections #leftcol .tx-dlf-list-toggle-container .tx-dlf-list-toggle .toggle-state{position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:7px;background:#167;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}body.collections #leftcol .tx-dlf-list-toggle-container.alphabetical .tx-dlf-list-toggle .toggle-state{left:17px}body.collections #leftcol .tx-dlf-list-toggle-container .label{font-size:14px;opacity:.4;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}body.collections #leftcol .tx-dlf-list-toggle-container .label.active{opacity:1;font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif}body.collections #leftcol .tx-dlf-collection-list-additionals{display:none}@media screen and (min-width:480px){body.collections #leftcol .tx-dlf-collection{padding-top:0}body.collections #leftcol .tx-dlf-list-toggle-container{right:0;top:-45px;left:auto}body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col{width:50%;float:left}body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col.col-2{display:block}body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col.col-3{display:none}body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item{padding:5px}body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item .tx-dlf-collection-meta-information{right:8px;bottom:8px;left:8px}body.collections #leftcol .tx-dlf-collection-list.alphabetical{margin-top:0}}@media screen and (min-width:1024px){body.collections #leftcol{padding:0;width:100%;float:none}body.collections #leftcol .tx-dlf-statistics{font-family:'VistaSansBook','Calibri','Helvetica',Sans-serif}body.collections #leftcol .tx-dlf-statistics strong{font-family:'VistaSansBook','Calibri','Helvetica',Sans-serif;font-size:26px;white-space:nowrap;color:#c00}body.collections #leftcol #c15323 .tx-dlf-search{padding:30px 10% 30px 0}body.collections #leftcol #c15323 .tx-dlf-search form input[type="text"]{border-color:rgba(17,102,119,0.5)}body.collections #leftcol #c15323 .tx-dlf-search form input[type="submit"]{-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}body.collections #leftcol #c15323 .tx-dlf-search form .tx-dlf-search-extended{position:relative;display:block;margin:0;height:0;opacity:0;pointer-events:none;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}body.collections #leftcol #c15323 .tx-dlf-search form .tx-dlf-search-extended select{position:absolute;top:0;display:block;appearance:none;-webkit-appearance:none;height:40px;background:transparent url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMiA0MCI+PHBhdGggZmlsbD0iIzE2NyIgZD0iTTguNiAxOGwtNC4xIDYuMDRMLjQgMTh6Ii8+PC9zdmc+") no-repeat right center;background-size:auto 40px;border-right:1px solid;border-color:transparent #167 transparent transparent;border-radius:0;font-family:'VistaSansBold','Calibri-Bold','Helvetica',Sans-serif;z-index:100;padding:10px;color:#167;font-size:14px}body.collections #leftcol #c15323 .tx-dlf-search form .tx-dlf-search-extended select.tx-dlf-search-operator{left:0;width:70px}body.collections #leftcol #c15323 .tx-dlf-search form .tx-dlf-search-extended select.tx-dlf-search-field{left:70px}body.collections #leftcol #c15323 .tx-dlf-search form .extended-search-toggle{position:absolute;right:0;bottom:0;display:block;cursor:pointer;text-decoration:underline}body.collections #leftcol #c15323 .tx-dlf-search form .extended-search-toggle span{display:none}body.collections #leftcol #c15323 .tx-dlf-search form.extendend-search-active{padding-bottom:40px}body.collections #leftcol #c15323 .tx-dlf-search form.extendend-search-active input[type="submit"]{top:267px;right:-10%;height:50px;width:50px;border-radius:25px;background-position:-555px 5px}body.collections #leftcol #c15323 .tx-dlf-search form.extendend-search-active .tx-dlf-search-extended{margin:15px 0 -5px 0;height:40px;opacity:1;pointer-events:all}body.collections #leftcol #c15323 .tx-dlf-search form.extendend-search-active .extended-search-toggle span{display:inline}body.collections #leftcol .tx-dlf-collection-list{margin:20px -15px}body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col{width:33.333333%;float:left}body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col.col-3{display:block}body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item{padding:15px}body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item .tx-dlf-collection-meta-information{right:16px;left:16px;bottom:16px;padding:15px 15px 15px 15px}body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item .tx-dlf-collection-meta-information h4{margin:0}body.collections #leftcol .tx-dlf-collection-list .tx-dlf-collection-col .tx-dlf-collection-item .tx-dlf-collection-meta-information .tx-dlf-collection-counts{font-family:'VistaSansBook','Calibri','Helvetica',Sans-serif;font-size:12px}}@media screen and (min-width:1200px){body.collections #leftcol .tx-dlf-statistics{padding-right:20%}body.collections #leftcol #c15323 .tx-dlf-search{padding:30px 20% 30px 0}}/*# sourceMappingURL=Resources/Public/Css/DigitalcollectionsLists.css.map */ \ No newline at end of file diff --git a/Resources/Public/Images/BackendLayouts/workview.png b/Resources/Public/Images/BackendLayouts/workview.png new file mode 100644 index 00000000..6a65c2fa Binary files /dev/null and b/Resources/Public/Images/BackendLayouts/workview.png differ diff --git a/Resources/Public/Images/Basiclogo.svg b/Resources/Public/Images/Basiclogo.svg new file mode 100644 index 00000000..0767ecdf --- /dev/null +++ b/Resources/Public/Images/Basiclogo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Resources/Public/Images/Slub/Slublogo.svg b/Resources/Public/Images/Slub/Slublogo.svg new file mode 100644 index 00000000..a069bff7 --- /dev/null +++ b/Resources/Public/Images/Slub/Slublogo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Resources/Public/Images/Slub/headerbarBg.svg b/Resources/Public/Images/Slub/headerbarBg.svg new file mode 100644 index 00000000..ec170138 --- /dev/null +++ b/Resources/Public/Images/Slub/headerbarBg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Resources/Public/Images/Slub/viewerControlIcons.svg b/Resources/Public/Images/Slub/viewerControlIcons.svg new file mode 100644 index 00000000..78456b91 --- /dev/null +++ b/Resources/Public/Images/Slub/viewerControlIcons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Resources/Public/Images/viewerControlIcons.svg b/Resources/Public/Images/viewerControlIcons.svg new file mode 100644 index 00000000..c37b45d7 --- /dev/null +++ b/Resources/Public/Images/viewerControlIcons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Resources/Public/Images/viewerTocIcons.svg b/Resources/Public/Images/viewerTocIcons.svg new file mode 100644 index 00000000..94dccf9c --- /dev/null +++ b/Resources/Public/Images/viewerTocIcons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Resources/Public/Javascript/DigitalcollectionsListScripts.js b/Resources/Public/Javascript/DigitalcollectionsListScripts.js new file mode 100644 index 00000000..b5ebb0ee --- /dev/null +++ b/Resources/Public/Javascript/DigitalcollectionsListScripts.js @@ -0,0 +1 @@ +function mobileCheck(){var e,t=!1;return e=navigator.userAgent||navigator.vendor||window.opera,(/(android|ipad|playbook|silk|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,4)))&&(t=!0),t}!function(a,f,h){function p(e,t){return typeof e===t}function m(e){return e.replace(/([a-z])-([a-z])/g,function(e,t,i){return t+i.toUpperCase()}).replace(/^-/,"")}function g(){return"function"!=typeof f.createElement?f.createElement(arguments[0]):x?f.createElementNS.call(f,"http://www.w3.org/2000/svg",arguments[0]):f.createElement.apply(f,arguments)}function o(e,t,i,n){var o,s,a,l,r,c="modernizr",d=g("div"),u=((r=f.body)||((r=g(x?"svg":"body")).fake=!0),r);if(parseInt(i,10))for(;i--;)(a=g("div")).id=n?n[i]:c+(i+1),d.appendChild(a);return(o=g("style")).type="text/css",o.id="s"+c,(u.fake?u:d).appendChild(o),u.appendChild(d),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(f.createTextNode(e)),d.id=c,u.fake&&(u.style.background="",u.style.overflow="hidden",l=w.style.overflow,w.style.overflow="hidden",w.appendChild(u)),s=t(d,e),u.fake?(u.parentNode.removeChild(u),w.style.overflow=l,w.offsetHeight):d.parentNode.removeChild(d),!!s}function l(e,t){return function(){return e.apply(t,arguments)}}function s(e){return e.replace(/([A-Z])/g,function(e,t){return"-"+t.toLowerCase()}).replace(/^ms-/,"-ms-")}function v(e,t){var i=e.length;if("CSS"in a&&"supports"in a.CSS){for(;i--;)if(a.CSS.supports(s(e[i]),t))return!0;return!1}if("CSSSupportsRule"in a){for(var n=[];i--;)n.push("("+s(e[i])+":"+t+")");return o("@supports ("+(n=n.join(" or "))+") { #modernizr { position: absolute; } }",function(e){return"absolute"==function(e,t,i){var n;if("getComputedStyle"in a){n=getComputedStyle.call(a,e,t);var o=a.console;null!==n?i&&(n=n.getPropertyValue(i)):o&&o[o.error?"error":"log"].call(o,"getComputedStyle returning null, its possible modernizr test results are inaccurate")}else n=!t&&e.currentStyle&&e.currentStyle[i];return n}(e,null,"position")})}return h}function r(e,t,i,n){function o(){a&&(delete E.style,delete E.modElem)}if(n=!p(n,"undefined")&&n,!p(i,"undefined")){var s=v(e,i);if(!p(s,"undefined"))return s}for(var a,l,r,c,d,u=["modernizr","tspan","samp"];!E.style&&u.length;)a=!0,E.modElem=g(u.shift()),E.style=E.modElem.style;for(r=e.length,l=0;l'),$transition="all .3s ease-out",setTimeout(function(){$("#rightcol .tx-dlf-search").parent().css({"-webkit-transition":$transition,"-o-transition":$transition,transition:$transition})},250),$(".offcanvas-toggle").on(n,function(e){$(this).parent().toggleClass("open")});$(".tx-dlf-collection-list").prepend('
  • ').append($(".tx-dlf-collection-list-additionals").html()).randomize("li.tx-dlf-collection-item").colcade({columns:".tx-dlf-collection-col",items:".tx-dlf-collection-item"}),$(".tx-dlf-search-facets > ul > li").each(function(){var e=$(this).find("ul").children("li").length,t=$('html[lang="de-DE"]')[0]?"Zeige "+(e-5)+" weitere Facetten":"Show "+(e-5)+" more facets",i=$('html[lang="de-DE"]')[0]?"Letzten "+(e-5)+" Facetten ausblenden":"Hide "+(e-5)+" last facets";5'+t+"
    "),$(this).find(".facets-toggle").on(n,function(){$(this).text($(this).parent().hasClass("facets-expanded")?t:i).parent().toggleClass("facets-expanded"),$(this).parent().find("ul li:gt(4)").slideToggle()}))}),$(".tx-dlf-collection-item .tx-dlf-collection-thumbnail img").on(n,function(){return window.location=$(this).parent().parent().find("h4 a").attr("href"),!1});var e=$('html[lang="de-DE"]')[0]?"Galerie":"Gallery",t=$('html[lang="de-DE"]')[0]?"Alphabetisch":"Alphabetical",i=$(".tx-dlf-collection-list li.tx-dlf-collection-item").get(),o=i;$(".tx-dlf-collection").prepend('
    '+e+'
    '+t+"
    "),$(".tx-dlf-list-toggle-container").on(n,function(){$(this).hasClass("alphabetical")?($(".tx-dlf-collection-list li.order-label").remove(),$.each(o,function(e,t){$(".tx-dlf-collection-list").append(t)}),$(".tx-dlf-collection-list").removeClass("alphabetical alphabetical-ready").colcade({columns:".tx-dlf-collection-col",items:".tx-dlf-collection-item"}),document.cookie="tx-dlf-galleryview-state=gallery; path=/"):($(".tx-dlf-collection-list").colcade("destroy").addClass("alphabetical"),sortAlphabetical(this,i),document.cookie="tx-dlf-galleryview-state=alphabetical; path=/"),$(this).toggleClass("alphabetical").find(".label").toggleClass("active")});var s=$('html[lang="de-DE"]')[0]?"Erweiterte Suche ausblenden":"Hide Extended Search";$("#c15323 .tx-dlf-search form").append('
    '+s+"
    "),$(".extended-search-toggle").on(n,function(){$(this).parent().toggleClass("extendend-search-active")})}),$.fn.randomize=function(e){return(e?this.find(e):this).parent().each(function(){$(this).children(e).sort(function(){return Math.random()-.5}).detach().appendTo(this)}),this},sortAlphabetical=function(e,t){t.sort(function(e,t){var i=$(e).find("h4").text(),n=$(t).find("h4").text();return i
    '+$(this).find("h4").text().charAt(0)+"
    "),isNaN(currentFirstChar)||n||($(this).before('
  • 0–9
  • '),n=!0),i=$(this).find("h4").text().charAt(0),currentFirstChar=void 0}),window.setTimeout(function(){$(".tx-dlf-collection-list").addClass("alphabetical-ready")},100)}; \ No newline at end of file diff --git a/Resources/Public/Javascript/DigitalcollectionsScripts.js b/Resources/Public/Javascript/DigitalcollectionsScripts.js new file mode 100644 index 00000000..d1f76800 --- /dev/null +++ b/Resources/Public/Javascript/DigitalcollectionsScripts.js @@ -0,0 +1 @@ +function enterFullscreen(){setTimeout(function(){window.dispatchEvent(new Event("resize"))},220),$("body").addClass("fullscreen"),$("a.fullscreen").addClass("active"),Cookies.set("tx-dlf-pageview-zoomFullscreen","true")}function exitFullscreen(){setTimeout(function(){window.dispatchEvent(new Event("resize"))},220),$("body").removeClass("fullscreen"),$("a.fullscreen").removeClass("active"),Cookies.remove("tx-dlf-pageview-zoomFullscreen")}function mobileCheck(){var e,t=!1;return e=navigator.userAgent||navigator.vendor||window.opera,(/(android|ipad|playbook|silk|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,4)))&&(t=!0),t}!function(l,f,p){function m(e,t){return typeof e===t}function g(e){return e.replace(/([a-z])-([a-z])/g,function(e,t,n){return t+n.toUpperCase()}).replace(/^-/,"")}function v(){return"function"!=typeof f.createElement?f.createElement(arguments[0]):$?f.createElementNS.call(f,"http://www.w3.org/2000/svg",arguments[0]):f.createElement.apply(f,arguments)}function a(e,t,n,o){var a,i,l,s,r,c="modernizr",d=v("div"),u=((r=f.body)||((r=v($?"svg":"body")).fake=!0),r);if(parseInt(n,10))for(;n--;)(l=v("div")).id=o?o[n]:c+(n+1),d.appendChild(l);return(a=v("style")).type="text/css",a.id="s"+c,(u.fake?u:d).appendChild(a),u.appendChild(d),a.styleSheet?a.styleSheet.cssText=e:a.appendChild(f.createTextNode(e)),d.id=c,u.fake&&(u.style.background="",u.style.overflow="hidden",s=C.style.overflow,C.style.overflow="hidden",C.appendChild(u)),i=t(d,e),u.fake?(u.parentNode.removeChild(u),C.style.overflow=s,C.offsetHeight):d.parentNode.removeChild(d),!!i}function s(e,t){return function(){return e.apply(t,arguments)}}function i(e){return e.replace(/([A-Z])/g,function(e,t){return"-"+t.toLowerCase()}).replace(/^ms-/,"-ms-")}function h(e,t){var n=e.length;if("CSS"in l&&"supports"in l.CSS){for(;n--;)if(l.CSS.supports(i(e[n]),t))return!0;return!1}if("CSSSupportsRule"in l){for(var o=[];n--;)o.push("("+i(e[n])+":"+t+")");return a("@supports ("+(o=o.join(" or "))+") { #modernizr { position: absolute; } }",function(e){return"absolute"==function(e,t,n){var o;if("getComputedStyle"in l){o=getComputedStyle.call(l,e,t);var a=l.console;null!==o?n&&(o=o.getPropertyValue(n)):a&&a[a.error?"error":"log"].call(a,"getComputedStyle returning null, its possible modernizr test results are inaccurate")}else o=!t&&e.currentStyle&&e.currentStyle[n];return o}(e,null,"position")})}return p}function r(e,t,n,o){function a(){l&&(delete M.style,delete M.modElem)}if(o=!m(o,"undefined")&&o,!m(n,"undefined")){var i=h(e,n);if(!m(i,"undefined"))return i}for(var l,s,r,c,d,u=["modernizr","tspan","samp"];!M.style&&u.length;)l=!0,M.modElem=v(u.shift()),M.style=M.modElem.style;for(r=e.length,s=0;s a").on(e,function(e){$("li.submenu.open a").not(this).parent().removeClass("open"),$(this).parent().toggleClass("open")}),$("nav .nav-toggle").on(e,function(e){$(this).toggleClass("active"),$("nav .secondary-nav").toggleClass("open")}),$(".calendar-view div.issues h4").on(e,function(e){var t=$(this).parents("div.issues").find("div ul li a");1==t.length?window.open(t[0].href,"_self"):($(".calendar-view table td.open").not($(this).parents("td")).removeClass("open"),$(this).parents("td").toggleClass("open"))}),$(".tx-dlf-calendar, .tx-dlf-calendar-years").parents("body").addClass("calendar"),$(".tx-dlf-pagegrid-list").parents("body").addClass("gridview"),$(".tx-dlf-calendar .calendar-list-selection a.select-calendar-view").hasClass("active")&&$(".tx-dlf-calendar .calendar-list-selection a.select-calendar-view").removeClass("active"),$(".tx-dlf-calendar .calendar-list-selection a.select-calendar-view, .tx-dlf-calendar .calendar-view").addClass("active"),$(".tx-dlf-calendar .calendar-list-selection a").on(e,function(e){if(!$(this).hasClass("active")){var t="."+$(this).attr("class").replace("select-","");$(".tx-dlf-calendar .active").removeClass("active"),$(this).addClass("active"),$(t).addClass("active")}}),$(".pages select option[selected]")[0]&&$("dl.mobile-meta").append('
    No.
    '+$(".pages select option[selected]").text()+"
    "),$(".provider").append('
    '),$(".view-functions .pages form, .view-functions .zoom a.fullscreen").clone().appendTo(".provider .mobile-controls"),shortenMobileMetaElement=$(".provider dl.mobile-meta dd.tx-dlf-title a"),shortenMobileMetaTitle=shortenMobileMetaElement.text(),140a").replaceWith(function(){return $(''+$(this).html()+"")}),1<$(".tx-dlf-metadata dl.tx-dlf-metadata-titledata").length&&(metadataToggleLabelMore=$('html[lang^="de"]')[0]?"mehr Metadaten":"more Metadata",metadataToggleLabelLess=$('html[lang^="de"]')[0]?"weniger Metadaten":"less Metadata",$(".control-bar .metadata-wrapper").append('"),$(".metadata-toggle").on(e,function(){$(".control-bar").hasClass("all-metadata")?(Cookies.remove("tx-dlf-allmetadata"),$(this).text(metadataToggleLabelMore)):(Cookies.set("tx-dlf-allmetadata","true"),$(this).text(metadataToggleLabelLess)),$(".control-bar").toggleClass("all-metadata").find("dl:nth-child(n+3)").slideToggle()})),$("a.fullscreen").on(e,function(){$("body.fullscreen")[0]?exitFullscreen():enterFullscreen()}),Cookies.get("tx-dlf-pageview-zoomFullscreen")&&($("body").addClass("fullscreen static"),$(".zoom .fullscreen").addClass("active")),$("ul.toc ul li.current")[0]&&(tocPlaceholderLabel=$('html[lang^="de"]')[0]?"Einige Einträge sind ausgeblendet":"Some entires are hidden",tocPlaceholderTitle=$('html[lang^="de"]')[0]?"Hier klicken um alle Einträge zu ziegen":"Click to show all entries",$("ul.toc ul li.current").first().prevAll(":eq(4)").prevUntil(":nth-child(2)").hide(),$("ul.toc ul li:nth-child(2)").after('
  • '+tocPlaceholderLabel+"
  • "),$("ul.toc ul li.placeholder").on(e,function(){$(this).remove(),$("ul.toc ul li").slideDown()})),$(".tx-dlf-toolsFulltextsearch form")[0]?$(".fulltext-search-toggle").on(e,function(){$("body").toggleClass("search-indocument-active"),$("#tx-dlf-search-in-document-query").trigger("focus")}):$(".fulltext-search-toggle").addClass("disabled"),$(".fwds, .backs").on("mouseenter",function(){$(this).addClass("over")}).on("mouseleave",function(){$(this).removeClass("over")}).on("click",function(){localStorage.txDlfFromPage=$(this).attr("class").split(" ")[0]}),localStorage.txDlfFromPage&&$("."+localStorage.txDlfFromPage).addClass("no-transition over"),$(".tx-dlf-pageview").children()[0]||(emptyMessage=$('html[lang^="de"]')[0]?"Kein Band ausgewählt. Klicken Sie hier um zum ersten Band dieses Werks zu gelangen.":"No volume selected. Click to jump to the first available volume.",$(".tx-dlf-pageview").append('")),$("dl.tx-dlf-metadata-titledata").find("dt:contains(mmlung), dt:contains(llection)").nextUntil("dt","dd").addClass("tx-dlf-metadata-collection"),$("body").removeClass("hidden"),setTimeout(function(){localStorage.clear(),$(".fwds, .backs").removeClass("no-transition"),$("body").removeClass("static")},1e3)}),$(document).keyup(function(e){if(27==e.keyCode){if($("body.fullscreen")[0])return exitFullscreen();$(".document-functions .search.open")[0]&&$(".document-functions .search").removeClass("open")}if(70==e.keyCode&&!$("#tx-dlf-search-in-document-query").is(":focus"))return enterFullscreen()}); \ No newline at end of file diff --git a/Resources/Public/Javascript/jquery-2.2.4.min.js b/Resources/Public/Javascript/jquery-2.2.4.min.js new file mode 100644 index 00000000..07074fc7 --- /dev/null +++ b/Resources/Public/Javascript/jquery-2.2.4.min.js @@ -0,0 +1,4 @@ +/*! jQuery v2.2.4 | (c) jQuery Foundation | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="2.2.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isPlainObject:function(a){var b;if("object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype||{},"isPrototypeOf"))return!1;for(b in a);return void 0===b||k.call(a,b)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=d.createElement("script"),b.text=a,d.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:h.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(d=e.call(arguments,2),f=function(){return a.apply(b||this,d.concat(e.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return h.call(b,a)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&f.parentNode&&(this.length=1,this[0]=f),this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?void 0!==c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?h.call(n(a),this[0]):h.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||n.uniqueSort(e),D.test(a)&&e.reverse()),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.removeEventListener("DOMContentLoaded",J),a.removeEventListener("load",J),n.ready()}n.ready.promise=function(b){return I||(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(n.ready):(d.addEventListener("DOMContentLoaded",J),a.addEventListener("load",J))),I.promise(b)},n.ready.promise();var K=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)K(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},L=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function M(){this.expando=n.expando+M.uid++}M.uid=1,M.prototype={register:function(a,b){var c=b||{};return a.nodeType?a[this.expando]=c:Object.defineProperty(a,this.expando,{value:c,writable:!0,configurable:!0}),a[this.expando]},cache:function(a){if(!L(a))return{};var b=a[this.expando];return b||(b={},L(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[b]=c;else for(d in b)e[d]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=a[this.expando];if(void 0!==f){if(void 0===b)this.register(a);else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in f?d=[b,e]:(d=e,d=d in f?[d]:d.match(G)||[])),c=d.length;while(c--)delete f[d[c]]}(void 0===b||n.isEmptyObject(f))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!n.isEmptyObject(b)}};var N=new M,O=new M,P=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Q=/[A-Z]/g;function R(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Q,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:P.test(c)?n.parseJSON(c):c; +}catch(e){}O.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return O.hasData(a)||N.hasData(a)},data:function(a,b,c){return O.access(a,b,c)},removeData:function(a,b){O.remove(a,b)},_data:function(a,b,c){return N.access(a,b,c)},_removeData:function(a,b){N.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=O.get(f),1===f.nodeType&&!N.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),R(f,d,e[d])));N.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){O.set(this,a)}):K(this,function(b){var c,d;if(f&&void 0===b){if(c=O.get(f,a)||O.get(f,a.replace(Q,"-$&").toLowerCase()),void 0!==c)return c;if(d=n.camelCase(a),c=O.get(f,d),void 0!==c)return c;if(c=R(f,d,void 0),void 0!==c)return c}else d=n.camelCase(a),this.each(function(){var c=O.get(this,d);O.set(this,d,b),a.indexOf("-")>-1&&void 0!==c&&O.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){O.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=N.get(a,b),c&&(!d||n.isArray(c)?d=N.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return N.get(a,c)||N.access(a,c,{empty:n.Callbacks("once memory").add(function(){N.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length",""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};$.optgroup=$.option,$.tbody=$.tfoot=$.colgroup=$.caption=$.thead,$.th=$.td;function _(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function aa(a,b){for(var c=0,d=a.length;d>c;c++)N.set(a[c],"globalEval",!b||N.get(b[c],"globalEval"))}var ba=/<|&#?\w+;/;function ca(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],o=0,p=a.length;p>o;o++)if(f=a[o],f||0===f)if("object"===n.type(f))n.merge(m,f.nodeType?[f]:f);else if(ba.test(f)){g=g||l.appendChild(b.createElement("div")),h=(Y.exec(f)||["",""])[1].toLowerCase(),i=$[h]||$._default,g.innerHTML=i[1]+n.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;n.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",o=0;while(f=m[o++])if(d&&n.inArray(f,d)>-1)e&&e.push(f);else if(j=n.contains(f.ownerDocument,f),g=_(l.appendChild(f),"script"),j&&aa(g),c){k=0;while(f=g[k++])Z.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var da=/^key/,ea=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,fa=/^([^.]*)(?:\.(.+)|)/;function ga(){return!0}function ha(){return!1}function ia(){try{return d.activeElement}catch(a){}}function ja(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ja(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ha;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return"undefined"!=typeof n&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(G)||[""],j=b.length;while(j--)h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.hasData(a)&&N.get(a);if(r&&(i=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&N.remove(a,"handle events")}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(N.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,la=/\s*$/g;function pa(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function qa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function ra(a){var b=na.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function sa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(N.hasData(a)&&(f=N.access(a),g=N.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}O.hasData(a)&&(h=O.access(a),i=n.extend({},h),O.set(b,i))}}function ta(a,b){var c=b.nodeName.toLowerCase();"input"===c&&X.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function ua(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&ma.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),ua(f,b,c,d)});if(o&&(e=ca(b,a[0].ownerDocument,!1,a,d),g=e.firstChild,1===e.childNodes.length&&(e=g),g||d)){for(h=n.map(_(e,"script"),qa),i=h.length;o>m;m++)j=e,m!==p&&(j=n.clone(j,!0,!0),i&&n.merge(h,_(j,"script"))),c.call(a[m],j,m);if(i)for(k=h[h.length-1].ownerDocument,n.map(h,ra),m=0;i>m;m++)j=h[m],Z.test(j.type||"")&&!N.access(j,"globalEval")&&n.contains(k,j)&&(j.src?n._evalUrl&&n._evalUrl(j.src):n.globalEval(j.textContent.replace(oa,"")))}return a}function va(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(_(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&aa(_(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(ka,"<$1>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=_(h),f=_(a),d=0,e=f.length;e>d;d++)ta(f[d],g[d]);if(b)if(c)for(f=f||_(a),g=g||_(h),d=0,e=f.length;e>d;d++)sa(f[d],g[d]);else sa(a,h);return g=_(h,"script"),g.length>0&&aa(g,!i&&_(a,"script")),h},cleanData:function(a){for(var b,c,d,e=n.event.special,f=0;void 0!==(c=a[f]);f++)if(L(c)){if(b=c[N.expando]){if(b.events)for(d in b.events)e[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);c[N.expando]=void 0}c[O.expando]&&(c[O.expando]=void 0)}}}),n.fn.extend({domManip:ua,detach:function(a){return va(this,a,!0)},remove:function(a){return va(this,a)},text:function(a){return K(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.appendChild(a)}})},prepend:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(_(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return K(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!la.test(a)&&!$[(Y.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(_(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return ua(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(_(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),f=e.length-1,h=0;f>=h;h++)c=h===f?this:this.clone(!0),n(e[h])[b](c),g.apply(d,c.get());return this.pushStack(d)}});var wa,xa={HTML:"block",BODY:"block"};function ya(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function za(a){var b=d,c=xa[a];return c||(c=ya(a,b),"none"!==c&&c||(wa=(wa||n("