diff --git a/.prettierrc.json b/.prettierrc.json index a39e4f3..86fa54a 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -1,3 +1,4 @@ { - "phpVersion": "7.2" + "phpVersion": "7.2", + "tabWidth": 2 } diff --git a/Classes/DataSource/GroupsDataSource.php b/Classes/DataSource/GroupsDataSource.php index 0883460..1bc8a60 100644 --- a/Classes/DataSource/GroupsDataSource.php +++ b/Classes/DataSource/GroupsDataSource.php @@ -11,23 +11,27 @@ class GroupsDataSource extends AbstractDataSource /** * @var string */ - protected static $identifier = 'sandstorm-cookiepunch-groups'; + protected static $identifier = 'sandstorm-cookiepunch-services'; /** - * @Flow\InjectConfiguration(package="Sandstorm.CookiePunch", path="groups") + * @Flow\InjectConfiguration(package="Sandstorm.CookiePunch", path="consent.services") */ - protected $groups; + protected $services; public function getData(NodeInterface $node = null, array $arguments = []) { $CookiePunchConfig = new CookiePunchConfig(); $options = []; - foreach ($this->groups as $name => $group) { - $label = isset($group["title"]) - ? $CookiePunchConfig->translate($group["title"]) - : $name; - $options[$name] = ['label' => $label]; + + if(isset($this->services) && sizeof(array_keys($this->services)) > 0) { + foreach ($this->services as $name => $service) { + $label = isset($service["title"]) + ? $CookiePunchConfig->translate($service["title"]) + : $name; + $options[$name] = ['label' => $label]; + } } + return $options; } } diff --git a/Classes/Eel/Helper/CookiePunch.php b/Classes/Eel/Helper/CookiePunch.php index 9faa0e7..d6b02b2 100644 --- a/Classes/Eel/Helper/CookiePunch.php +++ b/Classes/Eel/Helper/CookiePunch.php @@ -5,39 +5,19 @@ use Neos\Flow\Annotations as Flow; use Neos\Eel\ProtectedContextAwareInterface; use phpDocumentor\Reflection\Types\Boolean; -use Sandstorm\CookiePunch\ConsentConfigImplementation; use Sandstorm\CookiePunch\TagHelper; class CookiePunch implements ProtectedContextAwareInterface { - const SETTINGS_BLOCK = "block"; - - const SETTINGS_GROUP = "group"; - const SETTINGS_OPTIONS = "options"; - const SETTINGS_BLOCK_ALL = "block"; - - const SETTINGS_BLOCK_PATTERNS = "patterns"; - const DEFAULT_GROUP = "default"; - - /** - * @Flow\InjectConfiguration(package="Sandstorm.CookiePunch", path="groups") - */ - protected $groups; - /** - * @Flow\InjectConfiguration(package="Sandstorm.CookiePunch", path="elements.patterns") + * @Flow\InjectConfiguration(package="Sandstorm.CookiePunch", path="services") */ - protected $patterns; + protected $services; /** - * @Flow\InjectConfiguration(package="Sandstorm.CookiePunch", path="elements.block") + * @Flow\InjectConfiguration(package="Sandstorm.CookiePunch", path="blocking.tagPatterns") */ - protected $block; - - /** - * @Flow\InjectConfiguration(package="Sandstorm.CookiePunch", path="elements.group") - */ - protected $defaultGroup; + protected $tagPatterns; public function neverBlockIframes(string $markup): string { @@ -64,80 +44,91 @@ public function neverBlockScripts(string $markup): string public function blockIframes( string $markup, bool $enabled = true, - string $groupOverride = null + string $serviceNameOverride = null ): string { if (!$enabled) { return $markup; } return $this->replaceTags("iframe", $markup, function ( - $tag, - $blockConfig - ) use ($groupOverride) { + $tagMarkup, + $serviceName + ) use ($serviceNameOverride) { // IMPORTANT: keep the order here or update all tests! - $tag = TagHelper::tagRenameAttribute( - $tag, + $tagMarkup = TagHelper::tagRenameAttribute( + $tagMarkup, TagHelper::SRC, TagHelper::DATA_SRC ); - $tag = $this->addDataNameAttribute( - $tag, - $blockConfig, - $groupOverride - ); - $tag = TagHelper::tagAddAttribute($tag, "style", "display: none;"); - $tag = $this->addDataOptionsAttribute($tag, $blockConfig); - return $tag; + $dataNameAttribute = $serviceNameOverride + ? $serviceNameOverride + : $serviceName; + + if ( + !TagHelper::tagHasAttribute($tagMarkup, TagHelper::DATA_NAME) && + $dataNameAttribute + ) { + $tagMarkup = TagHelper::tagAddAttribute( + $tagMarkup, + TagHelper::DATA_NAME, + $dataNameAttribute + ); + } + + return $tagMarkup; }); } /** - * @param string $markup + * @param string $contentMarkup * @return string */ public function blockScripts( - string $markup, + string $contentMarkup, bool $enabled = true, - string $groupOverride = null + string $serviceNameOverride = null ): string { if (!$enabled) { - return $markup; + return $contentMarkup; } - return $this->replaceTags("script", $markup, function ( - $tag, - $blockConfig - ) use ($groupOverride) { + return $this->replaceTags("script", $contentMarkup, function ( + $tagMarkup, + $serviceName + ) use ($serviceNameOverride) { // ######################################################################### // IMPORTANT: keep the order in the following section or update all tests! // ######################################################################### - $tag = TagHelper::tagRenameAttribute( - $tag, + $tagMarkup = TagHelper::tagRenameAttribute( + $tagMarkup, TagHelper::SRC, TagHelper::DATA_SRC ); - $hasType = TagHelper::tagHasAttribute($tag, TagHelper::TYPE); + $hasType = TagHelper::tagHasAttribute($tagMarkup, TagHelper::TYPE); - $typeAttributeValue = TagHelper::tagGetAttributeValue($tag, "type"); + $typeAttributeValue = TagHelper::tagGetAttributeValue( + $tagMarkup, + "type" + ); - if(!$typeAttributeValue) { + if (!$typeAttributeValue) { // We want to be least invasive and try to reuse the type attribute value // if none is present we use fallback. $typeAttributeValue = TagHelper::TYPE_JAVASCRIPT; } - if (TagHelper::tagHasAttribute($tag, TagHelper::DATA_SRC)) { + if (TagHelper::tagHasAttribute($tagMarkup, TagHelper::DATA_SRC)) { if ($hasType) { - $tag = TagHelper::tagRenameAttribute( - $tag, + $tagMarkup = TagHelper::tagRenameAttribute( + $tagMarkup, TagHelper::TYPE, TagHelper::DATA_TYPE ); - $tag = TagHelper::tagAddAttribute( - $tag, + $tagMarkup = TagHelper::tagAddAttribute( + $tagMarkup, TagHelper::TYPE, TagHelper::TYPE_TEXT_PLAIN ); @@ -145,8 +136,8 @@ public function blockScripts( // IMPORTANT: we need to add data-type="text/javascript" here to prevent Klaro from // not correctly recovering the correct value. // we add type="text/javascript" which later will be turned into an data attribute - $tag = TagHelper::tagAddAttribute( - $tag, + $tagMarkup = TagHelper::tagAddAttribute( + $tagMarkup, TagHelper::DATA_TYPE, $typeAttributeValue ); @@ -154,40 +145,66 @@ public function blockScripts( } else { // nor src so we have to "break" the tag by setting the type if ($hasType) { - $tag = TagHelper::tagRenameAttribute( - $tag, + $tagMarkup = TagHelper::tagRenameAttribute( + $tagMarkup, TagHelper::TYPE, TagHelper::DATA_TYPE ); - $tag = TagHelper::tagAddAttribute( - $tag, + $tagMarkup = TagHelper::tagAddAttribute( + $tagMarkup, TagHelper::TYPE, TagHelper::TYPE_TEXT_PLAIN ); } else { - $tag = TagHelper::tagAddAttribute( - $tag, + $tagMarkup = TagHelper::tagAddAttribute( + $tagMarkup, TagHelper::TYPE, TagHelper::TYPE_TEXT_PLAIN ); - $tag = TagHelper::tagAddAttribute( - $tag, + $tagMarkup = TagHelper::tagAddAttribute( + $tagMarkup, TagHelper::DATA_TYPE, $typeAttributeValue ); } } - $tag = $this->addDataNameAttribute( - $tag, - $blockConfig, - $groupOverride - ); - $tag = $this->addDataOptionsAttribute($tag, $blockConfig); - return $tag; + $dataNameAttribute = $serviceNameOverride + ? $serviceNameOverride + : $serviceName; + + if ( + !TagHelper::tagHasAttribute($tagMarkup, TagHelper::DATA_NAME) && + $dataNameAttribute + ) { + $tagMarkup = TagHelper::tagAddAttribute( + $tagMarkup, + TagHelper::DATA_NAME, + $dataNameAttribute + ); + } + + return $tagMarkup; }); } + /** + * @param string | null $markup + * @param string $service + * @return string + */ + public function addContextualConsent( + string $service, + ?string $markup, + ?bool $isEnabled + ) { + if ($isEnabled) { + return "
" . $markup . "
"; + } else { + return $markup; + } + } + private function addNeverBlockAttribute(string $tag): string { if (!TagHelper::tagHasAttribute($tag, TagHelper::DATA_NEVER_BLOCK)) { @@ -199,44 +216,6 @@ private function addNeverBlockAttribute(string $tag): string return $tag; } - private function addDataNameAttribute( - string $tag, - array $blockConfig, - string $groupOverride = null - ): string { - if (!TagHelper::tagHasAttribute($tag, TagHelper::DATA_NAME)) { - $value = $groupOverride - ? $groupOverride - : $blockConfig[self::SETTINGS_GROUP]; - return TagHelper::tagAddAttribute( - $tag, - TagHelper::DATA_NAME, - $value - ); - } - return $tag; - } - - private function addDataOptionsAttribute( - string $tag, - array $blockConfig - ): string { - if (isset($blockConfig[self::SETTINGS_OPTIONS])) { - $encodedOptions = htmlspecialchars( - json_encode($blockConfig[self::SETTINGS_OPTIONS]), - ENT_QUOTES, - 'UTF-8' - ); - return TagHelper::tagAddAttribute( - $tag, - TagHelper::DATA_OPTIONS, - $encodedOptions - ); - } - - return $tag; - } - /** * @param string $haystack * @param string $needle @@ -247,131 +226,141 @@ private function tagContains(string $haystack, string $needle): bool return !!strpos($haystack, $needle) !== false; } - /** - * @param string $tag - * @return array - */ - private function getBlockConfig(string $tag): array - { - if (!$this->patterns) { - return $this->buildBlockConfigForPatternConfig(); - } - - foreach ($this->patterns as $pattern => $config) { - if ($this->tagContains($tag, $pattern)) { - return $this->buildBlockConfigForPatternConfig($config); - } - } - return $this->buildBlockConfigForPatternConfig(); - } - - /** - * @param array|null $config - * @return array - */ - private function buildBlockConfigForPatternConfig( - array $config = null - ): array { - $fallbackBlocked = isset($this->block) ? $this->block : false; - $fallbackGroup = isset($this->defaultGroup) - ? $this->defaultGroup - : self::DEFAULT_GROUP; - - // no config early return - if (!$config) { - return [ - self::SETTINGS_BLOCK => $fallbackBlocked, - self::SETTINGS_GROUP => $fallbackGroup, - ]; - } - - $blocked = isset($config[self::SETTINGS_BLOCK]) - ? $config[self::SETTINGS_BLOCK] - : $fallbackBlocked; - $group = isset($config[self::SETTINGS_GROUP]) - ? $config[self::SETTINGS_GROUP] - : $fallbackGroup; - $options = isset($config[self::SETTINGS_OPTIONS]) - ? $config[self::SETTINGS_OPTIONS] - : null; - - return [ - self::SETTINGS_BLOCK => $blocked, - self::SETTINGS_GROUP => $group, - self::SETTINGS_OPTIONS => $options, - ]; - } - /** * @param string $tagName - * @param string $text + * @param string $contentMarkup * @param callable $hitCallback * @return string */ private function replaceTags( string $tagName, - string $text, + string $contentMarkup, callable $hitCallback ): string { $regex = '/<' . $tagName . '.*?>/'; + // STAGE 1: + // + // Before making changes to a tag we do some check first + // and decide if we need to apply more logic. + // This is basically a collection of early return before using the + // callback which will the replace the tags. + // + // IMPORTANT: here we do not change a tag. We only check if we need to proceed return preg_replace_callback( $regex, - function ($hits) use ($hitCallback) { - $tag = $hits[0]; + function ($hits) use ($hitCallback, $tagName) { + $tagMarkup = $hits[0]; // EARLY RETURN - NO CALLBACK if (!$hitCallback) { - return $tag; + return $tagMarkup; } // EARLY RETURN - NEVER BLOCK $neverBlock = $this->tagContains( - $tag, + $tagMarkup, TagHelper::DATA_NEVER_BLOCK ); + if ($neverBlock) { - return $tag; + return $tagMarkup; } // EARLY RETURN - SPECIAL MIME TYPE $mimeType = TagHelper::tagGetAttributeValue( - $tag, + $tagMarkup, TagHelper::TYPE ); - if($mimeType === TagHelper::TYPE_TEXT_PLAIN || $mimeType === TagHelper::TYPE_APPLICATION_JSON_LD) return $tag; + if ( + $mimeType === TagHelper::TYPE_TEXT_PLAIN || + $mimeType === TagHelper::TYPE_APPLICATION_JSON_LD + ) { + return $tagMarkup; + } // EARLY RETURN - HAS BLOCKING ATTRIBUTES // if a part of the markup was already processed + // We do not check if TagHelper::DATA_NAME is present, because we might want the editor + // to choose a group, e.g. in the inspector and still block tags. $hasBlockingAttributes = - TagHelper::tagHasAttribute($tag, TagHelper::DATA_SRC) || TagHelper::tagHasAttribute( - $tag, + $tagMarkup, + TagHelper::DATA_SRC + ) || + TagHelper::tagHasAttribute( + $tagMarkup, TagHelper::DATA_TYPE ); - // We do not check if TagHelper::DATA_NAME is present, because we might want the editor - // to choose a group, e.g. in the inspector and still block tags. - if ($hasBlockingAttributes) return $tag; - $blockConfig = $this->getBlockConfig($tag); + if ($hasBlockingAttributes) { + return $tagMarkup; + } + + // Blocking based on patterns from the config + // tagName can be iframe or script + + // default is always true but can change depending on the next stage + $block = true; + $serviceName = null; + + $tagPatterns = isset($this->tagPatterns[$tagName]) + ? $this->tagPatterns[$tagName] + : []; + + if (isset($tagPatterns["*"])) { + $patternConfig = $tagPatterns["*"]; + if (isset($patternConfig["block"])) { + $block = $patternConfig["block"]; + } + if (isset($patternConfig["service"])) { + $block = true; + // We also pass the corresponding service name to the next stage + $serviceName = $patternConfig["service"]; + } + } - if ($blockConfig[self::SETTINGS_BLOCK]) { - return call_user_func($hitCallback, $tag, $blockConfig); + foreach ($tagPatterns as $pattern => $patternConfig) { + if ($pattern === "*") { + continue; + } + if ($this->tagContains($tagMarkup, $pattern)) { + if (isset($patternConfig["block"])) { + $block = $patternConfig["block"]; + } + + if (isset($patternConfig["service"])) { + // if we habe a relating consent service the elment will always be blocked + // as it will be controlled by the consent itself + $block = true; + + // We also pass the corresponding service name to the next stage + $serviceName = $patternConfig["service"]; + } + } + } + + if ($block) { + return call_user_func( + $hitCallback, + $tagMarkup, + $serviceName + ); } else { - return $tag; + return $tagMarkup; } }, - $text + $contentMarkup ); } - private function validateGroup(string $name = null) + private function validateService(string $name = null) { - if ($name && !isset($this->groups[$name])) { + if ($name && !isset($this->services[$name])) { throw new \InvalidArgumentException( - 'The group "' . + 'The service "' . $name . - '" could not be found in your config. Expected config for "Sandstorm.CookiePunch.groups.' . + '" could not be found in your config. Expected config for "Sandstorm.CookiePunch.services.' . $name . '"', 1596469884 diff --git a/Classes/Eel/Helper/CookiePunchConfig.php b/Classes/Eel/Helper/CookiePunchConfig.php index 1112132..621b5e5 100644 --- a/Classes/Eel/Helper/CookiePunchConfig.php +++ b/Classes/Eel/Helper/CookiePunchConfig.php @@ -10,13 +10,17 @@ class CookiePunchConfig implements ProtectedContextAwareInterface { - public function translate(string $path): string + public function translate($path): ?string { - $settingsValue = (new ConfigurationHelper())->setting($path); - if ($settingsValue) { - return (new TranslationHelper())->translate($settingsValue); + if ($path) { + $settingsValue = (new ConfigurationHelper())->setting($path); + if ($settingsValue) { + return (new TranslationHelper())->translate($settingsValue); + } else { + return (new TranslationHelper())->translate($path); + } } else { - return (new TranslationHelper())->translate($path); + return null; } } diff --git a/Classes/FusionObjects/ConfigImplementation.php b/Classes/FusionObjects/ConfigImplementation.php deleted file mode 100644 index 80152b6..0000000 --- a/Classes/FusionObjects/ConfigImplementation.php +++ /dev/null @@ -1,137 +0,0 @@ - $groupConfig) { - $translations[$name] = $this->buildAppTranslation($groupConfig); - array_push($apps, $this->buildAppConfig($name, $groupConfig)); - } - if ($purposes && sizeof($purposes)) { - $translations["purposes"] = $purposes; - } - } - - $config = [ - "acceptAll" => isset($dataStructure[self::CONSENT_CONFIG]["acceptAll"]) - ? $dataStructure[self::CONSENT_CONFIG]["acceptAll"] - : true, - "apps" => $apps, - "cookieDomain" => isset( - $dataStructure[self::CONSENT_CONFIG]["cookieDomain"] - ) - ? $dataStructure[self::CONSENT_CONFIG]["cookieDomain"] - : null, - "cookieExpiresAfterDays" => isset( - $dataStructure[self::CONSENT_CONFIG]["cookieExpiresAfterDays"] - ) - ? $dataStructure[self::CONSENT_CONFIG]["cookieExpiresAfterDays"] - : 120, - "cookieName" => isset($dataStructure[self::CONSENT_CONFIG]["cookieName"]) - ? $dataStructure[self::CONSENT_CONFIG]["cookieName"] - : "cookie_punch", - "default" => isset($dataStructure[self::CONSENT_CONFIG]["default"]) - ? $dataStructure[self::CONSENT_CONFIG]["default"] - : false, - - "handleConsentOptions" => isset($dataStructure["handleConsentOptions"]) - ? $dataStructure["handleConsentOptions"] - : [], - "hideDeclineAll" => isset( - $dataStructure[self::CONSENT_CONFIG]["hideDeclineAll"] - ) - ? $dataStructure[self::CONSENT_CONFIG]["hideDeclineAll"] - : false, - "mustConsent" => isset( - $dataStructure[self::CONSENT_CONFIG]["mustConsent"] - ) - ? $dataStructure[self::CONSENT_CONFIG]["mustConsent"] - : true, - "privacyPolicy" => isset( - - $dataStructure[self::CONSENT_CONFIG]["privacyPolicyUrl"] - ) - ? $dataStructure[self::CONSENT_CONFIG]["privacyPolicyUrl"] - : "/privacy", - "storageMethod" => - isset($dataStructure[self::CONSENT_CONFIG]["storageMethod"]) && - ($dataStructure[self::CONSENT_CONFIG]["storageMethod"] === "cookie" || - $dataStructure[self::CONSENT_CONFIG]["storageMethod"] === "localStorage") - ? $dataStructure[self::CONSENT_CONFIG]["storageMethod"] - : "cookie", - "translations" => $translations, - ]; - - return $config; - } - - private function buildAppConfig(string $name, array $groupConfig): array { - $result = [ - "name" => $name, - "title" => isset($groupConfig["title"]) - ? $groupConfig["title"] - : $name, - "purposes" => - isset($groupConfig["purposes"]) && - is_array($groupConfig["purposes"]) - ? $groupConfig["purposes"] - : [], - "cookies" => - isset($groupConfig[self::CONSENT_CONFIG]["cookies"]) && - is_array($groupConfig[self::CONSENT_CONFIG]["cookies"]) - ? $groupConfig[self::CONSENT_CONFIG]["cookies"] - : [], - ]; - - if (isset($groupConfig[self::CONSENT_CONFIG]["default"])) { - $result["default"] = $groupConfig[self::CONSENT_CONFIG]["default"]; - } - - if (isset($groupConfig[self::CONSENT_CONFIG]["required"])) { - $result["required"] = - $groupConfig[self::CONSENT_CONFIG]["required"]; - } - - return $result; - } - - private function buildAppTranslation(array $groupConfig): array { - $result = []; - if (isset($groupConfig["title"])) { - $result["title"] = $groupConfig["title"]; - } - if (isset($groupConfig["description"])) { - $result["description"] = $groupConfig["description"]; - } - return $result; - } -} diff --git a/Classes/TagHelper.php b/Classes/TagHelper.php index 94adca5..e87b31c 100644 --- a/Classes/TagHelper.php +++ b/Classes/TagHelper.php @@ -77,11 +77,13 @@ function ($hits) use ($newName) { * @param string $name * @return string */ - static function tagGetAttributeValue( - string $tag, - string $name - ): ?string { - preg_match(self::buildMatchAttributeNameWithAnyValueReqex($name), $tag, $matches); + static function tagGetAttributeValue(string $tag, string $name): ?string + { + preg_match( + self::buildMatchAttributeNameWithAnyValueReqex($name), + $tag, + $matches + ); return isset($matches['value']) ? $matches['value'] : null; } diff --git a/Configuration/NodeTypes.Mixin.ConsentGroup.yaml b/Configuration/NodeTypes.Mixin.ConsentServices.yaml similarity index 61% rename from Configuration/NodeTypes.Mixin.ConsentGroup.yaml rename to Configuration/NodeTypes.Mixin.ConsentServices.yaml index 66d9077..873d7d2 100644 --- a/Configuration/NodeTypes.Mixin.ConsentGroup.yaml +++ b/Configuration/NodeTypes.Mixin.ConsentServices.yaml @@ -1,10 +1,10 @@ -"Sandstorm.CookiePunch:Mixin.ConsentGroup": +"Sandstorm.CookiePunch:Mixin.ConsentServices": abstract: true properties: - consentGroup: + consentServices: type: string ui: - label: "Groups" + label: "Cookie Consent Services" reloadIfChanged: true inspector: group: "html" @@ -12,4 +12,4 @@ editor: Neos.Neos/Inspector/Editors/SelectBoxEditor editorOptions: placeholder: Choose - dataSourceIdentifier: sandstorm-cookiepunch-groups + dataSourceIdentifier: sandstorm-cookiepunch-services diff --git a/Configuration/Settings.Translations.yaml b/Configuration/Settings.Translations.yaml index 9e10972..094d343 100644 --- a/Configuration/Settings.Translations.yaml +++ b/Configuration/Settings.Translations.yaml @@ -7,36 +7,53 @@ Sandstorm: CookiePunch: translations: + acceptAll: Sandstorm.CookiePunch:Klaro:acceptAll + acceptSelected: Sandstorm.CookiePunch:Klaro:acceptSelected + close: Sandstorm.CookiePunch:Klaro:close consentModal: - title: 'Sandstorm.CookiePunch:Klaro:consentModal.title' - description: 'Sandstorm.CookiePunch:Klaro:consentModal.description' - privacyPolicy: - name: 'Sandstorm.CookiePunch:Klaro:consentModal.privacyPolicy.name' - text: 'Sandstorm.CookiePunch:Klaro:consentModal.privacyPolicy.text' + description: Sandstorm.CookiePunch:Klaro:consentModal.description + title: Sandstorm.CookiePunch:Klaro:consentModal.title consentNotice: - changeDescription: 'Sandstorm.CookiePunch:Klaro:consentNotice.changeDescription' - description: 'Sandstorm.CookiePunch:Klaro:consentNotice.description' - learnMore: 'Sandstorm.CookiePunch:Klaro:consentNotice.learnMore' - privacyPolicy: - name: 'Sandstorm.CookiePunch:Klaro:consentNotice.privacyPolicy.name' - imprint: - name: 'Sandstorm.CookiePunch:Klaro:consentNotice.imprint.name' - ok: 'Sandstorm.CookiePunch:Klaro:ok' - save: 'Sandstorm.CookiePunch:Klaro:save' - decline: 'Sandstorm.CookiePunch:Klaro:decline' - close: 'Sandstorm.CookiePunch:Klaro:close' - acceptAll: 'Sandstorm.CookiePunch:Klaro:acceptAll' - acceptSelected: 'Sandstorm.CookiePunch:Klaro:acceptSelected' - app: + changeDescription: Sandstorm.CookiePunch:Klaro:consentNotice.changeDescription + description: Sandstorm.CookiePunch:Klaro:consentNotice.description + learnMore: Sandstorm.CookiePunch:Klaro:consentNotice.learnMore + testing: Sandstorm.CookiePunch:Klaro:consentNotice.testing + contextualConsent: + acceptAlways: Sandstorm.CookiePunch:Klaro:contextualConsent.acceptAlways + acceptOnce: Sandstorm.CookiePunch:Klaro:contextualConsent.acceptOnce + description: Sandstorm.CookiePunch:Klaro:contextualConsent.description + decline: Sandstorm.CookiePunch:Klaro:decline + ok: Sandstorm.CookiePunch:Klaro:ok + poweredBy: Sandstorm.CookiePunch:Klaro:poweredBy + privacyPolicy: + name: Sandstorm.CookiePunch:Klaro:privacyPolicy.name + text: Sandstorm.CookiePunch:Klaro:privacyPolicy.text + purposeItem: + service: Sandstorm.CookiePunch:Klaro:purposeItem.service + services: Sandstorm.CookiePunch:Klaro:purposeItem.services + purposes: + advertising: + description: Sandstorm.CookiePunch:Klaro:purposes.advertising.description + title: Sandstorm.CookiePunch:Klaro:purposes.advertising.title + functional: + description: Sandstorm.CookiePunch:Klaro:purposes.functional.description + title: Sandstorm.CookiePunch:Klaro:purposes.functional.title + marketing: + description: Sandstorm.CookiePunch:Klaro:purposes.marketing.description + title: Sandstorm.CookiePunch:Klaro:purposes.marketing.title + performance: + description: Sandstorm.CookiePunch:Klaro:purposes.performance.description + title: Sandstorm.CookiePunch:Klaro:purposes.performance.title + save: Sandstorm.CookiePunch:Klaro:save + service: disableAll: - title: 'Sandstorm.CookiePunch:Klaro:app.disableAll.title' - description: 'Sandstorm.CookiePunch:Klaro:app.disableAll.description' + description: Sandstorm.CookiePunch:Klaro:service.disableAll.description + title: Sandstorm.CookiePunch:Klaro:service.disableAll.title optOut: - title: 'Sandstorm.CookiePunch:Klaro:app.optOut.title' - description: 'Sandstorm.CookiePunch:Klaro:app.optOut.description' + description: Sandstorm.CookiePunch:Klaro:service.optOut.description + title: Sandstorm.CookiePunch:Klaro:service.optOut.title + purpose: Sandstorm.CookiePunch:Klaro:service.purpose + purposes: Sandstorm.CookiePunch:Klaro:service.purposes required: - title: 'Sandstorm.CookiePunch:Klaro:app.required.title' - description: 'Sandstorm.CookiePunch:Klaro:app.required.description' - purposes: 'Sandstorm.CookiePunch:Klaro:app.purposes' - purpose: 'Sandstorm.CookiePunch:Klaro:app.purpose' - poweredBy: 'Sandstorm.CookiePunch:Klaro:poweredBy' + description: Sandstorm.CookiePunch:Klaro:service.required.description + title: Sandstorm.CookiePunch:Klaro:service.required.title diff --git a/Configuration/Settings.yaml b/Configuration/Settings.yaml index 7acba01..b0d137a 100644 --- a/Configuration/Settings.yaml +++ b/Configuration/Settings.yaml @@ -12,24 +12,27 @@ Sandstorm: CookiePunch: consent: privacyPolicyUrl: /privacy + elementID: "klaro" + noAutoLoad: false + htmlTexts: false + embedded: false + groupByPurpose: true storageMethod: cookie cookieName: cookie_punch cookieExpiresAfterDays: 120 + default: false mustConsent: true acceptAll: true hideDeclineAll: false - default: false - groups: - default: - title: Sandstorm.CookiePunch:Groups:default.title - description: Sandstorm.CookiePunch:Groups:default.description - consent: - default: true - purposes: - analytics: Analytics - elements: - block: true - group: default - options: - message: Sandstorm.CookiePunch:Elements:options.message - + hideLearnMore: false + noticeAsModal: false + disablePoweredBy: false + additionalClass: ~ + blocking: + tagPatterns: + script: + "*": + block: true + iframe: + "*": + block: true diff --git a/Examples/Settings.Basic.yaml b/Examples/Settings.Basic.yaml deleted file mode 100644 index 68b7b6e..0000000 --- a/Examples/Settings.Basic.yaml +++ /dev/null @@ -1,15 +0,0 @@ -Sandstorm: - CookiePunch: - purposes: - mediaembeds: Media Embeds - groups: - media: - title: Bar - purposes: - - mediaembeds - description: Some bar description - elements: - "https://www.youtube.com/embed/": - type: iframe - block: true - group: media diff --git a/Examples/Settings.CookiePunch.Basic.yaml b/Examples/Settings.CookiePunch.Basic.yaml new file mode 100644 index 0000000..871fc09 --- /dev/null +++ b/Examples/Settings.CookiePunch.Basic.yaml @@ -0,0 +1,21 @@ +Sandstorm: + CookiePunch: + consent: + purposes: + mediaembeds: Media Embeds + services: + anchor: + title: Anchor FM + description: Podcast Player + purposes: + - mediaembeds + blocking: + tagPatterns: + script: + "Packages/Neos.Neos": + block: false + "Packages/Unikka.Slick": + block: false + iframe: + "https://anchor.fm": + service: anchor diff --git a/Examples/Settings.CookiePunch.FullConsentConfig.yaml b/Examples/Settings.CookiePunch.FullConsentConfig.yaml new file mode 100644 index 0000000..6a4fb97 --- /dev/null +++ b/Examples/Settings.CookiePunch.FullConsentConfig.yaml @@ -0,0 +1,64 @@ +Sandstorm: + CookiePunch: + consent: + privacyPolicyUrl: /privacy + # You can customize the ID of the DIV element that Klaro will create + # when starting up. If undefined, Klaro will use 'klaro'. + elementID: "klaro" + # Setting this to true will keep Klaro from automatically loading itself + # when the page is being loaded. + noAutoLoad: false + # Setting this to true will render the descriptions of the consent + # modal and consent notice are HTML. Use with care. + htmlTexts: false + # Setting 'embedded' to true will render the Klaro modal and notice without + # the modal background, allowing you to e.g. embed them into a specific element + # of your website, such as your privacy notice. + embedded: false + # You can group services by their purpose in the modal. This is advisable + # if you have a large number of services. Users can then enable or disable + # entire groups of services instead of having to enable or disable every service. + groupByPurpose: true + # How Klaro should store the user's preferences. It can be either 'cookie' + # (the default) or 'localStorage'. + storageMethod: cookie + # You can customize the name of the cookie that Klaro uses for storing + # user consent decisions. If undefined, Klaro will use 'klaro'. + cookieName: cookie_punch + # You can also set a custom expiration time for the Klaro cookie. + # By default, it will expire after 120 days. + cookieExpiresAfterDays: 120 + # You can change to cookie domain for the consent manager itself. + # Use this if you want to get consent once for multiple matching domains. + # If undefined, Klaro will use the current domain. + cookieDomain: ~ + # You can change to cookie path for the consent manager itself. + # Use this to restrict the cookie visibility to a specific path. + # If undefined, Klaro will use '/' as cookie path. + cookiePath: ~ + # Defines the default state for services + default: false + # If "mustConsent" is set to true, Klaro will directly display the consent + # manager modal and not allow the user to close it before having actively + # consented or declines the use of third-party services. + mustConsent: true + # Show "accept all" to accept all services instead of "ok" that only accepts + # required and "default: true" services + acceptAll: true + # replace "decline" with cookie manager modal + hideDeclineAll: false + # hide "learnMore" link + hideLearnMore: false + # show cookie notice as modal (small bar, not visible if mustConsent=true) + noticeAsModal: false + # You can also remove the 'Realized with Klaro!' text in the consent modal. + # Please don't do this! Klaro is a free open source tool. + # Placing a link to our website helps klaro to spread the word about it, + # which ultimately enables klaro to make their tool better for everyone. + # So please be fair and keep the link enabled. Thanks :) + disablePoweredBy: false + # you can specify an additional class (or classes) that will be added to the Klaro `div` + additionalClass: ~ + # You can override CSS style variables here. We currently do not support + # "theme" from the original klaro config. + # styling -> see Settings.CookiePunch.Styling.yaml diff --git a/Examples/Settings.CookiePunch.FullServiceConfig.yaml b/Examples/Settings.CookiePunch.FullServiceConfig.yaml new file mode 100644 index 0000000..ab7acbc --- /dev/null +++ b/Examples/Settings.CookiePunch.FullServiceConfig.yaml @@ -0,0 +1,47 @@ +Sandstorm: + CookiePunch: + consent: + purposes: + mediaembeds: Media Embeds + services: + # Each service should have a unique (and short) key/name. + footube: + # If "default" is set to true, the service will be enabled by default + # Overwrites global "default" setting. + # We recommend leaving this to "false" for services that collect + # personal information. + default: true + # The title of you service as listed in the consent modal. + title: Foo Tube + # The description of you service as listed in the consent modal. + description: Crazy Foo Media Service + # The purpose(s) of this service. Will be listed on the consent notice. + # Do not forget to add translations for all purposes you list here. + purposes: + - mediaembeds + # A list of regex expressions or strings giving the names of + # cookies set by this service. If the user withdraws consent for a + # given service, Klaro will then automatically delete all matching + # cookies. + cookies: + - # exact match of cookie name in browser + pattern: "_foo_media" + path: "/" + domain: "foo.media.com" + - # pattern match of cookie name in browser + # IMPORTANT: do not wrap regex with /.../ + pattern: "_foo.*$" + patternIsRegex: true + path: "/" + domain: "foo.media.com" + contextualConsentOnly: true + # If "required" is set to true, Klaro will not allow this service to + # be disabled by the user. + required: false + # If "optOut" is set to true, Klaro will load this service even before + # the user gave explicit consent. + # We recommend always leaving this "false". + optOut: false + # If "onlyOnce" is set to true, the service will only be executed + # once regardless how often the user toggles it on and off. + onlyOnce: true diff --git a/Examples/Settings.CookiePunch.Styling.yaml b/Examples/Settings.CookiePunch.Styling.yaml new file mode 100644 index 0000000..58462ff --- /dev/null +++ b/Examples/Settings.CookiePunch.Styling.yaml @@ -0,0 +1,43 @@ +Sandstorm: + CookiePunch: + consent: + styling: + button-text-color: "" + font-size: "" + font-family: "" + title-font-family: "" + + green1: "" + green2: "" + green3: "" + + blue1: "" + blue2: "" + blue3: "" + + red1: "" + red2: "" + red3: "" + + light1: "" + light2: "" + light3: "" + + dark1: "" + dark2: "" + dark3: "" + + white1: "" + white2: "" + white3: "" + + border-radius: "0" + border-style: "" + border-width: "" + + notice-left: "" + notice-right: "" + notice-top: "" + notice-bottom: "" + notice-max-width: "" + notice-position: "" diff --git a/Examples/Settings.Example.yaml b/Examples/Settings.Example.yaml deleted file mode 100644 index b91f65d..0000000 --- a/Examples/Settings.Example.yaml +++ /dev/null @@ -1,73 +0,0 @@ -Neos: - Neos: - fusion: - autoInclude: - "Sandstorm.CookiePunch": true - Fusion: - defaultContext: - "CookiePunch": Sandstorm\CookiePunch\Eel\Helper\CookiePunch - "CookiePunchConfig": Sandstorm\CookiePunch\Eel\Helper\CookiePunchConfig - -Sandstorm: - CookiePunch: - consent: - privacyPolicyUrl: /privacy - storageMethod: cookie - cookieName: cookie_punch - cookieExpiresAfterDays: 120 - # cookieDomain: .example.org - mustConsent: true - # button in consent modal next to save button - acceptAll: true - # button in consent modal on the right -> decline - hideDeclineAll: false - default: false - groups: - default: - title: Sandstorm.CookiePunch:Groups:default.title - description: Sandstorm.CookiePunch:Groups:default.description - consent: - required: true - cookies: - - /^ga/i - media: - title: Sandstorm.CookiePunch:Groups:media.title - description: Sandstorm.CookiePunch:Groups:media.description - purposes: - - videoembeds - - analytics - purposes: - analytics: Analytics - videoembeds: Video Embeds - elements: - block: true - group: default - options: - message: Sandstorm.CookiePunch:Elements:options.message - messageClass: block-them-all-message - patterns: - # Slick - "Packages/Unikka.Slick": - type: script - block: false - - # Jonnitto.Plyr - "Packages/Jonnitto.Plyr": - type: script - group: media - block: true - "https://www.youtube.com/embed/": - type: iframe - block: true - group: media - - # anchor.fm - # "https://anchor.fm": - # type: iframe - # group: media - # block: true - - # Neos - "Packages/Neos.Neos": - type: script - block: false diff --git a/README.md b/README.md index 42c7798..eca768b 100644 --- a/README.md +++ b/README.md @@ -1,96 +1,490 @@ # Sandstorm.CookiePunch -This Neos package provides a general approach for blocking elements like script tags and iframes before the markup reaches the browser and therefore provides a general approach for blocking cookies or other concepts of tracking user behaviour. It also provides a UI in the browser for displaying a cookie-consent and partially unblocking groups of elements. +This Neos package provides a general approach for blocking elements like script tags and iframes before the markup reaches the browser and therefore provides a general approach for +blocking cookies or other concepts of tracking user behaviour. It integrates [Klaro](https://heyklaro.com/docs/) as UI for displaying a cookie-consent and unblocking groups of elements +after the user consented. ## Features -* helpers to block elements (scripts and iframes) before the markup is sent to the client -* possible blocking modes: - * block all + allowed list - * allow all + blocked list -* grouping of elements -* patterns to target elements in markup -* blocking of HTML snippets created by the editor (Neos.NodeTypes.Html:Html) -* cookie-consent (provided by Klaro.js) to block/unblock grouped elements -* localization support -* useful default config and styling -* SCSS to customize cookie-consent styling +- eel helpers to block elements (scripts and iframes) before the markup is sent to the client +- eel helper to place contextual consents for any part of the markup +- a easy way to configure blocking via yaml config supporting patterns to target elements in markup +- localization support via Yaml and/or Fusion +- data source providing all services e.g. as a dropdown in the inspector +- **an awesome cookie-consent provided by [Klaro](https://heyklaro.com/docs/)** :heart: directly bundled with this package + - supports unblocking of elements + - supports contextual consents to temporarily/permanently unblock content by consenting directly on the element without the need to open the consent modal + - You definitely need to check out their project on GitHub ;) ## Installation `composer require sandstorm/cookiepunch` -## Basic Setup +## Basic Configuration and Usages -### STEP 1: Adding the consent-modal +### Step 1: Adding the consent-modal -In your `Overrides.fusion` or `Root.fusion` add +Create a new fusion file `CookiePunch.fusion` in `.../Resources/Private/Fusion` with the following content: ```neosfusion prototype(Neos.Neos:Page) { - // This adds the javascript and css needed for the cookie-consent - head.javascripts.cookiePunchConsent = Sandstorm.CookiePunch:Consent + head.javascripts.cookiepunchConsent = Sandstorm.CookiePunch:Consent + # Block Global + @process.blockIframes = ${CookiePunch.blockIframes(value, !node.context.inBackend)} + @process.blockScripts = ${CookiePunch.blockScripts(value, !node.context.inBackend)} } ``` -This will add the needed js and css to your page. If you reload the page you should see the consent-modal. +This will add the needed js and css to your page. If you reload the page you should see the consent-modal. Now all ` + + + ` +} +``` + +```neosfusion +// CookiePunch.fusion + +prototype(Vendor.Plugin.FooTube:Embed) { + // tags in this part of the tree will be blocked first + @process.blockIframes = ${CookiePunch.blockIframes(value, !node.context.inBackend, "footube")} + @process.blockScripts = ${CookiePunch.blockScripts(value, !node.context.inBackend, "footube")} +} +prototype(Neos.Neos:Page) { + head.javascripts.cookiepunchConsent = Sandstorm.CookiePunch:Consent + // at last all remaining tags will be blocked according to the config + @process.blockIframes = ${CookiePunch.blockIframes(value, !node.context.inBackend)} + @process.blockScripts = ${CookiePunch.blockScripts(value, !node.context.inBackend)} } ``` -This Eel helper will add a `data-never-block` attribute to your script tag. These tags will be ignored by `CookiePunch.blockScripts()`. +### Adding a contextual consent for non-iframe element -### STEP 4: Create groups, purposes and add elements +When blocking a ` + + + ` } - renderer = afx` - - - - - ` + // We should never block the consent ;) @process.neverBlockScripts = ${CookiePunch.neverBlockScripts(value)} } diff --git a/Resources/Private/JavaScript/KlaroConfig/buildConfig.ts b/Resources/Private/JavaScript/KlaroConfig/buildConfig.ts new file mode 100644 index 0000000..58d0a36 --- /dev/null +++ b/Resources/Private/JavaScript/KlaroConfig/buildConfig.ts @@ -0,0 +1,140 @@ +import { + KlaroService, + KlaroConfig, + CookiePunchConfig, + CookiePunchServices, + KlaroServiceTranslations, + CookiePunchServiceCookies, + KlaroServiceCookies, +} from "../Types/types"; + +export default function buildConfig( + cookiePunchConfig: CookiePunchConfig +): KlaroConfig { + validateCookiePunchConfigOnWindow(cookiePunchConfig); + return { + version: 1, + + // IMPORTANT: we disable the language handling of klaro because + // we want to use translations provided the Neos-way + lang: "zz", + + elementID: cookiePunchConfig.consent.elementID, + noAutoLoad: cookiePunchConfig.consent.noAutoLoad, + htmlTexts: cookiePunchConfig.consent.htmlTexts, + embedded: cookiePunchConfig.consent.embedded, + groupByPurpose: cookiePunchConfig.consent.groupByPurpose, + storageMethod: cookiePunchConfig.consent.storageMethod, + cookieName: cookiePunchConfig.consent.cookieName, + cookieExpiresAfterDays: cookiePunchConfig.consent.cookieExpiresAfterDays, + default: cookiePunchConfig.consent.default, + mustConsent: cookiePunchConfig.consent.mustConsent, + acceptAll: cookiePunchConfig.consent.acceptAll, + hideDeclineAll: cookiePunchConfig.consent.hideDeclineAll, + hideLearnMore: cookiePunchConfig.consent.hideLearnMore, + noticeAsModal: cookiePunchConfig.consent.noticeAsModal, + disablePoweredBy: cookiePunchConfig.consent.disablePoweredBy, + additionalClass: cookiePunchConfig.consent.additionalClass, + cookiePath: cookiePunchConfig.consent.cookiePath, + cookieDomain: cookiePunchConfig.consent.cookieDomain, + + purposes: cookiePunchConfig.consent.purposes, + + services: buildKlaroServicesConfig(cookiePunchConfig.consent.services), + + translations: { + zz: { + privacyPolicyUrl: cookiePunchConfig.consent.privacyPolicyUrl, + ...cookiePunchConfig.consent.translations, + ...buildKlaroServiceTranslations(cookiePunchConfig.consent.services), + }, + }, + }; +} + +function validateCookiePunchConfigOnWindow( + cookiePunchConfig: CookiePunchConfig +) { + if (!cookiePunchConfig) { + throw new Error( + "No cookiePunchConfig was found on window. This should not happen! Please check your config and logs." + ); + } +} + +function buildKlaroServiceTranslations( + cookiePunchServices: CookiePunchServices +): KlaroServiceTranslations { + let result = {} as KlaroServiceTranslations; + Object.keys(cookiePunchServices).forEach((name) => { + const service = cookiePunchServices[name]; + result[name] = { + title: service.title, + description: service.description, + }; + }); + return result; +} + +function buildKlaroServicesConfig( + cookiePunchServices: CookiePunchServices +): KlaroService[] { + let result: KlaroService[] = []; + Object.keys(cookiePunchServices).forEach((name) => { + const cookiePunchService = cookiePunchServices[name]; + const klaroService: KlaroService = { + name: name, + }; + + if (cookiePunchService.purposes) { + klaroService.purposes = cookiePunchService.purposes; + } else { + // For some reasons we currently need an empty error here to not break klaro + klaroService.purposes = []; + } + if (typeof cookiePunchService.contextualConsentOnly === "boolean") + klaroService.contextualConsentOnly = + cookiePunchService.contextualConsentOnly; + if (typeof cookiePunchService.default === "boolean") + klaroService.default = cookiePunchService.default; + if (cookiePunchService.cookies) { + klaroService.cookies = buildKlaroServiceCookiesConfig( + cookiePunchService.cookies + ); + } + if (typeof cookiePunchService.required === "boolean") + klaroService.required = cookiePunchService.required; + if (typeof cookiePunchService.optOut === "boolean") + klaroService.optOut = cookiePunchService.optOut; + if (typeof cookiePunchService.onlyOnce === "boolean") + klaroService.onlyOnce = cookiePunchService.onlyOnce; + + result.push(klaroService); + }); + + return result; +} + +function buildKlaroServiceCookiesConfig( + cookiePunchServiceCookies: CookiePunchServiceCookies +): KlaroServiceCookies { + return cookiePunchServiceCookies.map((cookie, index) => { + if (cookie.pattern && cookie.path && cookie.domain) { + return [ + cookie.patternIsRegex ? new RegExp(cookie.pattern) : cookie.pattern, + cookie.path, + cookie.domain, + ]; + } + + if (cookie.pattern) { + return cookie.patternIsRegex + ? new RegExp(cookie.pattern) + : cookie.pattern; + } + + throw new Error( + `The cookie config for index "${index}" is not supported. It should be an object containing the required properties 'pattern', 'path' and 'domain'` + ); + }); +} diff --git a/Resources/Private/JavaScript/Types/klaro.d.ts b/Resources/Private/JavaScript/Types/klaro.d.ts new file mode 100644 index 0000000..ff44e01 --- /dev/null +++ b/Resources/Private/JavaScript/Types/klaro.d.ts @@ -0,0 +1,2 @@ +declare module "klaro"; +declare module "klaro/dist/klaro-no-css"; diff --git a/Resources/Private/JavaScript/Types/types.ts b/Resources/Private/JavaScript/Types/types.ts new file mode 100644 index 0000000..c2bdf0b --- /dev/null +++ b/Resources/Private/JavaScript/Types/types.ts @@ -0,0 +1,119 @@ +// We have two different configs. One is provided through the yaml configuration +// and later processed to create the config needed by Klaro in the frontend. + +// COOKIEPUNCH +export type CookiePunchService = { + name: string; + title?: string; + description?: string; + purposes?: string[]; + contextualConsentOnly?: boolean; + default?: boolean; + required?: boolean; + optOut?: boolean; + cookies?: CookiePunchServiceCookies; + onlyOnce?: boolean; +}; + +export type CookiePunchServiceCookies = { + pattern: string; + patternIsRegex?: boolean; + path?: "string"; + domain?: string; +}[]; + +export type CookiePunchServices = { + [key: string]: CookiePunchService; +}; + +export type CookiePunchConfig = { + consent: { + privacyPolicyUrl: string; + + elementID: string; + noAutoLoad: boolean; + htmlTexts: boolean; + embedded: false; + groupByPurpose: boolean; + storageMethod: string; + cookieName: string; + cookieExpiresAfterDays: number; + default: boolean; + mustConsent: boolean; + acceptAll: boolean; + hideDeclineAll: boolean; + hideLearnMore: boolean; + noticeAsModal: boolean; + disablePoweredBy: boolean; + additionalClass?: string; + cookiePath?: string; + cookieDomain?: string; + + purposes: string[]; + services: CookiePunchServices; + translations: { + [key: string]: any; + }; + }; +}; + +// KLARO + +export type KlaroTranslations = { + [key: string]: any; +}; + +export type KlaroServiceTranslations = { + [key: string]: { + title?: string; + description?: string; + }; +}; + +export type KlaroService = { + name: string; + title?: string; + description?: string; + purposes?: string[]; + contextualConsentOnly?: boolean; + default?: boolean; + cookies?: KlaroServiceCookies; + required?: boolean; + optOut?: boolean; + onlyOnce?: boolean; +}; + +export type KlaroServiceCookies = ((RegExp | string)[] | string | RegExp)[]; + +export type KlaroServices = KlaroService[]; + +export type KlaroConfig = { + version: 1; + lang: "zz"; + + elementID: string; + noAutoLoad: boolean; + htmlTexts: boolean; + embedded: false; + groupByPurpose: boolean; + storageMethod: string; + cookieName: string; + cookieExpiresAfterDays: number; + default: boolean; + mustConsent: boolean; + acceptAll: boolean; + hideDeclineAll: boolean; + hideLearnMore: boolean; + noticeAsModal: boolean; + disablePoweredBy: boolean; + additionalClass?: string; + cookiePath?: string; + cookieDomain?: string; + + purposes: string[]; + services: KlaroServices; + + translations: { + zz: KlaroTranslations | KlaroServiceTranslations; + }; +}; diff --git a/Resources/Private/JavaScript/Types/window.d.ts b/Resources/Private/JavaScript/Types/window.d.ts new file mode 100644 index 0000000..ec841c7 --- /dev/null +++ b/Resources/Private/JavaScript/Types/window.d.ts @@ -0,0 +1,9 @@ +import { CookiePunchConfig, KlaroConfig } from "./types"; + +declare global { + interface Window { + cookiePunchConfig: CookiePunchConfig; + klaroConfig: KlaroConfig; + klaro: any; + } +} diff --git a/Resources/Private/JavaScript/cookiepunch.nocss.ts b/Resources/Private/JavaScript/cookiepunch.nocss.ts new file mode 100644 index 0000000..a1d2aee --- /dev/null +++ b/Resources/Private/JavaScript/cookiepunch.nocss.ts @@ -0,0 +1,11 @@ +import * as Klaro from "klaro/dist/klaro-no-css"; +import buildConfig from "./KlaroConfig/buildConfig"; + +const cookiePunchConfig = window.cookiePunchConfig; + +const config = buildConfig(cookiePunchConfig); +// we assign the Klaro module to the window, so that we can access it in JS +window.klaro = Klaro; +window.klaroConfig = config; +// we set up Klaro with the config +Klaro.setup(config); diff --git a/Resources/Private/JavaScript/cookiepunch.ts b/Resources/Private/JavaScript/cookiepunch.ts new file mode 100644 index 0000000..6e37d2c --- /dev/null +++ b/Resources/Private/JavaScript/cookiepunch.ts @@ -0,0 +1,11 @@ +import * as Klaro from "klaro"; +import buildConfig from "./KlaroConfig/buildConfig"; + +const cookiePunchConfig = window.cookiePunchConfig; +const config = buildConfig(cookiePunchConfig); + +// we assign the Klaro module to the window, so that we can access it in JS +window.klaro = Klaro; +window.klaroConfig = config; +// we set up Klaro with the config +Klaro.setup(config); diff --git a/Resources/Private/JavaScript/klaroConfig.ts b/Resources/Private/JavaScript/klaroConfig.ts deleted file mode 100644 index 15ebd2b..0000000 --- a/Resources/Private/JavaScript/klaroConfig.ts +++ /dev/null @@ -1,233 +0,0 @@ -type KlaroCallbackApp = { - name: string; - title: string; -}; - -type KlaroAppConfig = { - name: string; - title: string; - purposes: string[]; - cookies: RegExp[]; - callback: (consent: boolean, app: KlaroCallbackApp) => void; -}; - -type KlaroConfig = { - lang: string; - - acceptAll: boolean; - apps: KlaroAppConfig[]; - cookieName: string; - cookieExpiresAfterDays: number; - cookieDomain: string; - default: boolean; - hideDeclineAll: boolean; - mustConsent: boolean; - privacyPolicy: string; - storageMethod: string; - translations: { [key: string]: any }; -}; - -type CookiePunchConfig = KlaroConfig & { - apps: AppJson; - handleConsentOptions: { [key: string]: any }; -}; - -type AppJson = { - name: string; - title: string; - purposes: string[]; - cookies: string[]; -}; - -//@ts-ignore -if (!window.cookiePunchConfig) { - throw new Error( - "No cookiePunchConfig was found on window. This should not happen! Please check your config and logs." - ); -} - -(function () { - //@ts-ignore - const cookiePunchConfig = window.cookiePunchConfig as CookiePunchConfig; - function buildAppsConfiguration(): KlaroAppConfig[] { - return cookiePunchConfig.apps.map((app) => { - return { - ...app, - cookies: [], - callback: handleConsent, - }; - }); - } - - // @ts-ignore - window.klaroConfig = { - // IMPORTANT: we disable the language handling of klaro because - // we want to use translations provided the Neos-way - lang: "all", - - // ############## cookiePunchConfig ############## - - apps: buildAppsConfiguration(), - - // Show "accept all" to accept all apps instead of "ok" that only accepts - // required and "default: true" apps - acceptAll: cookiePunchConfig.acceptAll, - - // You can change to cookie domain for the consent manager itself. - // Use this if you want to get consent once for multiple matching domains. - // If undefined, Klaro will use the current domain. - cookieDomain: cookiePunchConfig.cookieDomain, - // You can also set a custom expiration time for the Klaro cookie. - // By default, it will expire after 120 days. - cookieExpiresAfterDays: cookiePunchConfig.cookieExpiresAfterDays, - // You can customize the name of the cookie that Klaro uses for storing - // user consent decisions. If undefined, Klaro will use 'klaro'. - cookieName: cookiePunchConfig.cookieName, - - // Defines the default state for applications (true=enabled by default). - default: cookiePunchConfig.default, - - // replace "decline" with cookie manager modal - hideDeclineAll: cookiePunchConfig.hideDeclineAll, - - // If "mustConsent" is set to true, Klaro will directly display the consent - // manager modal and not allow the user to close it before having actively - // consented or declines the use of third-party apps. - mustConsent: cookiePunchConfig.mustConsent, - - // Put a link to your privacy policy here (relative or absolute). - privacyPolicy: cookiePunchConfig.privacyPolicy, - - // How Klaro should store the user's preferences. It can be either 'cookie' - // (the default) or 'localStorage'. - storageMethod: cookiePunchConfig.storageMethod, - - translations: { - all: cookiePunchConfig.translations, - }, - }; - - function handleConsent(consent: boolean, app: KlaroCallbackApp) { - // We nee a stable class to identify messages so we can remove them later. - const PERMANENT_MESSAGE_CLASS = "block-them-all-message"; - // -> see Settings.yaml and/or Config.fusion - const handleConsentOptions = cookiePunchConfig.handleConsentOptions; - - if (consent) { - removeMessagesForConsentGroup(app.name); - unhideIframesForGroup(app.name); - } else { - let options: { [key: string]: any }; - - document - .querySelectorAll(`*[data-name="${app.name}"]`) - .forEach((element) => { - try { - // more robust handling of maybe broken JSON - //@ts-ignore - options = JSON.parse(element.dataset.options); - } catch (e) { - // Do nothing - } - - // 1. We set default values - let message = handleConsentOptions.message || "NO MESSAGE CONFIGURED"; - let messageClass = buildMessageClass( - handleConsentOptions.messageClass - ); - let messagePosition = "before"; - let targetElements: Element[] = []; - - if (element.tagName === "IFRAME") { - targetElements = [element]; - } - - // 2. We override some, if options are present - if (options) { - message = options.message || message; - messageClass = options.messageClass - ? buildMessageClass(options.messageClass) - : messageClass; - messagePosition = options.messagePosition - ? options.messagePosition - : messagePosition; - targetElements = options.target - ? Array.from(document.querySelectorAll(options.target)) - : targetElements; - } - - if (targetElements.length) { - targetElements.forEach((element) => - addMessage(element, message, app, messagePosition, messageClass) - ); - } - }); - } - function removeMessagesForConsentGroup(group: string) { - const messageSelector = `.${PERMANENT_MESSAGE_CLASS}[data-name="${group}"]`; - document.querySelectorAll(messageSelector).forEach((item) => { - item.remove(); - }); - } - - function unhideIframesForGroup(group: string) { - const iframeSelector = `iframe[data-name="${group}"]`; - document.querySelectorAll(iframeSelector).forEach((item) => { - (item as HTMLElement).style.display = "block"; - }); - } - - function buildMessageClass(messageClass: string) { - if (messageClass && messageClass !== PERMANENT_MESSAGE_CLASS) { - return `${PERMANENT_MESSAGE_CLASS} ${handleConsentOptions.messageClass}`; - } - return PERMANENT_MESSAGE_CLASS; - } - - function addMessage( - targetElement: Element, - message: string, - app: KlaroCallbackApp, - messagePosition: string, - messageClass: string - ) { - const newElement = document.createElement("div"); - const classNames = messageClass.split(" "); - const innerClassNames = classNames.map( - (className) => className + "__inner" - ); - newElement.innerHTML = `
${message.replace("{group}", app.title)}
`; - newElement.onclick = function () { - //@ts-ignore - klaro.show(); - }; - newElement.style.cursor = "pointer"; - newElement.dataset.name = app.name; - - if (messageClass) { - newElement.classList.add(...classNames); - } - - switch (messagePosition) { - case "before": { - targetElement?.parentElement?.insertBefore(newElement, targetElement); - break; - } - case "after": { - targetElement?.parentElement?.appendChild(newElement); - break; - } - case "prepend": { - targetElement.prepend(newElement); - break; - } - case "append": { - targetElement.append(newElement); - break; - } - } - } - } -})(); diff --git a/Resources/Private/KlaroCss/klaro.css b/Resources/Private/KlaroCss/klaro.css new file mode 100644 index 0000000..ea50dd1 --- /dev/null +++ b/Resources/Private/KlaroCss/klaro.css @@ -0,0 +1,831 @@ +/* +We declare all variables here as default so that they are easy to override... +*/ +/* Border, shadows, ... */ +/* +Variables that begin with $var- should NEVER be used directly in CSS rules. +they should only be included via the "@include var(property, var-name)" +mechanism. +*/ +/* Border styles */ +/* Cookie notice positioning */ +/* Text colors */ +/* Font Families */ +/* White */ +/* Differently shaded colors */ +/* +Use @include var(property, varname) to include a variable, e.g. + + @include var(background-color, white1); + +to create a white background. +*/ +/* Spacing */ +/* Breakpoints */ +.klaro { + font-family: inherit; + font-family: var(--font-family, inherit); + font-size: 14px; + font-size: var(--font-size, 14px); +} + +.klaro button { + font-family: inherit; + font-family: var(--font-family, inherit); + font-size: 14px; + font-size: var(--font-size, 14px); +} + +.klaro.cm-as-context-notice { + height: 100%; + padding-bottom: 12px; + padding-top: 12px; +} + +.klaro .cookie-modal, +.klaro .context-notice, +.klaro .cookie-notice { + /* The switch - the box around the slider */ +} + +.klaro .cookie-modal .cm-switch-container, +.klaro .context-notice .cm-switch-container, +.klaro .cookie-notice .cm-switch-container { + border-bottom-style: solid; + border-bottom-style: var(--border-style, solid); + border-bottom-width: 1px; + border-bottom-width: var(--border-width, 1px); + border-bottom-color: #c8c8c8; + border-bottom-color: var(--light2, #c8c8c8); + display: block; + position: relative; + padding: 10px; + padding-left: 66px; + line-height: 20px; + vertical-align: middle; + min-height: 40px; +} + +.klaro .cookie-modal .cm-switch-container:last-child, +.klaro .context-notice .cm-switch-container:last-child, +.klaro .cookie-notice .cm-switch-container:last-child { + border-bottom: 0; +} + +.klaro .cookie-modal .cm-switch-container:first-child, +.klaro .context-notice .cm-switch-container:first-child, +.klaro .cookie-notice .cm-switch-container:first-child { + margin-top: 0; +} + +.klaro .cookie-modal .cm-switch-container p, +.klaro .context-notice .cm-switch-container p, +.klaro .cookie-notice .cm-switch-container p { + margin-top: 0; +} + +.klaro .cookie-modal .cm-switch, +.klaro .context-notice .cm-switch, +.klaro .cookie-notice .cm-switch { + position: relative; + display: inline-block; + width: 50px; + height: 30px; +} + +.klaro .cookie-modal .cm-list-input:checked + .cm-list-label .slider, +.klaro .context-notice .cm-list-input:checked + .cm-list-label .slider, +.klaro .cookie-notice .cm-list-input:checked + .cm-list-label .slider { + background-color: #1a936f; + background-color: var(--green1, #1a936f); +} + +.klaro .cookie-modal .cm-list-input.half-checked:checked + .cm-list-label .slider, +.klaro .context-notice .cm-list-input.half-checked:checked + .cm-list-label .slider, +.klaro .cookie-notice .cm-list-input.half-checked:checked + .cm-list-label .slider { + background-color: #1a936f; + background-color: var(--green1, #1a936f); + opacity: 0.6; +} + +.klaro .cookie-modal .cm-list-input.half-checked:checked + .cm-list-label .slider::before, +.klaro .context-notice .cm-list-input.half-checked:checked + .cm-list-label .slider::before, +.klaro .cookie-notice .cm-list-input.half-checked:checked + .cm-list-label .slider::before { + -ms-transform: translateX(10px); + transform: translateX(10px); +} + +.klaro .cookie-modal .cm-list-input.only-required + .cm-list-label .slider, +.klaro .context-notice .cm-list-input.only-required + .cm-list-label .slider, +.klaro .cookie-notice .cm-list-input.only-required + .cm-list-label .slider { + background-color: #24cc9a; + background-color: var(--green2, #24cc9a); + opacity: 0.8; +} + +.klaro .cookie-modal .cm-list-input.only-required + .cm-list-label .slider::before, +.klaro .context-notice .cm-list-input.only-required + .cm-list-label .slider::before, +.klaro .cookie-notice .cm-list-input.only-required + .cm-list-label .slider::before { + -ms-transform: translateX(10px); + transform: translateX(10px); +} + +.klaro .cookie-modal .cm-list-input.required:checked + .cm-list-label .slider, +.klaro .context-notice .cm-list-input.required:checked + .cm-list-label .slider, +.klaro .cookie-notice .cm-list-input.required:checked + .cm-list-label .slider { + background-color: #24cc9a; + background-color: var(--green2, #24cc9a); + opacity: 0.8; + cursor: not-allowed; +} + +.klaro .cookie-modal .slider, +.klaro .context-notice .slider, +.klaro .cookie-notice .slider { + box-shadow: 0 4px 6px 0 rgba(0, 0, 0, 0.2), 5px 5px 10px 0 rgba(0, 0, 0, 0.19); +} + +.klaro .cookie-modal .cm-list-input, +.klaro .context-notice .cm-list-input, +.klaro .cookie-notice .cm-list-input { + position: absolute; + top: 0; + left: 0; + opacity: 0; + width: 50px; + height: 30px; +} + +.klaro .cookie-modal .cm-list-title, +.klaro .context-notice .cm-list-title, +.klaro .cookie-notice .cm-list-title { + font-size: 0.9em; + font-weight: 600; +} + +.klaro .cookie-modal .cm-list-description, +.klaro .context-notice .cm-list-description, +.klaro .cookie-notice .cm-list-description { + color: #7c7c7c; + color: var(--dark3, #7c7c7c); + font-size: 0.9em; + padding-top: 4px; +} + +.klaro .cookie-modal .cm-list-label, +.klaro .context-notice .cm-list-label, +.klaro .cookie-notice .cm-list-label { + /* The slider */ + /* Rounded sliders */ +} + +.klaro .cookie-modal .cm-list-label .cm-switch, +.klaro .context-notice .cm-list-label .cm-switch, +.klaro .cookie-notice .cm-list-label .cm-switch { + position: absolute; + left: 0; +} + +.klaro .cookie-modal .cm-list-label .slider, +.klaro .context-notice .cm-list-label .slider, +.klaro .cookie-notice .cm-list-label .slider { + background-color: #f2f2f2; + background-color: var(--white2, #f2f2f2); + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + transition: 0.4s; + width: 50px; + display: inline-block; +} + +.klaro .cookie-modal .cm-list-label .slider::before, +.klaro .context-notice .cm-list-label .slider::before, +.klaro .cookie-notice .cm-list-label .slider::before { + background-color: #e6e6e6; + background-color: var(--white3, #e6e6e6); + position: absolute; + content: ''; + height: 20px; + width: 20px; + left: 5px; + bottom: 5px; + transition: 0.4s; +} + +.klaro .cookie-modal .cm-list-label .slider.round, +.klaro .context-notice .cm-list-label .slider.round, +.klaro .cookie-notice .cm-list-label .slider.round { + border-radius: 30px; +} + +.klaro .cookie-modal .cm-list-label .slider.round::before, +.klaro .context-notice .cm-list-label .slider.round::before, +.klaro .cookie-notice .cm-list-label .slider.round::before { + border-radius: 50%; +} + +.klaro .cookie-modal .cm-list-label input:focus + .slider, +.klaro .context-notice .cm-list-label input:focus + .slider, +.klaro .cookie-notice .cm-list-label input:focus + .slider { + box-shadow-color: #48dfb2; + box-shadow-color: var(--green3, #48dfb2); + box-shadow: 0 0 1px var(color, green3); +} + +.klaro .cookie-modal .cm-list-label input:checked + .slider::before, +.klaro .context-notice .cm-list-label input:checked + .slider::before, +.klaro .cookie-notice .cm-list-label input:checked + .slider::before { + -ms-transform: translateX(20px); + transform: translateX(20px); +} + +.klaro .cookie-modal .cm-list-input:focus + .cm-list-label .slider, +.klaro .context-notice .cm-list-input:focus + .cm-list-label .slider, +.klaro .cookie-notice .cm-list-input:focus + .cm-list-label .slider { + box-shadow: 0 4px 6px 0 rgba(125, 125, 125, 0.2), 5px 5px 10px 0 rgba(125, 125, 125, 0.19); +} + +.klaro .cookie-modal .cm-list-input:checked + .cm-list-label .slider::before, +.klaro .context-notice .cm-list-input:checked + .cm-list-label .slider::before, +.klaro .cookie-notice .cm-list-input:checked + .cm-list-label .slider::before { + -ms-transform: translateX(20px); + transform: translateX(20px); +} + +.klaro .cookie-modal .slider, +.klaro .context-notice .slider, +.klaro .cookie-notice .slider { + box-shadow: 0 4px 6px 0 rgba(0, 0, 0, 0.2), 5px 5px 10px 0 rgba(0, 0, 0, 0.19); +} + +.klaro .cookie-modal a, +.klaro .context-notice a, +.klaro .cookie-notice a { + color: #1a936f; + color: var(--green1, #1a936f); + text-decoration: none; +} + +.klaro .cookie-modal p, +.klaro .cookie-modal strong, +.klaro .cookie-modal h1, +.klaro .cookie-modal h2, +.klaro .cookie-modal ul, +.klaro .cookie-modal li, +.klaro .context-notice p, +.klaro .context-notice strong, +.klaro .context-notice h1, +.klaro .context-notice h2, +.klaro .context-notice ul, +.klaro .context-notice li, +.klaro .cookie-notice p, +.klaro .cookie-notice strong, +.klaro .cookie-notice h1, +.klaro .cookie-notice h2, +.klaro .cookie-notice ul, +.klaro .cookie-notice li { + color: #fafafa; + color: var(--light1, #fafafa); +} + +.klaro .cookie-modal p, +.klaro .cookie-modal h1, +.klaro .cookie-modal h2, +.klaro .cookie-modal ul, +.klaro .cookie-modal li, +.klaro .context-notice p, +.klaro .context-notice h1, +.klaro .context-notice h2, +.klaro .context-notice ul, +.klaro .context-notice li, +.klaro .cookie-notice p, +.klaro .cookie-notice h1, +.klaro .cookie-notice h2, +.klaro .cookie-notice ul, +.klaro .cookie-notice li { + display: block; + text-align: left; + margin: 0; + padding: 0; + margin-top: 0.7em; +} + +.klaro .cookie-modal h1, +.klaro .cookie-modal h2, +.klaro .cookie-modal h3, +.klaro .cookie-modal h4, +.klaro .cookie-modal h5, +.klaro .cookie-modal h6, +.klaro .context-notice h1, +.klaro .context-notice h2, +.klaro .context-notice h3, +.klaro .context-notice h4, +.klaro .context-notice h5, +.klaro .context-notice h6, +.klaro .cookie-notice h1, +.klaro .cookie-notice h2, +.klaro .cookie-notice h3, +.klaro .cookie-notice h4, +.klaro .cookie-notice h5, +.klaro .cookie-notice h6 { + font-family: inherit; + font-family: var(--title-font-family, inherit); +} + +.klaro .cookie-modal .cm-link, +.klaro .context-notice .cm-link, +.klaro .cookie-notice .cm-link { + margin-right: 0.5em; + vertical-align: middle; +} + +.klaro .cookie-modal .cm-btn, +.klaro .context-notice .cm-btn, +.klaro .cookie-notice .cm-btn { + color: #fff; + color: var(--button-text-color, #fff); + background-color: #5c5c5c; + background-color: var(--dark2, #5c5c5c); + border-radius: 4px; + border-radius: var(--border-radius, 4px); + padding: 6px 10px; + margin-right: 0.5em; + border-style: none; + padding: 0.4em; + font-size: 1em; + cursor: pointer; +} + +.klaro .cookie-modal .cm-btn:disabled, +.klaro .context-notice .cm-btn:disabled, +.klaro .cookie-notice .cm-btn:disabled { + opacity: 0.5; +} + +.klaro .cookie-modal .cm-btn.cm-btn-close, +.klaro .context-notice .cm-btn.cm-btn-close, +.klaro .cookie-notice .cm-btn.cm-btn-close { + background-color: #c8c8c8; + background-color: var(--light2, #c8c8c8); +} + +.klaro .cookie-modal .cm-btn.cm-btn-success, +.klaro .context-notice .cm-btn.cm-btn-success, +.klaro .cookie-notice .cm-btn.cm-btn-success { + background-color: #1a936f; + background-color: var(--green1, #1a936f); +} + +.klaro .cookie-modal .cm-btn.cm-btn-success-var, +.klaro .context-notice .cm-btn.cm-btn-success-var, +.klaro .cookie-notice .cm-btn.cm-btn-success-var { + background-color: #24cc9a; + background-color: var(--green2, #24cc9a); +} + +.klaro .cookie-modal .cm-btn.cm-btn-info, +.klaro .context-notice .cm-btn.cm-btn-info, +.klaro .cookie-notice .cm-btn.cm-btn-info { + background-color: #2581c4; + background-color: var(--blue1, #2581c4); +} + +.klaro .context-notice { + border-radius: 4px; + border-radius: var(--border-radius, 4px); + border-style: solid; + border-style: var(--border-style, solid); + border-width: 1px; + border-width: var(--border-width, 1px); + border-color: #c8c8c8; + border-color: var(--light2, #c8c8c8); + background-color: #fafafa; + background-color: var(--light1, #fafafa); + display: flex; + flex-direction: column; + flex-wrap: wrap; + align-items: center; + justify-content: center; + padding: 12px; + height: 100%; +} + +.klaro .context-notice.cm-dark { + background-color: #333; + background-color: var(--dark1, #333); + border-color: #5c5c5c; + border-color: var(--dark2, #5c5c5c); +} + +.klaro .context-notice.cm-dark p { + color: #fafafa; + color: var(--light1, #fafafa); +} + +.klaro .context-notice.cm-dark p a { + color: #459cdc; + color: var(--blue2, #459cdc); +} + +.klaro .context-notice p { + color: #333; + color: var(--dark1, #333); + flex-grow: 0; + text-align: center; + padding-top: 0; + margin-top: 0; +} + +.klaro .context-notice p a { + color: #24cc9a; + color: var(--green2, #24cc9a); +} + +.klaro .context-notice p.cm-buttons { + margin-top: 12px; +} + +.klaro .cookie-modal { + width: 100%; + height: 100%; + position: fixed; + overflow: hidden; + left: 0; + top: 0; + z-index: 1000; +} + +.klaro .cookie-modal.cm-embedded { + position: relative; + height: inherit; + width: inherit; + left: inherit; + right: inherit; + z-index: 0; +} + +.klaro .cookie-modal.cm-embedded .cm-modal.cm-klaro { + position: relative; + -ms-transform: none; + transform: none; +} + +.klaro .cookie-modal .cm-bg { + background: rgba(0, 0, 0, 0.5); + height: 100%; + width: 100%; + position: fixed; + top: 0; + left: 0; +} + +.klaro .cookie-modal .cm-modal.cm-klaro { + background-color: #333; + background-color: var(--dark1, #333); + color: #fafafa; + color: var(--light1, #fafafa); + z-index: 1001; + box-shadow: 0 4px 6px 0 rgba(0, 0, 0, 0.2), 5px 5px 10px 0 rgba(0, 0, 0, 0.19); + width: 100%; + max-height: 98%; + top: 50%; + -ms-transform: translateY(-50%); + transform: translateY(-50%); + position: fixed; + overflow: auto; +} + +@media (min-width: 660px) { + .klaro .cookie-modal .cm-modal.cm-klaro { + border-radius: 4px; + border-radius: var(--border-radius, 4px); + position: relative; + margin: 0 auto; + max-width: 640px; + height: auto; + width: auto; + } +} + +.klaro .cookie-modal .cm-modal .hide { + border-style: none; + background: none; + cursor: pointer; + position: absolute; + top: 20px; + right: 20px; + z-index: 1; +} + +.klaro .cookie-modal .cm-modal .hide svg { + stroke: #fafafa; + stroke: var(--light1, #fafafa); +} + +.klaro .cookie-modal .cm-modal .cm-footer { + border-top-color: #5c5c5c; + border-top-color: var(--dark2, #5c5c5c); + border-top-width: 1px; + border-top-width: var(--border-width, 1px); + border-top-style: solid; + border-top-style: var(--border-style, solid); + padding: 1em; +} + +.klaro .cookie-modal .cm-modal .cm-footer-buttons { + display: flex; + flex-flow: row; + justify-content: space-between; +} + +.klaro .cookie-modal .cm-modal .cm-footer .cm-powered-by { + font-size: 0.8em; + padding-top: 4px; + text-align: right; + padding-right: 8px; +} + +.klaro .cookie-modal .cm-modal .cm-footer .cm-powered-by a { + color: #5c5c5c; + color: var(--dark2, #5c5c5c); +} + +.klaro .cookie-modal .cm-modal .cm-header { + border-bottom-width: 1px; + border-bottom-width: var(--border-width, 1px); + border-bottom-style: solid; + border-bottom-style: var(--border-style, solid); + border-bottom-color: #5c5c5c; + border-bottom-color: var(--dark2, #5c5c5c); + padding: 1em; + padding-right: 24px; +} + +.klaro .cookie-modal .cm-modal .cm-header h1 { + margin: 0; + font-size: 2em; + display: block; +} + +.klaro .cookie-modal .cm-modal .cm-header h1.title { + padding-right: 20px; +} + +.klaro .cookie-modal .cm-modal .cm-body { + padding: 1em; +} + +.klaro .cookie-modal .cm-modal .cm-body ul { + display: block; +} + +.klaro .cookie-modal .cm-modal .cm-body span { + display: inline-block; + width: auto; +} + +.klaro .cookie-modal .cm-modal .cm-body ul.cm-services, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes { + padding: 0; + margin: 0; +} + +.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose .cm-services .cm-caret, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose .cm-services .cm-caret { + color: #a0a0a0; + color: var(--light3, #a0a0a0); +} + +.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose .cm-services .cm-content, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose .cm-services .cm-content { + margin-left: -40px; + display: none; +} + +.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose .cm-services .cm-content.expanded, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose .cm-services .cm-content.expanded { + margin-top: 10px; + display: block; +} + +.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-service, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-service, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose { + position: relative; + line-height: 20px; + vertical-align: middle; + padding-left: 60px; + min-height: 40px; +} + +.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-service:first-child, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose:first-child, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-service:first-child, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose:first-child { + margin-top: 0; +} + +.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-service p, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose p, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-service p, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose p { + margin-top: 0; +} + +.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-service p.purposes, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose p.purposes, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-service p.purposes, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose p.purposes { + color: #a0a0a0; + color: var(--light3, #a0a0a0); + font-size: 0.8em; +} + +.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-service.cm-toggle-all, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose.cm-toggle-all, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-service.cm-toggle-all, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose.cm-toggle-all { + border-top-width: 1px; + border-top-width: var(--border-width, 1px); + border-top-style: solid; + border-top-style: var(--border-style, solid); + border-top-color: #5c5c5c; + border-top-color: var(--dark2, #5c5c5c); + padding-top: 1em; +} + +.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-service span.cm-list-title, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose span.cm-list-title, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-service span.cm-list-title, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose span.cm-list-title { + font-weight: 600; +} + +.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-service span.cm-opt-out, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-service span.cm-required, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose span.cm-opt-out, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose span.cm-required, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-service span.cm-opt-out, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-service span.cm-required, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose span.cm-opt-out, +.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose span.cm-required { + color: #5c5c5c; + color: var(--dark2, #5c5c5c); + padding-left: 0.2em; + font-size: 0.8em; +} + +.klaro .cookie-notice:not(.cookie-modal-notice) { + background-color: #333; + background-color: var(--dark1, #333); + z-index: 999; + position: fixed; + width: 100%; + bottom: 0; + right: 0; +} + +@media (min-width: 1024px) { + .klaro .cookie-notice:not(.cookie-modal-notice) { + border-radius: 4px; + border-radius: var(--border-radius, 4px); + position: fixed; + position: var(--notice-position, fixed); + right: 20px; + right: var(--notice-right, 20px); + left: auto; + left: var(--notice-left, auto); + bottom: 20px; + bottom: var(--notice-bottom, 20px); + top: auto; + top: var(--notice-top, auto); + max-width: 400px; + max-width: var(--notice-max-width, 400px); + box-shadow: 0 4px 6px 0 rgba(0, 0, 0, 0.2), 5px 5px 10px 0 rgba(0, 0, 0, 0.19); + } +} + +@media (max-width: 1023px) { + .klaro .cookie-notice:not(.cookie-modal-notice) { + border-style: none; + border-radius: 0; + } +} + +.klaro .cookie-notice:not(.cookie-modal-notice).cn-embedded { + position: relative; + height: inherit; + width: inherit; + left: inherit; + right: inherit; + bottom: inherit; + z-index: 0; +} + +.klaro .cookie-notice:not(.cookie-modal-notice).cn-embedded .cn-body { + padding-top: 0.5em; +} + +.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body { + margin-bottom: 0; + margin-right: 0; + bottom: 0; + padding: 1em; + padding-top: 0; +} + +.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body p { + margin-bottom: 0.5em; +} + +.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body p.cn-changes { + text-decoration: underline; +} + +.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body .cn-learn-more { + display: inline-block; + flex-grow: 1; +} + +.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body .cn-buttons { + display: inline-block; + margin-top: -0.5em; +} + +@media (max-width: 384px) { + .klaro .cookie-notice:not(.cookie-modal-notice) .cn-body .cn-buttons { + width: 100%; + } +} + +.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body .cn-buttons button.cm-btn { + margin-top: 0.5em; +} + +@media (max-width: 384px) { + .klaro .cookie-notice:not(.cookie-modal-notice) .cn-body .cn-buttons button.cm-btn { + width: calc(50% - 0.5em); + } +} + +.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body .cn-ok { + margin-top: -0.5em; + display: flex; + flex-flow: row; + flex-wrap: wrap; + justify-content: right; + align-items: baseline; +} + +.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body .cn-ok a, +.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body .cn-ok div { + margin-top: 0.5em; +} + +.klaro .cookie-modal-notice { + background-color: #333; + background-color: var(--dark1, #333); + color: #fafafa; + color: var(--light1, #fafafa); + z-index: 1001; + box-shadow: 0 4px 6px 0 rgba(0, 0, 0, 0.2), 5px 5px 10px 0 rgba(0, 0, 0, 0.19); + width: 100%; + max-height: 98%; + top: 50%; + -ms-transform: translateY(-50%); + transform: translateY(-50%); + position: fixed; + overflow: auto; + padding: 1em; + padding-top: 0.2em; +} + +@media (min-width: 400px) { + .klaro .cookie-modal-notice { + border-radius: 4px; + border-radius: var(--border-radius, 4px); + position: relative; + margin: 0 auto; + max-width: 400px; + height: auto; + width: auto; + } +} + +.klaro .cookie-modal-notice .cn-ok { + display: flex; + flex-flow: row; + justify-content: space-between; + align-items: center; + margin-top: 1em; +} + +.klaro .cookie-notice-hidden { + display: none !important; +} + diff --git a/Resources/Private/KlaroCss/klaro.min.css b/Resources/Private/KlaroCss/klaro.min.css new file mode 100644 index 0000000..7a663d2 --- /dev/null +++ b/Resources/Private/KlaroCss/klaro.min.css @@ -0,0 +1,4 @@ +.klaro{font-family:inherit;font-family:var(--font-family, inherit);font-size:14px;font-size:var(--font-size, 14px)}.klaro button{font-family:inherit;font-family:var(--font-family, inherit);font-size:14px;font-size:var(--font-size, 14px)}.klaro.cm-as-context-notice{height:100%;padding-bottom:12px;padding-top:12px}.klaro .cookie-modal .cm-switch-container,.klaro .context-notice .cm-switch-container,.klaro .cookie-notice .cm-switch-container{border-bottom-style:solid;border-bottom-style:var(--border-style, solid);border-bottom-width:1px;border-bottom-width:var(--border-width, 1px);border-bottom-color:#c8c8c8;border-bottom-color:var(--light2, #c8c8c8);display:block;position:relative;padding:10px;padding-left:66px;line-height:20px;vertical-align:middle;min-height:40px}.klaro .cookie-modal .cm-switch-container:last-child,.klaro .context-notice .cm-switch-container:last-child,.klaro .cookie-notice .cm-switch-container:last-child{border-bottom:0}.klaro .cookie-modal .cm-switch-container:first-child,.klaro .context-notice .cm-switch-container:first-child,.klaro .cookie-notice .cm-switch-container:first-child{margin-top:0}.klaro .cookie-modal .cm-switch-container p,.klaro .context-notice .cm-switch-container p,.klaro .cookie-notice .cm-switch-container p{margin-top:0}.klaro .cookie-modal .cm-switch,.klaro .context-notice .cm-switch,.klaro .cookie-notice .cm-switch{position:relative;display:inline-block;width:50px;height:30px}.klaro .cookie-modal .cm-list-input:checked+.cm-list-label .slider,.klaro .context-notice .cm-list-input:checked+.cm-list-label .slider,.klaro .cookie-notice .cm-list-input:checked+.cm-list-label .slider{background-color:#1a936f;background-color:var(--green1, #1a936f)}.klaro .cookie-modal .cm-list-input.half-checked:checked+.cm-list-label .slider,.klaro .context-notice .cm-list-input.half-checked:checked+.cm-list-label .slider,.klaro .cookie-notice .cm-list-input.half-checked:checked+.cm-list-label .slider{background-color:#1a936f;background-color:var(--green1, #1a936f);opacity:0.6}.klaro .cookie-modal .cm-list-input.half-checked:checked+.cm-list-label .slider::before,.klaro .context-notice .cm-list-input.half-checked:checked+.cm-list-label .slider::before,.klaro .cookie-notice .cm-list-input.half-checked:checked+.cm-list-label .slider::before{-ms-transform:translateX(10px);transform:translateX(10px)}.klaro .cookie-modal .cm-list-input.only-required+.cm-list-label .slider,.klaro .context-notice .cm-list-input.only-required+.cm-list-label .slider,.klaro .cookie-notice .cm-list-input.only-required+.cm-list-label .slider{background-color:#24cc9a;background-color:var(--green2, #24cc9a);opacity:0.8}.klaro .cookie-modal .cm-list-input.only-required+.cm-list-label .slider::before,.klaro .context-notice .cm-list-input.only-required+.cm-list-label .slider::before,.klaro .cookie-notice .cm-list-input.only-required+.cm-list-label .slider::before{-ms-transform:translateX(10px);transform:translateX(10px)}.klaro .cookie-modal .cm-list-input.required:checked+.cm-list-label .slider,.klaro .context-notice .cm-list-input.required:checked+.cm-list-label .slider,.klaro .cookie-notice .cm-list-input.required:checked+.cm-list-label .slider{background-color:#24cc9a;background-color:var(--green2, #24cc9a);opacity:0.8;cursor:not-allowed}.klaro .cookie-modal .slider,.klaro .context-notice .slider,.klaro .cookie-notice .slider{box-shadow:0 4px 6px 0 rgba(0,0,0,0.2),5px 5px 10px 0 rgba(0,0,0,0.19)}.klaro .cookie-modal .cm-list-input,.klaro .context-notice .cm-list-input,.klaro .cookie-notice .cm-list-input{position:absolute;top:0;left:0;opacity:0;width:50px;height:30px}.klaro .cookie-modal .cm-list-title,.klaro .context-notice .cm-list-title,.klaro .cookie-notice .cm-list-title{font-size:0.9em;font-weight:600}.klaro .cookie-modal .cm-list-description,.klaro .context-notice .cm-list-description,.klaro .cookie-notice .cm-list-description{color:#7c7c7c;color:var(--dark3, #7c7c7c);font-size:0.9em;padding-top:4px}.klaro .cookie-modal .cm-list-label .cm-switch,.klaro .context-notice .cm-list-label .cm-switch,.klaro .cookie-notice .cm-list-label .cm-switch{position:absolute;left:0}.klaro .cookie-modal .cm-list-label .slider,.klaro .context-notice .cm-list-label .slider,.klaro .cookie-notice .cm-list-label .slider{background-color:#f2f2f2;background-color:var(--white2, #f2f2f2);position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;transition:0.4s;width:50px;display:inline-block}.klaro .cookie-modal .cm-list-label .slider::before,.klaro .context-notice .cm-list-label .slider::before,.klaro .cookie-notice .cm-list-label .slider::before{background-color:#e6e6e6;background-color:var(--white3, #e6e6e6);position:absolute;content:'';height:20px;width:20px;left:5px;bottom:5px;transition:0.4s}.klaro .cookie-modal .cm-list-label .slider.round,.klaro .context-notice .cm-list-label .slider.round,.klaro .cookie-notice .cm-list-label .slider.round{border-radius:30px}.klaro .cookie-modal .cm-list-label .slider.round::before,.klaro .context-notice .cm-list-label .slider.round::before,.klaro .cookie-notice .cm-list-label .slider.round::before{border-radius:50%}.klaro .cookie-modal .cm-list-label input:focus+.slider,.klaro .context-notice .cm-list-label input:focus+.slider,.klaro .cookie-notice .cm-list-label input:focus+.slider{box-shadow-color:#48dfb2;box-shadow-color:var(--green3, #48dfb2);box-shadow:0 0 1px var(color, green3)}.klaro .cookie-modal .cm-list-label input:checked+.slider::before,.klaro .context-notice .cm-list-label input:checked+.slider::before,.klaro .cookie-notice .cm-list-label input:checked+.slider::before{-ms-transform:translateX(20px);transform:translateX(20px)}.klaro .cookie-modal .cm-list-input:focus+.cm-list-label .slider,.klaro .context-notice .cm-list-input:focus+.cm-list-label .slider,.klaro .cookie-notice .cm-list-input:focus+.cm-list-label .slider{box-shadow:0 4px 6px 0 rgba(125,125,125,0.2),5px 5px 10px 0 rgba(125,125,125,0.19)}.klaro .cookie-modal .cm-list-input:checked+.cm-list-label .slider::before,.klaro .context-notice .cm-list-input:checked+.cm-list-label .slider::before,.klaro .cookie-notice .cm-list-input:checked+.cm-list-label .slider::before{-ms-transform:translateX(20px);transform:translateX(20px)}.klaro .cookie-modal .slider,.klaro .context-notice .slider,.klaro .cookie-notice .slider{box-shadow:0 4px 6px 0 rgba(0,0,0,0.2),5px 5px 10px 0 rgba(0,0,0,0.19)}.klaro .cookie-modal a,.klaro .context-notice a,.klaro .cookie-notice a{color:#1a936f;color:var(--green1, #1a936f);text-decoration:none}.klaro .cookie-modal p,.klaro .cookie-modal strong,.klaro .cookie-modal h1,.klaro .cookie-modal h2,.klaro .cookie-modal ul,.klaro .cookie-modal li,.klaro .context-notice p,.klaro .context-notice strong,.klaro .context-notice h1,.klaro .context-notice h2,.klaro .context-notice ul,.klaro .context-notice li,.klaro .cookie-notice p,.klaro .cookie-notice strong,.klaro .cookie-notice h1,.klaro .cookie-notice h2,.klaro .cookie-notice ul,.klaro .cookie-notice li{color:#fafafa;color:var(--light1, #fafafa)}.klaro .cookie-modal p,.klaro .cookie-modal h1,.klaro .cookie-modal h2,.klaro .cookie-modal ul,.klaro .cookie-modal li,.klaro .context-notice p,.klaro .context-notice h1,.klaro .context-notice h2,.klaro .context-notice ul,.klaro .context-notice li,.klaro .cookie-notice p,.klaro .cookie-notice h1,.klaro .cookie-notice h2,.klaro .cookie-notice ul,.klaro .cookie-notice li{display:block;text-align:left;margin:0;padding:0;margin-top:0.7em}.klaro .cookie-modal h1,.klaro .cookie-modal h2,.klaro .cookie-modal h3,.klaro .cookie-modal h4,.klaro .cookie-modal h5,.klaro .cookie-modal h6,.klaro .context-notice h1,.klaro .context-notice h2,.klaro .context-notice h3,.klaro .context-notice h4,.klaro .context-notice h5,.klaro .context-notice h6,.klaro .cookie-notice h1,.klaro .cookie-notice h2,.klaro .cookie-notice h3,.klaro .cookie-notice h4,.klaro .cookie-notice h5,.klaro .cookie-notice h6{font-family:inherit;font-family:var(--title-font-family, inherit)}.klaro .cookie-modal .cm-link,.klaro .context-notice .cm-link,.klaro .cookie-notice .cm-link{margin-right:0.5em;vertical-align:middle}.klaro .cookie-modal .cm-btn,.klaro .context-notice .cm-btn,.klaro .cookie-notice .cm-btn{color:#fff;color:var(--button-text-color, #fff);background-color:#5c5c5c;background-color:var(--dark2, #5c5c5c);border-radius:4px;border-radius:var(--border-radius, 4px);padding:6px 10px;margin-right:.5em;border-style:none;padding:0.4em;font-size:1em;cursor:pointer}.klaro .cookie-modal .cm-btn:disabled,.klaro .context-notice .cm-btn:disabled,.klaro .cookie-notice .cm-btn:disabled{opacity:0.5}.klaro .cookie-modal .cm-btn.cm-btn-close,.klaro .context-notice .cm-btn.cm-btn-close,.klaro .cookie-notice .cm-btn.cm-btn-close{background-color:#c8c8c8;background-color:var(--light2, #c8c8c8)}.klaro .cookie-modal .cm-btn.cm-btn-success,.klaro .context-notice .cm-btn.cm-btn-success,.klaro .cookie-notice .cm-btn.cm-btn-success{background-color:#1a936f;background-color:var(--green1, #1a936f)}.klaro .cookie-modal .cm-btn.cm-btn-success-var,.klaro .context-notice .cm-btn.cm-btn-success-var,.klaro .cookie-notice .cm-btn.cm-btn-success-var{background-color:#24cc9a;background-color:var(--green2, #24cc9a)}.klaro .cookie-modal .cm-btn.cm-btn-info,.klaro .context-notice .cm-btn.cm-btn-info,.klaro .cookie-notice .cm-btn.cm-btn-info{background-color:#2581c4;background-color:var(--blue1, #2581c4)}.klaro .context-notice{border-radius:4px;border-radius:var(--border-radius, 4px);border-style:solid;border-style:var(--border-style, solid);border-width:1px;border-width:var(--border-width, 1px);border-color:#c8c8c8;border-color:var(--light2, #c8c8c8);background-color:#fafafa;background-color:var(--light1, #fafafa);display:flex;flex-direction:column;flex-wrap:wrap;align-items:center;justify-content:center;padding:12px;height:100%}.klaro .context-notice.cm-dark{background-color:#333;background-color:var(--dark1, #333);border-color:#5c5c5c;border-color:var(--dark2, #5c5c5c)}.klaro .context-notice.cm-dark p{color:#fafafa;color:var(--light1, #fafafa)}.klaro .context-notice.cm-dark p a{color:#459cdc;color:var(--blue2, #459cdc)}.klaro .context-notice p{color:#333;color:var(--dark1, #333);flex-grow:0;text-align:center;padding-top:0;margin-top:0}.klaro .context-notice p a{color:#24cc9a;color:var(--green2, #24cc9a)}.klaro .context-notice p.cm-buttons{margin-top:12px}.klaro .cookie-modal{width:100%;height:100%;position:fixed;overflow:hidden;left:0;top:0;z-index:1000}.klaro .cookie-modal.cm-embedded{position:relative;height:inherit;width:inherit;left:inherit;right:inherit;z-index:0}.klaro .cookie-modal.cm-embedded .cm-modal.cm-klaro{position:relative;-ms-transform:none;transform:none}.klaro .cookie-modal .cm-bg{background:rgba(0,0,0,0.5);height:100%;width:100%;position:fixed;top:0;left:0}.klaro .cookie-modal .cm-modal.cm-klaro{background-color:#333;background-color:var(--dark1, #333);color:#fafafa;color:var(--light1, #fafafa);z-index:1001;box-shadow:0 4px 6px 0 rgba(0,0,0,0.2),5px 5px 10px 0 rgba(0,0,0,0.19);width:100%;max-height:98%;top:50%;-ms-transform:translateY(-50%);transform:translateY(-50%);position:fixed;overflow:auto}@media (min-width: 660px){.klaro .cookie-modal .cm-modal.cm-klaro{border-radius:4px;border-radius:var(--border-radius, 4px);position:relative;margin:0 auto;max-width:640px;height:auto;width:auto}}.klaro .cookie-modal .cm-modal .hide{border-style:none;background:none;cursor:pointer;position:absolute;top:20px;right:20px;z-index:1}.klaro .cookie-modal .cm-modal .hide svg{stroke:#fafafa;stroke:var(--light1, #fafafa)}.klaro .cookie-modal .cm-modal .cm-footer{border-top-color:#5c5c5c;border-top-color:var(--dark2, #5c5c5c);border-top-width:1px;border-top-width:var(--border-width, 1px);border-top-style:solid;border-top-style:var(--border-style, solid);padding:1em}.klaro .cookie-modal .cm-modal .cm-footer-buttons{display:flex;flex-flow:row;justify-content:space-between}.klaro .cookie-modal .cm-modal .cm-footer .cm-powered-by{font-size:0.8em;padding-top:4px;text-align:right;padding-right:8px}.klaro .cookie-modal .cm-modal .cm-footer .cm-powered-by a{color:#5c5c5c;color:var(--dark2, #5c5c5c)}.klaro .cookie-modal .cm-modal .cm-header{border-bottom-width:1px;border-bottom-width:var(--border-width, 1px);border-bottom-style:solid;border-bottom-style:var(--border-style, solid);border-bottom-color:#5c5c5c;border-bottom-color:var(--dark2, #5c5c5c);padding:1em;padding-right:24px}.klaro .cookie-modal .cm-modal .cm-header h1{margin:0;font-size:2em;display:block}.klaro .cookie-modal .cm-modal .cm-header h1.title{padding-right:20px}.klaro .cookie-modal .cm-modal .cm-body{padding:1em}.klaro .cookie-modal .cm-modal .cm-body ul{display:block}.klaro .cookie-modal .cm-modal .cm-body span{display:inline-block;width:auto}.klaro .cookie-modal .cm-modal .cm-body ul.cm-services,.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes{padding:0;margin:0}.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose .cm-services .cm-caret,.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose .cm-services .cm-caret{color:#a0a0a0;color:var(--light3, #a0a0a0)}.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose .cm-services .cm-content,.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose .cm-services .cm-content{margin-left:-40px;display:none}.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose .cm-services .cm-content.expanded,.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose .cm-services .cm-content.expanded{margin-top:10px;display:block}.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-service,.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose,.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-service,.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose{position:relative;line-height:20px;vertical-align:middle;padding-left:60px;min-height:40px}.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-service:first-child,.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose:first-child,.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-service:first-child,.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose:first-child{margin-top:0}.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-service p,.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose p,.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-service p,.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose p{margin-top:0}.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-service p.purposes,.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose p.purposes,.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-service p.purposes,.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose p.purposes{color:#a0a0a0;color:var(--light3, #a0a0a0);font-size:0.8em}.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-service.cm-toggle-all,.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose.cm-toggle-all,.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-service.cm-toggle-all,.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose.cm-toggle-all{border-top-width:1px;border-top-width:var(--border-width, 1px);border-top-style:solid;border-top-style:var(--border-style, solid);border-top-color:#5c5c5c;border-top-color:var(--dark2, #5c5c5c);padding-top:1em}.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-service span.cm-list-title,.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose span.cm-list-title,.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-service span.cm-list-title,.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose span.cm-list-title{font-weight:600}.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-service span.cm-opt-out,.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-service span.cm-required,.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose span.cm-opt-out,.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose span.cm-required,.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-service span.cm-opt-out,.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-service span.cm-required,.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose span.cm-opt-out,.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose span.cm-required{color:#5c5c5c;color:var(--dark2, #5c5c5c);padding-left:0.2em;font-size:0.8em}.klaro .cookie-notice:not(.cookie-modal-notice){background-color:#333;background-color:var(--dark1, #333);z-index:999;position:fixed;width:100%;bottom:0;right:0}@media (min-width: 1024px){.klaro .cookie-notice:not(.cookie-modal-notice){border-radius:4px;border-radius:var(--border-radius, 4px);position:fixed;position:var(--notice-position, fixed);right:20px;right:var(--notice-right, 20px);left:auto;left:var(--notice-left, auto);bottom:20px;bottom:var(--notice-bottom, 20px);top:auto;top:var(--notice-top, auto);max-width:400px;max-width:var(--notice-max-width, 400px);box-shadow:0 4px 6px 0 rgba(0,0,0,0.2),5px 5px 10px 0 rgba(0,0,0,0.19)}}@media (max-width: 1023px){.klaro .cookie-notice:not(.cookie-modal-notice){border-style:none;border-radius:0}}.klaro .cookie-notice:not(.cookie-modal-notice).cn-embedded{position:relative;height:inherit;width:inherit;left:inherit;right:inherit;bottom:inherit;z-index:0}.klaro .cookie-notice:not(.cookie-modal-notice).cn-embedded .cn-body{padding-top:0.5em}.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body{margin-bottom:0;margin-right:0;bottom:0;padding:1em;padding-top:0}.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body p{margin-bottom:0.5em}.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body p.cn-changes{text-decoration:underline}.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body .cn-learn-more{display:inline-block;flex-grow:1}.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body .cn-buttons{display:inline-block;margin-top:-0.5em}@media (max-width: 384px){.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body .cn-buttons{width:100%}}.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body .cn-buttons button.cm-btn{margin-top:0.5em}@media (max-width: 384px){.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body .cn-buttons button.cm-btn{width:calc(50% - .5em)}}.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body .cn-ok{margin-top:-0.5em;display:flex;flex-flow:row;flex-wrap:wrap;justify-content:right;align-items:baseline}.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body .cn-ok a,.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body .cn-ok div{margin-top:0.5em}.klaro .cookie-modal-notice{background-color:#333;background-color:var(--dark1, #333);color:#fafafa;color:var(--light1, #fafafa);z-index:1001;box-shadow:0 4px 6px 0 rgba(0,0,0,0.2),5px 5px 10px 0 rgba(0,0,0,0.19);width:100%;max-height:98%;top:50%;-ms-transform:translateY(-50%);transform:translateY(-50%);position:fixed;overflow:auto;padding:1em;padding-top:0.2em}@media (min-width: 400px){.klaro .cookie-modal-notice{border-radius:4px;border-radius:var(--border-radius, 4px);position:relative;margin:0 auto;max-width:400px;height:auto;width:auto}}.klaro .cookie-modal-notice .cn-ok{display:flex;flex-flow:row;justify-content:space-between;align-items:center;margin-top:1em}.klaro .cookie-notice-hidden{display:none !important} + +.klaro-ide .cm-switch-container{border-bottom-style:solid;border-bottom-style:var(--border-style, solid);border-bottom-width:1px;border-bottom-width:var(--border-width, 1px);border-bottom-color:#c8c8c8;border-bottom-color:var(--light2, #c8c8c8);display:block;position:relative;padding:10px;padding-left:66px;line-height:20px;vertical-align:middle;min-height:40px}.klaro-ide .cm-switch-container:last-child{border-bottom:0}.klaro-ide .cm-switch-container:first-child{margin-top:0}.klaro-ide .cm-switch-container p{margin-top:0}.klaro-ide .cm-switch{position:relative;display:inline-block;width:50px;height:30px}.klaro-ide .cm-list-input:checked+.cm-list-label .slider{background-color:#1a936f;background-color:var(--green1, #1a936f)}.klaro-ide .cm-list-input.half-checked:checked+.cm-list-label .slider{background-color:#1a936f;background-color:var(--green1, #1a936f);opacity:0.6}.klaro-ide .cm-list-input.half-checked:checked+.cm-list-label .slider::before{-ms-transform:translateX(10px);transform:translateX(10px)}.klaro-ide .cm-list-input.only-required+.cm-list-label .slider{background-color:#24cc9a;background-color:var(--green2, #24cc9a);opacity:0.8}.klaro-ide .cm-list-input.only-required+.cm-list-label .slider::before{-ms-transform:translateX(10px);transform:translateX(10px)}.klaro-ide .cm-list-input.required:checked+.cm-list-label .slider{background-color:#24cc9a;background-color:var(--green2, #24cc9a);opacity:0.8;cursor:not-allowed}.klaro-ide .slider{box-shadow:0 4px 6px 0 rgba(0,0,0,0.2),5px 5px 10px 0 rgba(0,0,0,0.19)}.klaro-ide .cm-list-input{position:absolute;top:0;left:0;opacity:0;width:50px;height:30px}.klaro-ide .cm-list-title{font-size:0.9em;font-weight:600}.klaro-ide .cm-list-description{color:#7c7c7c;color:var(--dark3, #7c7c7c);font-size:0.9em;padding-top:4px}.klaro-ide .cm-list-label .cm-switch{position:absolute;left:0}.klaro-ide .cm-list-label .slider{background-color:#f2f2f2;background-color:var(--white2, #f2f2f2);position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;transition:0.4s;width:50px;display:inline-block}.klaro-ide .cm-list-label .slider::before{background-color:#e6e6e6;background-color:var(--white3, #e6e6e6);position:absolute;content:'';height:20px;width:20px;left:5px;bottom:5px;transition:0.4s}.klaro-ide .cm-list-label .slider.round{border-radius:30px}.klaro-ide .cm-list-label .slider.round::before{border-radius:50%}.klaro-ide .cm-list-label input:focus+.slider{box-shadow-color:#48dfb2;box-shadow-color:var(--green3, #48dfb2);box-shadow:0 0 1px var(color, green3)}.klaro-ide .cm-list-label input:checked+.slider::before{-ms-transform:translateX(20px);transform:translateX(20px)}.klaro-ide .cm-list-input:focus+.cm-list-label .slider{box-shadow:0 4px 6px 0 rgba(125,125,125,0.2),5px 5px 10px 0 rgba(125,125,125,0.19)}.klaro-ide .cm-list-input:checked+.cm-list-label .slider::before{-ms-transform:translateX(20px);transform:translateX(20px)}.klaro-ide .cm-language-select,.klaro-ide .cm-theme-select,.klaro-ide .cm-purpose-select{border-radius:4px;border-radius:var(--border-radius, 4px);background-color:#fff;background-color:var(--white1, #fff);border-style:solid;border-style:var(--border-style, solid);border-width:1px;border-width:var(--border-width, 1px);border-color:#c8c8c8;border-color:var(--light2, #c8c8c8);box-shadow:0 2px 5px 0 rgba(0,0,0,0.11);padding:12px;margin-bottom:12px}.klaro-ide .cm-language-select ul.cm-languages,.klaro-ide .cm-language-select ul.cm-themes,.klaro-ide .cm-language-select ul.cm-purposes,.klaro-ide .cm-theme-select ul.cm-languages,.klaro-ide .cm-theme-select ul.cm-themes,.klaro-ide .cm-theme-select ul.cm-purposes,.klaro-ide .cm-purpose-select ul.cm-languages,.klaro-ide .cm-purpose-select ul.cm-themes,.klaro-ide .cm-purpose-select ul.cm-purposes{margin-top:-4px}.klaro-ide .cm-language-select ul.cm-languages li,.klaro-ide .cm-language-select ul.cm-themes li,.klaro-ide .cm-language-select ul.cm-purposes li,.klaro-ide .cm-theme-select ul.cm-languages li,.klaro-ide .cm-theme-select ul.cm-themes li,.klaro-ide .cm-theme-select ul.cm-purposes li,.klaro-ide .cm-purpose-select ul.cm-languages li,.klaro-ide .cm-purpose-select ul.cm-themes li,.klaro-ide .cm-purpose-select ul.cm-purposes li{color:#fafafa;color:var(--light1, #fafafa);border-radius:4px;border-radius:var(--border-radius, 4px);border-width:1px;border-width:var(--border-width, 1px);border-style:solid;border-style:var(--border-style, solid);border-color:#24cc9a;border-color:var(--green2, #24cc9a);background-color:#1a936f;background-color:var(--green1, #1a936f);display:inline-block;margin-right:4px;margin-top:4px;padding:2px 4px;font-size:0.9em}.klaro-ide .cm-language-select ul.cm-languages li a,.klaro-ide .cm-language-select ul.cm-themes li a,.klaro-ide .cm-language-select ul.cm-purposes li a,.klaro-ide .cm-theme-select ul.cm-languages li a,.klaro-ide .cm-theme-select ul.cm-themes li a,.klaro-ide .cm-theme-select ul.cm-purposes li a,.klaro-ide .cm-purpose-select ul.cm-languages li a,.klaro-ide .cm-purpose-select ul.cm-themes li a,.klaro-ide .cm-purpose-select ul.cm-purposes li a{color:#fff;color:var(--white1, #fff)}.klaro-ide .cm-search-select{margin-top:12px;margin-bottom:12px;display:flex}.klaro-ide .cm-search-select input:not(:focus) ~ .cm-candidates{display:none}.klaro-ide .cm-search-select .cm-candidates:hover{display:block !important}.klaro-ide .cm-search-select .cm-candidates{background-color:#fff;background-color:var(--white1, #fff);border-radius:4px;border-radius:var(--border-radius, 4px);border-width:1px;border-width:var(--border-width, 1px);border-style:solid;border-style:var(--border-style, solid);border-color:#f2f2f2;border-color:var(--white2, #f2f2f2);position:absolute;top:55px;left:0;z-index:10;margin-bottom:10px;width:100%}.klaro-ide .cm-search-select .cm-candidates .cm-candidate{border-bottom-width:1px;border-bottom-width:var(--border-width, 1px);border-bottom-style:solid;border-bottom-style:var(--border-style, solid);border-bottom-color:#7c7c7c;border-bottom-color:var(--dark3, #7c7c7c);padding:12px;cursor:pointer}.klaro-ide .cm-search-select .cm-candidates .cm-candidate p{color:#5c5c5c;color:var(--dark2, #5c5c5c);font-size:0.9em}.klaro-ide .cm-search-select .cm-candidates .cm-candidate:last-child{border-bottom-style:none}.klaro-ide .cm-obj-selector{position:relative;display:inline-block;margin-bottom:10px;margin-right:20px;width:100%;height:40px;overflow:visible}@media (min-width: 768px){.klaro-ide .cm-obj-selector{width:300px}}.klaro-ide .cm-obj-selector span.cm-obj-selector-more{display:block;position:absolute;right:0.5em;padding-top:0.6em;padding-right:0.3em;z-index:2;pointer-events:none;-ms-transform:scaleY(0.6) scaleX(0.8);transform:scaleY(0.6) scaleX(0.8);font-weight:800}.klaro-ide .cm-obj-selector ul{background-color:#fff;background-color:var(--white1, #fff);top:0;left:0;z-index:1;margin:0;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap}.klaro-ide .cm-obj-selector ul li{background-color:#fff;background-color:var(--white1, #fff);border-bottom-style:solid;border-bottom-style:var(--border-style, solid);border-bottom-width:1px;border-bottom-width:var(--border-width, 1px);border-bottom-color:#f2f2f2;border-bottom-color:var(--white2, #f2f2f2);box-shadow:0 2px 5px 0 rgba(0,0,0,0.33);margin:0;width:auto;display:none;width:100%;order:2}.klaro-ide .cm-obj-selector ul li:last-child{border-bottom-style:none}.klaro-ide .cm-obj-selector ul li.cm-obj-is-active{background-color:#c8c8c8;background-color:var(--light2, #c8c8c8);display:flex;order:1}.klaro-ide .cm-obj-selector ul li a.cm-obj-item{width:100%;padding:8px;padding-right:40px}.klaro-ide .cm-obj-selector ul li.cm-obj-add{padding:8px;display:none;justify-content:space-between;order:3}.klaro-ide .cm-obj-selector ul li.cm-obj-add input{color:#333;color:var(--dark1, #333);border-color:#5c5c5c;border-color:var(--dark2, #5c5c5c);border-radius:4px;border-radius:var(--border-radius, 4px);border-style:solid;border-style:var(--border-style, solid);border-width:1px;border-width:var(--border-width, 1px);flex-grow:1;flex-shrink:1;padding:4px;font-size:0.9em}.klaro-ide .cm-obj-selector ul li.cm-obj-add a.cm-btn{color:#fff;color:var(--white1, #fff);border-radius:4px;border-radius:var(--border-radius, 4px);background-color:#7c7c7c;background-color:var(--dark3, #7c7c7c);padding:8px;flex-grow:0;flex-shrink:0;margin-left:10px;width:auto;display:inline-block}.klaro-ide .cm-obj-selector ul:not(.cm-is-active) li.cm-obj-is-active{background-color:#fff;background-color:var(--white1, #fff)}.klaro-ide .cm-obj-selector ul.cm-is-active{z-index:4}.klaro-ide .cm-obj-selector ul.cm-is-active li{display:flex}.klaro-ide .cm-switch{padding:12px}.klaro-ide p.cm-description{color:#5c5c5c;color:var(--dark2, #5c5c5c);font-size:0.9em;padding-top:2px;margin-bottom:4px}.klaro-ide .cm-select{margin-top:16px}.klaro-ide .cm-select select{background-color:#fff;background-color:var(--white1, #fff);color:#5c5c5c;color:var(--dark2, #5c5c5c);border-radius:4px;border-radius:var(--border-radius, 4px);border-style:solid;border-style:var(--border-style, solid);border-color:#f2f2f2;border-color:var(--white2, #f2f2f2);display:block;width:100%;padding:12px 5px;font-size:0.9em;text-indent:5px}.klaro-ide .cm-select select[disabled]{background-color:#c8c8c8;background-color:var(--light2, #c8c8c8)}.klaro-ide .cm-retracting-label-input{display:inline-block;position:relative;width:100%;padding:10px 0 6px;margin-top:4px}.klaro-ide .cm-retracting-label-input>.cm-label{background-color:#fff;background-color:var(--white1, #fff);border-radius:4px;border-radius:var(--border-radius, 4px);border-style:solid;border-style:var(--border-style, solid);border-width:1px;border-width:var(--border-width, 1px);border-color:#c8c8c8;border-color:var(--light2, #c8c8c8);position:absolute;top:16px;left:8px;white-space:nowrap;text-overflow:ellipsis;max-width:calc(100% - (2 * 8px));overflow:hidden;pointer-events:none;transition:transform 150ms cubic-bezier(0.47, 0, 0.74, 0.71),opacity 150ms cubic-bezier(0.47, 0, 0.74, 0.71),color 150ms cubic-bezier(0.47, 0, 0.74, 0.71);padding:0 8px;-ms-transform:scale(0.75) translateX(-16%) translateY(-26px);transform:scale(0.75) translateX(-16%) translateY(-26px)}.klaro-ide .cm-input{border-radius:4px;border-radius:var(--border-radius, 4px);background-color:#fafafa;background-color:var(--light1, #fafafa);border-style:solid;border-style:var(--border-style, solid);border-width:1px;border-width:var(--border-width, 1px);border-color:#1a936f;border-color:var(--green1, #1a936f);font-size:0.9em;box-sizing:border-box;padding:12px 18px;width:100%}.klaro-ide .cm-input[disabled]{background-color:#c8c8c8;background-color:var(--light2, #c8c8c8)}@media (min-width: 768px){.klaro-ide .cm-tabs span.cm-more{display:none}}.klaro-ide .cm-tabs{position:relative;display:flex;align-items:stretch;justify-content:space-between;white-space:nowrap}@media (min-width: 768px){.klaro-ide .cm-tabs span.cm-tabs-more{display:none}}@media (max-width: 768px){.klaro-ide .cm-tabs{border-radius:4px;border-radius:var(--border-radius, 4px);border-radius:4px;border-radius:var(--border-radius, 4px);background-color:#fff;background-color:var(--white1, #fff);box-shadow:0 2px 5px 0 rgba(0,0,0,0.33)}.klaro-ide .cm-tabs span.cm-tabs-more{display:block;position:absolute;right:0.5em;padding-top:0.6em;padding-right:0.3em;-ms-transform:scaleY(0.6) scaleX(0.8);transform:scaleY(0.6) scaleX(0.8);font-weight:800}.klaro-ide .cm-tabs ul{flex-wrap:wrap}.klaro-ide .cm-tabs ul li{display:block;position:relative;width:100%;text-align:left}.klaro-ide .cm-tabs ul li a{justify-content:left;border-bottom:0 !important}.klaro-ide .cm-tabs:not(.cm-tabs-active) ul li:not(.cm-tab-is-active){display:none}.klaro-ide .cm-tabs.cm-tabs-active ul li{order:2;display:block}.klaro-ide .cm-tabs.cm-tabs-active ul li.cm-tab-is-active{background-color:#c8c8c8;background-color:var(--light2, #c8c8c8);order:1}}.klaro-ide .cm-tabs:not(:last-child){margin-bottom:1.5rem}.klaro-ide .cm-tabs ul{border-bottom-style:solid;border-bottom-style:var(--border-style, solid);border-bottom-width:1px;border-bottom-width:var(--border-width, 1px);border-bottom-color:#c8c8c8;border-bottom-color:var(--light2, #c8c8c8);align-items:center;display:flex;width:100%;flex-grow:1;flex-shrink:0;justify-content:flex-start;margin:0;padding:0}.klaro-ide .cm-tabs ul li{display:block}.klaro-ide .cm-tabs ul li a{border-bottom-style:solid;border-bottom-style:var(--border-style, solid);border-bottom-width:1px;border-bottom-width:var(--border-width, 1px);border-bottom-color:#c8c8c8;border-bottom-color:var(--light2, #c8c8c8);color:#5c5c5c;color:var(--dark2, #5c5c5c);display:flex;align-items:flex-start;justify-content:left;margin-bottom:-1px;padding:0.5em 1em}.klaro-ide .cm-tabs ul li.cm-tab-is-active a{color:#2581c4;color:var(--blue1, #2581c4);border-bottom-color:#2581c4;border-bottom-color:var(--blue1, #2581c4)}@media (max-width: 767px){.klaro-ide .cm-tabs.tabs-active{position:relative;min-height:40px;overflow:visible;z-index:10}.klaro-ide .cm-tabs.tabs-active ul{background-color:#fff;background-color:var(--white1, #fff);display:flex;flex-direction:column;flex-wrap:wrap;position:absolute;width:100%;height:auto;box-shadow:0 2px 5px 0 rgba(0,0,0,0.33)}.klaro-ide .cm-tabs.tabs-active ul li{margin:0 !important}.klaro-ide .cm-tabs.tabs-active ul li:not(.cm-tab-is-active){order:2;display:block}.klaro-ide .cm-tabs.tabs-active ul li.cm-tab-is-active{background-color:#fafafa;background-color:var(--light1, #fafafa);order:1;display:block}}.klaro-ide .cm-list .cm-item{display:flex;flex-direction:row;align-items:center;padding:8px;display:flex;flex-direction:row;align-items:top;justify-items:flex-end}@media (min-width: 768px){.klaro-ide .cm-list .cm-item span.cm-is-action{display:none}.klaro-ide .cm-list .cm-item:hover span.cm-is-action{display:inline-block}}.klaro-ide .cm-list .cm-item:last-child{border-bottom:0}.klaro-ide .cm-list .cm-item:nth-child(2n){background-color:#fafafa;background-color:var(--light1, #fafafa)}.klaro-ide .cm-list .cm-item.cm-is-header{font-weight:600;margin-bottom:4px;background:none}.klaro-ide .cm-list .cm-item.cm-is-card{background-color:#fff;background-color:var(--white1, #fff);border-radius:4px;border-radius:var(--border-radius, 4px);box-shadow:0 2px 5px 0 rgba(0,0,0,0.33);margin-bottom:24px}.klaro-ide .cm-list .cm-item.cm-is-clickable{cursor:pointer}.klaro-ide .cm-list .cm-item.cm-is-expandable{cursor:pointer}.klaro-ide .cm-list .cm-item form{margin:0}.klaro-ide .cm-list .cm-item form label.label{font-weight:300}.klaro-ide .cm-list .cm-item span.cm-is-action{position:absolute;right:1rem;top:1rem}.klaro-ide .cm-list .cm-item .cm-col{align-content:center;flex-basis:0;margin:8px;flex-grow:1}.klaro-ide .cm-list .cm-item .cm-col.cm-is-xs{flex-grow:1}.klaro-ide .cm-list .cm-item .cm-col.cm-is-sm{flex-grow:2}.klaro-ide .cm-list .cm-item .cm-col.cm-is-md{flex-grow:5}.klaro-ide .cm-list .cm-item .cm-col.cm-is-lg{flex-grow:10}.klaro-ide .cm-list .cm-item .cm-col.cm-is-xl{flex-grow:20}.klaro-ide .cm-list .cm-item .cm-col.cm-is-icon{flex-basis:50px;text-align:right;flex-grow:0}.klaro-ide .cm-list .cm-item .cm-content{flex:10}.klaro-ide .cm-dropdown{position:relative}.klaro-ide .cm-dropdown>button{display:inline-flex;vertical-align:middle;align-items:center;justify-content:center;width:2em;height:2em;font-size:1em;border:0;background-color:transparent}.klaro-ide .cm-dropdown>button:focus,.klaro-ide .cm-dropdown>button:hover{background-color:#fafafa;background-color:var(--light1, #fafafa);border-radius:25px}.klaro-ide .cm-dropdown>.cm-dropdowncontent{background-color:#fff;background-color:var(--white1, #fff);display:none;box-shadow:0 2px 5px 0 rgba(0,0,0,0.33);width:auto}.klaro-ide .cm-dropdown>.cm-dropdowncontent.cm-dropdownexpanded{border-radius:4px;border-radius:var(--border-radius, 4px);display:block;position:absolute;top:35px;z-index:100;left:0}.klaro-ide .cm-dropdown>.cm-dropdowncontent ul.cm-dropdownmenu{border-radius:4px;border-radius:var(--border-radius, 4px);border-style:solid;border-style:var(--border-style, solid);border-width:1px;border-width:var(--border-width, 1px);border-color:#5c5c5c;border-color:var(--dark2, #5c5c5c);list-style:none;text-align:left;max-width:300px;min-width:200px;padding-top:0.25rem;padding-bottom:0.25rem}.klaro-ide .cm-dropdown>.cm-dropdowncontent ul.cm-dropdownmenu li{height:auto}.klaro-ide .cm-dropdown>.cm-dropdowncontent ul.cm-dropdownmenu li a{display:block;padding:8px;padding-left:16px}.klaro-ide .cm-dropdown>.cm-dropdowncontent ul.cm-dropdownmenu li a span{display:inline-flex;align-items:center}.klaro-ide .cm-dropdown>.cm-dropdowncontent ul.cm-dropdownmenu li a .icon{margin-right:0.45em}.klaro-ide .cm-dropdown>.cm-dropdowncontent ul.cm-dropdownmenu li a:hover{background-color:#2581c4;background-color:var(--blue1, #2581c4);color:#fff;color:var(--white1, #fff)}.klaro-ide .cm-dropdown.is-right .cm-dropdowncontent.cm-dropdownexpanded{right:0;left:auto}.klaro-ide label{display:inline-block}.klaro-ide .cm-global-fields,.klaro-ide .cm-config-controls,.klaro-ide .cm-translations-fields,.klaro-ide .cm-service-fields{max-width:600px}.klaro-ide .cm-json .cm-file-import{display:none}.klaro-ide .cm-json .cm-upload-label{cursor:pointer}.klaro-ide .cm-json .cm-upload-label button{pointer-events:none}.klaro-ide .cm-json pre code{white-space:pre-wrap}.klaro-ide .cm-message{padding:12px}.klaro-ide .cm-message.cm-error,.klaro-ide .cm-message.cm-success{border-radius:4px;border-radius:var(--border-radius, 4px);color:#fff;color:var(--white1, #fff);box-shadow:0 2px 5px 0 rgba(0,0,0,0.11);margin-bottom:24px}.klaro-ide .cm-message.cm-error{background-color:#e15669;background-color:var(--red2, #e15669)}.klaro-ide .cm-message.cm-success{background:#24cc9a;background:var(--green2, #24cc9a)}.klaro-ide .cm-space-sm{margin-bottom:8px !important}.klaro-ide .cm-space-md{margin-bottom:12px !important}.klaro-ide .cm-space-lg{margin-bottom:24px !important}.klaro-ide .cm-json h1,.klaro-ide .cm-json h2,.klaro-ide .cm-json h3,.klaro-ide .cm-json h4,.klaro-ide .cm-global-fields h1,.klaro-ide .cm-global-fields h2,.klaro-ide .cm-global-fields h3,.klaro-ide .cm-global-fields h4,.klaro-ide .cm-config-controls h1,.klaro-ide .cm-config-controls h2,.klaro-ide .cm-config-controls h3,.klaro-ide .cm-config-controls h4,.klaro-ide .cm-translations-fields h1,.klaro-ide .cm-translations-fields h2,.klaro-ide .cm-translations-fields h3,.klaro-ide .cm-translations-fields h4,.klaro-ide .cm-service-fields h1,.klaro-ide .cm-service-fields h2,.klaro-ide .cm-service-fields h3,.klaro-ide .cm-service-fields h4{font-size:2em;text-transform:uppercase;margin-top:10px;margin-bottom:10px;font-weight:600}.klaro-ide .cm-json h1,.klaro-ide .cm-global-fields h1,.klaro-ide .cm-config-controls h1,.klaro-ide .cm-translations-fields h1,.klaro-ide .cm-service-fields h1{border-style:solid;border-style:var(--border-style, solid);border-width:1px;border-width:var(--border-width, 1px);border-color:#c8c8c8;border-color:var(--light2, #c8c8c8);text-transform:none;margin-bottom:20px;display:inline-block}.klaro-ide .cm-json h2,.klaro-ide .cm-global-fields h2,.klaro-ide .cm-config-controls h2,.klaro-ide .cm-translations-fields h2,.klaro-ide .cm-service-fields h2{font-size:1.6em}.klaro-ide .cm-json h3,.klaro-ide .cm-global-fields h3,.klaro-ide .cm-config-controls h3,.klaro-ide .cm-translations-fields h3,.klaro-ide .cm-service-fields h3{font-size:1.3em}.klaro-ide .cm-json h4,.klaro-ide .cm-global-fields h4,.klaro-ide .cm-config-controls h4,.klaro-ide .cm-translations-fields h4,.klaro-ide .cm-service-fields h4{font-size:1em;font-weight:600}.klaro-ide p.cm-section-description{color:#5c5c5c;color:var(--dark2, #5c5c5c);text-align:justify;margin-top:8px;margin-bottom:24px}.klaro-ide .cm-purpose-order ul{margin-top:12px;margin-bottom:12px}.klaro-ide .cm-purpose-order ul li{display:flex}.klaro-ide .cm-purpose-order ul li span.cm-buttons{border-radius:4px;border-radius:var(--border-radius, 4px);flex-grow:0;box-shadow:0 2px 5px 0 rgba(0,0,0,0.11)}.klaro-ide .cm-purpose-order ul li span.cm-buttons a{padding:12px;display:inline-block}.klaro-ide .cm-purpose-order ul li span.cm-buttons a:hover{background:#1a936f;background:var(--green1, #1a936f)}.klaro-ide .cm-purpose-order ul li span.cm-value{flex-grow:1;padding:12px}.klaro-ide .cm-translations-fields .cm-translations-for-key{border-radius:4px;border-radius:var(--border-radius, 4px);background-color:#fff;background-color:var(--white1, #fff);box-shadow:0 2px 5px 0 rgba(0,0,0,0.11);padding:12px;margin-bottom:24px}.klaro-ide .cm-translations-fields .cm-translations-for-key li{display:flex;justify-content:space-between;align-items:flex-start}.klaro-ide .cm-translations-fields .cm-translations-for-key li span.cm-lang{font-family:Courier;display:block;padding:20px;margin-top:5px;flex-grow:0}.klaro-ide .cm-service-list .cm-status,.klaro-ide .cm-config-list .cm-status{text-align:left}.klaro-ide .cm-service-list .cm-status span,.klaro-ide .cm-config-list .cm-status span{padding-left:10px}.klaro-ide .cm-service-list .cm-status .cm-status-is-active,.klaro-ide .cm-config-list .cm-status .cm-status-is-active{color:#1a936f;color:var(--green1, #1a936f)}.klaro-ide .cm-service-list .cm-status .cm-status-is-inactive,.klaro-ide .cm-config-list .cm-status .cm-status-is-inactive{color:#da2c43;color:var(--red1, #da2c43)}.klaro-ide .cm-service-list .cm-name,.klaro-ide .cm-config-list .cm-name{text-transform:uppercase;font-weight:600}.klaro-ide p.cm-no-cookies,.klaro-ide p.cm-no-services{margin-top:6px;margin-bottom:6px;font-weight:600}.klaro-ide .cm-cookie-config .cm-cookie-forms .cm-cookie-form{border-bottom-style:solid;border-bottom-style:var(--border-style, solid);border-bottom-width:1px;border-bottom-width:var(--border-width, 1px);border-bottom-color:#c8c8c8;border-bottom-color:var(--light2, #c8c8c8)}.klaro-ide .cm-demo .cm-config-controls .cm-retracting-label-input{width:auto;flex-grow:1;margin-right:12px}.klaro-ide .cm-demo .cm-config-controls:first-child{border-bottom-style:solid;border-bottom-style:var(--border-style, solid);border-bottom-width:1px;border-bottom-width:var(--border-width, 1px);border-bottom-color:#c8c8c8;border-bottom-color:var(--light2, #c8c8c8)}.klaro-ide .cm-config-controls{margin-top:8px;margin-bottom:24px;max-width:none;display:flex;flex-wrap:wrap;width:100%;align-items:baseline;justify-content:space-between}.klaro-ide .cm-config-controls h2{margin-right:24px;display:block;flex-grow:1}.klaro-ide .cm-config-controls .cm-control{flex-shrink:1;display:inline-block;margin-bottom:20px}.klaro-ide .cm-config-controls .cm-control .cm-retracting-label-input{max-width:400px;display:block}.klaro-ide .cm-config-controls .cm-control input{max-width:400px}.klaro-ide .cm-config-controls .cm-control select{border-color:#1a936f;border-color:var(--green1, #1a936f);border-radius:4px;border-radius:var(--border-radius, 4px);border-style:solid;border-style:var(--border-style, solid);border-radius:4px;border-radius:var(--border-radius, 4px);background-color:#fff;background-color:var(--white1, #fff);padding:12px;margin-bottom:12px;display:block}.klaro-ide .cm-config-controls .cm-control-button{border-radius:4px;border-radius:var(--border-radius, 4px);background-color:#459cdc;background-color:var(--blue2, #459cdc);color:#fff;color:var(--white1, #fff);border-style:none;padding:12px;margin-top:4px;cursor:pointer;box-shadow:0 2px 5px 0 rgba(0,0,0,0.33);margin-right:6px}.klaro-ide .cm-config-controls .cm-control-button.cm-delete{background-color:#e77887;background-color:var(--red3, #e77887);float:right}.klaro-ide .cm-config-controls .cm-control-button.cm-secondary{background-color:#e15669;background-color:var(--red2, #e15669)}.klaro-ide .cm-config-controls .cm-control-button.cm-success{background-color:#1a936f;background-color:var(--green1, #1a936f)}.klaro-ide .cm-config-controls .cm-control-button:disabled{background-color:#fafafa;background-color:var(--light1, #fafafa);color:#333;color:var(--dark1, #333);cursor:not-allowed}.klaro-ide .cookie-modal .cm-modal.cm-ide{background-color:#333;background-color:var(--dark1, #333);color:#fafafa;color:var(--light1, #fafafa);z-index:1001;box-shadow:0 4px 6px 0 rgba(0,0,0,0.2),5px 5px 10px 0 rgba(0,0,0,0.19);width:100%;max-height:98%;top:50%;-ms-transform:translateY(-50%);transform:translateY(-50%);position:fixed;overflow:auto}@media (min-width: 1020px){.klaro-ide .cookie-modal .cm-modal.cm-ide{border-radius:4px;border-radius:var(--border-radius, 4px);position:relative;margin:0 auto;max-width:1000px;height:auto;width:auto}} + diff --git a/Resources/Private/KlaroTranslations/build/build.js b/Resources/Private/KlaroTranslations/build.js similarity index 92% rename from Resources/Private/KlaroTranslations/build/build.js rename to Resources/Private/KlaroTranslations/build.js index 4f2d8c6..a3c700f 100644 --- a/Resources/Private/KlaroTranslations/build/build.js +++ b/Resources/Private/KlaroTranslations/build.js @@ -4,18 +4,21 @@ const Handlebars = require("handlebars"); const yaml = require("js-yaml"); const templateDir = __dirname; -const klaroTranslationsDir = path.join(__dirname, "../"); +const klaroTranslationsDir = path.join( + __dirname, + "../../../node_modules/klaro/src/translations" +); const fusionTranslationFile = path.join( __dirname, - "../../Fusion", + "../../Private/Fusion", "Config.Translations.fusion" ); const settingsYamlTranslationFile = path.join( __dirname, - "../../../../Configuration", + "../../../Configuration", "Settings.Translations.yaml" ); -const xlfTranslationsDir = path.join(__dirname, "../../Translations"); +const xlfTranslationsDir = path.join(__dirname, "../../Private/Translations"); const xlfName = "Klaro"; ``; const autoGeneratedNotice = ` @@ -38,7 +41,7 @@ const xlfTemplate = Handlebars.compile( }) ); -const enJson = yaml.safeLoad( +const enJson = yaml.load( fs.readFileSync(path.join(klaroTranslationsDir, "en.yml"), { encoding: "utf-8", }) @@ -50,7 +53,7 @@ fs.readdir(klaroTranslationsDir, function (err, files) { .filter((file) => file.indexOf(".yml") >= 0) .forEach((file) => { const language = file.replace(".yml", ""); - const json = yaml.safeLoad( + const json = yaml.load( fs.readFileSync(path.join(klaroTranslationsDir, file), "utf8") ); const flattened = flattenJson(json); @@ -65,7 +68,7 @@ fs.readdir(klaroTranslationsDir, function (err, files) { flag: "w", }); - const settingsYaml = yaml.safeDump({ + const settingsYaml = yaml.dump({ Sandstorm: { CookiePunch: { translations: jsonToYamlWithPath( diff --git a/Resources/Private/KlaroTranslations/ca.yml b/Resources/Private/KlaroTranslations/ca.yml deleted file mode 100644 index 801b447..0000000 --- a/Resources/Private/KlaroTranslations/ca.yml +++ /dev/null @@ -1,34 +0,0 @@ -consentModal: - title: Informació que recopilem - description: > - Aquí podeu veure i personalitzar la informació que recopilem sobre vós. - privacyPolicy: - name: política de privadesa - text: > - Per a més informació, consulteu la nostra {privacyPolicy}. -consentNotice: - changeDescription: Hi ha hagut canvis des de la vostra darrera visita. Actualitzeu el vostre consentiment. - description: > - Recopilem i processem la vostra informació personal amb les següents finalitats: {purposes}. - learnMore: Saber-ne més - privacyPolicy: - name: política de privadesa - imprint: - name: Empremta -ok: Accepta -save: Desa -decline: Rebutja -close: Tanca -app: - disableAll: - title: Habilita/deshabilita totes les aplicacions - description: Useu aquest botó per a habilitar o deshabilitar totes les aplicacions. - optOut: - title: (opt-out) - description: Aquesta aplicació es carrega per defecte, però podeu desactivar-la - required: - title: (necessària) - description: Aquesta aplicació es necessita sempre - purposes: Finalitats - purpose: Finalitat -poweredBy: Funciona amb Klaro! diff --git a/Resources/Private/KlaroTranslations/da.yml b/Resources/Private/KlaroTranslations/da.yml deleted file mode 100644 index 13d774b..0000000 --- a/Resources/Private/KlaroTranslations/da.yml +++ /dev/null @@ -1,34 +0,0 @@ -consentModal: - title: Informationer, som vi gemmer - description: > - Her kan du se og ændre, hvilke informationer vi gemmer om dig. - privacyPolicy: - name: Flere informationer finde du under {privacyPolicy}. - text: > - databeskyttelseserklæring -consentNotice: - changeDescription: Der har været ændringer siden dit sidste besøg. Opdater dit valg. - description: > - Vi gemmer og behandler dine personlige oplysninger til følgende formål: {purposes}. - learnMore: Læs mere - privacyPolicy: - name: Datenschutzerklärung -ok: Ok -save: Gem -decline: Afvis -close: Luk -acceptSelected: Tillad udvalgte -acceptAll: Tillad alle -app: - disableAll: - title: Aktiver/deaktiver alle applikatione - description: Brug denne kontakt til at aktivere/deaktivere alle apps. - optOut: - title: Opt-Out - description: Denne applikation indlæses som standard (men du kan deaktivere den). - required: - title: (Altid nødvendig) - description: Denne applikation er altid nødvendig. - purposes: Formål - purpose: Formål -poweredBy: Realiseret med Klaro! diff --git a/Resources/Private/KlaroTranslations/de.yml b/Resources/Private/KlaroTranslations/de.yml deleted file mode 100644 index 654f8a1..0000000 --- a/Resources/Private/KlaroTranslations/de.yml +++ /dev/null @@ -1,36 +0,0 @@ -consentModal: - title: Informationen, die wir speichern - description: > - Hier können Sie einsehen und anpassen, welche Information wir über Sie speichern. - privacyPolicy: - name: Datenschutzerklärung - text: > - Weitere Details finden Sie in unserer {privacyPolicy}. -consentNotice: - changeDescription: Es gab Änderungen seit Ihrem letzten Besuch, bitte aktualisieren Sie Ihre Auswahl. - description: > - Wir speichern und verarbeiten Ihre personenbezogenen Informationen für folgende Zwecke: {purposes}. - learnMore: Mehr erfahren - privacyPolicy: - name: Datenschutzerklärung - imprint: - name: Impressum -ok: OK -save: Speichern -decline: Ablehnen -close: Schließen -acceptSelected: Auswahl speichern -acceptAll: Allen zustimmen -app: - disableAll: - title: Alle Anwendungen aktivieren/deaktivieren - description: Nutzen Sie diesen Schalter, um alle Apps zu aktivieren/deaktivieren. - optOut: - title: (Opt-Out) - description: Diese Anwendung wird standardmäßig geladen (Sie können diese aber deaktivieren) - required: - title: (immer notwendig) - description: Diese Anwendung wird immer benötigt - purposes: Zwecke - purpose: Zweck -poweredBy: Realisiert mit Klaro! diff --git a/Resources/Private/KlaroTranslations/el.yml b/Resources/Private/KlaroTranslations/el.yml deleted file mode 100644 index 50e18b9..0000000 --- a/Resources/Private/KlaroTranslations/el.yml +++ /dev/null @@ -1,32 +0,0 @@ -consentModal: - title: Πληροφορίες που συλλέγουμε - description: > - Εδώ μπορείς να δεις και να ρυθμίσεις τις πληροφορίες που συλλέγουμε σχετικά με εσένα - privacyPolicy: - name: Πολιτική Απορρήτου - text: > - Για περισσότερες πληροφορίες, παρακαλώ διαβάστε την {privacyPolicy}. -consentNotice: - changeDescription: Πραγματοποιήθηκαν αλλαγές μετά την τελευταία σας επίσκεψη παρακαλούμε ανανεώστε την συγκατάθεση σας - description: > - Συγκεντρώνουμε και επεξεργαζόμαστε τα προσωπικά δεδομένα σας για τους παρακάτω λόγους: {purposes}. - learnMore: Περισσότερα - privacyPolicy: - name: Πολιτική Απορρήτου -ok: OK -save: Αποθήκευση -decline: Απόρριπτω -close: Κλείσιμο -app: - disableAll: - title: Για όλες τις εφαρμογές - description: Χρησιμοποίησε αυτό τον διακόπτη για να ενεργοποιήσεις/απενεργοποιήσεις όλες τις εφαρμογές - optOut: - title: (μη απαιτούμενο) - description: Είναι προκαθορισμένο να φορτώνεται, άλλα μπορεί να παραληφθεί - required: - title: (απαιτούμενο) - description: Δεν γίνεται να λειτουργήσει σωστά η εφαρμογή χωρίς αυτό - purposes: Σκοποί - purpose: Σκοπός -poweredBy: Υποστηρίζεται από το Klaro! diff --git a/Resources/Private/KlaroTranslations/en.yml b/Resources/Private/KlaroTranslations/en.yml deleted file mode 100644 index 1ea34a7..0000000 --- a/Resources/Private/KlaroTranslations/en.yml +++ /dev/null @@ -1,36 +0,0 @@ -consentModal: - title: Information that we collect - description: > - Here you can see and customize the information that we collect about you. - privacyPolicy: - name: privacy policy - text: > - To learn more, please read our {privacyPolicy}. -consentNotice: - changeDescription: There were changes since your last visit, please update your consent. - description: > - We collect and process your personal information for the following purposes: {purposes}. - learnMore: Customize - privacyPolicy: - name: privacy policy - imprint: - name: Imprint -ok: Accept -save: Save -decline: Decline -close: Close -acceptAll: Accept all -acceptSelected: Accept selected -app: - disableAll: - title: Toggle all apps - description: Use this switch to enable/disable all apps. - optOut: - title: (opt-out) - description: This app is loaded by default (but you can opt out) - required: - title: (always required) - description: This application is always required - purposes: Purposes - purpose: Purpose -poweredBy: Powered by Klaro! diff --git a/Resources/Private/KlaroTranslations/es.yml b/Resources/Private/KlaroTranslations/es.yml deleted file mode 100644 index c0c4e15..0000000 --- a/Resources/Private/KlaroTranslations/es.yml +++ /dev/null @@ -1,34 +0,0 @@ -consentModal: - title: Información que recopilamos - description: > - Aquí puede ver y personalizar la información que recopilamos sobre usted. - privacyPolicy: - name: política de privacidad - text: > - Para más información consulte nuestra {privacyPolicy}. -consentNotice: - changeDescription: Ha habido cambios desde su última visita, por favor, actualice su consentimiento. - description: > - Recopilamos y procesamos su información personal con los siguientes fines: {purposes}. - learnMore: Más información - privacyPolicy: - name: política de privacidad - imprint: - name: Imprimir -ok: Aceptar -save: Guardar -decline: Rechazar -close: Cerrar -app: - disableAll: - title: Habilitar/deshabilitar todas las aplicaciones - description: Use este botón para habilitar o deshabilitar todas las aplicaciones. - optOut: - title: (opt-out) - description: Esta aplicación se carga de forma predeterminada (pero puede desactivarla) - required: - title: (necesaria) - description: Esta aplicación se necesita siempre - purposes: Fines - purpose: Fin -poweredBy: Powered by Klaro! diff --git a/Resources/Private/KlaroTranslations/fi.yml b/Resources/Private/KlaroTranslations/fi.yml deleted file mode 100644 index db2501e..0000000 --- a/Resources/Private/KlaroTranslations/fi.yml +++ /dev/null @@ -1,33 +0,0 @@ -consentModal: - title: Keräämämme tiedot - description: > - Voit tarkastella ja muokata sinusta keräämiämme tietoja. - privacyPolicy: - name: tietosuojasivultamme - text: > - Voit lukea lisätietoja {privacyPolicy}. -consentNotice: - changeDescription: Olemme tehneet muutoksia ehtoihin viime vierailusi jälkeen, tarkista ehdot. - description: > - Keräämme ja käsittelemme henkilötietoja seuraaviin tarkoituksiin: {purposes}. - learnMore: Lue lisää - privacyPolicy: - name: tietosuojasivultamme -ok: Hyväksy -save: Tallenna -decline: Hylkää -close: Sulje -app: - disableAll: - title: Valitse kaikki - description: Aktivoi kaikki päälle/pois. - optOut: - title: (ladataan oletuksena) - description: Ladataan oletuksena (mutta voit ottaa sen pois päältä) - required: - title: (vaaditaan) - description: Sivusto vaatii tämän aina - purposes: Käyttötarkoitukset - purpose: Käyttötarkoitus -poweredBy: Palvelun tarjoaa Klaro! - diff --git a/Resources/Private/KlaroTranslations/fr.yml b/Resources/Private/KlaroTranslations/fr.yml deleted file mode 100644 index ea9ce1f..0000000 --- a/Resources/Private/KlaroTranslations/fr.yml +++ /dev/null @@ -1,36 +0,0 @@ -consentModal: - title: Les informations que nous collectons - description: > - Ici, vous pouvez voir et personnaliser les informations que nous collectons sur vous. - privacyPolicy: - name: politique de confidentialité - text: > - Pour en savoir plus, merci de lire notre {privacyPolicy}. -consentNotice: - changeDescription: Des modifications ont eu lieu depuis votre dernière visite, merci de mettre à jour votre consentement. - description: > - Nous collectons et traitons vos informations personnelles dans le but suivant : {purposes}. - learnMore: En savoir plus - privacyPolicy: - name: politique de confidentialité - imprint: - name: Imprimer -ok: OK -save: Sauvegarder -decline: Refuser -close: Fermer -acceptAll: Tout accepter -acceptSelected: Accepter la sélection -app: - disableAll: - title: Changer toutes les options - description: Utiliser ce bouton pour activer/désactiver toutes les options - optOut: - title: (opt-out) - description: Cette application est chargée par défaut (mais vous pouvez la désactiver) - required: - title: (toujours requis) - description: Cette application est toujours requise - purposes: Utilisations - purpose: Utilisation -poweredBy: Propulsé par Klaro! diff --git a/Resources/Private/KlaroTranslations/build/fusionTemplate.hbs b/Resources/Private/KlaroTranslations/fusionTemplate.hbs similarity index 100% rename from Resources/Private/KlaroTranslations/build/fusionTemplate.hbs rename to Resources/Private/KlaroTranslations/fusionTemplate.hbs diff --git a/Resources/Private/KlaroTranslations/hr.yml b/Resources/Private/KlaroTranslations/hr.yml deleted file mode 100644 index 1f47393..0000000 --- a/Resources/Private/KlaroTranslations/hr.yml +++ /dev/null @@ -1,32 +0,0 @@ -consentModal: - title: Informacije koje prikupljamo - description: > - Ovdje možete vidjeti i podesiti informacije koje prikupljamo o Vama. - privacyPolicy: - name: pravila privatnosti - text: > - Za više informacije pročitajte naša {privacyPolicy}. -consentNotice: - changeDescription: Došlo je do promjena od Vaše posljednjeg posjećivanja web stranice, molimo Vas da ažurirate svoja odobrenja. - description: > - Mi prikupljamo i procesiramo Vaše osobne podatke radi slijedećeg: {purposes}. - learnMore: Saznajte više - privacyPolicy: - name: pravila privatnosti -ok: U redu -save: Spremi -decline: Odbij -close: Zatvori -app: - disableAll: - title: Izmeijeni sve - description: Koristite ovaj prekidač da omogućite/onemogućite sve aplikacije odjednom. - optOut: - title: (onemogućite) - description: Ova aplikacija je učitana automatski (ali je možete onemogućiti) - required: - title: (obavezna) - description: Ova aplikacija je uvijek obavezna. - purposes: Svrhe - purpose: Svrha -poweredBy: Pokreće Klaro! diff --git a/Resources/Private/KlaroTranslations/hu.yml b/Resources/Private/KlaroTranslations/hu.yml deleted file mode 100644 index f7e954a..0000000 --- a/Resources/Private/KlaroTranslations/hu.yml +++ /dev/null @@ -1,32 +0,0 @@ -consentModal: - title: Információk, amiket gyűjtünk - description: > - Itt láthatod és testreszabhatod az rólad gyűjtött információkat. - privacyPolicy: - name: adatvédelmi irányelveinket - text: > - További információért kérjük, olvassd el az {privacyPolicy}. -consentNotice: - changeDescription: Az utolsó látogatás óta változások történtek, kérjük, frissítsd a hozzájárulásodat. - description: > - Az személyes adataidat összegyűjtjük és feldolgozzuk az alábbi célokra: {purposes}. - learnMore: Tudj meg többet - privacyPolicy: - name: adatvédelmi irányelveinket -ok: Elfogad -save: Save -decline: Mentés -close: Elvet -app: - disableAll: - title: Összes app átkapcsolása - description: Használd ezt a kapcsolót az összes alkalmazás engedélyezéséhez/letiltásához. - optOut: - title: (leiratkozás) - description: Ez az alkalmazás alapértelmezés szerint betöltött (de ki lehet kapcsolni) - required: - title: (mindig kötelező) - description: Ez az alkalmazás mindig kötelező - purposes: Célok - purpose: Cél -poweredBy: Powered by Klaro! diff --git a/Resources/Private/KlaroTranslations/it.yml b/Resources/Private/KlaroTranslations/it.yml deleted file mode 100644 index 0fd979d..0000000 --- a/Resources/Private/KlaroTranslations/it.yml +++ /dev/null @@ -1,34 +0,0 @@ -consentModal: - title: Informazioni che raccogliamo - description: > - Qui puoi vedere e scegliere le informazioni che raccogliamo su di te. - privacyPolicy: - name: policy privacy - text: > - Per saperne di più, leggi la nostra {privacyPolicy}. -consentNotice: - changeDescription: Ci sono stati cambiamenti dalla tua ultima visita, aggiorna il tuo consenso. - description: > - Raccogliamo ed elaboriamo le vostre informazioni personali per i seguenti scopi: {purposes}. - learnMore: Scopri di più - privacyPolicy: - name: policy privacy - imprint: - name: Impronta -ok: OK -save: Salva -decline: Rifiuta -close: Chiudi -app: - disableAll: - title: Cambia per tutte le app - description: Usa questo interruttore per abilitare/disabilitare tutte le app. - optOut: - title: (opt-out) - description: Quest'applicazione è caricata di default (ma puoi disattivarla) - required: - title: (sempre richiesto) - description: Quest'applicazione è sempre richiesta - purposes: Scopi - purpose: Scopo -poweredBy: Realizzato da Klaro! diff --git a/Resources/Private/KlaroTranslations/nl.yml b/Resources/Private/KlaroTranslations/nl.yml deleted file mode 100644 index 60113e0..0000000 --- a/Resources/Private/KlaroTranslations/nl.yml +++ /dev/null @@ -1,34 +0,0 @@ -consentModal: - title: Informatie die we verzamelen - description: > - Hier kunt u de informatie bekijken en aanpassen die we over u verzamelen. - privacyPolicy: - name: privacybeleid - text: > - Lees ons privacybeleid voor meer informatie {privacyPolicy}. -consentNotice: - changeDescription: Er waren wijzigingen sinds uw laatste bezoek, werk uw voorkeuren bij. - description: > - Wij verzamelen en verwerken uw persoonlijke gegevens voor de volgende doeleinden: {purposes}. - learnMore: Lees meer - privacyPolicy: - name: privacybeleid - imprint: - name: Afdruk -ok: OK -save: Opslaan -decline: Afwijzen -close: Sluiten -app: - disableAll: - title: Alle opties in/uit schakelen - description: Gebruik deze schakeloptie om alle apps in/uit te schakelen. - optOut: - title: (afmelden) - description: Deze app is standaard geladen (maar je kunt je afmelden) - required: - title: (altijd verplicht) - description: Deze applicatie is altijd vereist - purposes: Doeleinden - purpose: Doeleinde -poweredBy: Aangedreven door Klaro! diff --git a/Resources/Private/KlaroTranslations/no.yml b/Resources/Private/KlaroTranslations/no.yml deleted file mode 100644 index 0b339fd..0000000 --- a/Resources/Private/KlaroTranslations/no.yml +++ /dev/null @@ -1,33 +0,0 @@ -consentModal: - title: Informasjon vi samler inn - description: > - Her kan du se og velge hvilken informasjon vi samler inn om deg. - privacyPolicy: - name: personvernerklæring - text: > - For å lære mer, vennligst les vår {privacyPolicy}. -consentNotice: - changeDescription: Det har skjedd endringer siden ditt siste besøk, vennligst oppdater ditt samtykke. - description: > - Vi samler inn og prosesserer din personlige informasjon av følgende årsaker: {purposes}. - learnMore: Lær mer - privacyPolicy: - name: personvernerklæring -ok: OK -save: Opslaan -decline: Avslå -acceptAll: Godtar alle -acceptSelected: Godtar valgt -app: - disableAll: - title: Bytt alle apper - description: Bruk denne for å skru av/på alle apper. - optOut: - title: (opt-out) - description: Denne appen er lastet som standard (men du kan skru det av) - required: - title: (alltid påkrevd) - description: Denne applikasjonen er alltid påkrevd - purposes: Årsaker - purpose: Årsak -poweredBy: Laget med Klaro! diff --git a/Resources/Private/KlaroTranslations/pl.yml b/Resources/Private/KlaroTranslations/pl.yml deleted file mode 100644 index 8b0c382..0000000 --- a/Resources/Private/KlaroTranslations/pl.yml +++ /dev/null @@ -1,34 +0,0 @@ -consentModal: - title: Informacje, które zbieramy - description: > - Tutaj możesz zobaczyć i dostosować informacje, które zbieramy o Tobie. - privacyPolicy: - name: polityka prywatności - text: > - Aby dowiedzieć się więcej, przeczytaj naszą {privacyPolicy}. -consentNotice: - changeDescription: Nastąpiły zmiany od Twojej ostatniej wizyty, zaktualizuj swoją zgodę. - description: > - Zbieramy i przetwarzamy dane osobowe w następujących celach: {purposes}. - learnMore: Dowiedz się więcej - privacyPolicy: - name: polityka prywatności - imprint: - name: Odcisk -ok: OK -save: Zapisz -decline: Rezygnacja -close: Zamknij -app: - disableAll: - title: Przełącz dla wszystkich aplikacji - description: Użyj przełącznika, aby włączyć/wyłączyć wszystkie aplikacje. - optOut: - title: (rezygnacja) - description: Ta aplikacja jest domyślnie ładowana (ale możesz zrezygnować) - required: - title: (zawsze wymagane) - description: Ta alikacja jest zawsze wymagana - purposes: Cele - purpose: Cel -poweredBy: Napędzany przez Klaro! diff --git a/Resources/Private/KlaroTranslations/ro.yml b/Resources/Private/KlaroTranslations/ro.yml deleted file mode 100644 index 60e1603..0000000 --- a/Resources/Private/KlaroTranslations/ro.yml +++ /dev/null @@ -1,31 +0,0 @@ -consentModal: - title: Informațiile pe care le colectăm - description: > - Aici puteți vedea și personaliza informațiile pe care le colectăm despre dvs. - privacyPolicy: - name: politica privacy - text: > - Pentru a afla mai multe, vă rugăm să citiți {privacyPolicy}. -consentNotice: - changeDescription: Au existat modificări de la ultima vizită, vă rugăm să actualizați consimțământul. - description: > - Colectăm și procesăm informațiile dvs. personale în următoarele scopuri: {purposes}. - learnMore: Află mai multe - privacyPolicy: - name: politica privacy -ok: OK -save: Salvează -decline: Renunță -app: - disableAll: - title: Comutați între toate aplicațiile - description: Utilizați acest switch pentru a activa/dezactiva toate aplicațiile. - optOut: - title: (opt-out) - description: Această aplicație este încărcată în mod implicit (dar puteți renunța) - required: - title: (întotdeauna necesar) - description: Această aplicație este întotdeauna necesară - purposes: Scopuri - purpose: Scop -poweredBy: Realizat de Klaro! diff --git a/Resources/Private/KlaroTranslations/ru.yml b/Resources/Private/KlaroTranslations/ru.yml deleted file mode 100644 index c7d84cc..0000000 --- a/Resources/Private/KlaroTranslations/ru.yml +++ /dev/null @@ -1,34 +0,0 @@ -consentModal: - title: Информация, которую мы сохраняем - description: > - Здесь вы можете просмотреть и настроить, какую информацию о вас мы храним. - privacyPolicy: - name: Соглашение - text: > - Чтобы узнать больше, пожалуйста, прочитайте наше {privacyPolicy}. -consentNotice: - changeDescription: Со времени вашего последнего визита произошли изменения, обновите своё согласие. - description: > - Мы собираем и обрабатываем вашу личную информацию для следующих целей: {purposes}. - learnMore: Настроить - privacyPolicy: - name: политика конфиденциальности -ok: Принять -save: Сохранить -decline: Отклонить -close: Закрыть -acceptAll: Принять всё -acceptSelected: Принять выбранные -app: - disableAll: - title: Переключить все приложения - description: Используйте этот переключатель, чтобы включить/отключить все приложения. - optOut: - title: (отказаться) - description: Это приложение включено по умолчанию (но вы можете отказаться) - required: - title: (всегда обязательный) - description: Это обязательное приложение - purposes: Намерения - purpose: Намерение -poweredBy: Работает на Кларо! diff --git a/Resources/Private/KlaroTranslations/sr.yml b/Resources/Private/KlaroTranslations/sr.yml deleted file mode 100644 index a739d2b..0000000 --- a/Resources/Private/KlaroTranslations/sr.yml +++ /dev/null @@ -1,32 +0,0 @@ -consentModal: - title: Informacije koje prikupljamo - description: > - Ovde možete videti i podesiti informacije koje prikupljamo o Vama. - privacyPolicy: - name: politiku privatnosti - text: > - Za više informacije pročitajte našu {privacyPolicy}. -consentNotice: - changeDescription: Došlo je do promena od Vaše poslednje posete, molimo Vas da ažurirate svoja odobrenja. - description: > - Mi prikupljamo i procesiramo Vaše lične podatke radi sledećeg: {purposes}. - learnMore: Saznajte više - privacyPolicy: - name: politiku privatnosti -ok: U redu -save: Sačuvaj -decline: Odbij -close: Zatvori -app: - disableAll: - title: Izmeni sve - description: Koristite ovaj prekidač da omogućite/onesposobite sve aplikacije odjednom. - optOut: - title: (onesposobite) - description: Ova aplikacija je učitana automatski (ali je možete onesposobiti) - required: - title: (neophodna) - description: Ova aplikacija je uvek neophodna. - purposes: Svrhe - purpose: Svrha -poweredBy: Pokreće Klaro! diff --git a/Resources/Private/KlaroTranslations/sr_cyrl.yml b/Resources/Private/KlaroTranslations/sr_cyrl.yml deleted file mode 100644 index b687c80..0000000 --- a/Resources/Private/KlaroTranslations/sr_cyrl.yml +++ /dev/null @@ -1,32 +0,0 @@ -consentModal: - title: Информације које прикупљамо - description: > - Овде можете видет и подесити информације које прикупљамо о Вама. - privacyPolicy: - name: политику приватности - text: > - За више информација прочитајте нашу {privacyPolicy}. -consentNotice: - changeDescription: Дошло је до промена од Ваше последнје посете, молимо Вас да ажурирате своја одобрења. - description: > - Ми прикупљамо и процесирамо Ваше личне податке ради следећег: {purposes}. - learnMore: Сазнајте више - privacyPolicy: - name: политику приватности -ok: У реду -save: Сачувај -decline: Одбиј -close: Затвори -app: - disableAll: - title: Измени све - description: Користите овај прекидач да омогућите/онеспособите све апликације одједном. - optOut: - title: (онеспособите) - description: Ова апликација је учитана аутоматски (али је можете онеспособити) - required: - title: (неопходна) - description: Ова апликација је увек неопходна. - purposes: Сврхе - purpose: Сврха -poweredBy: Покреће Кларо! diff --git a/Resources/Private/KlaroTranslations/sv.yml b/Resources/Private/KlaroTranslations/sv.yml deleted file mode 100644 index de3b0ad..0000000 --- a/Resources/Private/KlaroTranslations/sv.yml +++ /dev/null @@ -1,34 +0,0 @@ -consentModal: - title: Information som vi samlar - description: > - Här kan du se och anpassa vilken information vi samlar om dig. - privacyPolicy: - name: Integritetspolicy - text: > - För att veta mer, läs vår {privacyPolicy}. -consentNotice: - changeDescription: Det har skett förändringar sedan ditt senaste besök, var god uppdatera ditt medgivande. - description: > - Vi samlar och bearbetar din personliga data i följande syften: {purposes}. - learnMore: Läs mer - privacyPolicy: - name: Integritetspolicy -ok: OK -save: Spara -decline: Avböj -acceptAll: Acceptera alla -acceptSelected: Acceptera markerat -close: Stäng -app: - disableAll: - title: Ändra för alla appar - description: Använd detta reglage för att aktivera/avaktivera samtliga appar. - optOut: - title: (Avaktivera) - description: Den här appen laddas som standardinställning (men du kan avaktivera den) - required: - title: (Krävs alltid) - description: Den här applikationen krävs alltid - purposes: Syften - purpose: Syfte -poweredBy: Körs på Klaro! diff --git a/Resources/Private/KlaroTranslations/tr.yml b/Resources/Private/KlaroTranslations/tr.yml deleted file mode 100644 index 17c3555..0000000 --- a/Resources/Private/KlaroTranslations/tr.yml +++ /dev/null @@ -1,32 +0,0 @@ -consentModal: - title: Sakladığımız bilgiler - description: > - Hakkınızda topladığımız bilgileri burada görebilir ve özelleştirebilirsiniz. - privacyPolicy: - name: Gizlilik Politikası - text: > - Daha fazlası için lütfen {privacyPolicy} sayfamızı okuyun. -consentNotice: - changeDescription: Son ziyaretinizden bu yana değişiklikler oldu, lütfen seçiminizi güncelleyin. - description: > - Kişisel bilgilerinizi aşağıdaki amaçlarla saklıyor ve işliyoruz: {purposes}. - learnMore: Daha fazla bilgi - privacyPolicy: - name: Gizlilik Politikası -ok: Tamam -save: Kaydet -decline: Reddet -close: Kapat -app: - disableAll: - title: Tüm uygulamaları aç/kapat - description: Toplu açma/kapama için bu düğmeyi kullanabilirsin. - optOut: - title: (isteğe bağlı) - description: Bu uygulama varsayılanda yüklendi (ancak iptal edebilirsin) - required: - title: (her zaman gerekli) - description: Bu uygulama her zaman gerekli - purposes: Amaçlar - purpose: Amaç -poweredBy: Klaro tarafından geliştirildi! diff --git a/Resources/Private/KlaroTranslations/build/xlfTemplate.hbs b/Resources/Private/KlaroTranslations/xlfTemplate.hbs similarity index 100% rename from Resources/Private/KlaroTranslations/build/xlfTemplate.hbs rename to Resources/Private/KlaroTranslations/xlfTemplate.hbs diff --git a/Resources/Private/Scss/Klaro/_klaro.scss b/Resources/Private/Scss/Klaro/_klaro.scss deleted file mode 100644 index 7658340..0000000 --- a/Resources/Private/Scss/Klaro/_klaro.scss +++ /dev/null @@ -1,299 +0,0 @@ -.klaro { - .cookie-modal, - .cookie-notice { - @import "switch.scss"; - - font-size: 14px; - - .slider { - box-shadow: $cc_panel__boxShadow; - } - - a { - color: $cc_link__color; - text-decoration: none; - } - - p, - strong, - h1, - h2, - ul, - li { - font-family: inherit; - color: $cc_text__color; - } - - p, - h1, - h2, - ul, - li { - display: block; - text-align: left; - margin: 0; - padding: 0; - margin-top: 0.7em; - } - - .cm-link { - padding-left: 4px; - vertical-align: middle; - } - - .cm-btn { - padding: 6px 10px; - margin-right: 0.5em; - - border: $cc_button__border; - border-radius: $cc_button__borderRadius; - background: $cc_button__backgroundColor; - color: $cc_button__color; - - cursor: pointer; - - &:disabled { - opacity: 0.5; - } - - &.cm-btn-sm { - padding: 0.4em; - font-size: 1em; - } - - &.cm-btn-close { - background: red; - color: red; - } - - &.cm-btn-success { - border: $cc_buttonSuccess__border; - background: $cc_buttonSuccess__backgroundColor; - color: $cc_buttonSuccess__color; - } - - &.cm-btn-info { - // no need for this type of button to look different - border: $cc_buttonSuccess__border; - background: $cc_buttonSuccess__backgroundColor; - color: $cc_buttonSuccess__color; - } - - &.cm-btn-right { - float: right; - margin-left: 0.5em; - margin-right: 0; - } - } - } - - .cookie-modal { - width: 100%; - height: 100%; - position: fixed; - overflow: hidden; - left: 0; - top: 0; - z-index: $cc_panel__zIndex; - - .cm-bg { - background: $cc_backdrop__backgroundColor; - height: 100%; - width: 100%; - position: fixed; - top: 0; - left: 0; - } - - .cm-modal { - z-index: $cc_panel__zIndex + 1; - box-shadow: $cc_panel__boxShadow; - - @media (min-width: 1024px) { - border-radius: $cc_panel__borderRadius; - position: relative; - margin: 0 auto; - max-width: 640px; - height: auto; - width: auto; - } - - width: 100%; - max-height: 98%; - - top: 50%; - transform: translateY(-50%); - - position: fixed; - overflow: auto; - background: $cc_panel__backgroundColor; - color: $cc_text__color; - - .hide { - border: none; - background: none; - svg { - stroke: $cc_text__color; - } - position: absolute; - top: 20px; - right: 20px; - // Avoid getting overlapped by the heading, if external CSS sets: - // h1 { position: relative } - // See: https://github.com/KIProtect/klaro/issues/135 - z-index: 1; - } - - .cm-footer { - padding: 1.5em; - border-top: $cc_separator__border; - - &-buttons { - &::before, - &::after { - content: " "; - display: table; - } - - &::after { - clear: both; - } - } - - .cm-powered-by { - font-size: 0.8em; - padding-top: 4px; - text-align: center; - - a { - color: $cc_textMuted__color; - } - } - } - - .cm-header { - padding: 1.5em; - padding-right: 24px; - border-bottom: $cc_separator__border; - h1 { - margin: 0; - font-size: 2em; - display: block; - &.title { - padding-right: 20px; - } - } - } - - .cm-body { - padding: 1.5rem; - ul { - display: block; - } - span { - display: inline-block; - width: auto; - } - ul.cm-apps { - padding: 0; - margin: 0; - li.cm-app { - &:first-child { - margin-top: 0; - } - position: relative; - line-height: 20px; - vertical-align: middle; - padding-left: 60px; - min-height: 40px; - .switch { - position: absolute; - left: 0; - } - p { - margin-top: 0; - } - - p.purposes { - font-size: 0.8em; - color: $cc_textMuted__color; - } - - &.cm-toggle-all { - border-top: $cc_separator__border; - padding-top: 1em; - } - - span.cm-app-title { - font-weight: 600; - } - - span.cm-opt-out, - span.cm-required { - padding-left: 0.2em; - font-size: 0.8em; - color: $cc_textMuted__color; - } - } - } - } - } - } - - .cookie-notice { - background: $cc_panel__backgroundColor; - z-index: $cc_panel__zIndex - 1; - - position: fixed; - width: 100%; - bottom: 0; - right: 0; - - @media (min-width: 990px) { - box-shadow: $cc_panel__boxShadow; - border-radius: $cc_panel__borderRadius; - position: fixed; - bottom: 20px; - right: 20px; - max-width: 300px; - } - - @media (max-width: 989px) { - border: none; - border-radius: 0; - } - - .cn-body { - margin-bottom: 0; - margin-right: 0; - bottom: 0; - - padding: 1em; - padding-top: 0; - - p { - margin-bottom: 0.5em; - } - - p.cn-changes { - text-decoration: underline; - } - - .cn-learn-more { - display: inline-block; - } - - p.cn-ok { - padding-top: 0.5em; - margin: 0; - display: flex; - align-items: center; - justify-content: flex-start; - } - } - } - - .cookie-notice-hidden { - display: none !important; - } -} diff --git a/Resources/Private/Scss/Klaro/_switch.scss b/Resources/Private/Scss/Klaro/_switch.scss deleted file mode 100644 index 74bcca2..0000000 --- a/Resources/Private/Scss/Klaro/_switch.scss +++ /dev/null @@ -1,90 +0,0 @@ -// THIS FILE WAS COPIED AS IS FROM https://github.com/kiprotect/klaro - -.switch { - position: relative; - display: inline-block; - width: 50px; - height: 30px; -} - -.cm-app-input:checked + .cm-app-label .slider { - background-color: $cc_switch__backgroundColor; -} - -.cm-app-input.required:checked + .cm-app-label .slider { - opacity: 0.3; - background-color: $cc_switch__backgroundColor; - cursor: not-allowed; -} - -.slider { - box-shadow: $cc_panel__boxShadow; -} - -.cm-app-input { - position: absolute; - top: 0; - left: 0; - opacity: 0; - width: 50px; - height: 30px; -} - -.cm-app-label { - /* The slider */ - .slider { - position: absolute; - cursor: pointer; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: #ccc; - -webkit-transition: 0.4s; - transition: 0.4s; - width: 50px; - display: inline-block; - } - - .slider:before { - position: absolute; - content: ""; - height: 20px; - width: 20px; - left: 5px; - bottom: 5px; - background-color: white; - -webkit-transition: 0.4s; - transition: 0.4s; - } - - /* Rounded sliders */ - .slider.round { - border-radius: 30px; - } - - .slider.round:before { - border-radius: 50%; - } - - input:focus + .slider { - box-shadow: 0 0 1px red; - } - - input:checked + .slider:before { - -webkit-transform: translateX(20px); - -ms-transform: translateX(20px); - transform: translateX(20px); - } -} - -.cm-app-input:focus + .cm-app-label .slider { - box-shadow: 0 4px 6px 0 rgba(125, 125, 125, 0.2), - 5px 5px 10px 0 rgba(125, 125, 125, 0.19); -} - -.cm-app-input:checked + .cm-app-label .slider:before { - -webkit-transform: translateX(20px); - -ms-transform: translateX(20px); - transform: translateX(20px); -} diff --git a/Resources/Private/Scss/_Styles.scss b/Resources/Private/Scss/_Styles.scss deleted file mode 100644 index 47ee674..0000000 --- a/Resources/Private/Scss/_Styles.scss +++ /dev/null @@ -1,25 +0,0 @@ -$cc_backdrop__backgroundColor: rgba(0, 0, 0, 0.5) !default; -$cc_panel__borderRadius: 4px !default; -$cc_panel__boxShadow: 0 4px 6px 0 rgba(0, 0, 0, 0.2), - 5px 5px 10px 0 rgba(0, 0, 0, 0.19) !default; -$cc_panel__zIndex: 1000 !default; -$cc_panel__backgroundColor: #333 !default; - -$cc_separator__border: 1px solid #555 !default; - -$cc_link__color: #00aa3e !default; -$cc_text__color: #eee !default; -$cc_textMuted__color: #999 !default; - -$cc_switch__backgroundColor: #0885ba !default; - -$cc_button__backgroundColor: #555 !default; -$cc_button__color: #fff !default; -$cc_button__border: none !default; -$cc_button__borderRadius: 4px !default; - -$cc_buttonSuccess__backgroundColor: #00aa3e !default; -$cc_buttonSuccess__color: $cc_button__color !default; -$cc_buttonSuccess__border: none !default; - -@import "./Klaro/klaro.scss"; diff --git a/Resources/Private/Translations/ca/Klaro.xlf b/Resources/Private/Translations/ca/Klaro.xlf index 296b00c..38014ee 100644 --- a/Resources/Private/Translations/ca/Klaro.xlf +++ b/Resources/Private/Translations/ca/Klaro.xlf @@ -8,99 +8,109 @@ ################################################################################################ - - Information that we collect - Informació que recopilem + + Accept all + Accepta-les totes + + + Accept selected + Accepta les escollides + + + Use this switch to enable or disable all services. + Useu aquest botó per a habilitar o deshabilitar totes les aplicacions. + + + Enable or disable all services + Habilita/deshabilita totes les aplicacions + + + This services is loaded by default (but you can opt out) + Aquesta aplicació es carrega per defecte, però podeu desactivar-la + + + (opt-out) + (opt-out) + + + purpose + Finalitat + + + purposes + Finalitats + + + This services is always required + Aquesta aplicació es necessita sempre + + + (always required) + (necessària) + + + Close + Tanca - Here you can see and customize the information that we collect about you. - - Aquí podeu veure i personalitzar la informació que recopilem sobre vós. - + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + Aquí podeu veure i personalitzar la informació que recopilem sobre vós. - privacy policy + política de privadesa - To learn more, please read our {privacyPolicy}. - - Per a més informació, consulteu la nostra {privacyPolicy}. - + + Per a més informació, consulteu la nostra {privacyPolicy}. + + + Services we would like to use + Informació que recopilem - There were changes since your last visit, please update your consent. + There were changes since your last visit, please renew your consent. Hi ha hagut canvis des de la vostra darrera visita. Actualitzeu el vostre consentiment. - We collect and process your personal information for the following purposes: {purposes}. - - Recopilem i processem la vostra informació personal amb les següents finalitats: {purposes}. - + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. + Recopilem i processem la vostra informació personal amb les següents finalitats: {purposes}. + + + + Empremta - Customize + Let me choose Saber-ne més - privacy policy + política de privadesa - - Imprint - Empremta - - - Accept - Accepta - - - Save - Desa - - Decline + I decline Rebutja - - Close - Tanca - - - Toggle all apps - Habilita/deshabilita totes les aplicacions - - - Use this switch to enable/disable all apps. - Useu aquest botó per a habilitar o deshabilitar totes les aplicacions. - - - (opt-out) - (opt-out) - - - This app is loaded by default (but you can opt out) - Aquesta aplicació es carrega per defecte, però podeu desactivar-la - - - (always required) - (necessària) + + That's ok + Accepta - - This application is always required - Aquesta aplicació es necessita sempre + + Realized with Klaro! + Funciona amb Klaro! - - Purposes - Finalitats + + service + aplicació - - Purpose - Finalitat + + services + aplicacions - - Powered by Klaro! - Funciona amb Klaro! + + Save + Desa diff --git a/Resources/Private/Translations/cs/Klaro.xlf b/Resources/Private/Translations/cs/Klaro.xlf new file mode 100644 index 0000000..6072988 --- /dev/null +++ b/Resources/Private/Translations/cs/Klaro.xlf @@ -0,0 +1,159 @@ + + + + + ################################################################################################ + # IMPORTANT: This file was auto-generated as part of the build process to convert translations # + # provided by klaro. -> see package.json -> "yarn run build:translations" # + ################################################################################################ + + + + privacy policy + zásady ochrany soukromí + + + To learn more, please read our {privacyPolicy}. + Pro další informace si přečtete naše <tr-hint v="privacy policy">{privacyPolicy}</tr-hint>. + + + Services we would like to use + Služby, které bychom rádi využili + + + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + Zde můžete posoudit a přizpůsobit služby, které bychom rádi na tomto webu používali. Máte to pod kontrolou! Povolte nebo zakažte služby, jak uznáte za vhodné. + + + Testing mode! + Testing mode! + + + There were changes since your last visit, please renew your consent. + Od vaší poslední návštěvy došlo ke změnám, obnovte prosím svůj souhlas. + + + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. + „Dobrý den! Můžeme povolit některé další služby pro {purposes}? Svůj souhlas můžete kdykoliv změnit nebo odvolat.“ + + + + Vyberu si + + + + Poskytování služeb + + + + Tyto služby jsou nezbytné pro správné fungování tohoto webu. Nelze je zde deaktivovat, protože služba by jinak nefungovala správně. + + + + + Optimalizace výkonu + + + + V rámci těchto služeb jsou zpracovávány osobní údaje za účelem optimalizace služeb, které jsou na tomto webu poskytovány. + + + + + Marketing + + + + V rámci těchto služeb jsou zpracovávány osobní údaje, aby se vám zobrazoval relevantní obsah o produktech, službách nebo tématech, které by vás mohly zajímat. + + + + Reklama + + + + V rámci těchto služeb jsou zpracovávány osobní údaje, aby vám zobrazovaly personalizované nebo zájmově orientované reklamy. + + + service + Jednoduchá služba <tr-snip></tr-snip> , kterou nainstaluji do svého počítače. + + + services + Několik jednoduchých služeb <tr-snip></tr-snip> , které nainstaluji do svého počítače. + + + + To je v pořádku + + + Save + uložit + + + + Nepřijímám + + + Close + zavřít + + + Accept all + přijmout vše + + + Accept selected + přijmout vybrané + + + Enable or disable all services + povolit nebo zakázat všechny služby + + + Use this switch to enable or disable all services. + Pomocí tohoto přepínače můžete povolit nebo zakázat všechny služby. + + + (opt-out) + (opt-out) + + + This services is loaded by default (but you can opt out) + Tato služba se načítá ve výchozím nastavení (ale můžete ji zrušit) + + + (always required) + (vždy vyžadováno) + + + This services is always required + Tato služba je vždy vyžadována + + + purposes + Zpracování pro účely <tr-snip></tr-snip> + + + purpose + Zpracování pro účely <tr-snip></tr-snip> + + + Realized with Klaro! + Realizováno pomocí Klaro! + + + Do you want to load external content supplied by {title}? + Chcete načíst externí obsah dodávaný prostřednictvím {title}? + + + Yes + Ano + + + Always + Vždy + + + + diff --git a/Resources/Private/Translations/da/Klaro.xlf b/Resources/Private/Translations/da/Klaro.xlf index 36e7fe3..0ca23ee 100644 --- a/Resources/Private/Translations/da/Klaro.xlf +++ b/Resources/Private/Translations/da/Klaro.xlf @@ -8,104 +8,107 @@ ################################################################################################ - - Information that we collect - Informationer, som vi gemmer - - - Here you can see and customize the information that we collect about you. - - Her kan du se og ændre, hvilke informationer vi gemmer om dig. - + + Accept all + Tillad alle - - privacy policy - Flere informationer finde du under {privacyPolicy}. + + Accept selected + Tillad udvalgte - - To learn more, please read our {privacyPolicy}. - - databeskyttelseserklæring - + + Use this switch to enable or disable all services. + Brug denne kontakt til at aktivere/deaktivere alle apps. - - There were changes since your last visit, please update your consent. - Der har været ændringer siden dit sidste besøg. Opdater dit valg. + + Enable or disable all services + Aktiver/deaktiver alle applikatione - - We collect and process your personal information for the following purposes: {purposes}. - - Vi gemmer og behandler dine personlige oplysninger til følgende formål: {purposes}. - + + This services is loaded by default (but you can opt out) + Denne applikation indlæses som standard (men du kan deaktivere den) - - Customize - Læs mere + + (opt-out) + Opt-Out - - privacy policy - Datenschutzerklärung + + purpose + Formål - - Accept - Ok + + purposes + Formål - - Save - Gem + + This services is always required + Denne applikation er altid nødvendig - - Decline - Afvis + + (always required) + (Altid nødvendig) Close Luk - - Accept selected - Tillad udvalgte + + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + Her kan du se og ændre, hvilke informationer vi gemmer om dig. - - Accept all - Tillad alle + + + Flere informationer finde du under {privacyPolicy} - - Toggle all apps - Aktiver/deaktiver alle applikatione + + + databeskyttelseserklæring. - - Use this switch to enable/disable all apps. - Brug denne kontakt til at aktivere/deaktivere alle apps. + + Services we would like to use + Informationer, som vi gemmer - - (opt-out) - Opt-Out + + There were changes since your last visit, please renew your consent. + Der har været ændringer siden dit sidste besøg. Opdater dit valg. - - This app is loaded by default (but you can opt out) - Denne applikation indlæses som standard (men du kan deaktivere den). + + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. + Vi gemmer og behandler dine personlige oplysninger til følgende formål: {purposes}. - - (always required) - (Altid nødvendig) + + - - This application is always required - Denne applikation er altid nødvendig. + + Let me choose + Læs mere - - Purposes - Formål + + + Datenschutzerklärung - - Purpose - Formål + + I decline + Afvis + + + That's ok + Ok - Powered by Klaro! + Realized with Klaro! Realiseret med Klaro! + + service + + + services + + + Save + Gem + diff --git a/Resources/Private/Translations/de/Elements.xlf b/Resources/Private/Translations/de/Elements.xlf deleted file mode 100644 index 08257bc..0000000 --- a/Resources/Private/Translations/de/Elements.xlf +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - Content was blocked.
Please activate "{group}" in your Cookie settings.]]> - - - Inhalte wurden blockiert.
Bitte aktiviere "{group}" in den Cookie-Einstellungen.]]> -
-
- -
-
diff --git a/Resources/Private/Translations/de/Klaro.xlf b/Resources/Private/Translations/de/Klaro.xlf index 3181f0b..f869d49 100644 --- a/Resources/Private/Translations/de/Klaro.xlf +++ b/Resources/Private/Translations/de/Klaro.xlf @@ -8,107 +8,169 @@ ################################################################################################ - - Information that we collect - Informationen, die wir speichern + + Accept all + Alle akzeptieren + + + Accept selected + Ausgewählte akzeptieren + + + Close + Schließen - Here you can see and customize the information that we collect about you. - - Hier können Sie einsehen und anpassen, welche Information wir über Sie speichern. - + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + Hier können Sie die Dienste, die wir auf dieser Website nutzen möchten, bewerten und anpassen. Sie haben das Sagen! Aktivieren oder deaktivieren Sie die Dienste, wie Sie es für richtig halten. - privacy policy + Datenschutzerklärung - To learn more, please read our {privacyPolicy}. - - Weitere Details finden Sie in unserer {privacyPolicy}. - + + Um mehr zu erfahren, lesen Sie bitte unsere {privacyPolicy}. + + + Services we would like to use + Dienste, die wir nutzen möchten - There were changes since your last visit, please update your consent. - Es gab Änderungen seit Ihrem letzten Besuch, bitte aktualisieren Sie Ihre Auswahl. + There were changes since your last visit, please renew your consent. + Seit Ihrem letzten Besuch gab es Änderungen, bitte erneuern Sie Ihre Zustimmung. - We collect and process your personal information for the following purposes: {purposes}. - - Wir speichern und verarbeiten Ihre personenbezogenen Informationen für folgende Zwecke: {purposes}. - + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. + Hallo! Könnten wir bitte einige zusätzliche Dienste für {purposes} aktivieren? Sie können Ihre Zustimmung später jederzeit ändern oder zurückziehen. + + + + Impressum - Customize - Mehr erfahren + Let me choose + Lassen Sie mich wählen - privacy policy + Datenschutzerklärung - - Imprint - Impressum + + Testing mode! + Testmodus! - - Accept - OK + + Always + Immer - - Save - Speichern + + Yes + Ja + + + Do you want to load external content supplied by {title}? + Möchten Sie von {title} bereitgestellte externe Inhalte laden? - Decline - Ablehnen + I decline + Ich lehne ab - - Close - Schließen + + That's ok + Das ist ok - - Accept selected - Auswahl speichern + + Realized with Klaro! + Realisiert mit Klaro! - - Accept all - Allen zustimmen + + privacy policy + Datenschutzerklärung - - Toggle all apps - Alle Anwendungen aktivieren/deaktivieren + + To learn more, please read our {privacyPolicy}. + Um mehr zu erfahren, lesen Sie bitte unsere {privacyPolicy}. - - Use this switch to enable/disable all apps. - Nutzen Sie diesen Schalter, um alle Apps zu aktivieren/deaktivieren. + + service + Dienst - - (opt-out) - (Opt-Out) + + services + Dienste - - This app is loaded by default (but you can opt out) - Diese Anwendung wird standardmäßig geladen (Sie können diese aber deaktivieren) + + These services process personal information to show you personalized or interest-based advertisements. + Diese Dienste verarbeiten persönliche Informationen, um Ihnen personalisierte oder interessenbezogene Werbung zu zeigen. - - (always required) - (immer notwendig) + + Advertising + Werbung - - This application is always required - Diese Anwendung wird immer benötigt + + These services are essential for the correct functioning of this website. You cannot disable them here as the service would not work correctly otherwise. + + Diese Dienste sind für die korrekte Funktion dieser Website unerlässlich. Sie können sie hier nicht deaktivieren, da der Dienst sonst nicht richtig funktionieren würde. + - - Purposes - Zwecke + + Service Provision + Dienstbereitstellung + + + These services process personal information to show you relevant content about products, services or topics that you might be interested in. + Diese Dienste verarbeiten persönliche Daten, um Ihnen relevante Inhalte über Produkte, Dienstleistungen oder Themen zu zeigen, die Sie interessieren könnten. + + + Marketing + Marketing + + + These services process personal information to optimize the service that this website offers. + + Diese Dienste verarbeiten personenbezogene Daten, um den von dieser Website angebotenen Service zu optimieren. + + + + Performance Optimization + Optimierung der Leistung + + + Save + Speichern + + + Use this switch to enable or disable all services. + Mit diesem Schalter können Sie alle Dienste aktivieren oder deaktivieren. + + + Enable or disable all services + Alle Dienste aktivieren oder deaktivieren + + + This services is loaded by default (but you can opt out) + Diese Dienste werden standardmäßig geladen (Sie können sich jedoch abmelden) - - Purpose + + (opt-out) + (Opt-out) + + + purpose Zweck - - Powered by Klaro! - Realisiert mit Klaro! + + purposes + Zwecke + + + This services is always required + Dieser Service ist immer erforderlich + + + (always required) + (immer erforderlich) diff --git a/Resources/Private/Translations/el/Klaro.xlf b/Resources/Private/Translations/el/Klaro.xlf index 9dbe4ed..d0006a4 100644 --- a/Resources/Private/Translations/el/Klaro.xlf +++ b/Resources/Private/Translations/el/Klaro.xlf @@ -8,96 +8,117 @@ ################################################################################################ - - Information that we collect - Πληροφορίες που συλλέγουμε + + Accept all - - Here you can see and customize the information that we collect about you. - - Εδώ μπορείς να δεις και να ρυθμίσεις τις πληροφορίες που συλλέγουμε σχετικά με εσένα - + + + Accept all - - privacy policy - Πολιτική Απορρήτου + + Accept selected - - To learn more, please read our {privacyPolicy}. - - Για περισσότερες πληροφορίες, παρακαλώ διαβάστε την {privacyPolicy}. - + + + Accept selected - - There were changes since your last visit, please update your consent. - Πραγματοποιήθηκαν αλλαγές μετά την τελευταία σας επίσκεψη παρακαλούμε ανανεώστε την συγκατάθεση σας + + Use this switch to enable or disable all services. + Χρησιμοποίησε αυτό τον διακόπτη για να ενεργοποιήσεις/απενεργοποιήσεις όλες τις εφαρμογές. - - We collect and process your personal information for the following purposes: {purposes}. - - Συγκεντρώνουμε και επεξεργαζόμαστε τα προσωπικά δεδομένα σας για τους παρακάτω λόγους: {purposes}. - + + Enable or disable all services + Για όλες τις εφαρμογές - - Customize - Περισσότερα + + This services is loaded by default (but you can opt out) + Είναι προκαθορισμένο να φορτώνεται, άλλα μπορεί να παραληφθεί - - privacy policy - Πολιτική Απορρήτου + + (opt-out) + (μη απαιτούμενο) - - Accept - OK + + purpose + Σκοπός - - Save - Αποθήκευση + + purposes + Σκοποί - - Decline - Απόρριπτω + + This services is always required + Δεν γίνεται να λειτουργήσει σωστά η εφαρμογή χωρίς αυτό + + + (always required) + (απαιτούμενο) Close Κλείσιμο - - Toggle all apps - Για όλες τις εφαρμογές + + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + Εδώ μπορείς να δεις και να ρυθμίσεις τις πληροφορίες που συλλέγουμε σχετικά με εσένα. + + + + Πολιτική Απορρήτου - - Use this switch to enable/disable all apps. - Χρησιμοποίησε αυτό τον διακόπτη για να ενεργοποιήσεις/απενεργοποιήσεις όλες τις εφαρμογές + + + Για περισσότερες πληροφορίες, παρακαλώ διαβάστε την {privacyPolicy}. - - (opt-out) - (μη απαιτούμενο) + + Services we would like to use + Πληροφορίες που συλλέγουμε - - This app is loaded by default (but you can opt out) - Είναι προκαθορισμένο να φορτώνεται, άλλα μπορεί να παραληφθεί + + There were changes since your last visit, please renew your consent. + Πραγματοποιήθηκαν αλλαγές μετά την τελευταία σας επίσκεψη παρακαλούμε ανανεώστε την συγκατάθεση σας. - - (always required) - (απαιτούμενο) + + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. + Συγκεντρώνουμε και επεξεργαζόμαστε τα προσωπικά δεδομένα σας για τους παρακάτω λόγους: {purposes}. - - This application is always required - Δεν γίνεται να λειτουργήσει σωστά η εφαρμογή χωρίς αυτό + + - - Purposes - Σκοποί + + + imprint - - Purpose - Σκοπός + + Let me choose + Περισσότερα + + + + Πολιτική Απορρήτου + + + I decline + Απόρριπτω + + + That's ok + OK - Powered by Klaro! + Realized with Klaro! Υποστηρίζεται από το Klaro! + + service + + + services + + + Save + Αποθήκευση + diff --git a/Resources/Private/Translations/en.ref/Klaro.xlf b/Resources/Private/Translations/en.ref/Klaro.xlf new file mode 100644 index 0000000..113760c --- /dev/null +++ b/Resources/Private/Translations/en.ref/Klaro.xlf @@ -0,0 +1,161 @@ + + + + + ################################################################################################ + # IMPORTANT: This file was auto-generated as part of the build process to convert translations # + # provided by klaro. -> see package.json -> "yarn run build:translations" # + ################################################################################################ + + + + privacy policy + privacy policy + + + To learn more, please read our {privacyPolicy}. + To learn more, please read our <tr-hint v="privacy policy">{privacyPolicy}</tr-hint>. + + + Services we would like to use + Services we would like to use + + + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + + + Testing mode! + Testing mode! + + + There were changes since your last visit, please renew your consent. + There were changes since your last visit, please renew your consent. + + + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. + + + + Let me choose + + + + Service Provision + + + These services are essential for the correct functioning of this website. You cannot disable them here as the service would not work correctly otherwise. + + These services are essential for the correct functioning of this website. You cannot disable them here as the service would not work correctly otherwise. + + + + + Performance Optimization + + + These services process personal information to optimize the service that this website offers. + + These services process personal information to optimize the service that this website offers. + + + + + Marketing + + + These services process personal information to show you relevant content about products, services or topics that you might be interested in. + These services process personal information to show you relevant content about products, services or topics that you might be interested in. + + + + Advertising + + + These services process personal information to show you personalized or interest-based advertisements. + These services process personal information to show you personalized or interest-based advertisements. + + + service + A simple <tr-snip>service</tr-snip> that I install on my computer. + + + services + Several simple <tr-snip>services</tr-snip> that I install on my computer. + + + + That's ok + + + + save + + + + I decline + + + + close + + + + accept all + + + + accept selected + + + + enable or disable all services + + + Use this switch to enable or disable all services. + Use this switch to enable or disable all services. + + + (opt-out) + (opt-out) + + + This services is loaded by default (but you can opt out) + This services is loaded by default (but you can opt out) + + + (always required) + (always required) + + + This services is always required + This services is always required + + + purposes + Processing <tr-snip>purposes</tr-snip> + + + purpose + Processing <tr-snip>purpose</tr-snip> + + + Realized with Klaro! + Realized with Klaro! + + + Do you want to load external content supplied by {title}? + Do you want to load external content supplied by {title}? + + + Yes + Yes + + + Always + Always + + + + diff --git a/Resources/Private/Translations/en/Elements.xlf b/Resources/Private/Translations/en/Elements.xlf deleted file mode 100644 index e3d6a60..0000000 --- a/Resources/Private/Translations/en/Elements.xlf +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - Content was blocked.
Please activate "{group}" in your Cookie settings.]]> - -
- -
-
diff --git a/Resources/Private/Translations/en/Groups.xlf b/Resources/Private/Translations/en/Groups.xlf deleted file mode 100644 index 3c7058b..0000000 --- a/Resources/Private/Translations/en/Groups.xlf +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - Default - - - Default Description - - - - diff --git a/Resources/Private/Translations/en/Klaro.xlf b/Resources/Private/Translations/en/Klaro.xlf index a890ece..ba447bf 100644 --- a/Resources/Private/Translations/en/Klaro.xlf +++ b/Resources/Private/Translations/en/Klaro.xlf @@ -8,80 +8,115 @@ ################################################################################################ - - Information that we collect + + Accept all - - Here you can see and customize the information that we collect about you. - + + Accept selected - - privacy policy + + Close - - To learn more, please read our {privacyPolicy}. - + + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + + + Services we would like to use - There were changes since your last visit, please update your consent. + There were changes since your last visit, please renew your consent. - We collect and process your personal information for the following purposes: {purposes}. - + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. - Customize + Let me choose - - privacy policy + + Testing mode! - - Imprint + + Always - - Accept + + Yes - - Save + + Do you want to load external content supplied by {title}? - Decline + I decline - - Close + + That's ok - - Accept all + + Realized with Klaro! - - Accept selected + + privacy policy - - Toggle all apps + + To learn more, please read our {privacyPolicy}. - - Use this switch to enable/disable all apps. + + service - - (opt-out) + + services - - This app is loaded by default (but you can opt out) + + These services process personal information to show you personalized or interest-based advertisements. - - (always required) + + Advertising - - This application is always required + + These services are essential for the correct functioning of this website. You cannot disable them here as the service would not work correctly otherwise. + - - Purposes + + Service Provision - - Purpose + + These services process personal information to show you relevant content about products, services or topics that you might be interested in. - - Powered by Klaro! + + Marketing + + + These services process personal information to optimize the service that this website offers. + + + + Performance Optimization + + + Save + + + Use this switch to enable or disable all services. + + + Enable or disable all services + + + This services is loaded by default (but you can opt out) + + + (opt-out) + + + purpose + + + purposes + + + This services is always required + + + (always required) diff --git a/Resources/Private/Translations/es/Klaro.xlf b/Resources/Private/Translations/es/Klaro.xlf index 9aa8f53..b79951f 100644 --- a/Resources/Private/Translations/es/Klaro.xlf +++ b/Resources/Private/Translations/es/Klaro.xlf @@ -8,99 +8,167 @@ ################################################################################################ - - Information that we collect - Información que recopilamos + + Accept all + Aceptar todas + + + Accept selected + Aceptar seleccionadas + + + Close + Cerrar - Here you can see and customize the information that we collect about you. - - Aquí puede ver y personalizar la información que recopilamos sobre usted. - + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + Aquí puede evaluar y personalizar los servicios que nos gustaría utilizar en este sitio web. ¡Usted decide! Habilite o deshabilite los servicios como considere oportuno. - privacy policy + política de privacidad - To learn more, please read our {privacyPolicy}. - - Para más información consulte nuestra {privacyPolicy}. - + + Para saber más, por favor lea nuestra {privacyPolicy}. + + + Services we would like to use + Servicios que nos gustaría utilizar - There were changes since your last visit, please update your consent. - Ha habido cambios desde su última visita, por favor, actualice su consentimiento. + There were changes since your last visit, please renew your consent. + Ha habido cambios en las cookies desde su última visita. Debe renovar su consentimiento. - We collect and process your personal information for the following purposes: {purposes}. - - Recopilamos y procesamos su información personal con los siguientes fines: {purposes}. - + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. + ¡Hola! ¿Podríamos habilitar algunos servicios adicionales para {purposes}? Siempre podrá cambiar o retirar su consentimiento más tarde. + + + + Imprimir - Customize - Más información + Let me choose + Quiero elegir - privacy policy + política de privacidad - - Imprint - Imprimir + + Testing mode! + ¡Modo de prueba! + + + Always + Siempre + + + Yes + + + + Do you want to load external content supplied by {title}? + ¿Quieres cargar el contenido externo suministrado por {title}? + + + I decline + Descartar todas - Accept - Aceptar + That's ok + De acuerdo + + + Realized with Klaro! + ¡Realizado con Klaro! + + + privacy policy + política de privacidad + + + To learn more, please read our {privacyPolicy}. + Para saber más, por favor lea nuestra {privacyPolicy}. + + + service + servicio + + + services + servicios + + + These services process personal information to show you personalized or interest-based advertisements. + Estos servicios procesan información personal para mostrarle anuncios personalizados o basados en intereses. + + + Advertising + Publicidad + + + These services are essential for the correct functioning of this website. You cannot disable them here as the service would not work correctly otherwise. + + Estos servicios son esenciales para el correcto funcionamiento de este sitio web. No puede desactivarlos ya que la página no funcionaría correctamente. + + + Service Provision + Prestación de servicios + + + These services process personal information to show you relevant content about products, services or topics that you might be interested in. + Estos servicios procesan información personal para mostrarle contenido relevante sobre productos, servicios o temas que puedan interesarle. + + + Marketing + Marketing + + + These services process personal information to optimize the service that this website offers. + + Estos servicios procesan información personal para optimizar el servicio que ofrece este sitio. + + + Performance Optimization + Optimización del rendimiento Save Guardar - - Decline - Rechazar - - - Close - Cerrar + + Use this switch to enable or disable all services. + Utilice este interruptor para activar o desactivar todos los servicios. - - Toggle all apps - Habilitar/deshabilitar todas las aplicaciones + + Enable or disable all services + Activar o desactivar todos los servicios - - Use this switch to enable/disable all apps. - Use este botón para habilitar o deshabilitar todas las aplicaciones. + + This services is loaded by default (but you can opt out) + Este servicio está habilitado por defecto (pero puede optar por lo contrario) - + (opt-out) - (opt-out) - - - This app is loaded by default (but you can opt out) - Esta aplicación se carga de forma predeterminada (pero puede desactivarla) - - - (always required) - (necesaria) + (desactivar) - - This application is always required - Esta aplicación se necesita siempre + + purpose + Finalidad - - Purposes - Fines + + purposes + Finalidades - - Purpose - Fin + + This services is always required + Este servicio es necesario siempre - - Powered by Klaro! - Powered by Klaro! + + (always required) + (siempre requerido) diff --git a/Resources/Private/Translations/fi/Klaro.xlf b/Resources/Private/Translations/fi/Klaro.xlf index 7ac5d96..f0543c4 100644 --- a/Resources/Private/Translations/fi/Klaro.xlf +++ b/Resources/Private/Translations/fi/Klaro.xlf @@ -8,95 +8,116 @@ ################################################################################################ - - Information that we collect - Keräämämme tiedot + + Accept all + + + + Accept all + + + Accept selected + + + + Accept selected + + + Use this switch to enable or disable all services. + Aktivoi kaikki päälle/pois. + + + Enable or disable all services + Valitse kaikki + + + This services is loaded by default (but you can opt out) + Ladataan oletuksena (mutta voit ottaa sen pois päältä) + + + (opt-out) + (ladataan oletuksena) + + + purpose + Käyttötarkoitus + + + purposes + Käyttötarkoitukset + + + This services is always required + Sivusto vaatii tämän aina + + + (always required) + (vaaditaan) + + + Close + Sulje - Here you can see and customize the information that we collect about you. - - Voit tarkastella ja muokata sinusta keräämiämme tietoja. - + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + Voit tarkastella ja muokata sinusta keräämiämme tietoja. - privacy policy + tietosuojasivultamme - To learn more, please read our {privacyPolicy}. - - Voit lukea lisätietoja {privacyPolicy}. - + + Voit lukea lisätietoja {privacyPolicy}. + + + Services we would like to use + Keräämämme tiedot - There were changes since your last visit, please update your consent. + There were changes since your last visit, please renew your consent. Olemme tehneet muutoksia ehtoihin viime vierailusi jälkeen, tarkista ehdot. - We collect and process your personal information for the following purposes: {purposes}. - - Keräämme ja käsittelemme henkilötietoja seuraaviin tarkoituksiin: {purposes}. - + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. + Keräämme ja käsittelemme henkilötietoja seuraaviin tarkoituksiin: {purposes}. + + + + + + + imprint - Customize + Let me choose Lue lisää - privacy policy + tietosuojasivultamme - - Accept - Hyväksy - - - Save - Tallenna - - Decline + I decline Hylkää - - Close - Sulje - - - Toggle all apps - Valitse kaikki - - - Use this switch to enable/disable all apps. - Aktivoi kaikki päälle/pois. - - - (opt-out) - (ladataan oletuksena) - - - This app is loaded by default (but you can opt out) - Ladataan oletuksena (mutta voit ottaa sen pois päältä) - - - (always required) - (vaaditaan) + + That's ok + Hyväksy - - This application is always required - Sivusto vaatii tämän aina + + Realized with Klaro! + Palvelun tarjoaa Klaro! - - Purposes - Käyttötarkoitukset + + service - - Purpose - Käyttötarkoitus + + services - - Powered by Klaro! - Palvelun tarjoaa Klaro! + + Save + Tallenna diff --git a/Resources/Private/Translations/fr/Klaro.xlf b/Resources/Private/Translations/fr/Klaro.xlf index 4237896..f91aaf6 100644 --- a/Resources/Private/Translations/fr/Klaro.xlf +++ b/Resources/Private/Translations/fr/Klaro.xlf @@ -8,107 +8,169 @@ ################################################################################################ - - Information that we collect - Les informations que nous collectons + + Accept all + Accepter tout + + + Accept selected + Accepter sélectionné + + + Close + Fermer - Here you can see and customize the information that we collect about you. - - Ici, vous pouvez voir et personnaliser les informations que nous collectons sur vous. - + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + Vous pouvez ici évaluer et personnaliser les services que nous aimerions utiliser sur ce site. C'est vous qui décidez ! Activez ou désactivez les services comme bon vous semble. - privacy policy + politique de confidentialité - To learn more, please read our {privacyPolicy}. - - Pour en savoir plus, merci de lire notre {privacyPolicy}. - + + Pour en savoir plus, veuillez lire notre {privacyPolicy}. + + + Services we would like to use + Services que nous souhaitons utiliser - There were changes since your last visit, please update your consent. - Des modifications ont eu lieu depuis votre dernière visite, merci de mettre à jour votre consentement. + There were changes since your last visit, please renew your consent. + Il y a eu des changements depuis votre dernière visite, veuillez renouveler votre consentement. - We collect and process your personal information for the following purposes: {purposes}. - - Nous collectons et traitons vos informations personnelles dans le but suivant : {purposes}. - + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. + Bonjour ! Pourrions-nous activer des services supplémentaires pour {purposes}? Vous pouvez toujours modifier ou retirer votre consentement plus tard. + + + + mentions légales - Customize - En savoir plus + Let me choose + Laissez-moi choisir - privacy policy + politique de confidentialité - - Imprint - Imprimer + + Testing mode! + Mode test ! - - Accept - OK + + Always + Toujours - - Save - Sauvegarder + + Yes + Oui + + + Do you want to load external content supplied by {title}? + Vous souhaitez charger un contenu externe fourni par {title}? - Decline - Refuser + I decline + Je refuse - - Close - Fermer + + That's ok + C'est bon. - - Accept all - Tout accepter + + Realized with Klaro! + Réalisé avec Klaro ! - - Accept selected - Accepter la sélection + + privacy policy + politique de confidentialité - - Toggle all apps - Changer toutes les options + + To learn more, please read our {privacyPolicy}. + Pour en savoir plus, veuillez lire notre {privacyPolicy}. - - Use this switch to enable/disable all apps. - Utiliser ce bouton pour activer/désactiver toutes les options + + service + service - - (opt-out) - (opt-out) + + services + services - - This app is loaded by default (but you can opt out) - Cette application est chargée par défaut (mais vous pouvez la désactiver) + + These services process personal information to show you personalized or interest-based advertisements. + Ces services traitent les informations personnelles pour vous présenter des publicités personnalisées ou basées sur des intérêts. - - (always required) - (toujours requis) + + Advertising + Publicité + + + These services are essential for the correct functioning of this website. You cannot disable them here as the service would not work correctly otherwise. + + Ces services sont essentiels au bon fonctionnement de ce site. Vous ne pouvez pas les désactiver ici car le service ne fonctionnerait pas correctement autrement. + - - This application is always required - Cette application est toujours requise + + Service Provision + Prestation de services - - Purposes - Utilisations + + These services process personal information to show you relevant content about products, services or topics that you might be interested in. + Ces services traitent les informations personnelles afin de vous présenter un contenu pertinent sur les produits, les services ou les sujets qui pourraient vous intéresser. - - Purpose - Utilisation + + Marketing + Marketing - - Powered by Klaro! - Propulsé par Klaro! + + These services process personal information to optimize the service that this website offers. + + Ces services traitent les informations personnelles afin d'optimiser le service que ce site Web offre. + + + + Performance Optimization + Optimisation de la performance + + + Save + Enregistrer + + + Use this switch to enable or disable all services. + Utilisez ce commutateur pour activer ou désactiver tous les services. + + + Enable or disable all services + Activer ou désactiver tous les services + + + This services is loaded by default (but you can opt out) + Ce service est chargé par défaut (mais vous pouvez le désactiver) + + + (opt-out) + (opt-out) + + + purpose + Objet + + + purposes + Fins + + + This services is always required + Ce service est toujours nécessaire + + + (always required) + (toujours requis) diff --git a/Resources/Private/Translations/gl/Klaro.xlf b/Resources/Private/Translations/gl/Klaro.xlf new file mode 100644 index 0000000..e09bfca --- /dev/null +++ b/Resources/Private/Translations/gl/Klaro.xlf @@ -0,0 +1,163 @@ + + + + + ################################################################################################ + # IMPORTANT: This file was auto-generated as part of the build process to convert translations # + # provided by klaro. -> see package.json -> "yarn run build:translations" # + ################################################################################################ + + + + Accept all + Aceptar todas + + + Accept selected + Aceptar seleccionadas + + + Close + Pechar + + + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + Aquí pode avaliar e personalizar os servizos que nos gustaría utilizar neste sitio web. ¡Vostede decide! Habilite ou deshabilite os servicios como lle conveña. + + + + política de privacidade + + + + Para saber máis, por favor lea a nosa {privacyPolicy}. + + + Services we would like to use + Servizos que nos gustaría utilizar + + + There were changes since your last visit, please renew your consent. + Houbo cambios nas cookies dende a súa última visita. Debe renovar o seu consentimento. + + + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. + ¡Ola! ¿Poderíamos habilitar algúns servizos adicionais para {purposes}? Sempre poderá cambiar ou retirar o séu consentimento máis tarde. + + + + Imprimir + + + Let me choose + Quero elixir + + + + política de privacidade + + + Testing mode! + ¡Modo de proba! + + + I decline + Descartar todas + + + That's ok + De acordo + + + Realized with Klaro! + ¡Realizado con Klaro! + + + privacy policy + política de privacidade + + + To learn more, please read our {privacyPolicy}. + Para saber máis, por favor lea a nosa {privacyPolicy}. + + + service + servizo + + + services + servizos + + + These services process personal information to show you personalized or interest-based advertisements. + Estes servizos procesan información persoal para mostrarlle anuncios personalizados ou basados en intereses. + + + Advertising + Publicidade + + + These services are essential for the correct functioning of this website. You cannot disable them here as the service would not work correctly otherwise. + + Estes servizos son esenciais para o correcto funcionamiento deste sitio web. Non pode desactivalos xa que a páxina non funcionaría correctamente. + + + Service Provision + Prestación de servizos + + + These services process personal information to show you relevant content about products, services or topics that you might be interested in. + Estes servizos procesan información persoal para mostrarlle contido relevante sobre produtos, servizos ou temas que poidan interesarlle. + + + Marketing + Marketing + + + These services process personal information to optimize the service that this website offers. + + Estes servizos procesan información persoal para optimizar o servizo que ofrece este sitio. + + + Performance Optimization + Optimización do rendimento + + + Save + Gardar + + + Use this switch to enable or disable all services. + Utilice este interruptor para activar ou desactivar todos os servizos. + + + Enable or disable all services + Activar ou desactivar todos os servizos + + + This services is loaded by default (but you can opt out) + Este servizo está habilitado por defecto (pero pode optar polo contrario) + + + (opt-out) + (desactivar) + + + purpose + Finalidade + + + purposes + Finalidades + + + This services is always required + Este servizo é necesario sempre + + + (always required) + (sempre requirido) + + + + diff --git a/Resources/Private/Translations/hr/Klaro.xlf b/Resources/Private/Translations/hr/Klaro.xlf index 044f51b..6f15cd1 100644 --- a/Resources/Private/Translations/hr/Klaro.xlf +++ b/Resources/Private/Translations/hr/Klaro.xlf @@ -8,95 +8,116 @@ ################################################################################################ - - Information that we collect - Informacije koje prikupljamo + + Accept all + + + + Prihvati sve + + + Accept selected + + + + Prihvati odabrane + + + Use this switch to enable or disable all services. + Koristite ovaj prekidač da omogućite/onemogućite sve aplikacije odjednom. + + + Enable or disable all services + Izmeijeni sve + + + This services is loaded by default (but you can opt out) + Ova aplikacija je učitana automatski (ali je možete onemogućiti) + + + (opt-out) + (onemogućite) + + + purpose + Svrha + + + purposes + Svrhe + + + This services is always required + Ova aplikacija je uvijek obavezna + + + (always required) + (obavezna) + + + Close + Zatvori - Here you can see and customize the information that we collect about you. - - Ovdje možete vidjeti i podesiti informacije koje prikupljamo o Vama. - + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + Ovdje možete vidjeti i podesiti informacije koje prikupljamo o Vama. - privacy policy + pravila privatnosti - To learn more, please read our {privacyPolicy}. - - Za više informacije pročitajte naša {privacyPolicy}. - + + Za više informacije pročitajte naša {privacyPolicy}. + + + Services we would like to use + Informacije koje prikupljamo - There were changes since your last visit, please update your consent. + There were changes since your last visit, please renew your consent. Došlo je do promjena od Vaše posljednjeg posjećivanja web stranice, molimo Vas da ažurirate svoja odobrenja. - We collect and process your personal information for the following purposes: {purposes}. - - Mi prikupljamo i procesiramo Vaše osobne podatke radi slijedećeg: {purposes}. - + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. + Mi prikupljamo i procesiramo Vaše osobne podatke radi slijedećeg: {purposes}. + + + + + + + imprint - Customize + Let me choose Saznajte više - privacy policy + pravila privatnosti - - Accept - U redu - - - Save - Spremi - - Decline + I decline Odbij - - Close - Zatvori - - - Toggle all apps - Izmeijeni sve - - - Use this switch to enable/disable all apps. - Koristite ovaj prekidač da omogućite/onemogućite sve aplikacije odjednom. - - - (opt-out) - (onemogućite) - - - This app is loaded by default (but you can opt out) - Ova aplikacija je učitana automatski (ali je možete onemogućiti) - - - (always required) - (obavezna) + + That's ok + U redu - - This application is always required - Ova aplikacija je uvijek obavezna. + + Realized with Klaro! + Pokreće Klaro! - - Purposes - Svrhe + + service - - Purpose - Svrha + + services - - Powered by Klaro! - Pokreće Klaro! + + Save + Spremi diff --git a/Resources/Private/Translations/hu/Klaro.xlf b/Resources/Private/Translations/hu/Klaro.xlf index ef7ff9a..a6e73c1 100644 --- a/Resources/Private/Translations/hu/Klaro.xlf +++ b/Resources/Private/Translations/hu/Klaro.xlf @@ -8,95 +8,116 @@ ################################################################################################ - - Information that we collect - Információk, amiket gyűjtünk + + Accept all + + + + Accept all + + + Accept selected + + + + Accept selected + + + Use this switch to enable or disable all services. + Használd ezt a kapcsolót az összes alkalmazás engedélyezéséhez/letiltásához. + + + Enable or disable all services + Összes app átkapcsolása + + + This services is loaded by default (but you can opt out) + Ez az alkalmazás alapértelmezés szerint betöltött (de ki lehet kapcsolni) + + + (opt-out) + (leiratkozás) + + + purpose + Cél + + + purposes + Célok + + + This services is always required + Ez az alkalmazás mindig kötelező + + + (always required) + (mindig kötelező) + + + Close + Elvet - Here you can see and customize the information that we collect about you. - - Itt láthatod és testreszabhatod az rólad gyűjtött információkat. - + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + Itt láthatod és testreszabhatod az rólad gyűjtött információkat. - privacy policy + adatvédelmi irányelveinket - To learn more, please read our {privacyPolicy}. - - További információért kérjük, olvassd el az {privacyPolicy}. - + + További információért kérjük, olvassd el az {privacyPolicy}. + + + Services we would like to use + Információk, amiket gyűjtünk - There were changes since your last visit, please update your consent. + There were changes since your last visit, please renew your consent. Az utolsó látogatás óta változások történtek, kérjük, frissítsd a hozzájárulásodat. - We collect and process your personal information for the following purposes: {purposes}. - - Az személyes adataidat összegyűjtjük és feldolgozzuk az alábbi célokra: {purposes}. - + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. + Az személyes adataidat összegyűjtjük és feldolgozzuk az alábbi célokra: {purposes}. + + + + + + + imprint - Customize + Let me choose Tudj meg többet - privacy policy + adatvédelmi irányelveinket - - Accept - Elfogad - - - Save - Save - - Decline + I decline Mentés - - Close - Elvet - - - Toggle all apps - Összes app átkapcsolása - - - Use this switch to enable/disable all apps. - Használd ezt a kapcsolót az összes alkalmazás engedélyezéséhez/letiltásához. - - - (opt-out) - (leiratkozás) - - - This app is loaded by default (but you can opt out) - Ez az alkalmazás alapértelmezés szerint betöltött (de ki lehet kapcsolni) - - - (always required) - (mindig kötelező) + + That's ok + Elfogad - - This application is always required - Ez az alkalmazás mindig kötelező + + Realized with Klaro! + Powered by Klaro! - - Purposes - Célok + + service - - Purpose - Cél + + services - - Powered by Klaro! - Powered by Klaro! + + Save + Save diff --git a/Resources/Private/Translations/it/Klaro.xlf b/Resources/Private/Translations/it/Klaro.xlf index 5db5040..55e87f8 100644 --- a/Resources/Private/Translations/it/Klaro.xlf +++ b/Resources/Private/Translations/it/Klaro.xlf @@ -8,99 +8,169 @@ ################################################################################################ - - Information that we collect - Informazioni che raccogliamo + + Accept all + Accettare tutti + + + Accept selected + Accettare selezionato + + + Close + Chiudi - Here you can see and customize the information that we collect about you. - - Qui puoi vedere e scegliere le informazioni che raccogliamo su di te. - + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + Qui può valutare e personalizzare i servizi che vorremmo utilizzare su questo sito web. È lei il responsabile! Abilitare o disabilitare i servizi come meglio crede. - privacy policy - policy privacy + + informativa sulla privacy - To learn more, please read our {privacyPolicy}. - - Per saperne di più, leggi la nostra {privacyPolicy}. - + + Per saperne di più, legga la nostra {privacyPolicy}. + + + Services we would like to use + Servizi che desideriamo utilizzare - There were changes since your last visit, please update your consent. - Ci sono stati cambiamenti dalla tua ultima visita, aggiorna il tuo consenso. + There were changes since your last visit, please renew your consent. + Ci sono stati dei cambiamenti rispetto alla sua ultima visita, la preghiamo di rinnovare il suo consenso. - We collect and process your personal information for the following purposes: {purposes}. - - Raccogliamo ed elaboriamo le vostre informazioni personali per i seguenti scopi: {purposes}. - + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. + Salve, possiamo attivare alcuni servizi aggiuntivi per {purposes}? Può sempre modificare o ritirare il suo consenso in un secondo momento. + + + + impronta - Customize - Scopri di più + Let me choose + Lasciatemi scegliere - privacy policy - policy privacy + + informativa sulla privacy - - Imprint - Impronta + + Testing mode! + Modalità di test! + + + Always + Sempre + + + Yes + + + + Do you want to load external content supplied by {title}? + Vuole caricare contenuti esterni forniti da {title}? + + + I decline + Rifiuto - Accept - OK + That's ok + Va bene così + + + Realized with Klaro! + Realizzato con Klaro! + + + privacy policy + informativa sulla privacy + + + To learn more, please read our {privacyPolicy}. + Per saperne di più, legga la nostra {privacyPolicy}. + + + service + servizio + + + services + servizi + + + These services process personal information to show you personalized or interest-based advertisements. + Questi servizi elaborano le informazioni personali per mostrarle annunci pubblicitari personalizzati o basati su interessi. + + + Advertising + Pubblicità + + + These services are essential for the correct functioning of this website. You cannot disable them here as the service would not work correctly otherwise. + + Questi servizi sono essenziali per il corretto funzionamento di questo sito web. Non può disattivarli qui perché altrimenti il servizio non funzionerebbe correttamente. + + + + Service Provision + Fornitura di servizi + + + These services process personal information to show you relevant content about products, services or topics that you might be interested in. + Questi servizi elaborano le informazioni personali per mostrarle contenuti rilevanti su prodotti, servizi o argomenti che potrebbero interessarla. + + + Marketing + Marketing + + + These services process personal information to optimize the service that this website offers. + + Questi servizi elaborano le informazioni personali per ottimizzare il servizio offerto da questo sito web. + + + + Performance Optimization + Ottimizzazione delle prestazioni Save Salva - - Decline - Rifiuta + + Use this switch to enable or disable all services. + Utilizzi questo interruttore per attivare o disattivare tutti i servizi. - - Close - Chiudi - - - Toggle all apps - Cambia per tutte le app + + Enable or disable all services + Attivare o disattivare tutti i servizi - - Use this switch to enable/disable all apps. - Usa questo interruttore per abilitare/disabilitare tutte le app. + + This services is loaded by default (but you can opt out) + Questo servizio è caricato di default (ma è possibile scegliere di non usufruirne) - + (opt-out) (opt-out) - - This app is loaded by default (but you can opt out) - Quest'applicazione è caricata di default (ma puoi disattivarla) + + purpose + Scopo dell - - (always required) - (sempre richiesto) - - - This application is always required - Quest'applicazione è sempre richiesta - - - Purposes - Scopi + + purposes + Finalità - - Purpose - Scopo + + This services is always required + Questo servizio è sempre richiesto - - Powered by Klaro! - Realizzato da Klaro! + + (always required) + (sempre richiesto) diff --git a/Resources/Private/Translations/nl/Klaro.xlf b/Resources/Private/Translations/nl/Klaro.xlf index 53162e6..e1e7263 100644 --- a/Resources/Private/Translations/nl/Klaro.xlf +++ b/Resources/Private/Translations/nl/Klaro.xlf @@ -8,99 +8,169 @@ ################################################################################################ - - Information that we collect - Informatie die we verzamelen + + Accept all + Accepteer alle + + + Accept selected + Geselecteerde + + + Close + Sluit - Here you can see and customize the information that we collect about you. - - Hier kunt u de informatie bekijken en aanpassen die we over u verzamelen. - + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + Hier kunt u de diensten die wij op deze website willen gebruiken beoordelen en aanpassen. U heeft de leiding! Schakel de diensten naar eigen inzicht in of uit. - privacy policy + privacybeleid - To learn more, please read our {privacyPolicy}. - - Lees ons privacybeleid voor meer informatie {privacyPolicy}. - + + Voor meer informatie kunt u ons {privacyPolicy} lezen. + + + Services we would like to use + Diensten die we graag willen gebruiken - There were changes since your last visit, please update your consent. - Er waren wijzigingen sinds uw laatste bezoek, werk uw voorkeuren bij. + There were changes since your last visit, please renew your consent. + Er waren veranderingen sinds uw laatste bezoek, gelieve uw toestemming te hernieuwen. - We collect and process your personal information for the following purposes: {purposes}. - - Wij verzamelen en verwerken uw persoonlijke gegevens voor de volgende doeleinden: {purposes}. - + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. + Hallo, kunnen wij u een aantal extra diensten aanbieden voor {purposes}? U kunt uw toestemming later altijd nog wijzigen of intrekken. + + + + impressum - Customize - Lees meer + Let me choose + Laat me kiezen - privacy policy + privacybeleid - - Imprint - Afdruk + + Testing mode! + Testmodus! + + + Always + Altijd + + + Yes + Ja + + + Do you want to load external content supplied by {title}? + Wilt u externe content laden die door {title} wordt aangeleverd ? + + + I decline + Ik weiger - Accept - OK + That's ok + Dat is oké + + + Realized with Klaro! + Gerealiseerd met Klaro! + + + privacy policy + privacybeleid + + + To learn more, please read our {privacyPolicy}. + Voor meer informatie kunt u ons {privacyPolicy} lezen. + + + service + service + + + services + diensten + + + These services process personal information to show you personalized or interest-based advertisements. + Deze diensten verwerken persoonlijke informatie om u gepersonaliseerde of op interesse gebaseerde advertenties te tonen. + + + Advertising + Reclame + + + These services are essential for the correct functioning of this website. You cannot disable them here as the service would not work correctly otherwise. + + Deze diensten zijn essentieel voor het correct functioneren van deze website. U kunt ze hier niet uitschakelen omdat de dienst anders niet correct zou werken. + + + + Service Provision + Dienstverlening + + + These services process personal information to show you relevant content about products, services or topics that you might be interested in. + Deze diensten verwerken persoonlijke informatie om u relevante inhoud te tonen over producten, diensten of onderwerpen waarin u geïnteresseerd zou kunnen zijn. + + + Marketing + Marketing + + + These services process personal information to optimize the service that this website offers. + + Deze diensten verwerken persoonlijke informatie om de service die deze website biedt te optimaliseren. + + + + Performance Optimization + Optimalisatie van de prestaties Save Opslaan - - Decline - Afwijzen + + Use this switch to enable or disable all services. + Gebruik deze schakelaar om alle diensten in of uit te schakelen. - - Close - Sluiten + + Enable or disable all services + Alle diensten in- of uitschakelen - - Toggle all apps - Alle opties in/uit schakelen + + This services is loaded by default (but you can opt out) + Deze diensten worden standaard geladen (maar u kunt zich afmelden) - - Use this switch to enable/disable all apps. - Gebruik deze schakeloptie om alle apps in/uit te schakelen. - - + (opt-out) - (afmelden) - - - This app is loaded by default (but you can opt out) - Deze app is standaard geladen (maar je kunt je afmelden) - - - (always required) - (altijd verplicht) + (opt-out) - - This application is always required - Deze applicatie is altijd vereist + + purpose + Verwerkingsdoel - - Purposes - Doeleinden + + purposes + Verwerkingsdoeleinden - - Purpose - Doeleinde + + This services is always required + Deze diensten zijn altijd nodig - - Powered by Klaro! - Aangedreven door Klaro! + + (always required) + (altijd nodig) diff --git a/Resources/Private/Translations/no/Klaro.xlf b/Resources/Private/Translations/no/Klaro.xlf index ebe0922..7e47a93 100644 --- a/Resources/Private/Translations/no/Klaro.xlf +++ b/Resources/Private/Translations/no/Klaro.xlf @@ -8,99 +8,113 @@ ################################################################################################ - - Information that we collect - Informasjon vi samler inn + + Accept all + Godtar alle + + + Accept selected + Godtar valgt + + + Use this switch to enable or disable all services. + Bruk denne for å skru av/på alle apper. + + + Enable or disable all services + Bytt alle apper + + + This services is loaded by default (but you can opt out) + Denne appen er lastet som standard (men du kan skru det av) + + + (opt-out) + (opt-out) + + + purpose + Årsak + + + purposes + Årsaker + + + This services is always required + Denne applikasjonen er alltid påkrevd + + + (always required) + (alltid påkrevd) + + + Close + + + + Close - Here you can see and customize the information that we collect about you. - - Her kan du se og velge hvilken informasjon vi samler inn om deg. - + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + Her kan du se og velge hvilken informasjon vi samler inn om deg. - privacy policy + personvernerklæring - To learn more, please read our {privacyPolicy}. - - For å lære mer, vennligst les vår {privacyPolicy}. - + + For å lære mer, vennligst les vår {privacyPolicy}. + + + Services we would like to use + Informasjon vi samler inn - There were changes since your last visit, please update your consent. + There were changes since your last visit, please renew your consent. Det har skjedd endringer siden ditt siste besøk, vennligst oppdater ditt samtykke. - We collect and process your personal information for the following purposes: {purposes}. - - Vi samler inn og prosesserer din personlige informasjon av følgende årsaker: {purposes}. - + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. + Vi samler inn og prosesserer din personlige informasjon av følgende årsaker: {purposes}. + + + + + + + imprint - Customize + Let me choose Lær mer - privacy policy + personvernerklæring - - Accept - OK - - - Save - Opslaan - - Decline + I decline Avslå - - Accept all - Godtar alle - - - Accept selected - Godtar valgt - - - Toggle all apps - Bytt alle apper - - - Use this switch to enable/disable all apps. - Bruk denne for å skru av/på alle apper. - - - (opt-out) - (opt-out) - - - This app is loaded by default (but you can opt out) - Denne appen er lastet som standard (men du kan skru det av) - - - (always required) - (alltid påkrevd) + + That's ok + OK - - This application is always required - Denne applikasjonen er alltid påkrevd + + Realized with Klaro! + Laget med Klaro! - - Purposes - Årsaker + + service - - Purpose - Årsak + + services - - Powered by Klaro! - Laget med Klaro! + + Save + Opslaan diff --git a/Resources/Private/Translations/pl/Klaro.xlf b/Resources/Private/Translations/pl/Klaro.xlf index d4af5fc..23d13f6 100644 --- a/Resources/Private/Translations/pl/Klaro.xlf +++ b/Resources/Private/Translations/pl/Klaro.xlf @@ -8,99 +8,169 @@ ################################################################################################ - - Information that we collect - Informacje, które zbieramy + + Accept all + Zaakceptować wszystkie + + + Accept selected + Zaakceptować wybrany + + + Close + Blisko - Here you can see and customize the information that we collect about you. - - Tutaj możesz zobaczyć i dostosować informacje, które zbieramy o Tobie. - + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + Tutaj mogą Państwo ocenić i dostosować usługi, z których chcielibyśmy skorzystać na tej stronie. Jesteście Państwo odpowiedzialni! Mogą Państwo włączać lub wyłączać usługi według własnego uznania. - privacy policy + polityka prywatności - To learn more, please read our {privacyPolicy}. - - Aby dowiedzieć się więcej, przeczytaj naszą {privacyPolicy}. - + + Aby dowiedzieć się więcej, prosimy o zapoznanie się z naszą {privacyPolicy}. + + + Services we would like to use + Usługi, z których chcielibyśmy skorzystać - There were changes since your last visit, please update your consent. - Nastąpiły zmiany od Twojej ostatniej wizyty, zaktualizuj swoją zgodę. + There were changes since your last visit, please renew your consent. + Od czasu ostatniej wizyty nastąpiły zmiany, prosimy o odnowienie zgody. - We collect and process your personal information for the following purposes: {purposes}. - - Zbieramy i przetwarzamy dane osobowe w następujących celach: {purposes}. - + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. + Witam! Czy możemy włączyć dodatkowe usługi dla {purposes}? W każdej chwili mogą Państwo później zmienić lub wycofać swoją zgodę. + + + + odcisk - Customize - Dowiedz się więcej + Let me choose + Pozwól mi wybrać - privacy policy + polityka prywatności - - Imprint - Odcisk + + Testing mode! + Tryb testowy! - - Accept - OK + + Always + Zawsze - - Save - Zapisz + + Yes + Tak + + + Do you want to load external content supplied by {title}? + Czy chcą Państwo załadować treści zewnętrzne dostarczane przez {title}? - Decline - Rezygnacja + I decline + Odmawiam - - Close - Zamknij + + That's ok + To jest ok. + + + Realized with Klaro! + Zrealizowane z Klaro! + + + privacy policy + polityka prywatności - - Toggle all apps - Przełącz dla wszystkich aplikacji + + To learn more, please read our {privacyPolicy}. + Aby dowiedzieć się więcej, prosimy o zapoznanie się z naszą {privacyPolicy}. - - Use this switch to enable/disable all apps. - Użyj przełącznika, aby włączyć/wyłączyć wszystkie aplikacje. + + service + usługa - - (opt-out) - (rezygnacja) + + services + usług - - This app is loaded by default (but you can opt out) - Ta aplikacja jest domyślnie ładowana (ale możesz zrezygnować) + + These services process personal information to show you personalized or interest-based advertisements. + Usługi te przetwarzają dane osobowe w celu pokazania Państwu spersonalizowanych lub opartych na zainteresowaniach ogłoszeń. - - (always required) - (zawsze wymagane) + + Advertising + Reklama + + + These services are essential for the correct functioning of this website. You cannot disable them here as the service would not work correctly otherwise. + + Usługi te są niezbędne do prawidłowego funkcjonowania niniejszej strony internetowej. Nie mogą Państwo ich tutaj wyłączyć, ponieważ w przeciwnym razie usługa nie działałaby prawidłowo. + - - This application is always required - Ta alikacja jest zawsze wymagana + + Service Provision + Świadczenie usług - - Purposes - Cele + + These services process personal information to show you relevant content about products, services or topics that you might be interested in. + Usługi te przetwarzają dane osobowe w celu pokazania Państwu istotnych treści dotyczących produktów, usług lub tematów, którymi mogą być Państwo zainteresowani. + + + Marketing + Marketing + + + These services process personal information to optimize the service that this website offers. + + Usługi te przetwarzają dane osobowe w celu optymalizacji usług oferowanych przez tę stronę. + + + + Performance Optimization + Optymalizacja wydajności - - Purpose + + Save + Z wyjątkiem + + + Use this switch to enable or disable all services. + Za pomocą tego przełącznika można włączać lub wyłączać wszystkie usługi. + + + Enable or disable all services + Włączać lub wyłączać wszystkie usługi + + + This services is loaded by default (but you can opt out) + Ta usługa jest domyślnie załadowana (ale mogą Państwo z niej zrezygnować) + + + (opt-out) + (opt-out) + + + purpose Cel - - Powered by Klaro! - Napędzany przez Klaro! + + purposes + Cele + + + This services is always required + Usługi te są zawsze wymagane + + + (always required) + (zawsze wymagane) diff --git a/Resources/Private/Translations/pt/Klaro.xlf b/Resources/Private/Translations/pt/Klaro.xlf new file mode 100644 index 0000000..9d2bd4e --- /dev/null +++ b/Resources/Private/Translations/pt/Klaro.xlf @@ -0,0 +1,177 @@ + + + + + ################################################################################################ + # IMPORTANT: This file was auto-generated as part of the build process to convert translations # + # provided by klaro. -> see package.json -> "yarn run build:translations" # + ################################################################################################ + + + + Accept all + Aceitar todos + + + Accept selected + Aceitar selecionados + + + Close + Fechar + + + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + Aqui você pode avaliar e personalizar os serviços que gostaríamos de usar neste website. Você está no comando! Habilite ou desabilite os serviços como julgar conveniente. + + + + política de privacidade + + + + Para saber mais, por favor, leia nossa {privacyPolicy}. + + + Services we would like to use + Serviços que gostaríamos de utilizar + + + There were changes since your last visit, please renew your consent. + Houve mudanças desde sua última visita, queira renovar seu consentimento. + + + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. + Olá! Poderíamos, por favor, habilitar alguns serviços adicionais para {purposes}? Você pode sempre mudar ou retirar seu consentimento mais tarde. + + + + imprimir + + + Let me choose + Deixe-me escolher + + + + política de privacidade + + + Testing mode! + Modo de teste! + + + Always + Sempre + + + Yes + Sim + + + Do you want to load external content supplied by {title}? + Você deseja carregar conteúdo externo fornecido por {title}? + + + I decline + Recusar + + + That's ok + Aceito. + + + Realized with Klaro! + Realizado com Klaro! + + + privacy policy + política de privacidade + + + To learn more, please read our {privacyPolicy}. + Para saber mais, por favor, leia nossa {privacyPolicy}. + + + service + serviço + + + services + serviços + + + These services process personal information to show you personalized or interest-based advertisements. + Esses serviços processam informações pessoais para mostrar a você anúncios personalizados ou baseados em interesses. + + + Advertising + Publicidade + + + These services are essential for the correct functioning of this website. You cannot disable them here as the service would not work correctly otherwise. + + Esses serviços são essenciais para o correto funcionamento deste website. Você não pode desativá-los aqui, pois de outra forma o serviço não funcionaria corretamente. + + + + Service Provision + Prestação de serviços + + + These services process personal information to show you relevant content about products, services or topics that you might be interested in. + Esses serviços processam informações pessoais para mostrar a você conteúdo relevante sobre produtos, serviços ou tópicos que possam ser do seu interesse. + + + Marketing + Marketing + + + These services process personal information to optimize the service that this website offers. + + Esses serviços processam informações pessoais para otimizar o serviço que este website oferece. + + + + Performance Optimization + Otimização do desempenho + + + Save + Salvar + + + Use this switch to enable or disable all services. + Use essa chave para habilitar ou desabilitar todos os serviços. + + + Enable or disable all services + Habilitar ou desabilitar todos os serviços + + + This services is loaded by default (but you can opt out) + Estes serviços são carregados por padrão (mas o você pode optar por não participar). + + + (opt-out) + (opt-out) + + + purpose + Objetivo + + + purposes + Objetivos + + + This services is always required + Esses serviços são sempre necessários + + + (always required) + (sempre necessário) + + + + diff --git a/Resources/Private/Translations/ro/Klaro.xlf b/Resources/Private/Translations/ro/Klaro.xlf index 115e31b..ebda0c0 100644 --- a/Resources/Private/Translations/ro/Klaro.xlf +++ b/Resources/Private/Translations/ro/Klaro.xlf @@ -8,91 +8,119 @@ ################################################################################################ - - Information that we collect - Informațiile pe care le colectăm + + Accept all + + + + Accept all + + + Accept selected + + + + Accept selected + + + Use this switch to enable or disable all services. + Utilizați acest switch pentru a activa/dezactiva toate aplicațiile. + + + Enable or disable all services + Comutați între toate aplicațiile + + + This services is loaded by default (but you can opt out) + Această aplicație este încărcată în mod implicit (dar puteți renunța) + + + (opt-out) + (opt-out) + + + purpose + Scop + + + purposes + Scopuri + + + This services is always required + Această aplicație este întotdeauna necesară + + + (always required) + (întotdeauna necesar) + + + Close + + + + Close - Here you can see and customize the information that we collect about you. - - Aici puteți vedea și personaliza informațiile pe care le colectăm despre dvs. - + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + Aici puteți vedea și personaliza informațiile pe care le colectăm despre dvs. - privacy policy + politica privacy - To learn more, please read our {privacyPolicy}. - - Pentru a afla mai multe, vă rugăm să citiți {privacyPolicy}. - + + Pentru a afla mai multe, vă rugăm să citiți {privacyPolicy}. + + + Services we would like to use + Informațiile pe care le colectăm - There were changes since your last visit, please update your consent. + There were changes since your last visit, please renew your consent. Au existat modificări de la ultima vizită, vă rugăm să actualizați consimțământul. - We collect and process your personal information for the following purposes: {purposes}. - - Colectăm și procesăm informațiile dvs. personale în următoarele scopuri: {purposes}. - + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. + Colectăm și procesăm informațiile dvs. personale în următoarele scopuri: {purposes}. + + + + + + + imprint - Customize + Let me choose Află mai multe - privacy policy + politica privacy - - Accept - OK - - - Save - Salvează - - Decline + I decline Renunță - - Toggle all apps - Comutați între toate aplicațiile - - - Use this switch to enable/disable all apps. - Utilizați acest switch pentru a activa/dezactiva toate aplicațiile. - - - (opt-out) - (opt-out) - - - This app is loaded by default (but you can opt out) - Această aplicație este încărcată în mod implicit (dar puteți renunța) - - - (always required) - (întotdeauna necesar) + + That's ok + OK - - This application is always required - Această aplicație este întotdeauna necesară + + Realized with Klaro! + Realizat de Klaro! - - Purposes - Scopuri + + service - - Purpose - Scop + + services - - Powered by Klaro! - Realizat de Klaro! + + Save + Salvează diff --git a/Resources/Private/Translations/ru/Klaro.xlf b/Resources/Private/Translations/ru/Klaro.xlf index 4fba330..de7c493 100644 --- a/Resources/Private/Translations/ru/Klaro.xlf +++ b/Resources/Private/Translations/ru/Klaro.xlf @@ -8,104 +8,111 @@ ################################################################################################ - - Information that we collect - Информация, которую мы сохраняем - - - Here you can see and customize the information that we collect about you. - - Здесь вы можете просмотреть и настроить, какую информацию о вас мы храним. - + + Accept all + Принять всё - - privacy policy - Соглашение + + Accept selected + Принять выбранные - - To learn more, please read our {privacyPolicy}. - - Чтобы узнать больше, пожалуйста, прочитайте наше {privacyPolicy}. - + + Use this switch to enable or disable all services. + Используйте этот переключатель, чтобы включить/отключить все приложения. - - There were changes since your last visit, please update your consent. - Со времени вашего последнего визита произошли изменения, обновите своё согласие. + + Enable or disable all services + Переключить все приложения - - We collect and process your personal information for the following purposes: {purposes}. - - Мы собираем и обрабатываем вашу личную информацию для следующих целей: {purposes}. - + + This services is loaded by default (but you can opt out) + Это приложение включено по умолчанию (но вы можете отказаться) - - Customize - Настроить + + (opt-out) + (отказаться) - - privacy policy - политика конфиденциальности + + purpose + Намерение - - Accept - Принять + + purposes + Намерения - - Save - Сохранить + + This services is always required + Это обязательное приложение - - Decline - Отклонить + + (always required) + (всегда обязательный) Close Закрыть - - Accept all - Принять всё + + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + Здесь вы можете просмотреть и настроить, какую информацию о вас мы храним. - - Accept selected - Принять выбранные + + + Соглашение - - Toggle all apps - Переключить все приложения + + + Чтобы узнать больше, пожалуйста, прочитайте наше {privacyPolicy}. - - Use this switch to enable/disable all apps. - Используйте этот переключатель, чтобы включить/отключить все приложения. + + Services we would like to use + Информация, которую мы сохраняем - - (opt-out) - (отказаться) + + There were changes since your last visit, please renew your consent. + Со времени вашего последнего визита произошли изменения, обновите своё согласие. - - This app is loaded by default (but you can opt out) - Это приложение включено по умолчанию (но вы можете отказаться) + + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. + Мы собираем и обрабатываем вашу личную информацию для следующих целей: {purposes}. - - (always required) - (всегда обязательный) + + - - This application is always required - Это обязательное приложение + + + imprint - - Purposes - Намерения + + Let me choose + Настроить - - Purpose - Намерение + + + политика конфиденциальности + + + I decline + Отклонить + + + That's ok + Принять - Powered by Klaro! + Realized with Klaro! Работает на Кларо! + + service + + + services + + + Save + Сохранить + diff --git a/Resources/Private/Translations/sr/Klaro.xlf b/Resources/Private/Translations/sr/Klaro.xlf index 132d479..336f407 100644 --- a/Resources/Private/Translations/sr/Klaro.xlf +++ b/Resources/Private/Translations/sr/Klaro.xlf @@ -8,95 +8,116 @@ ################################################################################################ - - Information that we collect - Informacije koje prikupljamo + + Accept all + + + + Accept all + + + Accept selected + + + + Accept selected + + + Use this switch to enable or disable all services. + Koristite ovaj prekidač da omogućite/onesposobite sve aplikacije odjednom. + + + Enable or disable all services + Izmeni sve + + + This services is loaded by default (but you can opt out) + Ova aplikacija je učitana automatski (ali je možete onesposobiti) + + + (opt-out) + (onesposobite) + + + purpose + Svrha + + + purposes + Svrhe + + + This services is always required + Ova aplikacija je uvek neophodna + + + (always required) + (neophodna) + + + Close + Zatvori - Here you can see and customize the information that we collect about you. - - Ovde možete videti i podesiti informacije koje prikupljamo o Vama. - + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + Ovde možete videti i podesiti informacije koje prikupljamo o Vama. - privacy policy + politiku privatnosti - To learn more, please read our {privacyPolicy}. - - Za više informacije pročitajte našu {privacyPolicy}. - + + Za više informacije pročitajte našu {privacyPolicy}. + + + Services we would like to use + Informacije koje prikupljamo - There were changes since your last visit, please update your consent. + There were changes since your last visit, please renew your consent. Došlo je do promena od Vaše poslednje posete, molimo Vas da ažurirate svoja odobrenja. - We collect and process your personal information for the following purposes: {purposes}. - - Mi prikupljamo i procesiramo Vaše lične podatke radi sledećeg: {purposes}. - + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. + Mi prikupljamo i procesiramo Vaše lične podatke radi sledećeg: {purposes}. + + + + + + + imprint - Customize + Let me choose Saznajte više - privacy policy + politiku privatnosti - - Accept - U redu - - - Save - Sačuvaj - - Decline + I decline Odbij - - Close - Zatvori - - - Toggle all apps - Izmeni sve - - - Use this switch to enable/disable all apps. - Koristite ovaj prekidač da omogućite/onesposobite sve aplikacije odjednom. - - - (opt-out) - (onesposobite) - - - This app is loaded by default (but you can opt out) - Ova aplikacija je učitana automatski (ali je možete onesposobiti) - - - (always required) - (neophodna) + + That's ok + U redu - - This application is always required - Ova aplikacija je uvek neophodna. + + Realized with Klaro! + Pokreće Klaro! - - Purposes - Svrhe + + service - - Purpose - Svrha + + services - - Powered by Klaro! - Pokreće Klaro! + + Save + Sačuvaj diff --git a/Resources/Private/Translations/sr_cyrl/Klaro.xlf b/Resources/Private/Translations/sr_cyrl/Klaro.xlf index b769d22..6724b8f 100644 --- a/Resources/Private/Translations/sr_cyrl/Klaro.xlf +++ b/Resources/Private/Translations/sr_cyrl/Klaro.xlf @@ -9,45 +9,42 @@ - Information that we collect + Services we would like to use Информације које прикупљамо - Here you can see and customize the information that we collect about you. - + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. Овде можете видет и подесити информације које прикупљамо о Вама. - privacy policy + политику приватности - To learn more, please read our {privacyPolicy}. - + За више информација прочитајте нашу {privacyPolicy}. - There were changes since your last visit, please update your consent. + There were changes since your last visit, please renew your consent. Дошло је до промена од Ваше последнје посете, молимо Вас да ажурирате своја одобрења. - We collect and process your personal information for the following purposes: {purposes}. - + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. Ми прикупљамо и процесирамо Ваше личне податке ради следећег: {purposes}. - Customize + Let me choose Сазнајте више - privacy policy + политику приватности - Accept + That's ok У реду @@ -55,47 +52,47 @@ Сачувај - Decline + I decline Одбиј Close Затвори - - Toggle all apps + + Enable or disable all services Измени све - - Use this switch to enable/disable all apps. + + Use this switch to enable or disable all services. Користите овај прекидач да омогућите/онеспособите све апликације одједном. - + (opt-out) (онеспособите) - - This app is loaded by default (but you can opt out) + + This services is loaded by default (but you can opt out) Ова апликација је учитана аутоматски (али је можете онеспособити) - + (always required) (неопходна) - - This application is always required + + This services is always required Ова апликација је увек неопходна. - - Purposes + + purposes Сврхе - - Purpose + + purpose Сврха - Powered by Klaro! + Realized with Klaro! Покреће Кларо! diff --git a/Resources/Private/Translations/sv/Klaro.xlf b/Resources/Private/Translations/sv/Klaro.xlf index e83cebe..4aeb39a 100644 --- a/Resources/Private/Translations/sv/Klaro.xlf +++ b/Resources/Private/Translations/sv/Klaro.xlf @@ -8,103 +8,110 @@ ################################################################################################ - - Information that we collect - Information som vi samlar + + Accept all + Acceptera alla + + + Accept selected + Acceptera markerat + + + Use this switch to enable or disable all services. + Använd detta reglage för att aktivera/avaktivera samtliga appar. + + + Enable or disable all services + Ändra för alla appar + + + This services is loaded by default (but you can opt out) + Den här appen laddas som standardinställning (men du kan avaktivera den) + + + (opt-out) + (Avaktivera) + + + purpose + Syfte + + + purposes + Syften + + + This services is always required + Den här applikationen krävs alltid + + + (always required) + (Krävs alltid) + + + Close + Stäng - Here you can see and customize the information that we collect about you. - - Här kan du se och anpassa vilken information vi samlar om dig. - + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + Här kan du se och anpassa vilken information vi samlar om dig. - privacy policy + Integritetspolicy - To learn more, please read our {privacyPolicy}. - - För att veta mer, läs vår {privacyPolicy}. - + + För att veta mer, läs vår {privacyPolicy}. + + + Services we would like to use + Information som vi samlar - There were changes since your last visit, please update your consent. + There were changes since your last visit, please renew your consent. Det har skett förändringar sedan ditt senaste besök, var god uppdatera ditt medgivande. - We collect and process your personal information for the following purposes: {purposes}. - - Vi samlar och bearbetar din personliga data i följande syften: {purposes}. - + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. + Vi samlar och bearbetar din personliga data i följande syften: {purposes}. + + + + + + + imprint - Customize + Let me choose Läs mer - privacy policy + Integritetspolicy - - Accept - OK - - - Save - Spara - - Decline + I decline Avböj - - Accept all - Acceptera alla - - - Accept selected - Acceptera markerat - - - Close - Stäng - - - Toggle all apps - Ändra för alla appar - - - Use this switch to enable/disable all apps. - Använd detta reglage för att aktivera/avaktivera samtliga appar. - - - (opt-out) - (Avaktivera) - - - This app is loaded by default (but you can opt out) - Den här appen laddas som standardinställning (men du kan avaktivera den) - - - (always required) - (Krävs alltid) + + That's ok + OK - - This application is always required - Den här applikationen krävs alltid + + Realized with Klaro! + Körs på Klaro! - - Purposes - Syften + + service - - Purpose - Syfte + + services - - Powered by Klaro! - Körs på Klaro! + + Save + Spara diff --git a/Resources/Private/Translations/tr/Klaro.xlf b/Resources/Private/Translations/tr/Klaro.xlf index 07ee533..54af95e 100644 --- a/Resources/Private/Translations/tr/Klaro.xlf +++ b/Resources/Private/Translations/tr/Klaro.xlf @@ -8,95 +8,116 @@ ################################################################################################ - - Information that we collect - Sakladığımız bilgiler + + Accept all + + + + Accept all + + + Accept selected + + + + Accept selected + + + Use this switch to enable or disable all services. + Toplu açma/kapama için bu düğmeyi kullanabilirsin. + + + Enable or disable all services + Tüm uygulamaları aç/kapat + + + This services is loaded by default (but you can opt out) + Bu uygulama varsayılanda yüklendi (ancak iptal edebilirsin) + + + (opt-out) + (isteğe bağlı) + + + purpose + Amaç + + + purposes + Amaçlar + + + This services is always required + Bu uygulama her zaman gerekli + + + (always required) + (her zaman gerekli) + + + Close + Kapat - Here you can see and customize the information that we collect about you. - - Hakkınızda topladığımız bilgileri burada görebilir ve özelleştirebilirsiniz. - + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + Hakkınızda topladığımız bilgileri burada görebilir ve özelleştirebilirsiniz. - privacy policy + Gizlilik Politikası - To learn more, please read our {privacyPolicy}. - - Daha fazlası için lütfen {privacyPolicy} sayfamızı okuyun. - + + Daha fazlası için lütfen {privacyPolicy} sayfamızı okuyun. + + + Services we would like to use + Sakladığımız bilgiler - There were changes since your last visit, please update your consent. + There were changes since your last visit, please renew your consent. Son ziyaretinizden bu yana değişiklikler oldu, lütfen seçiminizi güncelleyin. - We collect and process your personal information for the following purposes: {purposes}. - - Kişisel bilgilerinizi aşağıdaki amaçlarla saklıyor ve işliyoruz: {purposes}. - + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. + Kişisel bilgilerinizi aşağıdaki amaçlarla saklıyor ve işliyoruz: {purposes}. + + + + + + + imprint - Customize + Let me choose Daha fazla bilgi - privacy policy + Gizlilik Politikası - - Accept - Tamam - - - Save - Kaydet - - Decline + I decline Reddet - - Close - Kapat - - - Toggle all apps - Tüm uygulamaları aç/kapat - - - Use this switch to enable/disable all apps. - Toplu açma/kapama için bu düğmeyi kullanabilirsin. - - - (opt-out) - (isteğe bağlı) - - - This app is loaded by default (but you can opt out) - Bu uygulama varsayılanda yüklendi (ancak iptal edebilirsin) - - - (always required) - (her zaman gerekli) + + That's ok + Tamam - - This application is always required - Bu uygulama her zaman gerekli + + Realized with Klaro! + Klaro tarafından geliştirildi! - - Purposes - Amaçlar + + service - - Purpose - Amaç + + services - - Powered by Klaro! - Klaro tarafından geliştirildi! + + Save + Kaydet diff --git a/Resources/Private/Translations/zh/Klaro.xlf b/Resources/Private/Translations/zh/Klaro.xlf new file mode 100644 index 0000000..a96d6b0 --- /dev/null +++ b/Resources/Private/Translations/zh/Klaro.xlf @@ -0,0 +1,177 @@ + + + + + ################################################################################################ + # IMPORTANT: This file was auto-generated as part of the build process to convert translations # + # provided by klaro. -> see package.json -> "yarn run build:translations" # + ################################################################################################ + + + + Accept all + 照单全收 + + + Accept selected + 接受选择 + + + Close + 密切 + + + Here you can assess and customize the services that we'd like to use on this website. You're in charge! Enable or disable services as you see fit. + 在这里,您可以评估和定制我们希望在本网站上使用的服务。您是负责人!您可以根据自己的需要启用或禁用服务。启用或禁用您认为合适的服务。 + + + + 隐私政策 + + + + 要了解更多,请阅读我们的{privacyPolicy} 。 + + + Services we would like to use + 我们想使用的服务 + + + There were changes since your last visit, please renew your consent. + 自上次访问后有变化,请更新您的同意。 + + + Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later. + 你好!我们可以为{purposes} 启用一些额外的服务吗?您可以随时更改或撤回您的同意。 + + + + 印记 + + + Let me choose + 让我来选 + + + + 隐私政策 + + + Testing mode! + 测试模式! + + + Always + 总是 + + + Yes + 是的,是的 + + + Do you want to load external content supplied by {title}? + 你想加载由{title} 提供的外部内容吗? + + + I decline + 我拒绝 + + + That's ok + 没事的 + + + Realized with Klaro! + 与Klaro一起实现! + + + privacy policy + 隐私政策 + + + To learn more, please read our {privacyPolicy}. + 要了解更多,请阅读我们的{privacyPolicy} 。 + + + service + 服务 + + + services + 服务 + + + These services process personal information to show you personalized or interest-based advertisements. + 这些服务处理个人信息,向您展示个性化或基于兴趣的广告。 + + + Advertising + 广告宣传 + + + These services are essential for the correct functioning of this website. You cannot disable them here as the service would not work correctly otherwise. + + 这些服务对于本网站的正常运行是必不可少的。您不能在这里禁用它们,否则服务将无法正常运行。 + + + + Service Provision + 服务提供 + + + These services process personal information to show you relevant content about products, services or topics that you might be interested in. + 这些服务会处理个人信息,向您展示您可能感兴趣的产品、服务或主题的相关内容。 + + + Marketing + 市场营销 + + + These services process personal information to optimize the service that this website offers. + + 这些服务处理个人信息是为了优化本网站提供的服务。 + + + + Performance Optimization + 性能优化 + + + Save + 挽救 + + + Use this switch to enable or disable all services. + 使用此开关可启用或禁用所有服务。 + + + Enable or disable all services + 启用或停用所有服务 + + + This services is loaded by default (but you can opt out) + 这个服务是默认加载的(但你可以选择退出) + + + (opt-out) + (选择退出) + + + purpose + 目的 + + + purposes + 目的 + + + This services is always required + 这种服务是必须的 + + + (always required) + (总是需要) + + + + diff --git a/Resources/Public/Klaro/klaro-no-css_v0.4.27.js b/Resources/Public/Klaro/klaro-no-css_v0.4.27.js deleted file mode 100644 index e81f2d3..0000000 --- a/Resources/Public/Klaro/klaro-no-css_v0.4.27.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.klaro=t():e.klaro=t()}(window,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=167)}([function(e,t,n){var r=n(3),o=n(24).f,i=n(11),a=n(16),c=n(58),s=n(81),u=n(62);e.exports=function(e,t){var n,l,p,f,d,v=e.target,y=e.global,h=e.stat;if(n=y?r:h?r[v]||c(v,{}):(r[v]||{}).prototype)for(l in t){if(f=t[l],p=e.noTargetGet?(d=o(n,l))&&d.value:n[l],!u(y?l:v+(h?".":"#")+l,e.forced)&&void 0!==p){if(typeof f==typeof p)continue;s(f,p)}(e.sham||p&&p.sham)&&i(f,"sham",!0),a(n,l,f,e)}}},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,n){var r=n(3),o=n(59),i=n(7),a=n(40),c=n(63),s=n(88),u=o("wks"),l=r.Symbol,p=s?l:l&&l.withoutSetter||a;e.exports=function(e){return i(u,e)||(c&&i(l,e)?u[e]=l[e]:u[e]=p("Symbol."+e)),u[e]}},function(e,t,n){(function(t){var n=function(e){return e&&e.Math==Math&&e};e.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof t&&t)||Function("return this")()}).call(this,n(139))},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t,n){var r=n(1);e.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(e,t,n){var r=n(4);e.exports=function(e){if(!r(e))throw TypeError(String(e)+" is not an object");return e}},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t,n){var r=n(5),o=n(77),i=n(6),a=n(38),c=Object.defineProperty;t.f=r?c:function(e,t,n){if(i(e),t=a(t,!0),i(n),o)try{return c(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){"use strict";var r=n(10),o=n(91),i=n(32),a=n(25),c=n(64),s=a.set,u=a.getterFor("Array Iterator");e.exports=c(Array,"Array",(function(e,t){s(this,{type:"Array Iterator",target:r(e),index:0,kind:t})}),(function(){var e=u(this),t=e.target,n=e.kind,r=e.index++;return!t||r>=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:r,done:!1}:"values"==n?{value:t[r],done:!1}:{value:[r,t[r]],done:!1}}),"values"),i.Arguments=i.Array,o("keys"),o("values"),o("entries")},function(e,t,n){var r=n(37),o=n(19);e.exports=function(e){return r(o(e))}},function(e,t,n){var r=n(5),o=n(8),i=n(27);e.exports=r?function(e,t,n){return o.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){var r=n(42),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},function(e,t,n){var r=n(68),o=n(16),i=n(147);r||o(Object.prototype,"toString",i,{unsafe:!0})},function(e,t,n){"use strict";var r=n(106).charAt,o=n(25),i=n(64),a=o.set,c=o.getterFor("String Iterator");i(String,"String",(function(e){a(this,{type:"String Iterator",string:String(e),index:0})}),(function(){var e,t=c(this),n=t.string,o=t.index;return o>=n.length?{value:void 0,done:!0}:(e=r(n,o),t.index+=e.length,{value:e,done:!1})}))},function(e,t,n){var r=n(3),o=n(107),i=n(9),a=n(11),c=n(2),s=c("iterator"),u=c("toStringTag"),l=i.values;for(var p in o){var f=r[p],d=f&&f.prototype;if(d){if(d[s]!==l)try{a(d,s,l)}catch(e){d[s]=l}if(d[u]||a(d,u,p),o[p])for(var v in i)if(d[v]!==i[v])try{a(d,v,i[v])}catch(e){d[v]=i[v]}}}},function(e,t,n){var r=n(3),o=n(11),i=n(7),a=n(58),c=n(79),s=n(25),u=s.get,l=s.enforce,p=String(String).split("String");(e.exports=function(e,t,n,c){var s=!!c&&!!c.unsafe,u=!!c&&!!c.enumerable,f=!!c&&!!c.noTargetGet;"function"==typeof n&&("string"!=typeof t||i(n,"name")||o(n,"name",t),l(n).source=p.join("string"==typeof t?t:"")),e!==r?(s?!f&&e[t]&&(u=!0):delete e[t],u?e[t]=n:o(e,t,n)):u?e[t]=n:a(t,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&u(this).source||c(this)}))},function(e,t,n){var r=n(19);e.exports=function(e){return Object(r(e))}},function(e,t,n){"use strict";var r=n(16),o=n(6),i=n(1),a=n(69),c=RegExp.prototype,s=c.toString,u=i((function(){return"/a/b"!=s.call({source:"a",flags:"b"})})),l="toString"!=s.name;(u||l)&&r(RegExp.prototype,"toString",(function(){var e=o(this),t=String(e.source),n=e.flags;return"/"+t+"/"+String(void 0===n&&e instanceof RegExp&&!("flags"in c)?a.call(e):n)}),{unsafe:!0})},function(e,t){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){"use strict";var r=n(0),o=n(3),i=n(26),a=n(29),c=n(5),s=n(63),u=n(88),l=n(1),p=n(7),f=n(43),d=n(4),v=n(6),y=n(17),h=n(10),m=n(38),g=n(27),b=n(31),_=n(46),k=n(41),w=n(149),x=n(61),S=n(24),j=n(8),O=n(57),A=n(11),P=n(16),E=n(59),C=n(39),z=n(30),T=n(40),D=n(2),R=n(108),N=n(109),I=n(47),M=n(25),L=n(51).forEach,U=C("hidden"),q=D("toPrimitive"),F=M.set,H=M.getterFor("Symbol"),B=Object.prototype,K=o.Symbol,W=i("JSON","stringify"),$=S.f,V=j.f,G=w.f,Z=O.f,Q=E("symbols"),Y=E("op-symbols"),J=E("string-to-symbol-registry"),X=E("symbol-to-string-registry"),ee=E("wks"),te=o.QObject,ne=!te||!te.prototype||!te.prototype.findChild,re=c&&l((function(){return 7!=b(V({},"a",{get:function(){return V(this,"a",{value:7}).a}})).a}))?function(e,t,n){var r=$(B,t);r&&delete B[t],V(e,t,n),r&&e!==B&&V(B,t,r)}:V,oe=function(e,t){var n=Q[e]=b(K.prototype);return F(n,{type:"Symbol",tag:e,description:t}),c||(n.description=t),n},ie=u?function(e){return"symbol"==typeof e}:function(e){return Object(e)instanceof K},ae=function(e,t,n){e===B&&ae(Y,t,n),v(e);var r=m(t,!0);return v(n),p(Q,r)?(n.enumerable?(p(e,U)&&e[U][r]&&(e[U][r]=!1),n=b(n,{enumerable:g(0,!1)})):(p(e,U)||V(e,U,g(1,{})),e[U][r]=!0),re(e,r,n)):V(e,r,n)},ce=function(e,t){v(e);var n=h(t),r=_(n).concat(pe(n));return L(r,(function(t){c&&!se.call(n,t)||ae(e,t,n[t])})),e},se=function(e){var t=m(e,!0),n=Z.call(this,t);return!(this===B&&p(Q,t)&&!p(Y,t))&&(!(n||!p(this,t)||!p(Q,t)||p(this,U)&&this[U][t])||n)},ue=function(e,t){var n=h(e),r=m(t,!0);if(n!==B||!p(Q,r)||p(Y,r)){var o=$(n,r);return!o||!p(Q,r)||p(n,U)&&n[U][r]||(o.enumerable=!0),o}},le=function(e){var t=G(h(e)),n=[];return L(t,(function(e){p(Q,e)||p(z,e)||n.push(e)})),n},pe=function(e){var t=e===B,n=G(t?Y:h(e)),r=[];return L(n,(function(e){!p(Q,e)||t&&!p(B,e)||r.push(Q[e])})),r};(s||(P((K=function(){if(this instanceof K)throw TypeError("Symbol is not a constructor");var e=arguments.length&&void 0!==arguments[0]?String(arguments[0]):void 0,t=T(e),n=function(e){this===B&&n.call(Y,e),p(this,U)&&p(this[U],t)&&(this[U][t]=!1),re(this,t,g(1,e))};return c&&ne&&re(B,t,{configurable:!0,set:n}),oe(t,e)}).prototype,"toString",(function(){return H(this).tag})),P(K,"withoutSetter",(function(e){return oe(T(e),e)})),O.f=se,j.f=ae,S.f=ue,k.f=w.f=le,x.f=pe,R.f=function(e){return oe(D(e),e)},c&&(V(K.prototype,"description",{configurable:!0,get:function(){return H(this).description}}),a||P(B,"propertyIsEnumerable",se,{unsafe:!0}))),r({global:!0,wrap:!0,forced:!s,sham:!s},{Symbol:K}),L(_(ee),(function(e){N(e)})),r({target:"Symbol",stat:!0,forced:!s},{for:function(e){var t=String(e);if(p(J,t))return J[t];var n=K(t);return J[t]=n,X[n]=t,n},keyFor:function(e){if(!ie(e))throw TypeError(e+" is not a symbol");if(p(X,e))return X[e]},useSetter:function(){ne=!0},useSimple:function(){ne=!1}}),r({target:"Object",stat:!0,forced:!s,sham:!c},{create:function(e,t){return void 0===t?b(e):ce(b(e),t)},defineProperty:ae,defineProperties:ce,getOwnPropertyDescriptor:ue}),r({target:"Object",stat:!0,forced:!s},{getOwnPropertyNames:le,getOwnPropertySymbols:pe}),r({target:"Object",stat:!0,forced:l((function(){x.f(1)}))},{getOwnPropertySymbols:function(e){return x.f(y(e))}}),W)&&r({target:"JSON",stat:!0,forced:!s||l((function(){var e=K();return"[null]"!=W([e])||"{}"!=W({a:e})||"{}"!=W(Object(e))}))},{stringify:function(e,t,n){for(var r,o=[e],i=1;arguments.length>i;)o.push(arguments[i++]);if(r=t,(d(t)||void 0!==e)&&!ie(e))return f(t)||(t=function(e,t){if("function"==typeof r&&(t=r.call(this,e,t)),!ie(t))return t}),o[1]=t,W.apply(null,o)}});K.prototype[q]||A(K.prototype,q,K.prototype.valueOf),I(K,"Symbol"),z[U]=!0},function(e,t,n){"use strict";var r=n(0),o=n(5),i=n(3),a=n(7),c=n(4),s=n(8).f,u=n(81),l=i.Symbol;if(o&&"function"==typeof l&&(!("description"in l.prototype)||void 0!==l().description)){var p={},f=function(){var e=arguments.length<1||void 0===arguments[0]?void 0:String(arguments[0]),t=this instanceof f?new l(e):void 0===e?l():l(e);return""===e&&(p[t]=!0),t};u(f,l);var d=f.prototype=l.prototype;d.constructor=f;var v=d.toString,y="Symbol(test)"==String(l("test")),h=/^Symbol\((.*)\)[^)]+$/;s(d,"description",{configurable:!0,get:function(){var e=c(this)?this.valueOf():this,t=v.call(e);if(a(p,e))return"";var n=y?t.slice(7,-1):t.replace(h,"$1");return""===n?void 0:n}}),r({global:!0,forced:!0},{Symbol:f})}},function(e,t,n){n(109)("iterator")},function(e,t,n){var r=n(5),o=n(8).f,i=Function.prototype,a=i.toString,c=/^\s*function ([^ (]*)/;r&&!("name"in i)&&o(i,"name",{configurable:!0,get:function(){try{return a.call(this).match(c)[1]}catch(e){return""}}})},function(e,t,n){var r=n(5),o=n(57),i=n(27),a=n(10),c=n(38),s=n(7),u=n(77),l=Object.getOwnPropertyDescriptor;t.f=r?l:function(e,t){if(e=a(e),t=c(t,!0),u)try{return l(e,t)}catch(e){}if(s(e,t))return i(!o.f.call(e,t),e[t])}},function(e,t,n){var r,o,i,a=n(140),c=n(3),s=n(4),u=n(11),l=n(7),p=n(39),f=n(30),d=c.WeakMap;if(a){var v=new d,y=v.get,h=v.has,m=v.set;r=function(e,t){return m.call(v,e,t),t},o=function(e){return y.call(v,e)||{}},i=function(e){return h.call(v,e)}}else{var g=p("state");f[g]=!0,r=function(e,t){return u(e,g,t),t},o=function(e){return l(e,g)?e[g]:{}},i=function(e){return l(e,g)}}e.exports={set:r,get:o,has:i,enforce:function(e){return i(e)?o(e):r(e,{})},getterFor:function(e){return function(t){var n;if(!s(t)||(n=o(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}}}},function(e,t,n){var r=n(83),o=n(3),i=function(e){return"function"==typeof e?e:void 0};e.exports=function(e,t){return arguments.length<2?i(r[e])||i(o[e]):r[e]&&r[e][t]||o[e]&&o[e][t]}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t){e.exports=!1},function(e,t){e.exports={}},function(e,t,n){var r,o=n(6),i=n(141),a=n(60),c=n(30),s=n(142),u=n(78),l=n(39),p=l("IE_PROTO"),f=function(){},d=function(e){return"'; $expected = - ''; + ''; $actual = $blockExternalContentHelper->blockScripts($markup); self::assertEquals($expected, $actual); // selfclosing $markup = ''; $expected = - ''; + ''; $actual = $blockExternalContentHelper->blockScripts($markup); self::assertEquals($expected, $actual); @@ -52,7 +41,7 @@ public function scriptTagsWillBeBlocked() // not correctly recovering the correct value. $markup = ''; $expected = - ''; + ''; $actual = $blockExternalContentHelper->blockScripts($markup); self::assertEquals($expected, $actual); @@ -60,14 +49,14 @@ public function scriptTagsWillBeBlocked() $markup = ''; $expected = - ''; + ''; $actual = $blockExternalContentHelper->blockScripts($markup); self::assertEquals($expected, $actual); // selfclosing $markup = ''; $expected = - ''; + ''; + $actual = $blockExternalContentHelper->blockScripts($markup); + self::assertEquals($expected, $actual); + } + + public function scriptTagsWillBeBlockedForPatternConfigWithBlockAttribute() + { + $blockExternalContentHelper = new CookiePunch(); + + ObjectAccess::setProperty( + $blockExternalContentHelper, + "tagPatterns", + [ + "script" => [ + "*" => [ + "bock" => true, + ], + ], + ], + true + ); + + $markup = ''; + $expected = + ''; $actual = $blockExternalContentHelper->blockScripts($markup); self::assertEquals($expected, $actual); } @@ -83,16 +96,90 @@ public function scriptTagsWillBeBlocked() /** * @test */ - public function tagsWithDataNameWillBeBlocked() + public function scriptTagsWillBeBlockedForPatternConfigWithServiceAttribute() { $blockExternalContentHelper = new CookiePunch(); + ObjectAccess::setProperty( $blockExternalContentHelper, - CookiePunch::SETTINGS_BLOCK_ALL, - true, + "tagPatterns", + [ + "script" => [ + "*" => [ + "service" => "default", + ], + ], + ], true ); + $markup = ''; + $expected = + ''; + $actual = $blockExternalContentHelper->blockScripts($markup); + self::assertEquals($expected, $actual); + } + + /** + * @test + */ + public function scriptTagsWillBeBlockedAsServiceAttributeWins() + { + $blockExternalContentHelper = new CookiePunch(); + + ObjectAccess::setProperty( + $blockExternalContentHelper, + "tagPatterns", + [ + "script" => [ + "*" => [ + "block" => false, + "service" => "default", + ], + ], + ], + true + ); + + $markup = ''; + $expected = + ''; + $actual = $blockExternalContentHelper->blockScripts($markup); + self::assertEquals($expected, $actual); + } + + /** + * @test + */ + public function scriptTagsWillNotBeBlockedForPatternConfigWithDefaultBlockingEqualsFalse() + { + $blockExternalContentHelper = new CookiePunch(); + + ObjectAccess::setProperty( + $blockExternalContentHelper, + "tagPatterns", + [ + "script" => [ + "*" => [ + "block" => false, + ], + ], + ], + true + ); + + $markup = ''; + $actual = $blockExternalContentHelper->blockScripts($markup); + self::assertEquals($markup, $actual); + } + + /** + * @test + */ + public function tagsWithDataNameWillBeBlocked() + { + $blockExternalContentHelper = new CookiePunch(); + $markup = ''; $expected = ''; @@ -102,7 +189,7 @@ public function tagsWithDataNameWillBeBlocked() $markup = ''; $expected = - ''; + ''; $actual = $blockExternalContentHelper->blockIframes($markup); self::assertEquals($expected, $actual); } @@ -110,18 +197,13 @@ public function tagsWithDataNameWillBeBlocked() /** * @test */ - public function tagsWillUseGroupFromEelHelperAndNotSettings() + public function tagsWillUseServiceNameFromEelHelperAndNotSettings() { $blockExternalContentHelper = new CookiePunch(); - ObjectAccess::setProperty( - $blockExternalContentHelper, - CookiePunch::SETTINGS_BLOCK_ALL, - true, - true - ); $markup = ''; - $expected = ''; + $expected = + ''; $actual = $blockExternalContentHelper->blockScripts( $markup, true, @@ -131,7 +213,7 @@ public function tagsWillUseGroupFromEelHelperAndNotSettings() $markup = ''; $expected = - ''; + ''; $actual = $blockExternalContentHelper->blockIframes( $markup, true, @@ -146,12 +228,6 @@ public function tagsWillUseGroupFromEelHelperAndNotSettings() public function scriptTagsWithSpecialMimetypesWillNeverBeBlocked() { $blockExternalContentHelper = new CookiePunch(); - ObjectAccess::setProperty( - $blockExternalContentHelper, - CookiePunch::SETTINGS_BLOCK_ALL, - true, - true - ); // Do nothing -> keep the type as it is not "text/javascript" @@ -172,12 +248,6 @@ public function scriptTagsWithSpecialMimetypesWillNeverBeBlocked() public function alreadyBlockedScriptTagsWillNeverBeBlocked() { $blockExternalContentHelper = new CookiePunch(); - ObjectAccess::setProperty( - $blockExternalContentHelper, - CookiePunch::SETTINGS_BLOCK_ALL, - true, - true - ); $markup = ''; @@ -197,13 +267,6 @@ public function markedTagsWillNeverBeBlocked() { $blockExternalContentHelper = new CookiePunch(); - ObjectAccess::setProperty( - $blockExternalContentHelper, - CookiePunch::SETTINGS_BLOCK_ALL, - true, - true - ); - $markup = ''; $actualWithDataAttribute = $blockExternalContentHelper->neverBlockScripts( $markup @@ -211,6 +274,7 @@ public function markedTagsWillNeverBeBlocked() $actualNotBlocked = $blockExternalContentHelper->neverBlockScripts( $actualWithDataAttribute ); + $expected = ''; self::assertEquals($expected, $actualWithDataAttribute); @@ -232,20 +296,23 @@ public function markedTagsWillNeverBeBlocked() /** * @test */ - public function scriptTagsWithPatternWillBeBlocked() + public function onlyScriptTagsWithPatternWillBeBlockedIfDefaultBlockingIsFalse() { $blockExternalContentHelper = new CookiePunch(); - $patterns = [ - "Packages/Vendor.Example" => [ - CookiePunch::SETTINGS_BLOCK => true, - CookiePunch::SETTINGS_GROUP => "vendor", - ], - ]; ObjectAccess::setProperty( $blockExternalContentHelper, - CookiePunch::SETTINGS_BLOCK_PATTERNS, - $patterns, + "tagPatterns", + [ + "script" => [ + "*" => [ + "block" => false, + ], + "Packages/Vendor.Example" => [ + "service" => "foo", + ], + ], + ], true ); @@ -264,7 +331,7 @@ public function scriptTagsWithPatternWillBeBlocked() $markup = ''; $expected = - ''; + ''; $actual = $blockExternalContentHelper->blockScripts($markup); self::assertEquals($expected, $actual); @@ -309,45 +373,6 @@ public function scriptTagsWithPatternWillNotBeBlocked() self::assertEquals($markup, $actual); } - /** - * @test - */ - public function patternOptionsWillBeAddedToTags() - { - $blockExternalContentHelper = new CookiePunch(); - $patterns = [ - "Packages/Vendor.Example" => [ - CookiePunch::SETTINGS_BLOCK => true, - CookiePunch::SETTINGS_OPTIONS => ["foo" => "bar"], - ], - "foo/bar.html" => [ - CookiePunch::SETTINGS_BLOCK => true, - CookiePunch::SETTINGS_OPTIONS => ["foo" => "baz"], - ], - ]; - - ObjectAccess::setProperty( - $blockExternalContentHelper, - CookiePunch::SETTINGS_BLOCK_PATTERNS, - $patterns, - true - ); - - //