// ==UserScript==
// @name PepperTweaker
// @namespace bearbyt3z
// @version 0.9.164
// @description Pepper na resorach...
// @author bearbyt3z
// @match https://www.pepper.pl/*
// @run-at document-start
// @grant none
// ==/UserScript==
(function () {
'use strict';
/***********************************************/
/***** RUN AT DOCUMENT START (BEFORE LOAD) *****/
/***********************************************/
/*** Default configuration ***/
const backupConfigOnFailureLoad = {
dealsFilters: true,
commentsFilters: true,
};
/* Plugin Enabled */
const defaultConfigPluginEnabled = true;
/* Dark Theme Enabled */
const defaultConfigDarkThemeEnabled = true;
/* Improvements */
const defaultConfigImprovements = {
listToGrid: true,
gridColumnCount: 0,
transparentPaginationFooter: true,
hideTopDealsWidget: false,
hideGroupsBar: false,
repairDealDetailsLinks: true,
repairDealImageLink: true,
addLikeButtonsToBestComments: true,
addSearchInterface: true,
addCommentPreviewOnProfilePage: true,
};
/* Auto Update */
const defaultConfigAutoUpdate = {
dealsDefaultEnabled: false,
commentsDefaultEnabled: false,
soundEnabled: true,
askBeforeLoad: false,
};
/* Deals Filters */
const defaultConfigDealsFilters = [
{ name: 'Alkohol słowa kluczowe', active: false, keyword: /\bpiw[oa]\b|\bbeer|alkohol|whiske?y|likier|w[óo]d(ecz)?k[aąieę]|\bwark[aąieę]|\bbols|\bsoplica\b|johnni?(e|y) walker|jim ?beam|gentleman ?jack|beefeater|tequilla|\bmacallan|hennessy|armagnac ducastaing|\bbaczewski|\baperol|\bvodka|carlsberg|kasztelan|okocim|smuggler|martini|\blager[ay]?\b|żywiec|pilsner|\brum[uy]?\b|książęce|\btrunek|amundsen|\bbrandy\b|żubrówk[aąięe]|\bradler\b|\btyskie\b|bourbon|glen moray|\bbrowar|\bgran[td]'?s\b|jagermeister|jack daniel'?s|\blech\b|heineken|\bcalsberg|\bbacardi\b|\bbushmills|\bballantine'?s|somersby|gentelman jack/i, style: { opacity: '0.3' } }, // don't use: \bwin(a|o)\b <-- to many false positive e.g. Wiedźmin 3 Krew i Wino
{ name: 'Disco Polo', active: false, keyword: /disco polo/i, style: { display: 'none' } },
{ name: 'Niezdrowe jedzenie', active: false, merchant: /mcdonalds|kfc|burger king/i, style: { opacity: '0.3' } },
{ name: 'Aliexpress/Banggood', active: false, merchant: /aliexpress|banggood/i, style: { border: '4px dashed #e00034' } },
{ name: 'Nieuczciwi sprzedawcy', active: false, merchant: /empik|komputronik|proline|super-pharm/i, style: { border: '4px dashed #1f7ecb' } },
{ name: 'Największe przeceny', active: false, discountAbove: 80, style: { border: '4px dashed #51a704' } },
{ name: 'Spożywcze', active: false, groups: /spożywcze/i, style: { opacity: '0.3' } },
{ name: 'Lokalne', active: false, local: true, style: { border: '4px dashed #880088' } },
];
/* Comments filters */
const defaultConfigCommentsFilters = [
{ name: 'SirNiedźwiedź', active: true, user: /SirNiedźwiedź/i, style: { border: '2px dotted #51a704' } },
{ name: 'G... burze by urtedbo', user: /urtedbo/i, keyword: /poo.*burz[eęaą]/i, style: { display: 'none' } }, // can match emoticons (also in brackets) => <i class="emoji emoji--type-poo" title="(poo)"></i>
{ name: 'Brzydkie słowa', keyword: /gówno|gowno|dópa|dupa/i, style: { opacity: '0.3' } },
];
const createNewFilterName = 'Utwórz nowy...';
const defaultFilterStyleValues = {
deals: {
display: 'none',
opacity: '0.3',
borderWidth: '4px',
borderStyle: 'dashed',
borderColor: '#880088', // '#ff7900'
},
comments: {
display: 'none',
opacity: '0.3',
borderWidth: '2px',
borderStyle: 'dotted',
borderColor: '#880088',
},
};
/*** END: Deafult Configuration ***/
const messageWrongJSONStyle = 'Niewłaściwa składnia w polu stylu. Należy użyć składni JSON.';
//RegExp.prototype.toJSON = RegExp.prototype.toString; // to stringify & parse RegExp
//const MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
const newRegExp = (pattern, flags = 'i') => (pattern instanceof RegExp || pattern.constructor.name === 'RegExp') ? pattern : pattern && new RegExp(pattern, flags) || null;
// const isEmptyObject = Object.entries(value).length === 0 && value.constructor === Object;
const isBoolean = value => value === true || value === false; // faster than typeof
const isNumeric = value => !isNaN(parseFloat(value)) && isFinite(value);
const isInteger = value => !isNaN(value) && parseInt(Number(value)) == value && !isNaN(parseInt(value, 10));
const isString = value => typeof value === 'string' || value instanceof String;
const getCSSBorderColor = borderCSS => borderCSS && isString(borderCSS) && (borderCSS.match(/#[a-fA-F0-9]+/) || [''])[0] || null; // match returns array or null => null will throw an error for index [0]
const getCSSBorderStyle = borderCSS => borderCSS && isString(borderCSS) && (borderCSS.match(/dashed|dotted|solid|double|groove|ridge|inset|outset/) || [''])[0] || null;
const arrayDifference = (array1, array2) => array1.filter(value => !array2.includes(value));
const arrayIntersection = (array1, array2) => array1.filter(value => array2.includes(value));
const JSONRegExpReplacer = (key, value) => (value instanceof RegExp) ? { __type__: 'RegExp', source: value.source, flags: value.flags } : value;
const JSONRegExpReviver = (key, value) => (value && value.__type__ === 'RegExp') ? new RegExp(value.source, value.flags) : value;
const zeroPad = number => (number < 10) ? `0${number}` : number;
const getCurrentDateTimeString = () => {
const now = new Date(),
year = now.getFullYear(),
month = zeroPad(now.getMonth() + 1), // months starting from 0
day = zeroPad(now.getDate()),
hours = zeroPad(now.getHours()),
minutes = zeroPad(now.getMinutes()),
seconds = zeroPad(now.getSeconds());
return `${year}-${month}-${day}_${hours}-${minutes}-${seconds}`;
};
const removeAllChildren = parent => { while (parent.hasChildNodes()) parent.removeChild(parent.lastChild); };
const moveAllChildren = (oldParent, newParent) => { while (oldParent.hasChildNodes()) newParent.appendChild(oldParent.firstChild); };
const cloneAttributes = (source, target) => [...source.attributes].forEach(attr => target.setAttribute(attr.nodeName, attr.nodeValue));
const getWindowSize = () => ({
width: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth,
height: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight,
});
/*** Configuration Functions ***/
const setConfig = (configuration = { pluginEnabled, darkThemeEnabled, improvements, autoUpdate, dealsFilters, commentsFilters }, reload = false) => {
if ((configuration.pluginEnabled !== undefined) && isBoolean(configuration.pluginEnabled)) {
localStorage.setItem('PepperTweaker.config.pluginEnabled', JSON.stringify(configuration.pluginEnabled));
pepperTweakerConfig.pluginEnabled = configuration.pluginEnabled;
}
if ((configuration.darkThemeEnabled !== undefined) && isBoolean(configuration.darkThemeEnabled)) {
localStorage.setItem('PepperTweaker.config.darkThemeEnabled', JSON.stringify(configuration.darkThemeEnabled));
pepperTweakerConfig.darkThemeEnabled = configuration.darkThemeEnabled;
}
if (configuration.improvements !== undefined) { // only one option can be specified here
configuration.improvements = { // to ensure only these props are in the autoUpdate object
listToGrid: isBoolean(configuration.improvements.listToGrid) ? configuration.improvements.listToGrid : pepperTweakerConfig.improvements.listToGrid,
gridColumnCount: isInteger(configuration.improvements.gridColumnCount) ? parseInt(configuration.improvements.gridColumnCount) : parseInt(pepperTweakerConfig.improvements.gridColumnCount),
transparentPaginationFooter: isBoolean(configuration.improvements.transparentPaginationFooter) ? configuration.improvements.transparentPaginationFooter : pepperTweakerConfig.improvements.transparentPaginationFooter,
hideTopDealsWidget: isBoolean(configuration.improvements.hideTopDealsWidget) ? configuration.improvements.hideTopDealsWidget : pepperTweakerConfig.improvements.hideTopDealsWidget,
hideGroupsBar: isBoolean(configuration.improvements.hideGroupsBar) ? configuration.improvements.hideGroupsBar : pepperTweakerConfig.improvements.hideGroupsBar,
repairDealDetailsLinks: isBoolean(configuration.improvements.repairDealDetailsLinks) ? configuration.improvements.repairDealDetailsLinks : pepperTweakerConfig.improvements.repairDealDetailsLinks,
repairDealImageLink: isBoolean(configuration.improvements.repairDealImageLink) ? configuration.improvements.repairDealImageLink : pepperTweakerConfig.improvements.repairDealImageLink,
addLikeButtonsToBestComments: isBoolean(configuration.improvements.addLikeButtonsToBestComments) ? configuration.improvements.addLikeButtonsToBestComments : pepperTweakerConfig.improvements.addLikeButtonsToBestComments,
addSearchInterface: isBoolean(configuration.improvements.addSearchInterface) ? configuration.improvements.addSearchInterface : pepperTweakerConfig.improvements.addSearchInterface,
addCommentPreviewOnProfilePage: isBoolean(configuration.improvements.addCommentPreviewOnProfilePage) ? configuration.improvements.addCommentPreviewOnProfilePage : pepperTweakerConfig.improvements.addCommentPreviewOnProfilePage,
};
localStorage.setItem('PepperTweaker.config.improvements', JSON.stringify(configuration.improvements));
pepperTweakerConfig.improvements = configuration.improvements;
}
if (configuration.autoUpdate !== undefined) { // only one option can be specified here
configuration.autoUpdate = { // to ensure only these props are in the autoUpdate object
dealsDefaultEnabled: isBoolean(configuration.autoUpdate.dealsDefaultEnabled) ? configuration.autoUpdate.dealsDefaultEnabled : pepperTweakerConfig.autoUpdate.dealsDefaultEnabled,
commentsDefaultEnabled: isBoolean(configuration.autoUpdate.commentsDefaultEnabled) ? configuration.autoUpdate.commentsDefaultEnabled : pepperTweakerConfig.autoUpdate.commentsDefaultEnabled,
soundEnabled: isBoolean(configuration.autoUpdate.soundEnabled) ? configuration.autoUpdate.soundEnabled : pepperTweakerConfig.autoUpdate.soundEnabled,
askBeforeLoad: isBoolean(configuration.autoUpdate.askBeforeLoad) ? configuration.autoUpdate.askBeforeLoad : pepperTweakerConfig.autoUpdate.askBeforeLoad,
};
localStorage.setItem('PepperTweaker.config.autoUpdate', JSON.stringify(configuration.autoUpdate));
pepperTweakerConfig.autoUpdate = configuration.autoUpdate;
}
if ((configuration.dealsFilters !== undefined) && Array.isArray(configuration.dealsFilters)) {
localStorage.setItem('PepperTweaker.config.dealsFilters', JSON.stringify(configuration.dealsFilters, JSONRegExpReplacer));
pepperTweakerConfig.dealsFilters = configuration.dealsFilters;
}
if ((configuration.commentsFilters !== undefined) && Array.isArray(configuration.commentsFilters)) {
localStorage.setItem('PepperTweaker.config.commentsFilters', JSON.stringify(configuration.commentsFilters, JSONRegExpReplacer));
pepperTweakerConfig.commentsFilters = configuration.commentsFilters;
}
if (reload) {
location.reload();
}
};
const resetConfig = (resetConfiguration = { resetPluginEnabled: true, resetDarkThemeEnabled: true, resetImprovements: true, resetAutoUpdate: true, resetDealsFilters: true, resetCommentsFilters: true }, reload = true) => {
const setConfigObject = {};
if (!resetConfiguration || resetConfiguration.resetPluginEnabled === true) {
setConfigObject.pluginEnabled = defaultConfigPluginEnabled;
}
if (!resetConfiguration || resetConfiguration.resetDarkThemeEnabled === true) {
setConfigObject.darkThemeEnabled = defaultConfigDarkThemeEnabled;
}
if (!resetConfiguration || resetConfiguration.resetImprovements === true) {
setConfigObject.improvements = defaultConfigImprovements;
}
if (!resetConfiguration || resetConfiguration.resetAutoUpdate === true) {
setConfigObject.autoUpdate = defaultConfigAutoUpdate;
}
if (!resetConfiguration || resetConfiguration.resetDealsFilters === true) {
setConfigObject.dealsFilters = defaultConfigDealsFilters;
}
if (!resetConfiguration || resetConfiguration.resetCommentsFilters === true) {
setConfigObject.commentsFilters = defaultConfigCommentsFilters;
}
setConfig(setConfigObject, reload);
};
const loadConfig = (outputConfig, inputConfig, reload = false) => {
if (inputConfig) {
try {
outputConfig = JSON.parse(inputConfig, JSONRegExpReviver);
setConfig(outputConfig, false); // reload == false --> missing config entries have to be reset first (below)
} catch (error) {
return false;
}
} else {
const failedSettings = [];
try {
outputConfig.pluginEnabled = JSON.parse(localStorage.getItem('PepperTweaker.config.pluginEnabled'));
} catch (error) {
failedSettings.push({ name: 'pluginEnabled', error: error.message });
}
try {
outputConfig.darkThemeEnabled = JSON.parse(localStorage.getItem('PepperTweaker.config.darkThemeEnabled'));
} catch (error) {
failedSettings.push({ name: 'darkThemeEnabled', error: error.message });
}
try {
outputConfig.improvements = JSON.parse(localStorage.getItem('PepperTweaker.config.improvements'));
} catch (error) {
failedSettings.push({ name: 'improvements', error: error.message });
}
try {
outputConfig.autoUpdate = JSON.parse(localStorage.getItem('PepperTweaker.config.autoUpdate'));
} catch (error) {
failedSettings.push({ name: 'autoUpdate', error: error.message });
}
try {
outputConfig.dealsFilters = JSON.parse(localStorage.getItem('PepperTweaker.config.dealsFilters'), JSONRegExpReviver);
} catch (error) {
failedSettings.push({ name: 'dealsFilters', error: error.message });
}
try {
outputConfig.commentsFilters = JSON.parse(localStorage.getItem('PepperTweaker.config.commentsFilters'), JSONRegExpReviver);
} catch (error) {
failedSettings.push({ name: 'commentsFilters', error: error.message });
}
for (const failed of failedSettings) {
console.error(`Cannot parse PepperTweaker.config.${failed.name}: ${failed.error}`);
console.error(`Value of ${failed.name}: ` + localStorage.getItem(`PepperTweaker.config.${failed.name}`));
if (backupConfigOnFailureLoad[failed.name] === true) {
localStorage.setItem(`PepperTweaker.config.${failed.name}-backup`, localStorage.getItem(`PepperTweaker.config.${failed.name}`));
console.error(`Current ${failed.name} value saved as PepperTweaker.config.${failed.name}-backup`);
}
outputConfig[failed.name] = null;
}
}
const configToReset = {};
if (!isBoolean(outputConfig.pluginEnabled)) {
configToReset.resetPluginEnabled = true;
}
if (!isBoolean(outputConfig.darkThemeEnabled)) {
configToReset.resetDarkThemeEnabled = true;
}
if (!outputConfig.improvements
|| !isBoolean(outputConfig.improvements.listToGrid)
|| !isInteger(outputConfig.improvements.gridColumnCount)
|| !isBoolean(outputConfig.improvements.transparentPaginationFooter)
|| !isBoolean(outputConfig.improvements.hideTopDealsWidget)
|| !isBoolean(outputConfig.improvements.hideGroupsBar)
|| !isBoolean(outputConfig.improvements.repairDealDetailsLinks)
|| !isBoolean(outputConfig.improvements.repairDealImageLink)
|| !isBoolean(outputConfig.improvements.addLikeButtonsToBestComments)
|| !isBoolean(outputConfig.improvements.addSearchInterface)
|| !isBoolean(outputConfig.improvements.addCommentPreviewOnProfilePage)) {
configToReset.resetImprovements = true;
}
if (!outputConfig.autoUpdate
|| !isBoolean(outputConfig.autoUpdate.dealsDefaultEnabled)
|| !isBoolean(outputConfig.autoUpdate.commentsDefaultEnabled)
|| !isBoolean(outputConfig.autoUpdate.soundEnabled)
|| !isBoolean(outputConfig.autoUpdate.askBeforeLoad)) {
configToReset.resetAutoUpdate = true;
}
if (!Array.isArray(outputConfig.dealsFilters)) {
configToReset.resetDealsFilters = true;
}
if (!Array.isArray(outputConfig.commentsFilters)) {
configToReset.resetCommentsFilters = true;
}
resetConfig(configToReset, reload);
return true;
}
const saveConfigFile = () => {
const link = document.createElement('A');
const file = new Blob([JSON.stringify(pepperTweakerConfig, JSONRegExpReplacer)], { type: 'text/plain' });
link.href = URL.createObjectURL(file);
link.download = `PepperTweaker-config-[${getCurrentDateTimeString()}].json`;
link.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true, view: window }));
};
const importConfigFromFile = () => {
const fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.accept = 'application/json';
fileInput.onchange = event => {
const file = fileInput.files[0];
const reader = new FileReader();
reader.onload = () => {
if (!loadConfig({}, reader.result, true)) {
alert('Ten plik nie wygląda jak konfiguracja PepperTweakera :/');
}
};
reader.readAsText(file);
};
fileInput.click();
};
/*** END: Configuration Functions ***/
/*** Load Configuration from Local Storage ***/
const pepperTweakerConfig = {};
loadConfig(pepperTweakerConfig);
/*** END: Load configuration ***/
/*** Setting CSS ***/
let css = '';
/* Theme independent style */
const voteRedColor = '#e00034';
const voteBlueColor = '#1f7ecb';
css += `
body {
font-family: Arial;
}
/* Font Size */
.userHtml {
font-size: 0.925rem !important;
}
.size--fromW3-xxl, .thread-title--item, .userHtml--subtitles h3 {
font-size: 1.25rem !important;
}
.threadItemCard-price {
font-size: 1.5rem !important;
}
/* END: Font Size */
.button--fromW3-size-l {
height: 40px !important;
}
/* Pepper ads */
#mrec1FuseZonePortal, #vrec1FuseZonePortal {
display: none;
}
/* END: Pepper ads */
/* Voting buttons: Replaced up/down arrow with +/- */
.vote-button .icon--arrow-rounded-down, .vote-button .icon--arrow-rounded-up {
display: none;
}
.vote-button.vote-button--mode-up span:after {
content: '+';
font-weight: bold;
font-size: 1.7em;
}
.vote-button.vote-button--mode-down span:after {
content: '\u2013';
font-weight: bold;
font-size: 1.7em;
margin-top: -0.17em;
}
/* Changing the color only when voting enabled (not voted already) */
.vote-button.vote-button--mode-up:not(:disabled) span:after {
color: ${voteRedColor};
}
.vote-button.vote-button--mode-down:not(:disabled) span:after {
color: ${voteBlueColor};
}
/***/
.vote-button.vote-button--mode-up.vote-button--mode-selected {
background-color: ${voteRedColor} !important;
}
.vote-button.vote-button--mode-down.vote-button--mode-selected {
background-color: ${voteBlueColor} !important;
}
/* END: Voting buttons */
`;
if (pepperTweakerConfig.pluginEnabled) {
/* Hide Groups Bar */
if (pepperTweakerConfig.improvements.hideTopDealsWidget) {
css += `
.listLayout .vue-portal-target, .listLayout-side .vue-portal-target,
.js-vue2[data-vue2*="HottestWidget"] {
display: none !important;
}
`;
}
/* Hide Top Deals Widget */
if (pepperTweakerConfig.improvements.hideGroupsBar) {
css += `
.subNav .groupPromo--bg,
div[data-t="groupsPromotionWidget"] { /* groups top bar at the search subpage */
display: none !important;
}
`;
}
/* Dark Theme Style */
if (pepperTweakerConfig.darkThemeEnabled) {
// const invertColor = color => '#' + (Number(`0x1${ color.replace('#', '') }`) ^ 0xFFFFFF).toString(16).substr(1);
const darkBorderColor = '#121212';
const lightBorderColor = '#5c5c5c';
const darkBackgroundColor = '#242424';
const veryDarkBackgroundColor = '#1d1f20';
const darkestBackgroundColor = '#050c13';
const lightBackgroundColor = '#35373b';
const textColor = '#bfbfbf';
const secondaryTextColor = '#8f949b';
const orangeColor = '#f7641b';
// const greyButtonColor = '#8f949b';
// const orangeColor = '#d1d5db';
css += `
:root {
/* text color variables used by Pepper */
--textNeutralPrimary: ${textColor};
--textNeutralSecondary: ${textColor};
--textTranslucentPrimary: ${textColor};
--textTranslucentSecondary: ${secondaryTextColor};
--textTranslucentSecondaryHover: ${textColor};
--textTranslucentTertiary: ${textColor};
--graphicTranslucentTertiary: ${secondaryTextColor};
--graphicTranslucentTertiaryHover: ${textColor};
--graphicTranslucentSecondary: ${secondaryTextColor};
/* background color variables used by Pepper */
--bgBaseSecondary: ${darkBackgroundColor};
--bgNeutralPrimary: ${lightBackgroundColor};
/* border color variables used by Pepper */
--borderNeutralPrimary: ${lightBorderColor};
}
.subNavMenu-link,
.vote-temp--inert,
.formList-label,
.navMenu-label,
.card-title,
#threadBreadcrumbsPortal .text--color-white,
footer .text--color-white,
.text--color-charcoalShade,
.comments-pagi--header .comments-pagi-pages:not(:disabled),
.page2-center .mute--text2, .page2-subTitle2.mute--text2, .conversation-content.mute--text2, .linkGrey, .thread-userOptionLink, .cept-nav-subheadline, .user:not(.thread-user), .tabbedInterface-tab, .subNavMenu, .subNavMenu-btn, .tag, .page-label, .page-subTitle, .page2-secTitle, .userProfile-title, .userProfile-title--sub, .bg--color-inverted .text--color-white, .comments-pagination--header .pagination-next, .comments-pagination--header .pagination-page, .comments-pagination--header .pagination-previous, .conversationList-msgPreview, .thread-title, .mute--text, .text--color-charcoal, .text--color-charcoalTint, .cept-tt, .cept-description-container, /*.cept-tp,*/ .thread-username, .voucher input, .hide--bigCards1, .hide--toBigCards1 {
color: ${textColor};
}
.redactor button,
.redactor button.button--disabled svg,
.redactor button.button--disabled span,
.button--type-primary.button--mode-brand.button--disabled,
.button--type-secondary:not(.cept-on), .button--mode-secondary, .button--type-tertiary {
color: ${secondaryTextColor} !important;
}
.navDropDown-trigger.button--type-primary.button--mode-white,
.speechBubble {
background-color: ${darkBackgroundColor};
color: ${textColor};
}
.thread--type-card, .thread--type-list, .conversationList-msg--read:not(.conversationList-msg--active), .card, .threadCardLayout--card article, .threadCardLayout--card article span .threadCardLayout--card article span, .cept-comments-link, .subNavMenu-btn {
background-color: ${darkBackgroundColor} !important;
border-color: ${darkBorderColor};
}
.thread--deal, .thread--discussion {
background-color: ${darkBackgroundColor};
border-color: ${darkBorderColor};
border-top: none; /* there is some problem with the top border => whole article goes up */
border-radius: 5px;
}
.vote-box, .input, .inputBox, .secretCode-codeBox, .toolbar, .voucher-code {
background-color: ${darkBackgroundColor} !important;
border-color: ${lightBorderColor} !important;
}
/* MC Notifications, e.g. reindeers */
.mc-notification .text--color-white {
color: ${textColor} !important;
}
.button--type-primary.button--mode-white {
--text-default: ${textColor};
}
.mc-notification-inner {
border-color: ${textColor} !important;
}
.mc-background--primary,
.mc-background--shade,
.mc-background--shadow,
.mc-background--grey,
.mc-background--lvl1,
.mc-background--lvl2,
.mc-background--lvl3 {
background: none;
background-color: ${veryDarkBackgroundColor} !important;
}
/* END: MC Notifications */
/* Range sliders - have to be defined separately */
.rangeSlider::-moz-range-thumb { /* Firefox */
background-color: ${darkBackgroundColor} !important;
}
.rangeSlider::-webkit-slider-thumb { /* Chrome, Safari, Opera */
background-color: ${darkBackgroundColor} !important;
}
.rangeSlider::-ms-thumb { /* IE - not tested */
background-color: ${darkBackgroundColor} !important;
}
/* END: Range sliders */
/* Arrows */
.input-caretLeft {
border-right-color: ${lightBorderColor};
}
.input-caretLeft:before {
border-right-color: ${darkBackgroundColor};
}
.popover--layout-s > .popover-arrow:after, .inputBox:after {
border-bottom-color: ${darkBackgroundColor};
}
.popover--layout-n > .popover-arrow:after {
border-top-color: ${darkBackgroundColor};
}
.popover--layout-w > .popover-arrow:after {
border-left-color: ${darkBackgroundColor};
}
.popover--layout-e > .popover-arrow:after {
border-right-color: ${darkBackgroundColor};
}
.popover--layout-s > .popover-arrow::after, .inputBox::after {
border-bottom-color: ${orangeColor};
}
/* END: Arrows */
/* Faders */
.overflow--fade-b-r--l:after, .overflow--fade-b-r--s:after, .overflow--fade-b-r:after, .overflow--fromW3-fade-b-r--l:after, .overflow--fromW3-fade-r--l:after, .thread-title--card:after, .thread-title--list--merchant:after, .thread-title--list:after {
background: -webkit-linear-gradient(left,hsla(0,0%,100%,0),${darkBackgroundColor} 50%,${darkBackgroundColor});
background: linear-gradient(90deg,hsla(0,0%,100%,0),${darkBackgroundColor} 50%,${darkBackgroundColor});
/* filter: brightness(100%) !important; */
}
.fadeEdge--r:after, .overflow--fade:after, .subNavMenu--lFade {
background: -webkit-linear-gradient(left,hsla(0,0%,100%,0),${darkBackgroundColor} 80%);
background: linear-gradient(90deg,hsla(0,0%,100%,0) 0,${darkBackgroundColor} 80%);
filter: brightness(100%) !important;
}
.text--overlay:before {
background-image: -webkit-linear-gradient(left,hsla(0,0%,100%,0),${darkBackgroundColor} 90%);
background-image: linear-gradient(90deg,hsla(0,0%,100%,0),${darkBackgroundColor} 90%);
filter: brightness(100%) !important;
}
.no-touch .carousel-list--air.carousel--isPrev:before {
background: linear-gradient(-270deg, rgba(36, 36, 36, .98) 10%, hsla(0, 0%, 100%, 0));
}
.no-touch .carousel-list--air.carousel--isNext:after {
background: linear-gradient(270deg, rgba(36, 36, 36, .98) 10%, hsla(0, 0%, 100%, 0));
}
/* END: Faders */
.btn--border, .bg--off, .boxSec--fromW3:not(.thread-infos), .boxSec, .voucher-codeCopyButton, .search input, .userHtml-placeholder, .userHtml img, .popover--subNavMenu .popover-content {
border: 1px solid ${darkBorderColor} !important; /* need full border definition for .bg--off */
}
.userProfile-header-inner .bg--color-greyPanel {
border: 1px solid ${lightBorderColor} !important;
}
.commentList-comment--highlighted, .comments-item-inner--edit,
.bg--color-white, .carousel-list--air, .tabbedInterface-tab:hover, .tabbedInterface-tab--selected, .bg--main, .tabbedInterface-tab--horizontal, .tabbedInterface-tab--selected, .comment--selected, .comments-item--in-moderation, .comments-item-inner--active, .comments-item-inner--edit, /*.thread.cept-sale-event-thread.thread--deal,*/ .vote-btn, .notification-item:not(.notification-item--read), .search input, .text--overlay, .popover--brandAccent .popover-content, .popover--brandPrimary .popover-content, .popover--default .popover-content, .popover--menu .popover-content, .popover--red .popover-content {
background-color: ${darkBackgroundColor} !important;
}
.notification-item:hover, .notification-item--read:hover {
filter: brightness(75%);
}
.speechBubble:before, .speechBubble:after, .text--color-white.threadTempBadge--card, .text--color-white.threadTempBadge {
color: ${darkBackgroundColor};
}
.stickyBar-top,
.bg--off, .js-pagi-bottom, .js-sticky-pagi--on, .bg--color-grey, .notification-item--read, #main, .subNavMenu--menu .subNavMenu-list {
background-color: ${lightBackgroundColor} !important;
color: ${textColor};
}
.tabbedInterface-tab--transparent {
background-color: ${lightBackgroundColor};
}
.comment-replies,
.userHtml blockquote,
.userHtml hr,
.internalLinking-tabContent, .border--color-greyBackground, .page-divider, .popover-item, .boxSec-divB, .boxSec--fromW3, .cept-comment-link, .border--color-borderGrey, .border--color-greyTint, .staticPageHtml table, .staticPageHtml td, .staticPageHtml th {
border-color: ${lightBorderColor};
}
.bg--color-charcoalTint,
.listingProfile, .tabbedInterface-tab--primary:not(.tabbedInterface-tab--selected):hover, .navMenu-trigger, .navMenu-trigger--active, .navMenu-trigger--active:focus, .navMenu-trigger--active:hover, .navDropDown-link:focus, .navDropDown-link:hover {
background-color: ${veryDarkBackgroundColor} !important;
}
.softMessages-item, .popover--modal .popover-content, .bg--fromW3-color-white, .listingProfile-header, .profileHeader, .bg--em, nav.comments-pagination {
background-color: ${veryDarkBackgroundColor};
color: ${textColor} !important;
}
.bg--color-greyPanel {
background-color: ${veryDarkBackgroundColor};
}
.progressBar::before,
.bg--color-greyTint, .thread-divider, .btn--mode-filter {
background-color: ${textColor};
}
img.avatar[src*="placeholder"] {
filter: brightness(75%);
}
.button--type-primary.button--mode-brand,
.btn--mode-primary, .btn--mode-highlight, .bg--color-brandPrimary { /* Orange Buttons/Backgrounds */
filter: brightness(90%);
}
/* Animated badge */
.animation--colorTransfusion {
background-color: ${orangeColor} !important;
filter: brightness(90%);
}
.animation--colorTransfusion .text--color-brandPrimary {
color: #fff !important;
font-weight: bold !important;
}
/***/
.btn--mode-dark-transparent, .btn--mode-dark-transparent:active, .btn--mode-dark-transparent:focus, button:active .btn--mode-dark-transparent, button:focus .btn--mode-dark-transparent {
background-color: inherit;
}
.boxSec-div, .boxSec-div--toW2 {
border-top: 1px solid ${darkBorderColor};
}
.profileHeader, .nav, .navDropDown-item, .navDropDown-link, .navDropDown-pItem, .subNavMenu--menu .subNavMenu-item--separator {
border-bottom: 1px solid ${darkBorderColor};
}
.footer, .subNav, .voteBar, .comment-item {
background-color: ${darkBackgroundColor};
border-bottom: 1px solid ${darkBorderColor};
}
.commentList-item:not(:last-child), /* New comment list class */
.comments-list--top .comments-item:target .comments-item-inner, .comments-list .comments-item, .comments-list .comments-list-item:target .comments-item-inner {
border-bottom: 1px solid ${darkBorderColor};
}
.fadeOuterEdge--l {
box-shadow: -20px 0 17px -3px ${darkBackgroundColor};
}
.vote-box {
box-shadow: 10px 0 10px -3px ${darkBackgroundColor};
}
.btn--mode-boxSec, .btn--mode-boxSec:active, .btn--mode-boxSec:focus, .btn--mode-boxSec:hover, button:active .btn--mode-boxSec, button:focus .btn--mode-boxSec, button:hover .btn--mode-boxSec {
background-color: ${textColor};
}
.overflow--fade:after {
background-color: linear-gradient(90deg,hsla(0,0%,100%,0) 0,#242424 80%) !important;
}
.nav-logo,
img, .badge, .btn--mode-primary-inverted, .btn--mode-primary-inverted--no-state, .btn--mode-primary-inverted--no-state:active, .btn--mode-primary-inverted--no-state:focus, .btn--mode-primary-inverted--no-state:hover, .btn--mode-primary-inverted:active, .btn--mode-primary-inverted:focus, button:active .btn--mode-primary-inverted, button:active .btn--mode-primary-inverted--no-state, button:focus .btn--mode-primary-inverted, button:focus .btn--mode-primary-inverted--no-state, button:hover .btn--mode-primary-inverted--no-state {
filter: invert(2%) brightness(90%);
}
.thread--expired > * {
filter: opacity(50%) brightness(95%);
}
.icon--overflow {
color: ${textColor};
}
.input {
line-height: 1.1rem;
}
/* White Covers/Seals etc. */
.progress--cover, .seal--cover:after {
opacity: 0.8;
background-color: ${veryDarkBackgroundColor} !important;
}
@-webkit-keyframes pulseBgColor {
0% { background-color: transparent; filter: contrast(100%); }
15% { background-color: ${veryDarkBackgroundColor}; filter: contrast(105%); }
85% { background-color: ${veryDarkBackgroundColor}; filter: contrast(105%); }
to { background-color: transparent; filter: contrast(100%); }
}
@keyframes pulseBgColor {
0% { background-color: transparent; filter: contrast(100%); }
15% { background-color: ${veryDarkBackgroundColor}; filter: contrast(105%); }
85% { background-color: ${veryDarkBackgroundColor}; filter: contrast(105%); }
to { background-color: transparent; filter: contrast(100%); }
}
/* END */
/* Reactions */
.popover--reactions .popover-content {
background-color: ${veryDarkBackgroundColor};
border: 1px solid ${lightBorderColor};
}
/* END */
/* Buttons: coupons, comments, alerts */
.btn--mode-boxSec,
.btn--mode-primary-inverted,
.btn--mode-primary-inverted--no-state {
/* color: ${secondaryTextColor}; */
background-color: ${darkBackgroundColor} !important;
border: 1px solid ${lightBorderColor} !important;
}
.button--type-tag.button--mode-dark {
background-color: ${lightBackgroundColor} !important;
color: ${textColor} !important;
}
.radio-icon {
background-color: var(--bgNeutralPrimary);
}
.footerMeta-actionSlot .btn--mode-boxSec { /* comment buttons in the grid list */
color: ${secondaryTextColor};
padding-left: 0.57143em !important;
padding-right: 0.57143em !important;
}
.popover--dropdown .popover-content,
.redactor,
.redactor button,
.button--type-primary.button--mode-brand.button--disabled,
.button--emoji,
.button--type-secondary,
.btn--mode-boxSec:hover,
.btn--mode-primary-inverted:hover,
.btn--mode-primary-inverted--no-state:hover,
.btn--mode-boxSec:active,
.btn--mode-primary-inverted:active,
.btn--mode-primary-inverted--no-state:active,
.btn--mode-boxSec:focus,
.btn--mode-primary-inverted:focus,
.btn--mode-primary-inverted--no-state:focus {
background-color: ${veryDarkBackgroundColor} !important;
border: 1px solid ${lightBorderColor} !important;
}
.btn--mode-white--dark,
.btn--mode-white--dark:hover,
.btn--mode-white--dark:active,
.btn--mode-white--dark:focus {
background-color: ${veryDarkBackgroundColor} !important;
}
.redactor button.button--mode-brand:hover,
.button--selected,
.btn--mode-white--dark:hover,
.btn--mode-white--dark:active,
.btn--mode-white--dark:focus {
color: ${orangeColor} !important;
}
.button--type-tertiary.button--mode-default:hover,
.button--type-tertiary.button--mode-default.button--selected,
.button--type-tertiary.button--mode-default.button--selected:hover {
background-color: ${darkBackgroundColor} !important;
color: ${orangeColor} !important;
border: none !important;
}
/* Voting buttons */
.vote-button {
background-color: ${darkBackgroundColor} !important;
}
.vote-button:not(.vote-button--mode-selected):disabled {
background-color: ${darkBackgroundColor} !important;
color: ${textColor};
}
.vote-button.vote-button--mode-selected span:after {
color: ${darkBackgroundColor} !important;
}
/***/
/* END */
/* Badges */
.textBadge,
.textBadge--greyBackground {
background-color: ${orangeColor} !important;
color: ${darkestBackgroundColor} !important;
font-weight: bold !important;
}
.comment-newBadge--animated {
color: ${orangeColor} !important;
}
/* END */
`;
/* Transparent Footer */
if (pepperTweakerConfig.improvements.transparentPaginationFooter) { // must be after dark theme
css += `
.js-sticky-pagi--on {
background-color: transparent !important;
border-top: none !important;
}
.js-sticky-pagi--on .tGrid-cell:not(:first-child):not(:last-child) {
background-color: ${lightBackgroundColor} !important;
border-top: 1px solid ${darkBorderColor};
border-bottom: 1px solid ${darkBorderColor};
padding-top: 0.7em;
padding-bottom: 0.6em;
}
.js-sticky-pagi--on .tGrid-cell:first-child .hide--toW3, .js-sticky-pagi--on .tGrid-cell:last-child .hide--toW3 {
visibility: hidden;
}
.js-sticky-pagi--on .tGrid-cell:first-child .hide--toW3, .js-sticky-pagi--on .tGrid-cell:last-child .hide--toW3 {
display: none !important;
}
.js-sticky-pagi--on .tGrid-cell:first-child .hide--fromW3, .js-sticky-pagi--on .tGrid-cell:last-child .hide--fromW3 {
display: inline-flex !important;
background-color: ${lightBackgroundColor} !important;
border: 1px solid ${darkBorderColor};
border-radius: 5px;
width: 42px;
height: 42px;
}
.js-sticky-pagi--on .tGrid-cell:first-child .hide--fromW3 svg, .js-sticky-pagi--on .tGrid-cell:last-child .hide--fromW3 svg {
color: #ff7900;
}
.js-sticky-pagi--on .tGrid-cell:nth-child(2) {
padding-left: 1em !important;
border-left: 1px solid ${darkBorderColor};
border-radius: 5px 0 0 5px;
}
.js-sticky-pagi--on .tGrid-cell:nth-last-child(2) {
padding-right: 1em !important;
border-right: 1px solid ${darkBorderColor};
border-radius: 0 5px 5px 0;
}
`;
}
/* END: Transparent Footer */
}
/* END: Dark Theme Style */
}
/* Check What Browser */
const isFirefoxBrowser = typeof InstallTrigger !== 'undefined';
const isOperaBrowser = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
// Apply CSS
if (css.length > 0) {
if (isFirefoxBrowser && (document.hidden || !document.hasFocus())) {
const appendStyle = () => {
const style = document.createElement('style');
style.appendChild(document.createTextNode(css));
document.head.appendChild(style);
};
document.addEventListener('DOMContentLoaded', appendStyle);
} else {
const appendStyle = () => {
if (document.head !== null) {
document.head.insertAdjacentHTML('afterend', `<style id="pepper-tweaker-style">${css}</style>`);
} else if (document.documentElement !== null) {
document.documentElement.insertAdjacentHTML('beforeend', `<style id="pepper-tweaker-style">${css}</style>`);
} else {
setTimeout(appendStyle, 10);
}
}
appendStyle();
}
}
/*** END: Setting CSS ***/
/***** END: RUN AT DOCUMENT START (BEFORE LOAD) *****/
/**********************************************/
/***** RUN AFTER DOCUMENT HAS BEEN LOADED *****/
/**********************************************/
const startPepperTweaker = () => {
const pepperTweakerStyleNode = document.getElementById('pepper-tweaker-style');
if (pepperTweakerStyleNode) {
document.head.appendChild(pepperTweakerStyleNode); // move <style> to the proper position (the end of <head>) - only if <style> exists
}
if (pepperTweakerConfig.pluginEnabled) {
/*** Change Theme Button ***/
const addChangeThemeButton = (searchForm) => {
if (searchForm !== null && searchForm instanceof HTMLElement) { // sanity
const themeButtonDiv = document.createElement('DIV');
themeButtonDiv.classList.add('navDropDown', 'hAlign--all-l', 'vAlign--all-m', 'space--r-3', 'hide--toW2'); // space--r-3 => right space
const themeButtonLink = document.createElement('BUTTON');
themeButtonLink.classList.add('navDropDown-trigger', 'overflow--visible', 'button', 'button--shape-circle', 'button--type-primary', 'button--mode-white', 'button--square');
const themeButtonImg = document.createElement('IMG');
themeButtonImg.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAArlBMVEVHcEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDOkjZAAAAOXRSTlMA3fOZiRSwMxFVoU/YkfKdOwP8Q0hu63cnC4Fw9vtaclSktufqy7H+9dvljTK1JhfKEsWlD3a37i9GF/eYAAAAnklEQVQY04XQ1xLCIBBA0QU0YmKiacbee++6//9jignMMj54n5gzQ1lgyNE0G0EeMVzOC0TaWqMvTfuaxhKYHIJbIY4vIe4WNhFbHn8+4Hqy8ZZUdXGoMM2y84W8wSkukuhXdG4EkasWB4oIi++O1JoBwlgdvrMxr4y4YWyFAWNTio3PRFgH8P5iIuUEx1IOKP5e1O4T4/rXOj1jQfcNdIApApX/xhoAAAAASUVORK5CYII=';
themeButtonImg.style.filter = 'invert(60%)';
themeButtonLink.appendChild(themeButtonImg);
themeButtonDiv.appendChild(themeButtonLink);
themeButtonDiv.onclick = () => setConfig({ darkThemeEnabled: !pepperTweakerConfig.darkThemeEnabled }, true);
searchForm.parentNode.insertBefore(themeButtonDiv, searchForm);
}
}
const headerPortalObserver = new MutationObserver((allMutations, observer) => {
allMutations.every((mutation) => {
const searchForm = mutation.target.querySelector('form.search');
if (searchForm !== null) {
addChangeThemeButton(searchForm);
observer.disconnect();
return false;
}
});
});
headerPortalObserver.observe(document.querySelector('#header-portal, #ve-header-desktop'), { childList: true, subtree: true });
/*** END: Change Theme Button ***/
/*** Menu Links Addition ***/
const subNav = document.querySelector('section.subNav');
if (subNav) {
/* Add my alerts and saved threads links */
const addSubNavMenuItem = (text, link) => { // this can be done with cloneNode too...
const subNavMenu = document.querySelector('.subNavMenu-list');
const savedThreadsElement = document.createElement('LI');
savedThreadsElement.classList.add('subNavMenu-item--separator', 'cept-sort-tab');
const savedThreadsLink = document.createElement('A');
savedThreadsLink.href = link;
savedThreadsLink.classList.add('subNavMenu-item', 'subNavMenu-link', 'boxAlign-ai--all-c');
const savedThreadsSpan = document.createElement('SPAN');
savedThreadsSpan.classList.add('box--all-i', 'size--all-m', 'vAlign--all-m');
const savedThreadsText = document.createTextNode(text);
savedThreadsSpan.appendChild(savedThreadsText);
savedThreadsLink.appendChild(savedThreadsSpan);
savedThreadsElement.appendChild(savedThreadsLink);
subNavMenu.appendChild(savedThreadsElement);
}
let linkElement;
// nie ma już takich linków na stronie...
if (!subNav.querySelector('a[href$="/keyword-alarms"]') && (linkElement = document.querySelector('a[href$="/keyword-alarms"]'))) {
addSubNavMenuItem('Lista alertów', linkElement.href);
}
if (!subNav.querySelector('a[href$="/saved-deals"]') && (linkElement = document.querySelector('a[href$="/saved-deals"]'))) {
addSubNavMenuItem('Ulubione', linkElement.href);
}
}
/*** END: Menu Links Addition ***/
}
const createLabeledCheckbox = ({ label = '', id, checked, callback } = {}) => {
const wrapperDiv = document.createElement('DIV');
wrapperDiv.classList.add('space--v-1');
const labelElement = document.createElement('LABEL');
labelElement.classList.add('checkbox', 'size--all-m');
const inputElement = document.createElement('INPUT');
inputElement.classList.add('input', 'checkbox-input');
inputElement.type = 'checkbox';
if (id) {
inputElement.id = id;
}
if (checked === true) {
inputElement.checked = true;
}
if (callback) {
inputElement.onchange = callback;
}
const spanGridCell = document.createElement('SPAN');
spanGridCell.classList.add('tGrid-cell', 'tGrid-cell--shrink');
const spanCheckboxBox = document.createElement('SPAN');
spanCheckboxBox.classList.add('checkbox-box', 'flex--inline', 'boxAlign-jc--all-c', 'boxAlign-ai--all-c');
const svgElement = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
svgElement.classList.add('icon', 'icon--tick', 'text--color-brandPrimary', 'checkbox-tick');
svgElement.setAttribute('width', '20');
svgElement.setAttribute('height', '16');
const useElement = document.createElementNS('http://www.w3.org/2000/svg', 'use');
useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '/assets/img/ico_37b33.svg#tick');
svgElement.appendChild(useElement);
spanCheckboxBox.appendChild(svgElement);
spanGridCell.appendChild(spanCheckboxBox);
const spanCheckboxText = document.createElement('SPAN');
spanCheckboxText.classList.add('checkbox-text', 'tGrid-cell', 'space--l-2');
spanCheckboxText.textContent = label;
labelElement.appendChild(inputElement);
labelElement.appendChild(spanGridCell);
labelElement.appendChild(spanCheckboxText);
wrapperDiv.appendChild(labelElement);
return wrapperDiv;
};
const createLabeledButton = ({ label = '', id, className = 'default', callback } = {}) => {
const wrapperDiv = document.createElement('DIV');
wrapperDiv.classList.add('space--v-2');
const buttonElement = document.createElement('BUTTON');
buttonElement.classList.add('btn', 'width--all-12', 'hAlign--all-c', `btn--mode-${className}`);
if (id) {
buttonElement.id = id;
}
if (callback) {
buttonElement.onclick = callback;
}
const buttonText = document.createTextNode(label);
buttonElement.appendChild(buttonText);
wrapperDiv.appendChild(buttonElement);
return wrapperDiv;
};
const createTextInput = ({ id, value, placeholder, required = false } = {}) => {
const wrapperDiv = document.createElement('DIV');
wrapperDiv.classList.add('space--v-2');
const textInput = document.createElement('INPUT');
textInput.classList.add('input', 'width--all-12', 'size--all-l');
if (id) {
textInput.id = id;
}
if (value) {
textInput.value = value;
}
if (placeholder) {
textInput.placeholder = placeholder;
}
if (required === true) {
textInput.required = true;
}
wrapperDiv.appendChild(textInput);
return wrapperDiv;
};
/*** Settings Page ***/
if (location.pathname.indexOf('/settings') >= 0) {
let settingsPageConfig = {}; // will be set after function definitions (we need create-function names)
const filterType = Object.freeze({
deals: 'deals',
comments: 'comments',
});
const createSettingsBlock = label => {
const blockContainer = document.createElement('DIV');
blockContainer.classList.add('iGrid', 'space--v-4', 'page-divider');
const headerContainer = document.createElement('DIV');
headerContainer.classList.add('iGrid-item', 'width--all-12', 'width--fromW4-6', 'space--b-2');
const headerElement = document.createElement('H2');
headerElement.classList.add('userProfile-title--sub', 'text--b');
const labelText = document.createTextNode(label);
headerElement.appendChild(labelText);
headerContainer.appendChild(headerElement);
blockContainer.appendChild(headerContainer);
return blockContainer;
};
const createSettingsBlockHeader = (label, divider = true) => {
const headerContainer = document.createElement('DIV');
headerContainer.classList.add('formList-row', 'width--all-12', 'space--b-2');
const headerElement = document.createElement('H2');
headerElement.classList.add('userProfile-title--sub', 'text--b', 'space--v-4');
const labelText = document.createTextNode(label);
headerElement.appendChild(labelText);
if (divider) {
headerContainer.appendChild(createDivider(false));
}
headerContainer.appendChild(headerElement);
return headerContainer;
};
const createSettingsRow = label => {
const rowDiv = document.createElement('DIV');
rowDiv.classList.add('formList-row');
const labelSpan = document.createElement('SPAN');
labelSpan.classList.add('formList-label');
const labelText = document.createTextNode(label);
const contentDiv = document.createElement('DIV');
contentDiv.classList.add('formList-content');
labelSpan.appendChild(labelText);
rowDiv.appendChild(labelSpan);
rowDiv.appendChild(contentDiv);
return rowDiv;
}
const addSelectOptionElement = (selectElement, optionValue) => {
const optionElement = document.createElement('OPTION');
optionElement.value = optionValue;
optionElement.appendChild(document.createTextNode(optionValue))
selectElement.appendChild(optionElement);
return optionElement;
};
// Works only in settings page because of cloneNode() !!!
const createSelectInput = ({ options = [createNewFilterName], value, id, callback } = {}) => {
const select = document.querySelector('#defaultLandingPage .select').cloneNode(true);
const selectCtrl = select.querySelector('.select-ctrl');
selectCtrl.name = 'filter_selection';
if (id) {
selectCtrl.id = id;
}
if (callback) {
selectCtrl.onchange = callback;
}
removeAllChildren(selectCtrl);
for (const optionValue of options) {
addSelectOptionElement(selectCtrl, optionValue);
}
if (value && options.includes(value)) {
selectCtrl.value = value;
}
select.querySelector('.js-select-val').textContent = options[selectCtrl.selectedIndex];
return select;
};
const createLabeledInput = ({ id, callback, beforeLabel = '', afterLabel = '', min, max, step, value } = {}) => {
const wrapperDiv = document.createElement('DIV');
wrapperDiv.classList.add('space--v-2');
const divElement = document.createElement('DIV');
divElement.classList.add('tGrid', 'tGrid--auto', 'width--all-12');
const inputElement = document.createElement('INPUT');
inputElement.classList.add('input', 'width--all-12', 'bRad--r-r');
inputElement.type = 'number';
if (id) {
inputElement.id = id;
}
if (callback) {
inputElement.onchange = callback;
}
if (isNumeric(min)) {
inputElement.min = min;
}
if (isNumeric(max) && (max >= min)) {
inputElement.max = max;
}
if (isNumeric(step)) {
inputElement.step = step;
}
if (isNumeric(value) && (!isNumeric(min) || value >= min) && (!isNumeric(max) || value <= max)) {
inputElement.value = value;
}
divElement.appendChild(inputElement);
if (afterLabel && afterLabel.length > 0) {
const labelElement = document.createElement('LABEL');
labelElement.classList.add('tGrid-cell', 'tGrid-cell--shrink', 'btn', 'bRad--l-r', 'vAlign--all-m');
const labelText = document.createTextNode(afterLabel);
labelElement.appendChild(labelText);
divElement.appendChild(labelElement);
}
if (beforeLabel && beforeLabel.length > 0) {
const spanElement = document.createElement('SPAN');
spanElement.classList.add('formList-label-content', 'lbox--v-1');
const spanText = document.createTextNode(beforeLabel);
spanElement.appendChild(spanText);
wrapperDiv.appendChild(spanElement);
}
wrapperDiv.appendChild(divElement);
return wrapperDiv;
};
const createColorInput = ({ color = '#000000', id, callback, wrapper = false, style: { width = '36px', height = '30px', ...restStyle } = {} } = {}) => {
const colorInput = document.createElement('INPUT');
colorInput.type = 'color';
colorInput.value = color;
Object.assign(colorInput.style, { width, height, restStyle }); // default values for style.width and/or style.height will be overwritten if supplied to style parameter
if (id) {
colorInput.id = id;
}
if (callback) {
colorInput.onchange = callback;
}
if (wrapper === true) {
const wrapperDiv = document.createElement('DIV');
wrapperDiv.classList.add('space--v-1');
wrapperDiv.appendChild(colorInput);
return wrapperDiv;
}
return colorInput;
};
const createDivider = (verticalSpace = true) => {
const wrapperDiv = document.createElement('DIV');
if (verticalSpace) {
wrapperDiv.classList.add('space--v-4');
}
const dividerDiv = document.createElement('DIV');
dividerDiv.classList.add('page-divider');
dividerDiv.style.width = '682px'; // TODO: set to 100% some how...
wrapperDiv.appendChild(dividerDiv);
return wrapperDiv;
};
// display: { id: 'deals-filter-style-display', label: 'Ukrycie' },
// opacity: { id: 'deals-filter-style-opacity', label: 'Przezroczystość' },
// border: { id: 'deals-filter-style-border', label: 'Ramka' },
const createStylingBlock = ({ display, opacity, border, borderColor, borderStyle, styleText, callback } = {}) => {
// const createStylingBlock = ({
// display: { label: displayLabel = 'Ukrycie', id: displayId, checked: displayChecked = false } = {},
// opacity, border, borderColor, styleText, callback
// } = {}) => {
const wrapperDiv = document.createElement('DIV');
if (display) {
wrapperDiv.appendChild(createLabeledCheckbox({ label: display.label, id: display.id, checked: display.checked, callback }));
}
// if (true) {
// wrapperDiv.appendChild(createLabeledCheckbox({ label: displayLabel, id: displayId, checked: displayChecked, callback }));
// }
if (opacity) {
wrapperDiv.appendChild(createLabeledCheckbox({ label: opacity.label, id: opacity.id, checked: opacity.checked, callback }));
}
if (border) {
const borderBlock = createLabeledCheckbox({ label: border.label, id: border.id, checked: border.checked, callback });
borderBlock.style.display = 'flex';
borderBlock.style.justifyContent = 'space-between';
borderBlock.style.alignItems = 'center';
if (borderColor) {
borderBlock.appendChild(createColorInput({ color: borderColor.color, id: borderColor.id, callback }));
}
if (borderStyle) {
const borderStyleSelect = createSelectInput({ options: ['dashed', 'dotted', 'solid', 'double', 'groove', 'ridge', 'inset', 'outset'], value: borderStyle.value, id: borderStyle.id, callback });
borderStyleSelect.classList.replace('width--all-12', 'width--all-6');
borderBlock.appendChild(borderStyleSelect);
}
wrapperDiv.appendChild(borderBlock);
}
if (styleText) {
wrapperDiv.appendChild(createTextInput({ id: styleText.id }));
}
return wrapperDiv;
};
const getFilterType = elementId => {
for (const type of Object.values(filterType)) {
for (const rowBlock of Object.values(settingsPageConfig[type].rows)) {
for (const rowEntry of Object.values(rowBlock.entries)) {
if ((rowEntry.params.id === elementId) || Object.values(rowEntry.params).some(item => item.id === elementId)) {
return type;
}
}
}
}
return undefined;
}
const filterSelectionChange = event => {
const filterType = getFilterType(event.target.id);
const selectedFilter = pepperTweakerConfig[`${filterType}Filters`].find(filter => filter.name === event.target.value);
updateFilterInputs(filterType, selectedFilter);
};
const updateFilterStyle = event => {
const filterType = getFilterType(event.target.id);
const styleBlock = settingsPageConfig[filterType].rows.filterStyle.entries.style;
const styleTextInput = document.getElementById(styleBlock.params.styleText.id);
let styleValue = {};
if (styleTextInput.value) {
try {
styleValue = styleBlock.parse(styleTextInput.value);
} catch (error) {
alert(messageWrongJSONStyle);
}
}
styleValue.display = styleBlock.params.display && document.getElementById(styleBlock.params.display.id).checked ? defaultFilterStyleValues[filterType].display : undefined;
styleValue.opacity = styleBlock.params.opacity && document.getElementById(styleBlock.params.opacity.id).checked ? defaultFilterStyleValues[filterType].opacity : undefined;
if (styleBlock.params.border) {
let borderColor = defaultFilterStyleValues[filterType].borderColor;
let borderStyle = defaultFilterStyleValues[filterType].borderStyle;
let enableBorderCheckbox = false;
if (styleBlock.params.borderColor) {
borderColor = document.getElementById(styleBlock.params.borderColor.id).value;
if (event.target.id === styleBlock.params.borderColor.id) {
enableBorderCheckbox = true;
}
}
if (styleBlock.params.borderStyle) {
borderStyle = document.getElementById(styleBlock.params.borderStyle.id).value;
if (event.target.id === styleBlock.params.borderStyle.id) {
enableBorderCheckbox = true;
}
}
if (enableBorderCheckbox) {
document.getElementById(styleBlock.params.border.id).checked = true;
}
styleValue.border = document.getElementById(styleBlock.params.border.id).checked ? `${defaultFilterStyleValues[filterType].borderWidth} ${borderStyle} ${borderColor}` : undefined;
}
styleTextInput.value = styleBlock.stringify(styleValue);
};
const updateFilterInputs = (filterType, filter) => {
const filterSelectionInput = document.getElementById(settingsPageConfig[filterType].rows.filterSelection.entries.filterSelectionInput.params.id);
const filterOptionElement = filter && filter.name && filterSelectionInput.querySelector(`option[value="${filter.name}"]`) || null;
filterSelectionInput.value = filterOptionElement && filterOptionElement.value || createNewFilterName;
filterSelectionInput.parentNode.querySelector('.js-select-val').textContent = filter && filter.name || createNewFilterName;
for (const settingRow of Object.values(settingsPageConfig[filterType].rows)) {
for (const [key, value] of Object.entries(settingRow.entries)) {
switch (value.create) {
case createTextInput:
document.getElementById(value.params.id).value = filter && filter[key] && (filter[key].source || filter[key]) || '';
break;
case createLabeledInput:
document.getElementById(value.params.id).value = filter && filter[key] || '';
break;
case createLabeledCheckbox:
document.getElementById(value.params.id).checked = (filter && isBoolean(filter[key])) ? filter[key] : value.params.checked;
break;
case createStylingBlock:
document.getElementById(value.params.display.id).checked = (filter && filter.style && filter.style.display === 'none') ? true : false;
document.getElementById(value.params.opacity.id).checked = (filter && filter.style && filter.style.opacity && parseFloat(filter.style.opacity) < 1) ? true : false;
document.getElementById(value.params.border.id).checked = (filter && filter.style && filter.style.border && filter.style.border !== 'none') ? true : false;
document.getElementById(value.params.borderColor.id).value = filter && filter.style && filter.style.border && getCSSBorderColor(filter.style.border) || defaultFilterStyleValues[filterType].borderColor;
document.getElementById(value.params.borderStyle.id).value = filter && filter.style && filter.style.border && getCSSBorderStyle(filter.style.border) || defaultFilterStyleValues[filterType].borderStyle;
document.getElementById(value.params.borderStyle.id).parentNode.querySelector('.js-select-val').textContent = document.getElementById(value.params.borderStyle.id).value;
document.getElementById(value.params.styleText.id).value = filter && filter.style && JSON.stringify(filter.style) || '';
}
}
}
};
const applyFilterChanges = event => {
const filterType = getFilterType(event.target.id);
const filterArrayName = `${filterType}Filters`;
const filterSelectionInput = document.getElementById(settingsPageConfig[filterType].rows.filterSelection.entries.filterSelectionInput.params.id);
const filterName = filterSelectionInput.value;
const filterIndex = (filterSelectionInput.selectedIndex === 0) ? pepperTweakerConfig[filterArrayName].length : pepperTweakerConfig[filterArrayName].findIndex(item => item.name === filterName); // if selectedIndex === 0 => add new filter
if (event.target.id === settingsPageConfig[filterType].rows.filterSaveRemove.entries.removeButton.params.id) {
if (filterSelectionInput.selectedIndex === 0) {
alert('Musisz wybrać filtr, aby go usunąć.');
return;
}
if (confirm(`Potwierdź usunięcie filtra: ${filterName}`)) {
pepperTweakerConfig[filterArrayName].splice(filterIndex, 1);
filterSelectionInput.querySelector(`option[value="${filterName}"]`).remove();
localStorage.setItem(`PepperTweaker.config.${filterArrayName}`, JSON.stringify(pepperTweakerConfig[filterArrayName], JSONRegExpReplacer));
updateFilterInputs(filterType, null);
}
}
else if (event.target.id === settingsPageConfig[filterType].rows.filterSaveRemove.entries.saveButton.params.id) {
const newFilter = {};
let isEmptyFilter = true;
for (const settingRow of Object.values(settingsPageConfig[filterType].rows)) {
for (const [key, value] of Object.entries(settingRow.entries)) {
switch (value.create) {
case createTextInput:
case createLabeledInput:
const inputNode = document.getElementById(value.params.id);
const inputValue = inputNode && inputNode.value.trim();
if (inputValue) {
newFilter[key] = value.parse ? value.parse(inputValue) : inputValue;
if (value.filtering !== false) {
isEmptyFilter = false;
}
} else if (inputNode.required) {
alert(`Musisz wypełnić pole ${settingRow.label.toLowerCase()}`);
return;
}
break;
case createLabeledCheckbox:
const inputChecked = document.getElementById(value.params.id).checked;
if (inputChecked !== value.params.checked) {
newFilter[key] = inputChecked;
if (value.filtering !== false) {
isEmptyFilter = false;
}
}
break;
case createStylingBlock: // this can be combine with Text & Labeled above
newFilter[key] = document.getElementById(value.params.styleText.id).value.trim();
if (newFilter[key].length < 1) {
alert('Nie wybrano żadnego stylu dla filtra.');
return;
}
try {
newFilter[key] = value.parse(newFilter[key]);
} catch (error) {
alert(messageWrongJSONStyle);
return;
}
if (Object.entries(newFilter[key]).length === 0) {
alert('Podany styl jest obiektem pustym.');
return;
}
break;
}
}
}
if (isEmptyFilter) {
alert('Wszystkie parametry nie mogą być puste. Taki filtr nie ma sensu ;)');
return;
}
const confirmMessage = (filterSelectionInput.selectedIndex === 0) ? `Czy chcesz utworzyć nowy filtr: ${newFilter.name}?` : `Czy rzeczywiście nadpisać filtr: ${filterName}?`;
if (confirm(confirmMessage)) {
filterSelectionInput.options[filterSelectionInput.selectedIndex || filterSelectionInput.options.length] = new Option(newFilter.name, newFilter.name, false, true);
pepperTweakerConfig[filterArrayName][filterIndex] = newFilter;
localStorage.setItem(`PepperTweaker.config.${filterArrayName}`, JSON.stringify(pepperTweakerConfig[filterArrayName], JSONRegExpReplacer));
updateFilterInputs(filterType, pepperTweakerConfig[filterArrayName][filterIndex]);
}
}
};
const createSupportButtons = () => {
const wrapperDiv = document.createElement('DIV');
wrapperDiv.classList.add('space--v-2');
const anchorElement = document.createElement('A');
anchorElement.href = 'https://buycoffee.to/peppertweaker';
anchorElement.target = '_blank';
const imageElement = document.createElement('IMG');
imageElement.src = 'https://raw.githubusercontent.com/PepperTweaker/PepperTweaker/master/images/buycoffeeto-banner.gif';
imageElement.style.width = '200px';
anchorElement.appendChild(imageElement);
wrapperDiv.appendChild(anchorElement);
return wrapperDiv;
};
/* Settings Page Configuration */
settingsPageConfig = {
support: {
header: 'Wsparcie projektu',
rows: {
buttons: {
label: 'Wesprzyj rozwój stawiając Misiowi kawkę! :D',
entries: {
buyCoffeeTo: {
create: createSupportButtons,
},
},
},
},
},
global: {
header: 'Ustawienia ogólne',
rows: {
pluginEnabled: {
label: 'Włącz/Wyłącz plugin',
entries: {
pluginEnabledCheckbox: {
create: createLabeledCheckbox,
params: {
label: 'PepperTweaker aktywny',
id: 'plugin-enabled',
checked: pepperTweakerConfig.pluginEnabled,
callback: event => setConfig({ pluginEnabled: event.target.checked }, true),
},
},
},
},
darkThemeEnabled: {
label: 'Ciemny motyw',
entries: {
darkThemeCheckbox: {
create: createLabeledCheckbox,
params: {
label: 'Ciemny motyw włączony',
id: 'dark-theme-enabled',
checked: pepperTweakerConfig.darkThemeEnabled,
callback: event => setConfig({ darkThemeEnabled: event.target.checked }, true),
},
},
},
},
improvements: {
label: 'Poprawki / Ulepszenia',
entries: {
listToGrid: {
create: createLabeledCheckbox,
params: {
label: 'Zamień listę na siatkę',
id: 'list-to-grid',
checked: pepperTweakerConfig.improvements.listToGrid,
callback: event => setConfig({ improvements: { listToGrid: event.target.checked } }, false),
},
},
gridColumnCount: {
create: createLabeledInput,
params: {
id: 'grid-column-count',
afterLabel: 'Liczba kolumn',
min: 0,
step: 1,
value: pepperTweakerConfig.improvements.gridColumnCount,
callback: event => setConfig({ improvements: { gridColumnCount: event.target.value } }, false),
},
},
transparentPaginationFooter: {
create: createLabeledCheckbox,
params: {
label: 'Przezroczysta stopka z paginacją',
id: 'transparent-pagination-footer',
checked: pepperTweakerConfig.improvements.transparentPaginationFooter,
callback: event => setConfig({ improvements: { transparentPaginationFooter: event.target.checked } }, false),
},
},
hideTopDealsWidget: {
create: createLabeledCheckbox,
params: {
label: 'Ukryj wigdet najgorętszych okazji',
id: 'hide-top-deals',
checked: pepperTweakerConfig.improvements.hideTopDealsWidget,
callback: event => setConfig({ improvements: { hideTopDealsWidget: event.target.checked } }, false),
},
},
hideGroupsBar: {
create: createLabeledCheckbox,
params: {
label: 'Ukryj pasek grup',
id: 'hide-groups-bar',
checked: pepperTweakerConfig.improvements.hideGroupsBar,
callback: event => setConfig({ improvements: { hideGroupsBar: event.target.checked } }, false),
},
},
repairDealDetailsLinksCheckbox: {
create: createLabeledCheckbox,
params: {
label: 'Napraw linki w opisach ofert i komentarzach',
id: 'repair-deal-details-links',
checked: pepperTweakerConfig.improvements.repairDealDetailsLinks,
callback: event => setConfig({ improvements: { repairDealDetailsLinks: event.target.checked } }, false),
},
},
repairDealImageLinkCheckbox: {
create: createLabeledCheckbox,
params: {
label: 'Klik na miniaturce oferty zawsze otwiera pełnowymiarowy obrazek',
id: 'repair-deal-image-link',
checked: pepperTweakerConfig.improvements.repairDealImageLink,
callback: event => setConfig({ improvements: { repairDealImageLink: event.target.checked } }, false),
},
},
addLikeButtonsToBestCommentsCheckbox: {
create: createLabeledCheckbox,
params: {
label: 'Dodaj przyciski "Lubię to" do najlepszych komentarzy',
id: 'add-like-buttons-to-best-comments',
checked: pepperTweakerConfig.improvements.addLikeButtonsToBestComments,
callback: event => setConfig({ improvements: { addLikeButtonsToBestComments: event.target.checked } }, false),
},
},
addSearchInterfaceCheckbox: {
create: createLabeledCheckbox,
params: {
label: 'Dodaj interfejs wyszukiwania',
id: 'add-search-interface',
checked: pepperTweakerConfig.improvements.addSearchInterface,
callback: event => setConfig({ improvements: { addSearchInterface: event.target.checked } }, false),
},
},
addCommentPreviewOnProfilePage: {
create: createLabeledCheckbox,
params: {
label: 'Dodaj podgląd komentarzy na stronie profilu użytkownika',
id: 'add-comment-preview-on-profile-page',
checked: pepperTweakerConfig.improvements.addCommentPreviewOnProfilePage,
callback: event => setConfig({ improvements: { addCommentPreviewOnProfilePage: event.target.checked } }, false),
},
},
},
},
autoUpdate: {
label: 'Automatyczne odświeżanie',
entries: {
dealsDeafultCheckbox: {
create: createLabeledCheckbox,
params: {
label: 'Domyślne odświeżanie listy ofert',
id: 'autoupdate-deals-default-enabled',
checked: pepperTweakerConfig.autoUpdate.dealsDefaultEnabled,
callback: event => setConfig({ autoUpdate: { dealsDefaultEnabled: event.target.checked } }, false),
},
},
commentsDefaultCheckbox: {
create: createLabeledCheckbox,
params: {
label: 'Domyślne odświeżanie komentarzy',
id: 'autoupdate-comments-default-enabled',
checked: pepperTweakerConfig.autoUpdate.commentsDefaultEnabled,
callback: event => setConfig({ autoUpdate: { commentsDefaultEnabled: event.target.checked } }, false),
},
},
soundEnabledCheckbox: {
create: createLabeledCheckbox,
params: {
label: 'Powiadom dzwiękiem',
id: 'autoupdate-sound-enabled',
checked: pepperTweakerConfig.autoUpdate.soundEnabled,
callback: event => setConfig({ autoUpdate: { soundEnabled: event.target.checked } }, false),
},
},
askBeforeLoadCheckbox: {
create: createLabeledCheckbox,
params: {
label: 'Pytaj przed załadowaniem',
id: 'autoupdate-ask-before-load',
checked: pepperTweakerConfig.autoUpdate.askBeforeLoad,
callback: event => setConfig({ autoUpdate: { askBeforeLoad: event.target.checked } }, false),
},
},
},
},
importExportConfig: {
label: 'Import/Export ustawień',
entries: {
importButton: {
create: createLabeledButton,
params: {
label: 'Import z pliku',
className: 'default',
callback: importConfigFromFile
},
},
exportButton: {
create: createLabeledButton,
params: {
label: 'Export do pliku',
className: 'default',
callback: saveConfigFile
},
},
},
},
resetConfig: {
label: 'Reset ustawień',
entries: {
importButton: {
create: createLabeledButton,
params: {
label: 'Zresetuj wszystkie ustawienia',
className: 'error',
callback: () => {
if (confirm('Czy zresetować wszystkie ustawienia do wartości domyślnych pluginu?')) {
resetConfig();
updateFilterInputs(filterType.deals, null);
updateFilterInputs(filterType.comments, null);
}
},
},
},
},
},
},
},
deals: {
header: 'Filtry okazji',
rows: {
filterSelection: {
label: 'Wybierz filtr',
entries: {
filterSelectionInput: {
create: createSelectInput,
params: {
id: 'deals-filter-selection',
options: [createNewFilterName, ...pepperTweakerConfig.dealsFilters.map(filter => filter.name)],
callback: filterSelectionChange,
},
},
},
},
filterName: {
label: 'Nazwa filtra',
entries: {
name: {
create: createTextInput,
params: {
id: 'deals-filter-name',
placeholder: 'Wpisz nazwę filtra',
required: true,
},
filtering: false,
},
},
},
filterKeyword: {
label: 'Słowa kluczowe',
entries: {
keyword: {
create: createTextInput,
params: {
id: 'deals-filter-keyword',
},
parse: newRegExp,
},
},
},
filterMerchant: {
label: 'Sprzedawca',
entries: {
merchant: {
create: createTextInput,
params: {
id: 'deals-filter-merchant',
},
parse: newRegExp,
},
},
},
filterUser: {
label: 'Użytkownik',
entries: {
user: {
create: createTextInput,
params: {
id: 'deals-filter-user',
},
parse: newRegExp,
},
},
},
filterGroup: {
label: 'Grupy',
entries: {
groups: {
create: createTextInput,
params: {
id: 'deals-filter-groups',
},
parse: newRegExp,
},
},
},
filterLocal: {
label: 'Oferty lokalne',
entries: {
local: {
create: createLabeledCheckbox,
params: {
label: 'Filtr tylko dla ofert lokalnych',
id: 'deals-filter-local',
checked: false,
},
},
},
},
filterPrice: {
label: 'Cena',
entries: {
priceBelow: {
create: createLabeledInput,
params: {
id: 'deals-filter-price-below',
beforeLabel: 'Cena poniżej',
afterLabel: 'zł',
min: 0,
step: 0.01,
},
parse: parseFloat,
},
priceAbove: {
create: createLabeledInput,
params: {
id: 'deals-filter-price-above',
beforeLabel: 'Cena powyżej',
afterLabel: 'zł',
min: 0,
step: 0.01,
},
parse: parseFloat,
},
discountBelow: {
create: createLabeledInput,
params: {
id: 'deals-filter-discount-below',
beforeLabel: 'Wielkość rabatu poniżej',
afterLabel: '%',
min: 0,
max: 100,
step: 1,
},
parse: parseInt,
},
discountAbove: {
create: createLabeledInput,
params: {
id: 'deals-filter-discount-above',
beforeLabel: 'Wielkość rabatu powyżej',
afterLabel: '%',
min: 0,
max: 100,
step: 1,
},
parse: parseInt,
},
},
},
filterStyle: {
label: 'Styl (CSS)',
entries: {
style: {
create: createStylingBlock,
params: {
display: { id: 'deals-filter-style-display', label: 'Ukrycie' },
opacity: { id: 'deals-filter-style-opacity', label: 'Przezroczystość' },
border: { id: 'deals-filter-style-border', label: 'Ramka' },
borderColor: { id: 'deals-filter-style-border-color', color: defaultFilterStyleValues.deals.borderColor },
borderStyle: { id: 'deals-filter-style-border-style', value: defaultFilterStyleValues.deals.borderStyle },
styleText: { id: 'deals-filter-style-text' },
callback: updateFilterStyle,
},
parse: JSON.parse,
stringify: JSON.stringify,
filtring: false,
},
},
},
filterActive: {
label: 'Włącz/Wyłącz filtr',
entries: {
active: {
create: createLabeledCheckbox,
params: {
label: 'Filtr aktywny',
id: 'deals-filter-active',
checked: true,
},
filtring: false,
},
},
},
filterSaveRemove: {
label: 'Zapisz/Usuń filtr',
entries: {
saveButton: {
create: createLabeledButton,
params: {
label: 'Zapisz filtr',
id: 'deals-filter-save',
className: 'success',
callback: applyFilterChanges
},
},
removeButton: {
create: createLabeledButton,
params: {
label: 'Usuń filtr',
id: 'deals-filter-remove',
className: 'error',
callback: applyFilterChanges
},
},
},
},
},
},
comments: {
header: 'Filtry komentarzy',
rows: {
filterSelection: {
label: 'Wybierz filtr',
entries: {
filterSelectionInput: {
create: createSelectInput,
params: {
id: 'comments-filter-selection',
options: [createNewFilterName, ...pepperTweakerConfig.commentsFilters.map(filter => filter.name)],
callback: filterSelectionChange,
},
},
},
},
filterName: {
label: 'Nazwa filtra',
entries: {
name: {
create: createTextInput,
params: {
id: 'comments-filter-name',
placeholder: 'Wpisz nazwę filtra',
required: true,
},
filtering: false,
},
},
},
filterKeyword: {
label: 'Słowa kluczowe',
entries: {
keyword: {
create: createTextInput,
params: {
id: 'comments-filter-keyword',
},
parse: newRegExp,
},
},
},
filterUser: {
label: 'Użytkownik',
entries: {
user: {
create: createTextInput,
params: {
id: 'comments-filter-user',
},
parse: newRegExp,
},
},
},
filterStyle: {
label: 'Styl (CSS)',
entries: {
style: {
create: createStylingBlock,
params: {
display: { id: 'comments-filter-style-display', label: 'Ukrycie' },
opacity: { id: 'comments-filter-style-opacity', label: 'Przezroczystość' },
border: { id: 'comments-filter-style-border', label: 'Ramka' },
borderColor: { id: 'comments-filter-style-border-color', color: defaultFilterStyleValues.comments.borderColor },
borderStyle: { id: 'comments-filter-style-border-style', value: defaultFilterStyleValues.comments.borderStyle },
styleText: { id: 'comments-filter-style-text' },
callback: updateFilterStyle,
},
parse: JSON.parse,
stringify: JSON.stringify,
filtring: false,
},
},
},
filterActive: {
label: 'Włącz/Wyłącz filtr',
entries: {
active: {
create: createLabeledCheckbox,
params: {
label: 'Filtr aktywny',
id: 'comments-filter-active',
checked: true,
},
filtring: false,
},
},
},
filterSaveRemove: {
label: 'Zapisz/Usuń filtr',
entries: {
saveButton: {
create: createLabeledButton,
params: {
label: 'Zapisz filtr',
id: 'comments-filter-save',
className: 'success',
callback: applyFilterChanges
},
},
removeButton: {
create: createLabeledButton,
params: {
label: 'Usuń filtr',
id: 'comments-filter-remove',
className: 'error',
callback: applyFilterChanges
},
},
},
},
},
},
};
const preferencesTabLink = document.querySelector('a[href="#preferences"]');
const filtersTabLink = preferencesTabLink.cloneNode(true);
filtersTabLink.href = '#peppertweaker';
filtersTabLink.classList.remove('tabbedInterface-tab--selected');
filtersTabLink.querySelector('svg use').setAttribute('xlink:href', '/assets/img/ico_37b33.svg#filter');
const filtersTabLinkInner = filtersTabLink.querySelector('.js-tabbedInterface-tab--inner-preferences');
filtersTabLinkInner.classList.remove('js-tabbedInterface-tab--inner-preferences');
filtersTabLinkInner.classList.add('js-tabbedInterface-tab--inner-filters');
filtersTabLinkInner.textContent = 'PepperTweaker';
preferencesTabLink.parentNode.appendChild(filtersTabLink);
const preferencesTab = document.getElementById('tab-preferences');
const filtersTab = preferencesTab.cloneNode(true);
filtersTab.id = 'tab-peppertweaker';
const filtersTitle = filtersTab.querySelector('.userProfile-title');
filtersTitle.textContent = 'PepperTweaker';
const rowsContainer = filtersTab.querySelector('.formList');
removeAllChildren(rowsContainer);
for (const settingsBlock of Object.values(settingsPageConfig)) {
rowsContainer.appendChild(createSettingsBlockHeader(settingsBlock.header));
for (const rowBlock of Object.values(settingsBlock.rows)) {
const newRowNode = createSettingsRow(rowBlock.label);
const newRowNodeContent = newRowNode.querySelector('.formList-content');
for (const rowEntry of Object.values(rowBlock.entries)) {
const newRowEntryNode = rowEntry.create(rowEntry.params);
if (rowEntry.style) {
Object.assign(newRowEntryNode.style, rowEntry.style);
}
newRowNodeContent.appendChild(newRowEntryNode);
}
rowsContainer.appendChild(newRowNode);
}
}
preferencesTab.parentNode.insertBefore(filtersTab, preferencesTab.parentNode.querySelector('.userProfile-footer'));
updateFilterInputs(filterType.deals, null);
updateFilterInputs(filterType.comments, null);
if (location.hash.indexOf('peppertweaker') >= 0) {
filtersTab.classList.remove('hide');
filtersTabLink.classList.add('tabbedInterface-tab--selected');
}
return;
}
/*** END: Settings Page Configuration ***/
/*** Search Engines ***/
const searchEngine = Object.freeze({
google: { name: 'Google', url: 'https://www.google.pl/search?q=', icon: 'data:image/png;base64,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' },
ceneo: { name: 'Ceneo', url: 'https://www.ceneo.pl/;szukaj-', icon: 'data:image/x-icon;base64,AAABAAMAMDAAAAEACACoDgAANgAAACAgAAABAAgAqAgAAN4OAAAQEAAAAQAIAGgFAACGFwAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAAAAGu5+gBtufoAz+j9ANDo/QDx+P8Acrz6ANTr/QDV6/0A9vv/APf7/wB5v/oAG5P3AByT9wD8/v8AHZP3AP3+/wD+/v8AfsL6AKDS/AAilvcAI5b3AKbV/ACn1fwAKJn3ACmZ9wCu2PwAUKz5AFGs+QDV6/4AVq/5ANvu/gBdsvkAXrL5AOHx/gDi8f4AZLX5AOj0/gCLyPsAjMj7AC6c+ADu9/4AL5z4AO/3/gCRy/sANJ/4ADWf+AA2n/gAmM77ALne/QA7ovgAPKL4AMDh/QBBpfgAQqX4AGS1+gDH5P0AR6j4AGq4+gDM5/0Azef9AHG7+gDS6v0A9Pr/APX6/wAakvcA+v3/ABuS9wD7/f8A/P3/AH3B+gAflfcAIJX3ACGV9wCl1PwAJ5j3AEio+QCr1/wALJv3AE6r+QBPq/kAsdr8ALLa/ADU6v4AVK75AFWu+QC43fwA2e3+ANrt/gDf8P4AhMT7AOXz/gCJx/sA7Pb+AC2b+ACPyvsAM574AJbN+wC43f0AOaH4ADqh+ABFp/gAZ7f6AMrm/QDR6f0A0un9APL5/wBzvfoA8/n/AHS9+gB1vfoA+fz/APr8/wB6wPoAHZT3AB6U9wD+//8A////AKPT/AAkl/cAJZf3AKnW/AAqmvcAS6r5AE2q+QCu2fwAr9n8ALDZ/ABSrfkAU635ALTc/AC13PwAWrD5AN3v/gBes/kA3u/+AF+z+QBgs/kAgMP7AOPy/gDk8v4Ah8b7AIjG+wDp9f4A6vX+AOv1/gDw+P4A8fj+ADKd+ACTzPsAN6D4ADig+ACZz/sAPaP4AMLi/QBEpvgAZrb6AMfl/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnIODEJAQEBCDHFycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnIMQkcpNYAgI4WANF1GQgxycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJyDA5jbBkckD9uQ28/jj1MBWNyDHJycnJycnJycnJycnJycnJycnJycnJycnJycnIMLCaEDXR0dHR0dHR0dHR0DViUYgxycnJycnJycnJycnJycnJycnJycnJycnJycgxTOxB0dHR0dHR0dHR0dHR0dHR0A0sMcnJycnJycnJycnJycnJycnJycnJycnJyDIiLdHR0dHR0dHR0dHR0dHR0dHR0dI0LcnJycnJycnJycnJycnJycnJycnJycnILTiF0dHR0dHR0dHR0dHR0dHR0dHR0JHsMcnJycnJycnJycnJycnJycnJycnJycg4nmXR0dHR0dHR0dA+Si1ppEHR0dHR0XnJycnJycnJycnJycnJycnJycnJycnJycgwRDXR0dHR0dHRzPUV6MTJPRTM+dHRnLQxycnJycnJycnJycnJycnJycnJycnJyDl9SdHR0dHR0dHSClkALDAwLQkoffQY2DHJycnJycnJycnJycnJycnJycnJycnJyQgFDdHR0dHR0dBxjC3JycnJycnELEydGcnJycnJycnJycnJycnJycnJycnJycnJySBl0dHR0dHR0D3BCcnJycnJycnJycnFycnJycnJycnJycnJycnJycnJycnJycnIMLoR0dHR0dHR0ITEMcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJCHT90dHR0dHR0ghNycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJACnR0dHR0dHR0JQtycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnIML3R0dHR0dHQPAEBycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJGfnR0dHR0dHQIVEJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJ3M3R0dHR0dHQoOAtycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnEXOnR0dHR0dHQkmAxycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnFNPXR0dHR0dHQilQxycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnEnHHR0dHR0dHRYLQxycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnEnB3R0dHR0dHRXkw5ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnF5A3R0dHR0dHRXkw5ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnFKN3R0dHR0dHSGLQ5ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnITMHR0dHR0dHSKYgxycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJySXR0dHR0dHSPNAxycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnILW3R0dHR0dHRrTwtycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJAZUN0dHR0dHRDm0BycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnIMZFx0dHR0dHR0WwtycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJxeWZ0dHR0dHR0YRRycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJyDCt0dHR0dHR0JJoLcnJycnJycnJyDAxycnJycnJycnJycnJycnJycnJycnJycnJyCxuRdHR0dHR0dGBycnJycnJycnEMLS1xcnJycnJycnJycnJycnJycnJycnJycnJycXdhdHR0dHR0dChlDAxycnJxQndqVgI1DHJycnJycnJycnJycnJycnJycnJycnJycguHa3R0dHR0dHSOWZYTcXIXVFEJdHSBGA5ycnJycnJycnJycnJycnJycnJycnJycnIUFXR0dHR0dHR0DYZVdRacBHR0dHRDjHJycnJycnJycnJycnJycnJycnJycnJycnIMMmd0dHR0dHR0dHR0dHR0dHR0dHR0XB0LcnJycnJycnJycnJycnJycnJycnJycnJyDBoedHR0dHR0dHR0dHR0dHR0dHR0dIlCcnJycnJycnJycnJycnJycnJycnJycnJycgwaAnR0dHR0dHR0dHR0dHR0dHRBUC0OcnJycnJycnJycnJycnJycnJycnJycnJycnIMYhIqdHR0dHR0dHR0dHR0Q2htGAxycnJycnJycnJycnJycnJycnJycnJycnJycnJyDEh/Eh4JdHR0dHR0RCQwPJMLcXJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnILci2DEZd4fBZeOTR2Qg5ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycg5CQAxyRnILQAxycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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' }, // ?nocatnarrow=1
skapiec: { name: 'Skąpiec', url: 'https://www.skapiec.pl/szukaj/w_calym_serwisie/', icon: 'data:image/x-icon;base64,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////////i772/xV35f8Vd+X/FXfl/yhtvP9zSjP/c0oz/21CKv9jNRz/YzUc/2M1HP9jNRz/Ty0V/08tFf9JNy7/GYn5/xmJ+f8Vd+X/FXfl/xZ97P8XgO//F4Dv/xeA7/8XgO//F4Dv/zCN8f+Rw/f/6PL9//////////////////////96tvb/Fn3s/xV35f8Vd+X/FXfl/z5hj/9zSjP/c0oz/2g8JP9jNRz/YzUc/2M1HP9PLRX/Ty0V/0U+P/8Zifn/GYj4/xV35f8Vd+X/FXfl/xZ97P8XgO//F4Dv/xeA7/9apfT/9fr+////////////////////////////7fX9/yyL8P8XgO//Fn3s/xV35f8Vd+X/Fnjl/2BRUv9zSjP/ckgx/2Q3Hv9jNRz/YzUc/08tFf9PLRX/Rjw6/xmJ+f8Zifn/FXfl/xV35f8Vd+X/FXfl/xZ97P8XgO//JIfw//H4/v///////////////////////////9Ll+v88jen/Fnvp/xeA7/8XgO//Fn3s/xV35f8Vd+X/IHTP/3NKM/9zSjP/bUIq/2M1HP9jNRz/Ty0V/08tFf9LNCb/GYn5/xmJ+f8Veef/FXfl/xV35f8Vd+X/FXfl/xZ97P9Xo/P//////////////////f7//7HU+v9VovP/F3vo/xV35f8Vd+X/Fnvp/xeA7/8XgO//Fn3s/xV35f8XgO//S1py/3NKM/9zSjP/Zjkg/2M1HP9PLRX/Ty0V/08tFf8egeX/GYn5/xZ96/8Vd+X/FXfl/xV35f8Vd+X/FXfl/1uk8v////////////////9usPX/F4Dv/xeA7/8XgO//FXro/xV35f8Vd+X/Fnvp/xeA7/8XgO//Fnrp/xiE8/8egeX/b0s3/3NKM/9vRC3/YzUc/08tFf9PLRX/Ty0V/ytqrP8Zifn/GIPy/xV35f8Vd+X/FXfl/xV35f8Vd+X/Po/q/////////////////26w9f8XgO//GoHv/0qc8/+cyfj/qc73/xV35f8Vd+X/Fnvp/xeA7/8Veuj/GYj4/xmJ+f9YRkH/c0oz/3NKM/9nOiH/Ty0V/08tFf9PLRX/Pkte/xmJ+f8ZiPj/FXnn/xV35f8Vd+X/FXfl/xV35f8XeOX/6PL8/////////////f7//+Du/f/2+v7/////////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' },
aliexpress: { name: 'Aliexpress', url: 'https://www.aliexpress.com/wholesale?SearchText=', icon: 'data:image/x-icon;base64,AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQu5kAELua3BC7m8QQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELubxBC7mtwQu5kAAAAAAAAAAAAAAAAAELuZ0BC7m/QQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/QQu5nQAAAAABC7mQAQu5v0ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/QQu5kAELua3BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7mtwQu5vEELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELubxBC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BS/m/yVJ6f89Xuv/PV7r/yVJ6f8FL+b/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/MFPq/5ys9f/p7fz//v7+/////////////v7+/+nt/P+crPX/MFPq/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/DTbm/5eo9P/8/P7////////////////////////////////////////////8/P7/l6j0/w025v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/xY95//K0/n////////////6+/7/sL33/2uE8P9JaOz/SWjs/2uE8P+wvff/+vv+////////////ytP5/xY95/8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8JMub/w835////////////v8r4/yhM6f8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8oTOn/v8r4////////////w835/wky5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/4CV8v///////////6a19v8IMeb/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8IMeb/prX2////////////gJXy/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8YP+j/9PX9///////P1/r/CjPm/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8KM+b/z9f6///////09f3/GD/o/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/3SL8f///////v7+/0Ni7P8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v9DYuz//v7+//////90i/H/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/vMf4///////a4Pv/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v/a4Pv//////7zH+P8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v/p7Pz//////56u9f8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/56u9f//////6ez8/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BjDm//r7/v//////hZny/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/hZny///////6+/7/BjDm/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/qrj2/+vu/f88XOv/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v88XOv/6+/9/6m49v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/Bi/m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8GL+b/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wMv5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8DL+b/Az7p/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wM+6f8CYPH/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/AmDx/wCR/f8DOej/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wM56P8Akf3/AJn//wCF+v8DOej/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8ELub/BC7m/wQu5v8DOej/AIX6/wCZ//8Amf/xAJn//wCR/f8BYvL/A0Dq/wMy5/8DMeb/AzHm/wMx5v8DMeb/AzHm/wMx5v8DMeb/AzHm/wMx5v8DMeb/AzHm/wMx5v8DMeb/AzHm/wMx5v8DMeb/AzHm/wMx5v8DMeb/AzHm/wMy5/8DQOr/AWLy/wCR/f8Amf//AJn/8QCZ/rcAmf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf+3AJn/QACZ//0Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//QCZ/0AAAAAAAJn/dACZ//0Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//0Amf90AAAAAAAAAAAAAAAAAJn/QACZ/7cAmf7xAJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ//8Amf//AJn//wCZ/vEAmf+3AJn/QAAAAAAAAAAA4AAAB8AAAAOAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABwAAAA+AAAAc=' },
banggood: { name: 'Banggood', url: 'https://www.banggood.com/search/$$.html', icon: 'data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABILAAASCwAAAAAAAAAAAAASduzaEnbs/xJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/xJ27P8SduzaEnbs/xJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/hJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/xZ47P8Xeez/F3ns/xV47P8Qdez/EXbs/xJ27P8PdOz/FHfs/xZ47P8Qdez/EXXs/xJ27P8Sduz/EXbs/xx87f+ZxPf/vNj6/7rX+v+31fn/eLH0/xt77f8Xeez/Zqfz/7LS+f+51/n/hrn1/yqE7v8Rdez/Enbs/xF17P8hfu3/0+X7/7zY+v9wrPP/m8X3/+/2/v9ipPL/aKjz/+71/v+v0fn/mcT3/+Lu/f+w0fn/HXzt/xF27P8Rdez/IX7t/9Tm/P+IuvX/Bm/r/yeC7v/d6/z/jb32/8Hb+v+v0fn/GHrt/xl67f9wrPT/7PT9/0WT8P8PdOz/EXXs/yF+7f/S5fv/yN/7/4u89v+x0vn/yeD7/1mf8v/e7Pz/drD0/xF27P+Pvvb/zuL7/+jy/f9RmvH/DnTs/xF17P8hfu3/0uX7/8jf+/+MvPb/xN36/7PT+f87ju//3uz8/3ew9P8OdOz/NIrv/0aU8P9OmfH/I4Dt/xF17P8Rdez/IX7t/9Tm/P+Ju/b/CHDr/1Wd8f/t9f7/Vp3x/7rX+f+61/n/J4Lu/xl67f94sfT/v9r6/zOJ7/8Qdez/EXXs/yF+7f/S5fv/1ef8/6XL+P/S5fv/2On8/zGI7/9TnPH/4e79/9Xm/P/K4Pv/7fX+/5XC9/8Yeu3/EXbs/xF27P8Zeu3/ca30/4y99v+Nvfb/gbb1/0CQ8P8Sduz/Enbs/z+Q8P9+tPX/hrn1/1ad8f8ae+3/EXXs/xJ27P8Sduz/Enbs/w907P8PdOz/D3Ts/w507P8Qdez/Enbs/xJ27P8Qdez/DnTs/w507P8PdOz/EXbs/xJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/xJ27P8SduzaEnbs/xJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/xJ27P8Sduz/Enbs/xJ27P8SduzaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==' },
joybuy: { name: 'Joybuy', url: 'https://www.joybuy.com/search?keywords=', icon: 'data:image/x-icon;base64,AAABAAkAMDAQAAEABABoBgAAlgAAACAgEAABAAQA6AIAAP4GAAAQEBAAAQAEACgBAADmCQAAMDAAAAEACACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAgAAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wCRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGVl5WXlZeVl5WXlZeVl5WXlZeVl5WXlZkZkZl5mVmZeZlZmXmZWZl5mVmZeZlZmXmXlZeRWTlZkVk5WZFZOVmRWTlZkVk5WRmRk5kZl5k5WTmVk1mTlZNZk5WTWZOVk5UZWVlZeRlZOVlZOZeVmTmXlZk5l5WZOVmXmTmXmVmVmZeZWRmRlZWZGXlZGZl5WZORl5eXl5d5eVkZeYeYeYl3l5eXlZWRlZWXlXiIiId5eTl5eHiIiIiIiJiZeTkZeZmVl5iIiIiIl5WZeIiIiIiIiIiJeVl5kXkZeYiPj4iIiXl5iP///4//j4iImJlZWZGXl5iIiIiIiJeZePj4iIiIiIiIh3l5k1mZWXmJiI/4iIl5iPiIiYmIiIiIiHl5WZEZeZeY2IiPiI2VeP+IiXeYmIj/+IeXmXmVl5WXmYiIiIiZiPiImJl5iYiIiIiZeRmTmZeZeZiI+IiXmPiIl5WVl52I+IiJWVmVlZlZl5eIj4iZiPiI2XmXmXmIj4iJl5kZGXkXmVmIiIh5iPiJiZWZWZeYiPiHmVmXmRmZWXmIj4iVePiIl5OVl5l4eI+JeXmRl5U5GXmHiPiZiPiIeVlZOVmXePiIlZmVkZlZeZd4j4h5iPiHeXmZWZeYmPiNl5cZeVk5lZiYiPiZePiIl5l5GTl5iI+Hl5mVmTlZWTmIj4iViPiIl5WRl5WXmPiIl5GTlZWZOViYj4iXmPiIl5lZeZl5iI+JiZeVmRl5WZeIiPiViPiInZOZkVl5iI+Il5mRl5kZl5mHj4iZiPiIl5WXmXl5iI+JeVkZeVl5GXmIiPh5iPiIl5kZWRl4mPiIl5WVmRmVlZiYiP2ZiPiIl5eVk5eYiP+JWZmTlZeRk5eIj4h5ePiNeZWTlZmIiPiJl5WVk5GXmVmJ+PiZiPiImJkZWXeIiPjXmVkZWVmZWXmIj4h5iPiHeVOXmJiIiIh5eRmXmZcZeZiYj4iZePiIl5l5h4iI+IiXmXmZF5lZlZeIiPiXePiIiYmHeIiPiImJlZEVmRmXkZeYj4iZiP+IiIiIiIiIjZeVkZmZeVORl5iIiPhZiI//+PiI+PiIiXmXmXkZGZlZWZWYiIiVmPiI+Pj4+IiJiZeZWRmXlZeZOXl5jYl5iYiIiIiIjYmJeXlZOVmRk5GVmVl5eXmVmJiYl52Xl5eVlZkZWTmVlZWTlZl5eYl5l5eVeXmJeZl5l5WTmVkZeZOVk5eZeZeZeXl5l5eZeXmVmRmVlZOZlZWZWZlZl5lZlZlZeZWXmVl5F5eZOZVTkZl5lxl5WVk5WXmXlZl5lZkZmZGVlZmZWXkZGVmRmTlZOZWZmXmRk5eVNZWTk5UZeZGXmTlZeVmVlZOVGRlZWVmZmXmVlZmVkZeZWVmTkZWZOZWTlZeTmRlxWZGXmXmRl5lZGTWVlZOVlZGVmXmVl5WZl5WZGRmXmVkZeZkZk5WTkZeZeZGRmRk5WRk1l5UZWRl5lZeXlZkZWZlZGVl5WXlZGXmZWZEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEF/w0KAgH/////CwUBAQEBAgYK/woB/woFCAz/BgEBAQEBAQsNAf8IAQECDAwBAQEBAQEI/wH/CAEBAQf/BAEBAQEBCP8B/wgBAQEF/wUBAQEBAQj/Af8IAQEBBv8FAQEBAQEI/wH/CAEBAQv/AQEBAQEBCP8B/wgBBAv/CQEBAQEBAQj/Af////8NCAEBAQEBAQEDBQEFBQUFAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADAAAABgAAAAAQAgAAAAAACAJQAAAAAAAAAAAAAAAAAAAAAAACIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8mGcn/Kh7K/y4iy/86Ls7/RzzR/1NJ1P9WTNX/VUvU/1RJ1P9QRtP/S0DS/0U60P8+M87/NCjM/yseyv8kGMj/IxfI/yIVyP8mGcn/NyvN/0g90f9XTdX/V03V/1dN1f9XTdX/V03V/1dN1f9XTdX/V03V/1dN1f9XTdX/U0jU/01D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yP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP88Mc7/Z17Z/5KL5P+0sOz/zcrz/+fl+f/d2/b/mZPl/1VL1P8zJ8z/enLe/8G97//6+v3/19T1/7Sv7P+RiuT/bWTb/0k/0v8mGcn/IhXI/yIVyP8iFcj/IxfI/yYZyP8oHMn/RTrQ/3Bo2/+cl+b/vLju/8/N8//j4fj/2Nb1/5yX5v9gV9f/MibM/ywgyv8nGsn/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP86Ls7/YFfX/4eA4f+qper/ycXx/+jm+f/h3/f/m5bm/1ZM1f8zJ8z/enLe/8G97//6+v3/19T1/7Sv7P+RiuT/bWTb/0k/0v8mGcn/IhXI/yIVyP8iFcj/IhXI/yMXyP8kGMj/Oi/O/1xT1v9+d9//oJrn/8G+7//j4fj/4uD3/6ei6f9tZNr/PjPO/zQpzP8qHsr/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP84LM3/W1HW/3933/+inOj/xcLw/+jn+f/k4vj/nZjm/1dN1f8zJ8z/enLe/8G97//6+v3/19T1/7Sv7P+RiuT/bWTb/0k/0v8mGcn/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/MibM/0tB0v9lXNn/iYLh/7ax7f/i4fj/6ej5/7Cr6/93b93/SD7R/zswzv8tIcr/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP84LM3/W1HW/3933/+inOj/xcLw/+jn+f/k4vj/nZjm/1dN1f8zJ8z/enLe/8G97//6+v3/19T1/7Sv7P+RiuT/bWTb/0k/0v8mGcn/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/MCTL/0c80f9eVdf/gXrg/7Gt6//h3/f/6uj5/7Ku6/96c97/TEPS/z0yzv8vIsv/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP84LM3/W1HW/3933/+inOj/xcLw/+jn+f/k4vj/nZjm/1dN1f8zJ8z/enLe/8G97//6+v3/19T1/7Sv7P+RiuT/bWTb/0k/0v8mGcn/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/LiLL/0I3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yP8iFcj/IhXI/yIVyP84LM3/W1HW/3933/+inOj/xcLw/+jn+f/k4vj/nZjm/1dN1f8zJ8z/enLe/8G97//6+v3/19T1/7Sv7P+RiuT/bWTb/0k/0v8mGcn/LCDK/zgtzf9EOtD/YFfX/4B53/+hnOf/vLnu/9XS9P/t7Pr/7Ov6/9HO8/+2su3/lZDk/2tj2v9BNs//IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP84LM3/W1HW/3933/+inOj/xcLw/+jn+f/k4vj/nZjm/1dN1f8zJ8z/enLe/8G97//7+/7/4N73/8bC8f+rpur/kInj/3Vt3P9aUNb/X1bX/2lh2f9za9z/iYPh/6Oe6P+9ue7/zcry/9bU9f/f3ff/1NL0/7Sw7P+UjuT/dG3c/1ZN1f84Lc3/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP84LM3/W1HW/3933/+inOj/xcLw/+jn+f/k4vj/nZjm/1dN1f8zJ8z/enLe/8G97//9/P7/7ez6/97b9v/Oy/P/vrvv/6+q6/+fmuf/op3o/6ij6f+uqer/ubXt/8bD8f/T0fT/1NH0/8zJ8v/FwfD/sKvr/4+I4/9tZdr/UkjU/0A1z/8vIsv/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP84LM3/W1HW/3933/+inOj/xcLw/+jn+f/k4vj/nZjm/1dN1f8zJ8z/enLe/8G97//+/v7/+vn9//b1/P/x8Pv/7ez6/+nn+f/l4/j/5eT4/+fm+f/p5/n/6ej5/+no+v/q6Pr/29j2/8K+8P+qpOr/jIXi/2lg2v9GO9H/LyLL/yodyv8lGMj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP80KMz/U0jU/3Fo2/+PiOP/rajq/8vI8v/HxPH/i4Ti/09E0/8xJMv/bWTa/6mk6f/d2/b/3dv2/93b9v/d2/b/3dv2/93b9v/d2/b/3dv2/93b9v/d2/b/2df1/9LQ9P/MyfL/urbu/6Gb5/+HgOH/bGPa/1BF0/8zJ8z/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8vI8v/RTrQ/1pQ1v9wZ9v/hX7h/5uV5v+YkuX/bWXa/0I30P8sIMr/V07V/4J74P+opOn/qKTp/6ik6f+opOn/qKTp/6ik6f+opOn/qKTp/6ik6f+opOn/oZzn/5iT5f+QieP/gXrf/3Bo2/9fVtf/TkTT/z0yzv8sIMr/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8qHcr/NyvN/0Q50P9RR9P/XlXX/2tj2v9pYdr/T0XT/zUpzP8oG8n/QjfQ/1xT1v9zbNz/c2zc/3Ns3P9zbNz/c2zc/3Ns3P9zbNz/c2zc/3Ns3P9zbNz/amLa/19V1/9TSdT/ST7R/0A1z/84LM3/MCTL/yseyv8lGMj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8mGcn/LiHL/zUpzP89Mc7/RDnQ/0tB0v9KQNL/OzDO/y0gyv8lGMj/NCjM/0M40P9QRtP/UEbT/1BG0/9QRtP/UEbT/1BG0/9QRtP/UEbT/1BG0/9QRtP/Rz3R/zwxzv8xJsv/Kx/K/ycbyf8jF8j/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8kGMj/KRzJ/y4hy/8yJsz/NyvN/zswzv87L87/MibM/ygcyf8kF8j/LSHK/zYrzf8+M8//PjPP/z4zz/8+M8//PjPP/z4zz/8+M8//PjPP/z4zz/8+M8//OS7N/zImzP8rH8r/JxvJ/yUYyP8jFsj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8jFsj/JBjI/yYZyf8oG8n/Kh3K/ysfyv8rH8r/KBvJ/yQXyP8iFcj/JhnJ/ykdyv8sIMr/LCDK/ywgyv8sIMr/LCDK/ywgyv8sIMr/LCDK/ywgyv8sIMr/Kx7K/ygbyf8lGcj/JBfI/yMWyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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z/8iFcj/IhXI/yIVyP8iFcj/LSHK/1FH1P9+dt//xcLw/+/u+/+ZlOX/TELS/zYrzf8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/01D0/+De+D/uLTt/+7t+v+1sOz/Sj/S/2Rb2P/QzfP/4N/3/6um6v92bd3/QDTP/yIVyP8iFcj/IhXI/yIVyP8rHsr/SD7R/3Jq3P+/vO//7+77/52Y5v9SSdT/OS7N/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/TUPT/4N74P+4tO3/7u36/7Ww7P9KP9L/ZFvY/9DN8//g3/f/q6bq/3Zt3f9ANM//IhXI/yIVyP8iFcj/IhXI/yoeyv9HPNH/cGjb/7+77//v7/v/n5rn/1VM1f86L87/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP9NQ9P/g3vg/7i07f/u7fr/tbDs/0o/0v9kW9j/0M3z/+Df9/+rpur/dm3d/0A0z/8iFcj/IhXI/yIVyP8iFcj/Kx/K/0tB0v92btz/wb7v/+/v+/+fmuf/VUzV/zovzv8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/01D0/+De+D/uLTt/+7t+v+1sOz/Sj/S/2Rb2P/QzfP/4N/3/6um6v92bd3/QDTP/yIVyP8iFcj/IhXI/yIVyP8vI8v/WlHW/4uE4v/Lx/L/7u36/5eS5f9JPtH/NCnM/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/TUPT/4N74P+4tO3/7u36/7Ww7P9KP9L/ZFvY/9DN8//g3/f/q6bq/3Zt3f9ANM//IhXI/yIVyP8iFcj/IhXI/zUpzP90bNz/rqnr/9rY9v/s6/r/iIHh/zAky/8oHMn/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP9NQ9P/g3vg/7i07f/u7fr/tbDs/0o/0v9kW9j/0M3z/+Df9/+rpur/dm3d/0A0z/8jFsj/KBvJ/y4iy/86Ls7/VkzV/5eR5f/MyfL/3dv2/9jW9f93b93/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/01D0/+De+D/uLTt/+7t+v+1sOz/Sj/S/2Rb2P/QzfP/4N/3/6um6v92bd3/QDTP/ygbyf81Ksz/TELS/3Jq2/+alOb/x8Tx/+Ti+P/Ny/L/ranq/2Na2P8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/TUPT/4N74P+4tO3/7u36/7Ww7P9KP9L/ZFvY/9DN8//m5Pj/urbu/46I4/9iWdj/UUfT/2FY1/97dN7/pqHp/8nG8f/c2vb/3t33/66q6/9+d9//TULS/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP9NQ9P/g3vg/7i07f/u7fr/tbDs/0o/0v9kW9j/0M3z//X0/P/j4fj/0c7z/7+77/+4tO3/vrvu/8jE8f/V0/T/2Nb1/8TA8P+oo+n/dW3c/0c80f8zJ8z/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/0g90f94cN3/p6Lp/9fU9f+kn+j/RTrQ/11T1v+8uO7/5eT4/+Xk+P/l5Pj/5eT4/+Xk+P/l5Pj/4uD4/9nX9f/Hw/H/npjn/3Rs3P9HPNH/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/OC3N/1VK1P9waNv/jIbi/25m2/82K83/RDrQ/3x13v+Vj+T/lY/k/5WP5P+Vj+T/lY/k/5WP5P+PieP/gHnf/29n2/9aUNb/RTrQ/zElzP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8rH8r/NyvN/0M40P9ORNP/QjfQ/yoeyv8wJMv/SD3R/1JI1P9SSNT/UkjU/1JI1P9SSNT/UkjU/0tB0v86L83/LCDK/yYZyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yYZyf8rH8r/MCTL/zYqzf8wJMv/JRnJ/ygcyf8zJ8z/NyzN/zcszf83LM3/NyzN/zcszf83LM3/NCnM/ywgyv8mGsn/JBfI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAAAAAAAAAAIhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/1lQ1v//////8fD8/6yn6v8wJMv/IhXI//////////////////////+6tu7/WVDW/yIVyP8iFcj/IhXI/yIVyP8wJMv/Z17Z/6yn6v//////rKfq/yIVyP//////rKfq/1lQ1v+RiuT/4+L4//////9nXtn/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/urbu//Hw/P8iFcj//////5GK5P8iFcj/IhXI/zAky//j4vj/4+L4/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/5GK5P//////IhXI//////+RiuT/IhXI/yIVyP8iFcj/dW3d//////9LQdL/IhXI/yIVyP8iFcj/IhXI/yIVyP+RiuT//////yIVyP//////kYrk/yIVyP8iFcj/IhXI/1lQ1v//////WVDW/yIVyP8iFcj/IhXI/yIVyP8iFcj/kYrk//////8iFcj//////5GK5P8iFcj/IhXI/yIVyP9nXtn//////1lQ1v8iFcj/IhXI/yIVyP8iFcj/IhXI/5GK5P//////IhXI//////+RiuT/IhXI/yIVyP8iFcj/urbu//////8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP+RiuT//////yIVyP//////kYrk/yIVyP9LQdL/urbu//////+emef/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/kYrk//////8iFcj///////////////////////Hw/P+RiuT/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/z4yz/9ZUNb/IhXI/1lQ1v9ZUNb/WVDW/1lQ1v8wJMv/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/yIVyP8iFcj/IhXI/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=' },
amazonDe: { name: 'Amazon.de', url: 'https://www.amazon.de/s?k=', icon: 'data:image/x-icon;base64,AAABAAQAMDAAAAEAIACoJQAARgAAACAgAAABACAAqBAAAO4lAAAYGAAAAQAgAIgJAACWNgAAEBAAAAEAIABoBAAAHkAAACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///0X///+Z////zP////P////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////w////zP///5P///8/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8k////wP//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////t////x4AAAAAAAAAAAAAAAAAAAAAAAAAAP///0L////z///////////////////////////////////////////////////////////////////////////X7///u+T//5DV//+R1f//csr//1C+//+Cz///kdX//5/Z///L6v//8vr//////////////////////////////////////////////////////////////////////////////////////+3///85AAAAAAAAAAAAAAAA////Lf////D///////////////////////////////////////////////////////////////+85f//csr//xOt//8AqP//AKj//wCn//8Ap///AKf+/wCn//8AqP//AKf//wCn//8Ap///AKj//z64//+Q1f//2PD////////////////////////////////////////////////////////////////////////////q////JAAAAAAAAAAA////zP/////////////////////////////////////////////////////y+v//kNX//xOs//8Ap///AKf//wCo//8Ap///AKf//wCo//8AqP//AKf//wCn/v8Ap///AKj//wCn//8AqP//AKf//wCn//8Ap///AKf//z64//+u4P//////////////////////////////////////////////////////////////////////vQAAAAD///9R////////////////////////////////////////////////8vr//5HV//8TrP//AKj//wCo//8AqP//AKj//wCo//8Ap///AKf//wCn//8AqP//AKf//wCo//8AqP//AKj//wCn//8Ap/7/AKf//wCo//8AqP//AKf//wCo//8Ap///KbL//67g////////////////////////5fT//////////////////////////////////////0L///+l//////////////////////////////////////////+75P//E63//wCn//8Ap///AKf//wCn/v8AqP//AKf//wCo//8psv//UL///4LQ//+R1f//kNX//5DV//+Q1f//kNX//5HV//9hw///UL7//wCo//8Ap/7/AKj//wCn//8Ap///AKj//wCn//9Qvv//5vX/////////////Ub///5DV/////////////////////////////////5b////q////////////////////////////////8vr//3LK//8AqP//AKf//wCn//8AqP//AKj//1C///+R1f//y+r////////////////////////////////////////////////////////////////////////Y7///rd///3LJ//8Trf//AKf+/wCn//8AqP//E63//7zl////////n9r//wCo///l9P///////////////////////////9v////////////////////////////////Y7///Prj//wCn//8Ap///AKf+/1C+//+t3///8vr/////////////////////////////////////////////////////////////////////////////////////////////////////////////vOX//3LK//8Ap///AKf//wCo//+t3///2O///wCn//9zyv////////////////////////////n//////////////////////////9jw//8Trf//AKf//wCn//9yyf//5fT////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////y+v//kNX//xOt//9hw////////xOt//8Trf//////////////////////////////////////////////////u+T//xOt//8AqP//csn//+X0/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1G///8Ap///5vX////////////////////////////////////////Y7///AKj//1C+///l9f///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9jv//8Ap///Ub///2HD//+Q1f//csr//wCn//8Ap///y+r////////////////////////////////////////Y8P//ruD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////L6v//YsP//wCn//8Ap///AKj//wCo//8Ap///2PD///////////////////////////////////////////////////////////////////////////////////////////////////Pz8/+ioqL/VlZU/x0dG/8FBQT/BQUD/x0dHP9WVlX/hoaE/9jY2P////////////////////////////////++vr7/VlZV/6Kiov/////////////////////////////////K6f//yun//8rq///l9P//////////////////////////////////////////////////////////////////////////////////////////////////oqKi/x0dHP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQP/BQUE/wUFBP9WVlT/5ubm/////////////////7Cwr/8FBQT/BQUE/wUFBP92dnb///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+GhoX/BQUE/wUFBP8FBQT/BQUD/wUFBP8FBQT/BQUE/wQEA/8FBQT/BQUD/wUFA/8FBQT/HR0c/7Cwr///////2dnZ/wUFBP8FBQT/BQUE/wUFBP8FBQT/Z2dm//Ly8v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////729vf8FBQP/BQUE/wUFBP8FBQT/BQUE/wUFA/8FBQT/BQUE/wUFBP8FBQP/BQUD/wUFBP8FBQT/BQUE/wUFBP+ioqL/MjIw/wUFBP8FBQT/BQUD/wUFA/8FBQT/BQUE/0REQ//y8vL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////zExMP8FBQT/BQUD/wUFBP8FBQT/BQUE/wUFBP8FBQP/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUD/wUFBP8FBQT/BQUE/wUFBP8dHRv/////////////////////////////////////////////////////////////////////////////////////////////////////////////////2dnZ/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8dHRz/BQUE/wUFBP8FBQT/BQUD/wUFBP8FBQP/BQUE/wUFBP8FBQT/BQUD/wUFBP8FBQT/BQUE/wUFBP8yMjD/////////////////////////////////////////////////////////////////////////////////////////////////////////////////lJST/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/HR0c/8zMzP///////////8zMzP8xMTD/BQUE/wUFBP8FBQT/BQUD/wUFA/8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP/MzMz/////////////////////////////////////////////////////////////////////////////////////////////////////////////////hoaF/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQP/zMzM///////////////////////y8vL/HR0c/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQP/BQUE/4aGhP//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////VlZV/wUFBP8EBAP/BQUD/wUFA/8FBQT/BQUE/wUFBP9FRUT/////////////////////////////////sLCv/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/+Xl5f//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////ZmZl/wUFA/8FBQT/BQUD/wUFBP8FBQT/BQUE/wUFBP9VVVT//////////////////////////////////////zExMP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/VlZV////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////lJST/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP9WVlX//////////////////////////////////////3Z2dv8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/VlZV////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////sbGw/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFA/8dHRz//////////////////////////////////////5SUk/8FBQP/BQUE/wUFA/8FBQT/BQUE/wUFBP8FBQT/VlZU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8vLy/wUFA/8FBQP/BQUD/wUFBP8FBQT/BQUE/wUFBP8FBQT/oqKi/////////////////////////////////5SUk/8FBQP/BQUE/wUFBP8FBQT/BQUD/wUFBP8FBQP/VlZV/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3Z2dv8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFA/8FBQT/HR0c/729vf///////////////////////////83Nzf8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/VlZV/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+bm5v8dHRz/BQUD/wUFA/8FBQT/BQUE/wUFBP8EBAP/BQUE/wUFBP9WVlX/vb29//Pz8////////////83Nzf8FBQP/BQUE/wUFBP8FBQT/BQUE/wUFA/8FBQT/VlZV//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////++vr7/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQP/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/VlZU/0REQ/8FBQT/BQUE/wUFBP8FBQP/BQUE/wUFBP8FBQT/VVVU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////zMzM/x0dG/8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQP/BQUE/wUFBP8FBQT/BQUE/wUFA/8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFA/8FBQP/VVVU//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Ly8v92dnb/BQUE/wUFBP8FBQT/BQUE/wUFA/8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFA/8FBQP/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/VlZV////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////5ubm/6Kiov9VVVT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQP/VlZV/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9nZ2f/MzMz/lJST/5SUk/9WVlT/VlZV/zExMP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/VlZV/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8zMzP8FBQP/BQUE/wUFA/8FBQT/BAQD/wUFBP8FBQT/VlZV////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8/Pz/8zMzP/MzMz/lJST/5SUk//Z2dn//////////////////////////////////////76+vv8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQP/VlZV/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////5WVk/8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP9nZ2b//////////////////////////////////////5SUk/8FBQT/BQUE/wUFA/8FBQT/BQUE/wUFBP8FBQT/dnZ2/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1ZWVP8FBQT/BQUE/wUFBP8FBQT/BQUD/wUFA/8dHRz/8/Pz/////////////////////////////////3Z2dv8FBQP/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/lJST/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////6Ghof8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFA/8FBQT/dnZ2////////////////////////////2dnZ/x0dHP8FBQT/BQUE/wUFBP8FBQT/BQUD/wUFBP8FBQT/lJST/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+bm5v8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFA/8FBQT/BAQD/zExMP+xsbD/zMzM/8zMzP+UlJP/HR0c/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/zMzM//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////92dnb/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8dHRv///////////////////////////////////////////////////////////////////////////n////t///////////////////////////////////////////////////////////m5ub/Hh4c/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wQEA/8FBQP/BQUD/wUFBP+UlJP//////////////////////////////////////////////////////////////////////////97///+o////////////////////////////////////////////////////////////////2dnZ/x0dG/8FBQT/BQUE/wUFA/8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQP/BQUE/0VFRP/z8/P//////////////////////////////////////////////////////////////////////////5b///9U/////////////////////////////////////////////////////////////////////9nZ2f8xMTD/BQUE/wUFBP8FBQP/BQUE/wUFBP8FBQT/BQUD/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/VVVU//Ly8v///////////////////////////////////////////////////////////////////////////////0L///8D////z///////////////////////////////////////////////////////////////////////////lZWU/zExMP8FBQT/BQUD/wUFA/8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFA/8FBQT/BQUD/zExMP+xsbD/////////////////////////////////////////////////////////////////////////////////////wwAAAAAAAAAA////MP////b////////////////////////////////////////////////////////////////////////////////Z2dn/lJST/1ZWVf9WVlX/BAQD/wUFBP8FBQT/RUVD/1ZWVf+UlJP/zMzM///////////////////////////////////////////////////////////////////////////////////////////w////JwAAAAAAAAAAAAAAAP///0v////z//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////D///8/AAAAAAAAAAAAAAAAAAAAAAAAAAD///8t////yf//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////w////yQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///0v///+f////z///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////zP///5n///9FAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAB8AAOAAAAAABwAAwAAAAAADAACAAAAAAAEAAIAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAgAAAAAABAADAAAAAAAMAAOAAAAAABwAA+AAAAAAfAAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Uf///5/////S///////////////////////////////////////////////////////////////////////////////////////////////////////////////P////nP///0gAAAAAAAAAAAAAAAAAAAAA////GP///7H//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////6X///8SAAAAAP///wb////P////////////////////////////////////////////////5fX//67g//+R1f//UL7//1C+//9Rv///YsT//5DU//+85f//8vr//////////////////////////////////////////////////////8P///8D////df//////////////////////////////////////////ruD//z24//8AqP//AKf//wCo//8Ap///AKj//wCo//8Ap/7/AKf//wCn//8AqP//csr//8vq/////////////////////////////////////////////////2b////S////////////////////////////////y+r//ymy//8Ap///AKj//wCo//8Ap///AKf//wCn//8Ap///AKj//wCn//8Ap///AKj//wCo//8AqP//AKj//1C////Y8P///////8rq///Y7///////////////////////w/////z/////////////////////8vr//3LJ//8AqP//AKf//wCn/v9ixP//kNT//8vq///y+v////////////////////////L6///L6v//n9r//2LE//8Trf//AKf//wCo//+u4P//vOX//z65///////////////////////w//////////////////////L6//8+uP//AKf//1C+//+t3///8/r///////////////////////////////////////////////////////////////////////+85f//UL7//wCo///Y7///AKf//8rp///////////////////////////////////Y7///E63//1C+///L6v////////////////////////////////////////////////////////////////////////////////////////P7///L6v//5fT///L6//8ps///kNT//////////////////////////////////5DU//+t3///////////////////////////////////////////////////////////////////////////////////////////////////5fX//1C+//8AqP//AKf//wCn//+Q1f//////////////////////////////////////////////////////////////////8vLy/5SUk/9FRUT/BQUE/wQEA/8yMjD/Z2dm/8zMzP////////////////+GhoX/Z2dm//Lz8////////////+X0///L6v//yun///L6//////////////////////////////////////////////////////////////Ly8v9FRUT/BQUE/wUFBP8FBQT/BQUE/wQEA/8FBQT/BQUD/3Z2dv/z8/P/dnZ2/wUFBP8FBQP/MTEw/9nZ2f//////////////////////////////////////////////////////////////////////////////////////VlZV/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/zIyMP8FBQT/BQUE/wUFBP8FBQT/HR0c/9nZ2f///////////////////////////////////////////////////////////////////////////+bm5v8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFA/8xMTD/HR0c/wUFA/8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFA/8FBQT/lJST////////////////////////////////////////////////////////////////////////////vb29/wUFBP8EBAP/BQUE/wUFBP8FBQT/dnZ2////////////oqKi/wUFBP8EBAP/BQUE/wUFBP8FBQP/BQUE/zIyMf/y8vL///////////////////////////////////////////////////////////////////////////+UlJP/BQUE/wUFBP8FBQT/BQUE/wUFBP/y8vL/////////////////Z2dm/wUFBP8FBQT/BQUE/wUFBP8FBQT/sbGw/////////////////////////////////////////////////////////////////////////////////7GxsP8FBQT/BQUD/wUFBP8FBQT/BQUD//////////////////////+9vb3/BQUE/wUFBP8FBQT/BQUE/wUFBP/m5ub/////////////////////////////////////////////////////////////////////////////////2dnZ/wUFBP8FBQT/BQUE/wUFBP8FBQT/zMzM/////////////////+bm5v8FBQT/BQUE/wUFA/8FBQT/BQUD////////////////////////////////////////////////////////////////////////////////////////////MTEw/wUFBP8FBQT/BQUE/wUFBP9FRUT/5eXl/////////////////wUFBP8FBQT/BQUE/wUFBP8FBQT////////////////////////////////////////////////////////////////////////////////////////////MzMz/BQUE/wUFA/8FBQT/BQUD/wUFBP8FBQT/dnZ2/5SUk/+9vb3/BQUE/wUFBP8FBQT/BQUE/wUFA/////////////////////////////////////////////////////////////////////////////////////////////////+wsK//HR0c/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUD/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE///////////////////////////////////////////////////////////////////////////////////////////////////////m5ub/hoaF/zIyMP8FBQT/BQUE/wUFBP8FBQT/BQUD/wUFBP8FBQT/BQUE/wUFBP8FBQP//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+bm5v/MzMz/lJST/5SUk/9WVlX/BQUE/wQEA/8FBQT/BQUE/wUFA//////////////////////////////////////////////////////////////////////////////////////////////////y8vL/zMzM/8zMzP/Nzc3///////////////////////////8FBQT/BQUE/wUFBP8FBQT/BQUD////////////////////////////////////////////////////////////////////////////////////////////Z2dm/wUFBP8FBQT/BQUE/wUFBP/y8vL/////////////////2dnZ/wUFA/8FBQP/BQUD/wUFBP8FBQT///////////////////////////////////////////////////////////////////////////////////////////9mZmX/BQUE/wUFBP8FBQT/BQUE/3Z2dv////////////////92dnb/BQUE/wUFBP8FBQT/BQUE/wUFBP///////////////////////////////////////////////////////////////////////////////////////////7CwsP8FBQT/BQUE/wUFBP8FBQT/BQUE/zIyMP9WVlX/RUVE/wUFBP8FBQT/BQUE/wUFBP8FBQT/RUVD/////////////////////////////////////////////////////////////////////////////////////////////////1ZWVf8FBQT/BQUE/wUFBP8EBAP/BQUD/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP+wsK/////////////////////////////////////////////////2////2///////////////////////////////////////////8vLy/0VFRP8FBQP/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/dnZ2/////////////////////////////////////////////////////8z///9+/////////////////////////////////////////////////////7Cwr/9FRUT/BQUE/wUFBP8FBQT/BQUD/wUFBP8FBQT/RUVE/7Cwr///////////////////////////////////////////////////////////b////wz////b///////////////////////////////////////////////////////////y8vL/zMzM/8zMzP/MzMz/zc3N/+bm5v///////////////////////////////////////////////////////////////9L///8GAAAAAP///yf////b///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////S////HgAAAAAAAAAAAAAAAP///wz///94////2P/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////S////cv///wkAAAAAAAAAAOAAAAeAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHAAAADKAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8G////hP///9v/////////////////////////////////////////////////////////////////////////////////////////2////4T///8GAAAAAP///wz////P///////////////////////////y+v//vOX//5DV//+C0P//YsT//5DU//+u4P//5fT////////////////////////////////////////////G////Cf///4T/////////////////////8vr//3LK//8Trf//AKj//wCn//8Ap///AKf+/wCo//8AqP//AKf//1C+///K6v//////////////////////////////////////e////9v///////////////+u4P//E6z//wCn//8AqP//AKf//wCo//8Ap///AKf//wCo//8AqP//AKf//wCo//8Ap///kNX/////////////kdX//9jw////////////z/////D//////////4LP//8Ap///AKf//wCo//8qs///csr//5DV///K6f//y+r//8rq///L6v//n9n//3LK//8TrP//AKf//5/a////////kNX//1C+////////////7f////D/////kdX//wCo//8AqP//csn//9jw///////////////////////////////////////////////////y+v//n9r//4LQ////////yun//wCn///l9P//////8P////DK6v//AKf//1C+///l9P//////////////////////////////////////////////////////////////////////////////////yun//wCn//+85f//////8P////Aps///kNX///////////////////////////////////////////////////////////////////////+g2v//KrP//2LE//+Q1P//csr//wCn//+R1f//////8P////C75P////////////////////////////+xsbD/VlZV/1VVVP9WVlX/oaGh//Ly8v/y8vL/dnZ2/7Cwr///////vOT//2HD//8Ap///AKj//wCn/v+85f//////8P////D//////////////////////////4aGhf8EBAP/BQUD/wUFBP8EBAP/BQUD/0VFRP9nZ2b/BQUE/wUFBP92dnb/////////////////2O///+b1////////////8P////D/////////////////////8vLy/wUFBP8FBQT/BQUE/wUFA/9EREP/HR0b/wUFBP8FBQT/BQUD/wUFBP8FBQT/////////////////////////////////////8P////D/////////////////////zMzM/wUFBP8FBQT/BQUE/3Z2dv//////8vLy/x0dHP8FBQT/BQUE/wUFBP+UlJP/////////////////////////////////////8P////D/////////////////////zc3N/wUFBP8FBQT/BQUE/5SUk////////////4aGhf8FBQT/BQUE/wUFBP/MzMz/////////////////////////////////////8P////D//////////////////////////x0dG/8FBQT/BQUE/0VFQ//z8/P//////76+vv8FBQT/BQUE/wUFBP/Nzc3/////////////////////////////////////8P////D//////////////////////////7CwsP8FBQP/BQUE/wUFBP8dHRv/dnZ2/3Z2dv8FBQP/BQUE/wUFBP/MzMz/////////////////////////////////////8P////D///////////////////////////////++vr7/MTEw/wUFBP8FBQP/BQUD/wUFBP8FBQT/BQUE/wUFBP/MzMz/////////////////////////////////////8P////D//////////////////////////////////////////+Xl5f/MzMz/lJST/3Z2dv8FBQT/BQUE/wUFBP/MzMz/////////////////////////////////////8P////D//////////////////////////4aGhf9WVlX/HR0b/729vf///////////7Cwr/8FBQP/BQUE/wUFBP/MzMz/////////////////////////////////////8P////D//////////////////////////2ZmZf8FBQT/BQUE/x0dHP++vr7/zMzM/0VFRP8FBQT/BQUE/wUFBP/y8vL/////////////////////////////////////8P////D//////////////////////////8zMzP8FBQT/BQUE/wUFBP8FBQT/BQUE/wUFBP8FBQT/BQUD/1ZWVP/29vb/////////////////////////////////////7f///9X///////////////////////////////+wsK//HR0c/wUFBP8FBQT/BQUE/wUFBP8FBQT/MTEw/9vb2//6+vr/////////////////////////////////////z////3v/////////////////////////////////////8vLy/76+vv+UlJP/lJST/5SUk/++vr7/////////////////////////////////////////////////////df///wn////D//////////////////////////////////////////////////////////////////////////////////////////////////////////////+9////BgAAAAD///8D////df///9L/////////////////////////////////////////////////////////////////////////////////////////z////3X///8DAAAAAIAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAABACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8G////lv////b/////////////////////////////////////////////////////////9v///5b///8G////iv/////////////////////Y7///n9r//5DV//+Q1P//vOT/////////////////////////////////iv///+f//////////8vq//9Qvv//AKj//wCn//8Ap///AKf+/wCn//8ps///u+T////////y+v//8vr//////+f////w/////67g//8AqP//AKj//z24//+C0P//kNX//5DU//+R1f//UL7//wCn//+u4P//vOX//4LQ///////w////8Lzl//8AqP//csn//+bz///////////////////////////////////l9P//rd///9jv//8Trf//////8P////Aqs///2O//////////////////////////////////////////////Ur7//3LK//+C0P//AKf///////D////w5vX/////////////zMzM/x0dG/8FBQT/HR0b/5SUk/9WVlT/RUVD/+fu8/+i2P7/csr//3LK///////w////8P///////////////zExMP8FBQT/BQUE/0VFRP8FBQP/BQUE/wUFBP+UlJP/////////////////////8P////D///////////////8FBQT/BQUE/4aGhP//////ZmZl/wUFBP8FBQT/8vLy//////////////////////D////w////////////////VlZV/wUFBP8yMjD/5ubm/5SUk/8FBQT/BQUE///////////////////////////w////8P///////////////9nZ2f8yMjD/BQUE/wUFBP8FBQT/BQUE/wUFBP//////////////////////////8P////D////////////////m5ub/zMzM/729vf+wsK//VlZV/wUFBP8FBQT///////////////////////////D////w////////////////Z2dm/wUFBP9FRUT/2NjY/2dnZv8FBQT/HR0c///////////////////////////w////5////////////////8zMzP8FBQP/BQUE/wUFBP8FBQT/BQUE/3Z2dv//////////////////////////5////4f/////////////////////2dnZ/3Z2dv9VVVT/VlZV/6Kiov///////////////////////////////4r///8G////jf///+T/////////////////////////////////////////////////////////5P///43///8GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==' },
ebay: { name: 'eBay', url: 'https://www.ebay.com/sch/i.html?_nkw=', icon: 'data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP84MuX/ODLl/zgy5f84MuX/0mQA/9JkAP/SZAD/0mQA/wKv9f8Cr/X/Aq/1/wKv9f8XuIb/F7iG/xe4hv8XuIb/ODLl/zgy5f84MuX/ODLl/9JkAP/SZAD/0mQA/9JkAP8Cr/X/Aq/1/wKv9f8Cr/X/F7iG/xe4hv8XuIb/F7iG/zgy5f84MuX/ODLl/zgy5f/SZAD/0mQA/9JkAP/SZAD/Aq/1/wKv9f8Cr/X/Aq/1/xe4hv8XuIb/F7iG/xe4hv84MuX/ODLl/zgy5f84MuX/0mQA/9JkAP/SZAD/0mQA/wKv9f8Cr/X/Aq/1/wKv9f8XuIb/F7iG/xe4hv8XuIb/ODLl/zgy5f84MuX/ODLl/9JkAP/SZAD/0mQA/9JkAP8Cr/X/Aq/1/wKv9f8Cr/X/F7iG/xe4hv8XuIb/F7iG/zgy5f84MuX/ODLl/zgy5f/SZAD/0mQA/9JkAP/SZAD/Aq/1/wKv9f8Cr/X/Aq/1/xe4hv8XuIb/F7iG/xe4hv84MuX/ODLl/zgy5f84MuX/0mQA/9JkAP/SZAD/0mQA/wKv9f8Cr/X/Aq/1/wKv9f8XuIb/F7iG/xe4hv8XuIb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA8wAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAPMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK4AAABsAAAAAAAAAAAAAAAAAAAAAAAAAG8AAACuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAA6gAAAGkAAAAMAAAADAAAAGkAAADqAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcAAAC3AAAA8wAAAPMAAAC3AAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAAAAAAAD4QQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA888AUPPPAFDwD///+B8AAA==' },
allegro: { name: 'Allegro', url: 'https://allegro.pl/listing?string=', icon: 'data:image/x-icon;base64,AAABAAEAMDAAAAEAIACoJQAAFgAAACgAAAAwAAAAYAAAAAEAIAAAAAAAACQAABMLAAATCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWP8aAFv/cABb/6YAWv/ZAFr/7gBa//AAWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//kAWv9jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFv/NQBa/7UAWv/8AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv+hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABd/wsAWv+cAFr//QBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv+hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFX/BgBa/7YAWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv+hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFr/pwBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv+hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWf9CAFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv+hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWv/LAFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr/2wBa/40AWv9pAFr/ZgBa/2YAWv9mAFr/ZgBa/2YAWv9mAFr/ZgBa/2YAWv9mAFn/ZwBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv+hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY/yAAWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//UAWv9jAID/AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAID/AgBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv+hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZ/2oAWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//QBa/0EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAID/AgBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv+hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZ/4YAWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr/qgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAID/AgBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv+hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABb/5UAWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFv/awAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAID/AgBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv+hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABa/5cAWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFv/aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAID/AgBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv+hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABa/4UAWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr/ngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAID/AgBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv+hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABb/18AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr/9QBY/xoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAID/AgBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv+hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABX/yMAWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa/8MAYv8NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAID/AgBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv+hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWv/GAFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv/VAFr/SgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAID/AgBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv+hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW/9MAFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa/+MAWv+hAFv/gQBa/24AWv9mAFr/ZgBa/2YAWv9mAFr/ZgBa/2YAWv9mAFn/ZwBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv+hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFr/pwBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv+hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF3/CwBa/8YAWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv+hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABd/wsAW/+pAFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv+hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFv/VwBa/94AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv+hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABV/wMAXP9OAFv/tABa//sAWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv+fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABV/wwAW/9GAFr/gABb/6YAWv/GAFr/2gBa/90AWv/dAFr/3QBa/90AWv/dAFr/3QBa/90AWv/dAFr/3QBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAED/BABa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AW/+BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFz/GQBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv9xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFz/TgBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWP9LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFr/XgBa/6cAXf8sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8BAFr/uwBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AXf8WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFv/yABa//8AWv/8AFr/ngBd/ywAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWf91AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa/94AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFr/1wBa//8AWv//AFr//wBa//8AWf/CAFr/bgBX/yMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFr/HwBa/5sAWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa/4UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFv/5wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv/rAFr/uwBZ/6AAWv+NAFr/lABa/6QAWf/QAFr//QBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//ABe/x4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFr/9wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFn/oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYP8IAFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv/jAFX/FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZv8FAFr/2QBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa/+kAWv8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGb/BQBa/2MAWv/dAFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr/wABd/yEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZv8FAFr/UgBa/6gAWv/0AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//wBa//8AWv//AFr//QBa/7sAW/9MAAD/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZv8KAFr/RwBa/3oAWv+sAFn/0wBa/+IAWv/yAFr/+wBa/+kAWv/XAFr/wQBZ/4wAW/9RAFn/FwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD//gAAAP8AAP/4AAAA/wAA/+AAAAD/AAD/wAAAAP8AAP/AAAAA/wAA/4AAAAD/AAD/gAAAAP8AAP8AD/4A/wAA/wA//gD/AAD/AH/+AP8AAP8Af/4A/wAA/wB//gD/AAD/AH/+AP8AAP8AP/4A/wAA/wAf/gD/AAD/gA/+AP8AAP+AAAAA/wAA/8AAAAD/AAD/wAAAAP8AAP/gAAAA/wAA//gAAAD/AAD//AAAAP8AAP//gAAA/wAA/////gD/AAD////+AP8AAP////4A/wAA//j//AD/AAD/+D/8Af8AAP/4B/AB/wAA//gAAAH/AAD/+AAAA/8AAP/wAAAD/wAA//AAAAf/AAD/+AAAD/8AAP/+AAAf/wAA///AAP//AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAA=' },
olx: { name: 'OLX', url: 'https://www.olx.pl/oferty/q-', icon: 'data:image/x-icon;base64,AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///zD///+W////1v////L////y////1v///5r///8y////AP///wD///8A////AP///wD///8A////CP///5T//////////////////////////////////////////////5j///8K////AP///wD///8A////Bv///8D/////////////////////////////////////////////////////////yP///wj///8A////AP///5T///////////////////////////////////////////////////////////////////+c////AP///yz///////////Xt8f////////////////////////////X4/v/x9v7//////+vx/f+uyfr/6/L9/////zT///+U8+ru/5dDaP+OL1r/lkFn//Lo7f////////////////92pPb/WZL0//////9imPX/EWLv/52/+P////+c////1KZbff+pYoL//////6tmhf+kWHr/5/bz/8Tp4P/F6eH/fq/s/xdn8f+ZvPj/JG/x/06L9P//////////3Pz6+/KGIU//2LjH///////au8n/lSRV/23LtP8lr47/IK2M/4zXu/96pfj/JXDx/ytz8f/i7P3///////////T9/PzyhyRR/9Wywv//////17bF/5YnWP930Lr/U8Cm//T7+f/7/f3/0uH8/x5r8P9Uj/T////////////////0////1LR1kv+aSGz/8ebr/5xLb/+7dpX/e9TC/1XBp////////////1aQ9P9WkPT/Pn3y/6TD+f//////////3P///5T79/n/sHKM/4wtWf+vcIr/+vb4/2/JtP9Sv6b//////+fv/f8lbPD/4uz9/+Tt/f8tbfD/7PP9/////5z///8q//////////////////////////+j3c//itPB////////////////////////////9vn+//39//////8y////AP///5L///////////////////////////////////////////////////////////////////+a////AP///wD///8E////vv/////////////////////////////////////////////////////////E////CP///wD///8A////AP///wb///+S//////////////////////////////////////////////+W////CP///wD///8A////AP///wD///8A////AP///y7///+U////1P////L////0////1v///5j///8w////AP///wD///8A////APgfAADgBwAAwAMAAIABAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAIABAADAAwAA4AcAAPgfAAAoAAAAIAAAAEAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///xD///9Y////lP///8L////c////6v///+r////c////xP///5j///9c////Fv///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///yb///+W////8P/////////////////////////////////////////////////////////0////nP///yz///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+E/////////////////////////////////////////////////////////////////////////////////////////4z///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8a////yP///////////////////////////////////////////////////////////////////////////////////////////////////9L///8i////AP///wD///8A////AP///wD///8A////AP///wD///8A////JP///+r///////////////////////////////////////////////////////////////////////////////////////////////////////////////T///8w////AP///wD///8A////AP///wD///8A////AP///xL////u//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////j///8e////AP///wD///8A////AP///wD///8A////0P///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////97///8A////AP///wD///8A////AP///37//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////5D///8A////AP///wD///8W/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yL///8A////AP///5b/////////////////////7N3k/+zc4////////////////////////////////////////////////////////////9nm/P/I2/z//////////////////////6/K+v9AgfP/eqf3/7fQ+v/5+///////qP///wD///8I////9v//////////27zK/5xKb/98D0H/fA5A/5tIbv/YuMf////////////////////////////////////////////7/P//OX3y/wZb7//w9f7////////////u9P7/G2rw/wZc7/8AVe7/DF/w/+jw/f//////////Ev///1D//////////9Grvf94Bzv/cAAv/59QdP+hUnb/cQAx/3cFOf/Oprj//////////////////////////////////////6LB+f8CWe//C1/v/2OZ9f///////////3yp9/8GXO//OX3y/wZb7/+Er/f//v////////////9g////kv/////t3uX/ghlJ/3UBNv+ua4n///////////+xcI3/dQI2/4AWRv/m197/////////////////////////////////y9P//wVZ8v8pdPD/Blzv/8rc+//7/P//GGfw/y528v8TZPD/QoPz/////////////////////6L////A/////7Z4lf9zADT/jCxX//jz9f////////////v4+f+OMFv/cgAz/7p2lP/+////o97Q/4TSwP+P1sX/kNbF/4bTwf+06sz/dqjz/w5e9f8ibvH/RoXz/1uT9f8fbPH/LHXy/xBi8P/W5P3/////////////////////zv///97+/v7/m0Zt/3UCN/+rZYX//////////////////////69ti/91ATb/uU56/8nq4/8NsIn/EqiF/xWphv8MpoL/AqJ8/xCte//y/+j/hKX//wpe7/8ncfH/HWvx/zp+8v8EWu//jrX4///////////////////////////k////7Pbv8/+SN2H/dwU5/7p/mv//////////////////////vISe/3gHOv+vPGz/s8/K/yzDnf86t5n/NbWX/z64nP81tZf/NrSZ//r/8f//////XJT1/x9s8f8yePL/HWrx/1KN9P////////////////////////////////D////s+fT2/5M6Y/92BDj/tnqV//////////////////////+6gJv/dwU5/7A/bv+61dD/L8Kd/xqrif+B0b7/6/j1/+n39P/z+vn//f7////////X5fz/EWPw/y118v8MX/D/zd78////////////////////////////////8P///97/////oVN2/3QANf+hU3f//////////////////////6Zbff90ADT/v1uF/8v06v8otpT/EKiE/6Pdz////////////////////////////3Oj9v8XZ/D/I27x/w9i8P9qnfb////////////////////////////////k////wP/////JnLD/dAA1/4IZSf/iy9X////////////m0dv/gxtL/3MANP/oo77/2f///yOtjv8UqYb/l9nJ///////////////////////X5Pz/GGfw/x5r8f8/gfP/NHny/wBQ7v+hwvn//////////////////////////87///+Q//////z5+v+YQWn/bgAs/5Y/Z//jzNf/5M7Y/5lDav9uACz/lTxl///8///N9+7/I62O/xSphv+X2cn//////////////////////2md9f8BWO//GGfw/+bv/f/H2vv/AFLu/xBh7//i7P3/////////////////////oP///1D//////////+/i6P+VPGX/bQAq/3UCN/92Azj/bAAp/5M5Yv/t3uX//////8Hn3f8jro7/FKmG/5XYyP/////////////////J3Pv/AFbu/wBN7f+NtPj///////////+TuPj/AEDs/zt/8v/x9v7///////////////9g////CP////b///////////z6+//Ekqn/pFh7/6RXev/CkKf/+/f5////////////vebd/x6si/8SqIX/j9bF/////////////////9Xk/P8wd/L/ZJn1//////////////////////95p/b/AFDu/8TY+////////////////xD///8A////lP/////////////////////////////////////////////////////K6+P/DKaC/wCcdP+V2Mj////////////////////////////////////////////////////////////e6f3/9/r///////////+m////AP///wD///8U//////////////////////////////////////////////////////3+/v+65tv/p9/S/+759v///////////////////////////////////////////////////////////////////////////////yD///8A////AP///wD///98//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+O////AP///wD///8A////AP///wD////O////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////2v///wD///8A////AP///wD///8A////AP///xD////s//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////T///8a////AP///wD///8A////AP///wD///8A////AP///yD////o///////////////////////////////////////////////////////////////////////////////////////////////////////////////y////LP///wD///8A////AP///wD///8A////AP///wD///8A////AP///xb////E////////////////////////////////////////////////////////////////////////////////////////////////////zv///yD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+A/////P///////////////////////////////////////////////////////////////////////////////////4j///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8i////kv///+z/////////////////////////////////////////////////////////8P///5j///8o////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////Dv///1T///+Q////wP///97////u////7v///+D////C////lP///1r///8S////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP/wD///gAH//gAAf/wAAD/4AAAf8AAAD+AAAAfgAAADwAAAA4AAAAGAAAABgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAGAAAABwAAAA+AAAAPgAAAH8AAAD/gAAB/8AAA//gAAf/+AAf//8A//' },
ggdeals: { name: 'GG.deals', url: 'https://gg.deals/games/?title=', icon: 'data:image/png;base64,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' },
iszop: { name: 'I-Szop', url: 'https://i-szop.pl/szukaj2/1/', icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAAXNSR0IArs4c6QAAAqNQTFRFDgkEFQ4AFxcMEhkSHBgPKRsTICAdIiIgKiUiKigXJyocLCoaLiwnLzAiNi4sNTktOjorPTkyQzwjREAzQ0U4TEpJV01ET09NYVZEX1dJZFlJZlpGYVxIaVpFZltFZ1xPa1xFYmBcbWFIaWRMbGVTbWdVcGdScWlcdWpMdmpbcmtedGxPe2pUc25ddm5ZeG9ZeG9bgG9jfHFjfnBodXNmfXNRf3RXe3VigHRlfnVhhHRmh3RnendxhXdkhHljhHhwhnhth3huiXpshnxlhXxtjHtoj3xojn1jiX5ogn91iH57gYB+jH9tjIFuiIJyh4J4joFui4NtkoFtkoNskoR1joV4i4eDiYmHkoh4l4d1kIl2mIdzlYh0mIh4lol0kop5mIpxmoptkIuHm4t0kI+LmJCMoZB3oZF9opJ6opN3pJN1mJWJopV7qZR6m5aSoJd6pph5p5h6oJqRqJuAqZuDpp2Eop6RnZ+frJ6Erp6Drp+BtJ+As6CBsqCHsKGDp6KWtKCHr6KGs6GJtaKDtqKBsaOGtqGMtqKEtaOHtaSEtKSHraaMtKSMs6WGuaOLraaatKaIuaWGuKeGuKeJuaeKuaeNu6eLrqyiwKuHsa6kv6ySva2aubCOwa2WtrKpv7OUxLGev7KpxLyvycGxxMK/z8/S2dDC4NfH3tfQ39vW4tvO49/S4d/c4eDY4+DW4+DZ5uLb5uTf6Obm6ujj6ejm6ujn7Orq6+vp8O7n8O7t8O/t8vLv8/Pu8vPx9fPw9fP39vTz/Pn3+/r2/Pv4+fz9//zz/fz5/Pz9/fz8/fz9+v3++/38/P36+/3+/P39/f38/f39/v37/f3+/v3+/v3///3+//3//v79///x/v7+/v7///79//7//v/+///9///+////q9zVfwAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfbCAIIEg/IDPn8AAABG0lEQVQY0wEQAe/+ANna0tLZ0NfPydDVrLzc09sA0eDg3eDg4ODg4G5YNODS1wC4f56t4KRkPElrGHFRxtTaAK6jqo8TKUaCgIiWYRK+3MsAsKKmGjhokoOHe45eXxXgzADAYhk9aXp0c3x+RN7g4EvWALMlPjpZp8WrfWbYFwYUDL8AmSM5SsFWBxFFm1onDghX4AClveB3AwoPEIEiAUwFFuDQAMchBAACCQ0LU00tGyyfTsgArzdDQkFAPzM7MVSGk5wksgCXLmBsZ2OFkHCNiZVbNkioAHJclISRRyAeJhyLeB2NbaEAqTKMaoqanaBdH3mYUjBPuQDO33ZVKi81KCt1b1BlseDEAMrN3sK6t7S0tba7y+Dew8+WuHySTaTv0gAAAABJRU5ErkJggg==' },
getUrlWithQuery: (engine, query) => engine.url && ((engine.url.indexOf('$$') >= 0) ? engine.url.replace('$$', encodeURIComponent(query)) : engine.url + encodeURIComponent(query)),
// getUrlWithQuery: (engine, query) => engine.url && query && (query = query.replace(/[:]+/g, '')) && ((engine.url.indexOf('$$') >= 0) ? engine.url.replace('$$', encodeURIComponent(query)) : engine.url + encodeURIComponent(query)),
});
const createSearchButton = (engine, query, { label, marginRight = 2, marginLeft = 0 } = {}) => {
const searchLink = document.createElement('A');
if (query instanceof Function) {
searchLink.onclick = () => {
const queryResult = query();
if (queryResult) {
searchLink.href = searchEngine.getUrlWithQuery(engine, queryResult);
return true;
}
else {
return false;
}
};
} else {
searchLink.href = searchEngine.getUrlWithQuery(engine, query);
}
searchLink.target = '_blank';
searchLink.classList.add('subNavMenu-btn', `space--mr-${marginRight}`, `space--ml-${marginLeft}`);
const wrapper = document.createElement('DIV');
wrapper.classList.add('subNavMenu', 'subNavMenu--menu', 'tGrid-cell', 'vAlign--all-m', 'subNav-item');
let nodeToAppend;
if (isString(label) && (label = label.trim()).length > 0) {
nodeToAppend = document.createTextNode(label);
} else if (engine.icon) {
nodeToAppend = document.createElement('IMG');
nodeToAppend.src = engine.icon;
nodeToAppend.alt = engine.name;
// nodeToAppend.style.height = '24px';
// wrapper.style.height = '42px';
// searchLink.style.padding = '5px';
nodeToAppend.style.height = '22px';
wrapper.style.height = '40px';
searchLink.style.height = '34px';
searchLink.style.padding = '5px';
searchLink.style.borderRadius = '5px';
searchLink.title = engine.name;
} else {
nodeToAppend = document.createTextNode(engine.name);
}
searchLink.appendChild(nodeToAppend);
wrapper.appendChild(searchLink);
return wrapper;
};
/*** END: Search Engines ***/
/*** Search Page ***/
if (pepperTweakerConfig.improvements.addSearchInterface && (location.pathname.indexOf('/search') >= 0) && (location.search.indexOf('q=') >= 0)) {
const searchSubheadline = document.querySelector('h1.cept-nav-subheadline');
if (searchSubheadline) {
const searchQuery = `site:${location.host.replace('www.', '')} ${searchSubheadline.textContent.replace(/Szukaj |"/gi, '')}`;
const searchButton = createSearchButton(searchEngine.google, searchQuery, { label: 'Szukaj przez Google' });
searchButton.querySelector('a')?.classList.add('button--type-secondary');
searchButton.style.cssFloat = 'right';
searchButton.classList.remove(...searchButton.classList); // remove all classes from wrapper, because they messing up the alignment
searchSubheadline.parentNode.insertBefore(searchButton, searchSubheadline);
}
}
/*** END: Search Page ***/
const DEFAULT_NOTIFICATION_SOUND = new Audio('data:audio/mp3;base64,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bIckFua2x/PXG9Wzjds03FjQZJc4zjOM4///x///q1bSyQoMkskskOAJTEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7ksTsA5lODPADGTICysFTCDM+uVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=');
class BlinkingPageTitle {
// #running = false; // not implemented in FF yet (only experimental, set to false as default :/)
constructor({ playSound = false, stopOnFocus = true, delay = 1100, soundSource = DEFAULT_NOTIFICATION_SOUND } = {}) {
if (BlinkingPageTitle._instance) {
throw new Error(`${this.constructor.name}: Only one instance of the class is allowed`);
}
BlinkingPageTitle._instance = this;
this._running = false;
this._interval = null;
this._isOriginalTitle = true;
this.stop = this.stop.bind(this); // bind 'this' to stop() function
this.originalTitle = document.title;
this.playSound = playSound;
this.stopOnFocus = stopOnFocus;
this.delay = delay;
this._soundSource = (soundSource instanceof HTMLAudioElement) ? soundSource : DEFAULT_NOTIFICATION_SOUND;
}
get soundSource() {
return this._soundSource;
}
set soundSource(newSource) {
if (newSource instanceof HTMLAudioElement) {
this._soundSource = newSource;
}
}
run(message, callback) {
if (this._running === true) {
// console.warn(`${this.constructor.name}: run() was called but running already`);
return false;
}
this._running = true;
this._callback = callback;
this._changeTitle(message);
if (this.stopOnFocus === true) {
if (document.hidden || !document.hasFocus()) {
document.addEventListener('visibilitychange', this.stop);
window.addEventListener('focus', this.stop); // must be window not document!
this._interval = setInterval(() => this._changeTitle(message), this.delay);
} else {
setTimeout(this.stop, this.delay);
}
} else {
this._interval = setInterval(() => this._changeTitle(message), this.delay);
if (this._callback instanceof Function) {
this._callback(this);
}
}
return true;
}
stop() {
if (!this._running) {
console.warn(`${this.constructor.name}: stop() was called but not running`);
return false;
}
if (this._interval) {
clearInterval(this._interval);
this._interval = null;
}
if (this.stopOnFocus === true) {
document.removeEventListener('visibilitychange', this.stop);
window.removeEventListener('focus', this.stop); // must be window not document!
if (this._callback instanceof Function) {
this._callback(this);
}
}
document.title = this.originalTitle;
this._running = false;
return true;
}
_changeTitle(message) {
if (this._isOriginalTitle) {
document.title = message;
if (this.playSound === true) {
this._soundSource.play();
}
} else {
document.title = this.originalTitle;
}
this._isOriginalTitle = !this._isOriginalTitle;
}
}
const arrayFilterIndexes = (array, callback) => {
if (!array) { return null; }
const arrayLength = array.length;
const result = new Array();
for (let i = 0; i < arrayLength; i++) {
if (callback(array[i], i)) {
result.push(i);
}
}
return result;
};
const removeAttributeRecursively = (node, attribute) => {
node.removeAttribute(attribute);
for (let i = 0, childrenLength = node.children.length; i < childrenLength; i++) {
removeAttributeRecursively(node.children[i], attribute);
}
return node;
};
const removeDataAttributesRecursively = node => {
for (const dataKey of Object.keys(node.dataset)) {
delete node.dataset[dataKey];
}
for (let i = 0, childrenLength = node.children.length; i < childrenLength; i++) {
removeDataAttributesRecursively(node.children[i]);
}
return node;
};
const nodeListDifference = (list1, list2, { ignoreInlineStyle = false, ignoreClassList = false, ignoreDataAttributes = false, deepCompare = false } = {}) => {
if (!(list1 instanceof NodeList) || !(list2 instanceof NodeList)) { return null; }
let array1, array2;
if (deepCompare === true) { // will check entire nodes
array1 = Array.from(list1).map(node => node.cloneNode(true));
array2 = Array.from(list2).map(node => node.cloneNode(true));
} else { // will check outer nodes only (without children)
array1 = Array.from(list1).map(node => node.cloneNode(false));
array2 = Array.from(list2).map(node => node.cloneNode(false));
}
let reducersToApply = [];
if (ignoreInlineStyle === true) {
reducersToApply.push(node => removeAttributeRecursively(node, 'style'));
}
if (ignoreClassList === true) {
reducersToApply.push(node => removeAttributeRecursively(node, 'class')); // node.classList.remove(...node.classList)
}
if (ignoreDataAttributes === true) {
reducersToApply.push(node => removeDataAttributesRecursively(node));
}
if (reducersToApply.length > 0) {
array1 = array1.map(node => reducersToApply.reduce((result, reducer) => reducer(result), node));
array2 = array2.map(node => reducersToApply.reduce((result, reducer) => reducer(result), node));
// array1 = array1.map(node => {
// reducersToApply.forEach(reducer => reducer(node));
// return node;
// });
// array2 = array2.map(node => {
// reducersToApply.forEach(reducer => reducer(node));
// return node;
// });
}
return arrayFilterIndexes(array1, node1 => !array2.some(node2 => node2.isEqualNode(node1))).map(index => list1[index]);
}
class RemoteChildrenUpdateObserver {
constructor({ containerSelector, childrenSelector, remoteUrl, updateCallback, tickCallback = undefined, errorCallback = undefined, ignoreInlineStyle = true, ignoreClassList = true, ignoreDataAttributes = true, deepCompare = false }) {
if (!(updateCallback instanceof Function) || (tickCallback && !(updateCallback instanceof Function))) {
throw new TypeError(`${this.constructor.name}: updateCallback parameter must be a function (value: ${updateCallback})`);
}
Object.assign(this, { containerSelector, childrenSelector, remoteUrl, updateCallback, tickCallback, errorCallback, ignoreInlineStyle, ignoreClassList, ignoreDataAttributes, deepCompare });
this._interval = null;
this._running = false;
}
observe() {
if (this._running) { return false; }
this._interval = setInterval(() => {
fetch(this.remoteUrl, { cache: 'no-store' })
.then(response => {
if (response.ok) {
return response.text();
}
throw new Error(`fetch() resulted with status ${response.status} for url: ${this.remoteUrl}`);
})
.then(text => {
const htmlDoc = (new DOMParser()).parseFromString(text, 'text/html');
const cloudflareAlert = htmlDoc.documentElement.querySelector('#cf_alert_div');
if (cloudflareAlert) {
console.warn(`${this.constructor.name}: fetch() got the Cloudflare response (alert div with id: ${cloudflareAlert.id}) => this response will not be processed`);
return false;
}
this.container = document.querySelector(this.containerSelector); // container can change, so we need to search it everytime
if (!this.container) {
console.warn(`${this.constructor.name}: this.container not found (value: ${this.container})`);
return false;
}
this.children = this.container.querySelectorAll(this.childrenSelector);
this.remoteContainer = htmlDoc.documentElement.querySelector(this.containerSelector);
if (!this.remoteContainer) {
console.warn(`${this.constructor.name}: this.remoteContainer not found (value: ${this.remoteContainer})`);
return false;
}
this.remoteChildren = this.remoteContainer.querySelectorAll(this.childrenSelector);
this.newChildren = nodeListDifference(this.remoteChildren, this.children, { ignoreInlineStyle: this.ignoreInlineStyle, ignoreClassList: this.ignoreClassList, ignoreDataAttributes: this.ignoreDataAttributes, deepCompare: this.deepCompare });
if (this.newChildren.length > 0) {
this.updateCallback(this);
}
if (this.tickCallback) {
this.tickCallback(this);
}
// console.log('Observer check done at: ' + (new Date()).toISOString());
})
.catch(error => {
console.error(`${this.constructor.name}: ${error}`);
if (this.errorCallback instanceof Function) {
this.errorCallback(this, error);
}
});
}, 10 * 1000);
this._running = true;
return true;
}
disconnect() {
if (!this._running) { return false; }
if (this._interval) {
clearInterval(this._interval);
this._interval = null;
}
this._running = false;
// console.log('Observer disconnect() at: ' + (new Date()).toISOString());
return true;
}
}
const blinkingTitle = new BlinkingPageTitle({
stopOnFocus: !pepperTweakerConfig.autoUpdate.askBeforeLoad,
playSound: pepperTweakerConfig.autoUpdate.soundEnabled,
});
const repairSvgWithUseChildren = element => {
const svgChildren = element.querySelectorAll('svg');
for (const svgChild of svgChildren) {
const svgReplacement = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
for (const svgChildAttribute of svgChild.attributes) {
svgReplacement.setAttribute(svgChildAttribute.name, svgChildAttribute.value);
}
const useChild = svgChild.querySelector('use');
const useReplacement = document.createElementNS('http://www.w3.org/2000/svg', 'use');
useReplacement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', useChild.href.baseVal);
svgReplacement.appendChild(useReplacement);
svgChild.parentNode.insertBefore(svgReplacement, svgChild);
svgChild.remove();
}
return element;
};
const openConfirmDialog = (title, message, confirmCallback, cancelCallback) => {
const modalSection = document.createElement('SECTION');
modalSection.classList.add('js-layer', 'popover', 'popover--modal', 'popover--fade', 'popover--layout-modal', 'popover--visible');
const popoverContent = document.createElement('DIV');
popoverContent.classList.add('popover-content', 'popover-content--expand');
popoverContent.classList.add('space--h-3', 'space--v-3');
const titleBox = document.createElement('H1');
titleBox.classList.add('formList-label', 'size--all-xl', 'space--v-1');
titleBox.style.textAlign = 'center';
titleBox.appendChild(document.createTextNode(title));
const messageBox = document.createElement('DIV');
messageBox.classList.add('space--v-2', 'space--h-2');
messageBox.style.textAlign = 'center';
messageBox.style.lineHeight = '1.5';
for (const messageLine of message.split('\n')) {
const newLine = document.createElement('P');
newLine.appendChild(document.createTextNode(messageLine));
messageBox.appendChild(newLine);
}
const confirmButton = createLabeledButton({
label: 'Potwierdź', className: 'success', callback: () => {
if (confirmCallback instanceof Function) {
confirmCallback();
}
modalSection.remove();
}
});
confirmButton.classList.add('space--h-2');
const cancelButton = createLabeledButton({
label: 'Anuluj', className: 'error', callback: () => {
if (cancelCallback instanceof Function) {
cancelCallback();
}
modalSection.remove();
}
});
cancelButton.classList.add('space--h-2');
const buttonsBox = document.createElement('DIV');
buttonsBox.classList.add('space--v-1');
buttonsBox.style.display = 'flex';
buttonsBox.style.justifyContent = 'center';
buttonsBox.style.alignItems = 'center';
buttonsBox.append(confirmButton, cancelButton);
popoverContent.append(titleBox, messageBox, buttonsBox);
modalSection.style.position = 'fixed';
modalSection.style.top = '50%';
modalSection.style.left = '50%';
modalSection.style.zIndex = 2002;
modalSection.role = 'dialog';
popoverContent.style.transform = 'translate(-50%, -50%)'; // cannot do translate with modalSection (overlay disappears)
const popoverCover = document.createElement('DIV');
popoverCover.classList.add('popover-cover');
modalSection.append(popoverContent, popoverCover);
document.body.appendChild(modalSection);
}
/* Prevent Cropping Image Height in Lightbox */
const lightboxPopoverObserver = new MutationObserver((allMutations, observer) => {
allMutations.every((mutation) => {
for (const addedNode of mutation.addedNodes) {
if (addedNode.classList && addedNode.classList.contains('popover--lightbox')) {
const heightPopoverObserver = new MutationObserver((allMutations, observer) => {
allMutations.every((mutation) => {
const imgHeight = mutation.target.querySelector('img').height;
mutation.target.style.height = `${imgHeight}px`;
});
});
heightPopoverObserver.observe(addedNode, { attributes: true });
return false; // break every()
}
}
});
});
lightboxPopoverObserver.observe(document.body, { childList: true });
/*** Profile Page ***/
if (pepperTweakerConfig.improvements.addCommentPreviewOnProfilePage
&& pepperTweakerConfig.pluginEnabled && location.pathname.match(/\/profile\//)) {
/* Remove 'Escape' Key Binding at Message Page */
if (location.pathname.match(/\/messages\//)) {
document.addEventListener('keyup', (event) => {
if (event.key.match(/Esc|Escape/i)) { // IE/Edge use 'Esc'
event.stopPropagation();
}
}, true);
}
/* Add Comment Preview on Profile Page */
const commentPermalinks = document.querySelectorAll('a[href*="/comments/permalink/"]');
for (const commentPermalink of commentPermalinks) {
fetch(commentPermalink.href)
.then(response => {
if (response.ok) {
return response.text();
}
throw new Error(`fetch() resulted with status ${response.status} for url: ${commentPermalink.href}`);
})
.then(text => {
const splitedPermalink = commentPermalink.href.split('/');
const commentID = splitedPermalink[splitedPermalink.length - 1];
let htmlDoc = (new DOMParser()).parseFromString(text, 'text/html');
const remoteCommentBody = htmlDoc.documentElement.querySelector(`article[id="comment-${commentID}"] .comment-body`);
if (remoteCommentBody) {
const newCommentBody = document.createElement('DIV');
newCommentBody.classList.add('width--all-12');
newCommentBody.style.padding = '15px 5px 0 5px';
moveAllChildren(remoteCommentBody, newCommentBody);
commentPermalink.parentNode.appendChild(newCommentBody);
}
})
.catch(error => console.error(error));
}
}
/*** Deal Details Page ***/
if (pepperTweakerConfig.pluginEnabled && location.pathname.match(/promocje|kupony|dyskusji|feedback/) && location.pathname.match(/-\d+\/?$/)) { // ends with ID
/* Comment Filtering */
const hideCommentMessage = 'Ten komentarz został ukryty (kliknij, aby go pokazać)';
const showCommentMessage = 'Kliknij ponownie, aby ukryć poniższy komentarz';
const animationDuration = 150;
const animationEasing = 'linear';
const showCommentOnClick = event => {
event.stopPropagation();
const commentRoot = event.target.parentNode;
const commentContent = commentRoot.getElementsByClassName('comments-item-inner')[0];
jQuery(commentContent).show(animationDuration, animationEasing);
event.target.style.borderBottomWidth = '0';
event.target.textContent = showCommentMessage;
event.target.onclick = hideCommentOnClick;
};
const hideCommentOnClick = event => {
event.stopPropagation();
const commentRoot = event.target.parentNode;
const commentContent = commentRoot.getElementsByClassName('comments-item-inner')[0];
jQuery(commentContent).hide(animationDuration, animationEasing);
setTimeout(function () { event.target.style.borderBottomWidth = '1px'; }, animationDuration);
event.target.textContent = hideCommentMessage;
event.target.onclick = showCommentOnClick;
};
const createHiddenCommentBar = (textContent, callback) => {
const hiddenCommentBar = document.createElement('DIV');
hiddenCommentBar.textContent = textContent;
hiddenCommentBar.style.textAlign = 'center';
hiddenCommentBar.style.cursor = 'pointer';
hiddenCommentBar.style.filter = 'opacity(50%)'; // change text color a little to differentiate from comments
hiddenCommentBar.style.padding = '3px';
hiddenCommentBar.style.height = '21px';
hiddenCommentBar.onclick = callback;
return hiddenCommentBar;
};
const filterComments = (node) => {
const comments = node.querySelectorAll('.commentList-comment');
for (const comment of comments) {
for (const filter of pepperTweakerConfig.commentsFilters) {
//if (Object.keys(filter).length === 0) continue; // if the filter is empty => continue (otherwise empty filter will remove all elements!)
if ((filter.active === false) || !filter.keyword && !filter.user) {
continue;
}
let commentAuthor = comment.querySelector('.comment-header .user');
commentAuthor = commentAuthor && commentAuthor.textContent?.trim();
if ((!filter.user || commentAuthor && commentAuthor.match(newRegExp(filter.user, 'i')))
&& (!filter.keyword || comment.innerHTML.match(newRegExp(filter.keyword, 'i')))) { // innerHTML here for emoticon match too (e.g. <i class="emoji emoji--type-poo" title="(poo)"></i>)
if (filter.style.display === 'none') {
comment.insertBefore(createHiddenCommentBar(hideCommentMessage, showCommentOnClick), comment.firstChild);
}
Object.assign(comment.style, filter.style);
break; // comment style has been applied => stop checking next filters
}
}
}
}
/* Add Profile Info */
const toggleUnderline = event => event.target.style.textDecoration = (event.target.style.textDecoration !== 'underline') ? 'underline' : 'none';
const addProfileInfo = element => { // this function is used in comments addition too
// const profileLinks = element.querySelectorAll('.cept-thread-main a[href*="/profile/"], .comment-header a[href*="/profile/"]');
const profileLinks = element.querySelectorAll('.cept-thread-main a[href*="/profile/"], .comment-header a.user');
for (const profileLink of profileLinks) {
const profileLinkHref = profileLink.href || `${location.protocol}//${location.hostname}/profile/${profileLink.textContent}`;
if (profileLinkHref) {
fetch(profileLinkHref)
.then(response => response.text())
.then(text => {
let htmlDoc = (new DOMParser()).parseFromString(text, 'text/html');
const profileSubHeaders = htmlDoc.documentElement.querySelectorAll('.profileHeader-bodyMaxWidth span.profileHeader-text');
const profileLinkParent = profileLink.parentNode;
const wrapper = document.createElement('DIV');
for (const subHeader of profileSubHeaders) {
const clonedNode = subHeader.cloneNode(true);
clonedNode.classList.add('space--mr-3');
wrapper.appendChild(clonedNode);
}
wrapper.classList.add('space--ml-3', 'text--color-greyShade');
profileLink.classList.remove('space--mr-1');
const spaceBox = profileLinkParent.querySelector('.lbox.space--mr-2');
if (spaceBox) {
spaceBox.remove();
}
profileLinkParent.appendChild(wrapper);
/* Add Permalink to Comment Date */
const commentDateParent = profileLinkParent.nextSibling;
if (!commentDateParent) return;
const commentDateElement = commentDateParent.querySelector('time');
const articleElement = profileLinkParent.closest('article[id^="comment-"]');
if (articleElement && articleElement.id) {
const commentID = articleElement.id.split('-')[1];
const commentDateLink = document.createElement('A');
const permalinkAddress = `https://www.pepper.pl/comments/permalink/${commentID}`;
commentDateLink.href = permalinkAddress;
commentDateLink.target = '_blank';
commentDateLink.addEventListener('mouseenter', toggleUnderline);
commentDateLink.addEventListener('mouseleave', toggleUnderline);
commentDateLink.appendChild(commentDateElement);
commentDateParent.insertBefore(commentDateLink, commentDateParent.firstChild);
/* Change Premalink Button to an Anchor */
const permalinkButton = articleElement.querySelector('button[data-popover*="permalink"]');
if (permalinkButton) {
const permalinkAnchor = document.createElement('A');
moveAllChildren(permalinkButton, permalinkAnchor);
cloneAttributes(permalinkButton, permalinkAnchor);
permalinkAnchor.removeAttribute('data-handler');
permalinkAnchor.href = permalinkAddress;
permalinkAnchor.target = '_blank';
permalinkButton.parentNode.replaceChild(permalinkAnchor, permalinkButton);
}
}
})
.catch(error => console.error(error));
}
}
};
addProfileInfo(document);
/* Disabled, because there is no more exact start & end date info => it has to be extracted from human friednly strings... :/ */
/* Add calendar option */
// if (location.pathname.match(/(promocje|kupony)\//)) {
// const dateToGoogleCalendarFormat = date => date.toISOString().replace(/-|:|\.\d\d\d/g, "");
// const extractDealDateFromString = (str, time) => {
// if (!str) {
// return new Date();
// }
// let dateResult;
// const dateString = str.match(/\d+\/\d+\/\d+/); // date in the format: 15/12/2019
// if (dateString) {
// const parts = dateString[0].split('/');
// dateResult = new Date(parts[2], parts[1] - 1, parts[0]);
// } else if (str.match(/jutro/i)) {
// dateResult = new Date();
// dateResult.setDate(dateResult.getDate() + 1);
// // } else if (str.match(/dzisiaj/i)) {
// } else {
// dateResult = new Date();
// }
// if (time) {
// time = time.split(':');
// dateResult.setHours(time[0], time[1], 0);
// }
// return dateResult;
// };
// const extractDealDates = () => {
// // const dateSpans = document.querySelectorAll('.cept-thread-content .border--color-borderGrey.bRad--a span');
// let start = document.querySelector('.cept-thread-content .border--color-borderGrey .icon--clock.text--color-green');
// start = extractDealDateFromString(start && start.parentNode.parentNode.textContent, '00:01');
// let end = document.querySelector('.cept-thread-content .border--color-borderGrey .icon--hourglass');
// end = extractDealDateFromString(end && end.parentNode.parentNode.textContent, '23:59');
// if (start >= end) {
// end.setTime(start.getTime());
// end.setDate(start.getDate() + 1);
// }
// return { start, end };
// };
// let dealTitle = document.querySelector('.thread-title--item');
// dealTitle = dealTitle && encodeURIComponent(dealTitle.textContent.trim());
// let dealDescription = document.querySelector('.cept-description-container');
// dealDescription = dealDescription && encodeURIComponent(`${location.href}<br><br>${dealDescription.innerHTML.trim()}`);
// let dealMerchant = document.querySelector('.cept-merchant-name');
// dealMerchant = dealMerchant && encodeURIComponent(dealMerchant.textContent.trim());
// const dealDates = extractDealDates();
// const timeFrameBox = document.querySelector('.cept-thread-content button');
// const calendarOptionLink = document.createElement('A');
// // calendarOptionLink.classList.add('btn', 'space--h-3', 'btn--mode-secondary');
// calendarOptionLink.classList.add('thread-userOptionLink');
// calendarOptionLink.style.cssFloat = 'right';
// calendarOptionLink.style.fontWeight = '900';
// calendarOptionLink.style.setProperty('margin-right', '7px', 'important');
// calendarOptionLink.target = '_blank';
// calendarOptionLink.href = `https://www.google.com/calendar/render?action=TEMPLATE&text=${dealTitle}&details=${dealDescription}&location=${dealMerchant}&dates=${dateToGoogleCalendarFormat(dealDates.start)}%2F${dateToGoogleCalendarFormat(dealDates.end)}`;
// const calendarOptionImg = document.createElement('IMG');
// calendarOptionImg.style.width = '18px';
// calendarOptionImg.style.height = '20px';
// calendarOptionImg.style.filter = `invert(${pepperTweakerConfig.darkThemeEnabled ? 77 : 28}%)`;
// calendarOptionImg.style.verticalAlign = 'middle';
// calendarOptionImg.classList.add('icon', 'space--mr-2');
// calendarOptionImg.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABmJLR0QA/wD/AP+gvaeTAAABAklEQVRIid2WPQ6CMBSAPwx6CokH8Aj+DCYeQTdu4ClcrBdxdtLFGI16FPECJi4mOFDJi4FSlDL4koYC3+vXEtI+yI8LcDK8/5VPI9atEr4BtIAlEBnguKDl8VdAaQcqJzGrbxKZeOUDYcaM2sBZQ0HWpyjJh3mz3ejkANharKiQ98RynUajDkmtIl/0PUeOGP7x09mKTL/2o0qRKe42kF+MADD9uB8CM91f2c6o7C4NyXHwzuvajl9WNBY5ewv+a9FR5ExciUaCvwFNV6KD4OeWOaVFPcE+gY4r0U6wa0tJOr48j5xvqpF+0HcgGehrBNnFSdVtAUkppEhKo6oFabn1Ajsht5QbUQgDAAAAAElFTkSuQmCC';
// calendarOptionLink.appendChild(calendarOptionImg);
// const calendarOptionSpan = document.createElement('SPAN');
// calendarOptionSpan.classList.add('space--t-1');
// calendarOptionSpan.appendChild(document.createTextNode('Kalendarz'))
// calendarOptionLink.appendChild(calendarOptionSpan);
// timeFrameBox.parentNode.appendChild(calendarOptionLink);
// }
/* Repair Deal Details Links */ // and comment links
const repairDealDetailsLinks = (node) => {
if (pepperTweakerConfig.improvements.repairDealDetailsLinks) {
const links = node.querySelectorAll('a[title^="http"]');
const mobileLinkRegExp = /:\/\/(www\.)?m\./i;
for (const link of links) {
link.href = link.title.replace(mobileLinkRegExp, '://'); // remove also the part of a mobile link e.g.: m.
}
}
}
/* Repair Thread Image Link */ // -> to open an image in the box, not a deal in new tab
if (pepperTweakerConfig.improvements.repairDealImageLink) {
const replaceClickoutLinkWithPopupImage = clickoutLink => {
if (!clickoutLink) return null;
const img = clickoutLink.querySelector('img.thread-image').cloneNode(true);
const srcFullScreen = img.src.replace('/thread_large/', '/thread_full_screen/');
img.setAttribute('data-handler', 'track lightbox');
img.setAttribute('data-track', '{"action":"show_full_image","label":"engagement"}');
img.setAttribute('data-lightbox', `{"images":[{"width":640,"height":474,"unattached":"","uid":"","url":"${srcFullScreen}"}]}`);
const popupDiv = clickoutLink.querySelector('div.threadItem-imgCell--wide').cloneNode(true);
popupDiv.setAttribute('data-handler', 'track lightbox');
popupDiv.setAttribute('data-track', '{"action":"show_full_image","label":"engagement"}');
popupDiv.setAttribute('data-lightbox', `{"images":[{"width":640,"height":474,"unattached":"","uid":"","url":"${srcFullScreen}"}]}`);
const imgFrameDiv = document.createElement('DIV');
imgFrameDiv.classList.add('imgFrame', 'imgFrame--noBorder', 'threadItem-imgFrame', 'box--all-b', 'clickable', 'cept-thread-img');
imgFrameDiv.append(img, popupDiv);
clickoutLink.replaceWith(imgFrameDiv);
return imgFrameDiv;
};
const dealImageLink = document.querySelector('*[id^="thread"] .cept-thread-image-clickout');
replaceClickoutLinkWithPopupImage(dealImageLink);
}
/* Add Like Buttons to Best Comments */
const addLikeButtonsToBestComments = () => {
return;
if (pepperTweakerConfig.improvements.addLikeButtonsToBestComments) {
let firstLikeButtonNotBlue = document.querySelector('.comment-footer .icon--thumb-up');
firstLikeButtonNotBlue = firstLikeButtonNotBlue && firstLikeButtonNotBlue.closest('button');
if (firstLikeButtonNotBlue) { // only if any like button exists
const bestComments = document.querySelectorAll('#comments .commentList:not(.commentList--anchored) .commentList-item article.comment');
for (const bestComment of bestComments) {
const newLikeButton = repairSvgWithUseChildren(firstLikeButtonNotBlue.cloneNode(true));
const bestCommentId = bestComment.id.replace('comment-', '');
const likeCountButton = bestComment.querySelector('.cept-like-comment-count');
let buttonAction, buttonLabel;
if (likeCountButton.classList.contains('text--color-blue')) {
newLikeButton.classList.add('linkBlue');
newLikeButton.classList.remove('linkMute');
buttonAction = 'unlike';
buttonLabel = 'Nie lubię';
} else {
newLikeButton.classList.add('linkMute');
newLikeButton.classList.remove('linkBlue');
buttonAction = 'like';
buttonLabel = 'Lubię to';
}
newLikeButton.querySelector('span span').textContent = buttonLabel;
newLikeButton.setAttribute('data-track', newLikeButton.getAttribute('data-track').replace(/(un)?like/, buttonAction));
//data-replace="{"endpoint":"https://www.pepper.pl/promocje/lenovo-ideapad-s340-15iwl-156-intel-core-i5-8265u-8gb-ram-256gb-dysk-mx250-grafika-win10-194390/comments/2997677/like","replaces":["$self",{"target":"body/.js-like-comment-2997677","key":"option","seal":null}]}"
let dataReplaceAttribute = newLikeButton.getAttribute('data-replace');
dataReplaceAttribute = dataReplaceAttribute.replace(/\/comments\/\d+\/(un)?like/, `/comments/${bestCommentId}/${buttonAction}`).replace(/like-comment-\d+/, `like-comment-${bestCommentId}`);
newLikeButton.setAttribute('data-replace', dataReplaceAttribute);
const permalinkButton = bestComment.querySelector('button[data-popover*="permalink"]');
permalinkButton.parentNode.insertBefore(newLikeButton, permalinkButton);
}
}
}
}
const layoutChangeObserver = new MutationObserver((allMutations, observer) => {
allMutations.every((mutation) => {
for (const addedNode of mutation.addedNodes) {
if (addedNode.id?.match(/comment-\d+/)) {
// if (addedNode.id === 'comments') {
// addLikeButtonsToBestComments();
// }
repairDealDetailsLinks(addedNode);
addProfileInfo(addedNode);
filterComments(addedNode);
}
}
return true;
});
});
layoutChangeObserver.observe(document.querySelector('.listLayout-main'), { childList: true, subtree: true });
/* Add Search Interface */
if (pepperTweakerConfig.improvements.addSearchInterface && location.pathname.match(/promocje|kupony|dyskusji\//)) {
const getSelectionHTML = () => {
let html = '';
if (typeof window.getSelection !== 'undefined') {
const selection = window.getSelection();
if (selection.rangeCount) {
const container = document.createElement('div');
for (let i = 0, selectionRangeCount = selection.rangeCount; i < selectionRangeCount; i++) {
container.appendChild(selection.getRangeAt(i).cloneContents());
}
html = container.innerHTML;
}
} else if (typeof document.selection !== 'undefined') { // only for IE < 9
if (document.selection.type === 'Text') {
html = document.selection.createRange().htmlText;
}
}
return html;
};
const getSelectionText = () => {
let text = '';
if (typeof window.getSelection !== 'undefined') {
const selection = window.getSelection();
if (selection.rangeCount) {
for (let i = 0, selectionRangeCount = selection.rangeCount; i < selectionRangeCount; i++) {
text += selection.getRangeAt(i).toString();
}
}
} else if (typeof document.selection !== 'undefined') { // only for IE < 9
if (document.selection.type === 'Text') {
text = document.selection.createRange().text;
}
}
return text;
};
// const dealTitleSpan = document.querySelector('article .thread-title--item');
// const dealTitleInput = createTextInput({ value: dealTitleSpan.textContent.trim() });
// dealTitleSpan.replaceWith(dealTitleInput);
const getActualSelectionValue = () => {
// return dealTitleInput.querySelector('input').value.trim();
const input = document.activeElement;
let value = getSelectionText().trim() || (input && input.value && input.value.trim());
if (value && value.length > 0) {
return value;
}
alert('Najpierw zaznacz fragment tekstu na stronie do wyszukiwania');
return null;
// return (input.selectionStart < input.selectionEnd) ? value.substring(input.selectionStart, input.selectionEnd) : value;
};
const searchButtonsWrapper = document.createElement('DIV');
searchButtonsWrapper.style.display = 'flex';
searchButtonsWrapper.style.flexDirection = 'column';
searchButtonsWrapper.style.position = 'fixed';
searchButtonsWrapper.style.width = '42px'; // for setSearchInterfacePosition()
searchButtonsWrapper.style.top = '50%';
// searchButtonsWrapper.style.left = `55px`;
searchButtonsWrapper.style.zIndex = 2002;
searchButtonsWrapper.style.transform = 'translate(0, -50%)';
searchButtonsWrapper.append(
createSearchButton(searchEngine.google, getActualSelectionValue),
createSearchButton(searchEngine.ceneo, getActualSelectionValue),
createSearchButton(searchEngine.skapiec, getActualSelectionValue),
createSearchButton(searchEngine.allegro, getActualSelectionValue),
createSearchButton(searchEngine.olx, getActualSelectionValue),
createSearchButton(searchEngine.amazonDe, getActualSelectionValue),
createSearchButton(searchEngine.aliexpress, getActualSelectionValue),
createSearchButton(searchEngine.banggood, getActualSelectionValue),
createSearchButton(searchEngine.joybuy, getActualSelectionValue),
createSearchButton(searchEngine.ebay, getActualSelectionValue),
createSearchButton(searchEngine.ggdeals, getActualSelectionValue),
createSearchButton(searchEngine.iszop, getActualSelectionValue)
// createSearchButton(searchEngine.ggdeals, getActualSelectionValue, { marginRight: 0 })
);
const setSearchInterfacePosition = () => {
// const searchButtonsWrapperWidth = parseInt(window.getComputedStyle(searchButtonsWrapper).width);
const searchButtonsWrapperWidth = parseInt(searchButtonsWrapper.style.width);
const threadArticle = document.querySelector('.thread');
const threadArticleBoundingClientRect = threadArticle.getBoundingClientRect();
if (threadArticleBoundingClientRect.left > searchButtonsWrapperWidth) {
searchButtonsWrapper.style.left = `${threadArticleBoundingClientRect.left - searchButtonsWrapperWidth}px`;
searchButtonsWrapper.style.opacity = '1';
return;
}
if (threadArticleBoundingClientRect.right + searchButtonsWrapperWidth < getWindowSize().width - 5) {
searchButtonsWrapper.style.left = `${threadArticleBoundingClientRect.right + 5}px`;
searchButtonsWrapper.style.opacity = '1';
return;
}
searchButtonsWrapper.style.left = `${threadArticleBoundingClientRect.right - searchButtonsWrapperWidth}px`;
searchButtonsWrapper.style.opacity = '0.5';
};
document.body.appendChild(searchButtonsWrapper); // must add before computing position to get computed width: https://stackoverflow.com/questions/2921428/dom-element-width-before-appended-to-dom
window.addEventListener('load', setSearchInterfacePosition);
window.addEventListener('resize', setSearchInterfacePosition);
// const voteBox = document.querySelector('.cept-vote-box');
// voteBox.parentNode.style.justifyContent = 'space-between';
// voteBox.parentNode.style.width = '100%';
// voteBox.parentNode.appendChild(searchButtonsWrapper);
}
/* Auto Update */
const insertNewCommentsBarBefore = commentNode => {
let newCommentsBar = document.getElementById('comments-new');
if (!newCommentsBar) {
// <div id="comments-new" class="comments-division--landslide"><h2 class="space--v-2 hAlign--all-c aGrid zIndex--above comments-marker-up ">Nowy komentarz</h2></div>
newCommentsBar = document.createElement('DIV');
newCommentsBar.id = 'comments-new';
newCommentsBar.classList.add('comments-division--landslide');
const newCommentsHeader = document.createElement('H2');
newCommentsHeader.classList.add('space--v-2', 'hAlign--all-c', 'aGrid', 'zIndex--above', 'comments-marker-up');
newCommentsHeader.appendChild(document.createTextNode('Nowy komentarz'));
newCommentsBar.appendChild(newCommentsHeader);
}
commentNode.parentNode.insertBefore(newCommentsBar, commentNode);
};
const insertNewComments = observer => {
for (const newComment of observer.newChildren) {
addProfileInfo(newComment);
observer.container.insertBefore(repairSvgWithUseChildren(newComment), observer.children[0]);
}
const firstCurrentComment = observer.newChildren[observer.newChildren.length - 1].nextSibling;
const newCommentsBar = document.getElementById('comments-new');
if (newCommentsBar) {
newCommentsBar.remove();
}
insertNewCommentsBarBefore(firstCurrentComment);
// Update comments list pagination:
const remoteHeaderPaginationNav = observer.remoteContainer.parentNode.querySelector('nav.comments-pagination.comments-pagination--header');
const remoteFooterPaginationNav = observer.remoteContainer.parentNode.querySelector('nav.comments-pagination:not(.comments-pagination--header)');
if (remoteHeaderPaginationNav && remoteFooterPaginationNav) {
const headerPaginationNav = observer.container.parentNode.querySelector('nav.comments-pagination.comments-pagination--header');
const footerPaginationNav = observer.container.parentNode.querySelector('nav.comments-pagination:not(.comments-pagination--header)');
if (headerPaginationNav) {
headerPaginationNav.remove();
}
if (footerPaginationNav) {
footerPaginationNav.remove();
}
observer.container.parentNode.insertBefore(repairSvgWithUseChildren(remoteHeaderPaginationNav), observer.container);
observer.container.parentNode.insertBefore(repairSvgWithUseChildren(remoteFooterPaginationNav), observer.container.nextSibling);
observer.container.classList.add('comments-list--paginated'); // don't need to check if the class exists: "If these classes already exist in the element's class attribute they are ignored."
}
// Update number of comments:
const commentsCountSpan = observer.container.parentNode.querySelector('#thread-comments .icon--comment').nextSibling;
const remoteCommentsCountSpan = observer.remoteContainer.parentNode.querySelector('#thread-comments .icon--comment').nextSibling;
commentsCountSpan.replaceWith(remoteCommentsCountSpan);
};
const commentsObserver = new RemoteChildrenUpdateObserver({
containerSelector: 'section#comments .comments-list:not(.comments-list--top)',
childrenSelector: 'article[id]',
remoteUrl: location.href, // TODO: ?page=2 etc.
tickCallback: observer => {
// Update current comments:
for (const comment of observer.children) {
const matchingRemoteComment = Array.from(observer.remoteChildren).find(remoteComment => remoteComment.id === comment.id);
if (matchingRemoteComment) {
// Update comment time:
const commentTime = comment.querySelector('time');
const remoteCommentTime = matchingRemoteComment.querySelector('time');
if (commentTime && remoteCommentTime) {
commentTime.textContent = remoteCommentTime.textContent;
}
// Update comment likes:
const commentLikes = comment.querySelector('.cept-like-comment-count');
let remoteCommentLikes = matchingRemoteComment.querySelector('.cept-like-comment-count');
if (remoteCommentLikes) {
remoteCommentLikes = repairSvgWithUseChildren(remoteCommentLikes);
if (commentLikes) {
commentLikes.replaceWith(remoteCommentLikes);
} else {
const commentHeader = comment.querySelector('.comment-header');
commentHeader.appendChild(remoteCommentLikes);
}
}
// Update comment body in case of edit:
const commentBody = comment.querySelector('.comment-body');
const remoteCommentBody = matchingRemoteComment.querySelector('.comment-body');
if (commentBody && remoteCommentBody) {
commentBody.replaceWith(remoteCommentBody);
}
// Update comment buttons in case of liked/reported state changed:
const commentFooter = comment.querySelector('.comment-footer');
const remoteCommentFooter = matchingRemoteComment.querySelector('.comment-footer');
if (commentFooter && remoteCommentFooter) {
commentFooter.replaceWith(repairSvgWithUseChildren(remoteCommentFooter));
}
} else { // comment not found in remoteChildren => remove it
comment.remove();
}
}
},
updateCallback: observer => blinkingTitle.run('NOWE komentarze', () => {
if (pepperTweakerConfig.autoUpdate.askBeforeLoad) {
openConfirmDialog(
'Nowe komentarze',
'Czy załadować nowe komentarze?\n(anulowanie przerwie obserwację)',
() => {
blinkingTitle.stop();
insertNewComments(observer);
},
() => {
blinkingTitle.stop();
observer.disconnect();
autoUpdateCheckbox.querySelector('input').checked = false;
}
);
} else {
insertNewComments(observer);
}
}),
// errorCallback: observer => {
// if (confirm(`Wystąpił błąd podczas pobierania strony (status: ${observer.responseStatus}).\nCzy przerwać obserwowanie?`)) {
// observer.disconnect();
// autoUpdateCheckbox.querySelector('input').checked = false;
// }
// },
});
const autoUpdateCheckbox = createLabeledCheckbox({
label: 'Obserwuj', callback: event => {
if (event.target.checked) {
commentsObserver.observe();
} else {
commentsObserver.disconnect();
}
}
});
autoUpdateCheckbox.classList.add('space--ml-3');
autoUpdateCheckbox.title = 'Aktualizuj komentarze';
if (pepperTweakerConfig.autoUpdate.commentsDefaultEnabled) {
autoUpdateCheckbox.querySelector('input').checked = true;
commentsObserver.observe();
}
const threadCommentsIcon = document.querySelector('#thread-comments .icon--comment');
if (threadCommentsIcon) { // TODO: this check should be before the whole auto upgrade start
threadCommentsIcon.parentNode.appendChild(autoUpdateCheckbox);
}
return;
}
/*** END: Deal Details Page ***/
/*** Deals List ***/
if (pepperTweakerConfig.pluginEnabled && ((location.pathname.length < 2) || location.pathname.match(/search|gor%C4%85ce|najgoretsze|dlaciebie|nowe|grupa|om%C3%B3wione|promocje|kupony[^\/]|dyskusji|profile/))) {
/* Deals Filtering */
const checkFilters = (filters, deal) => {
let resultStyle = {};
for (const filter of filters) {
//if (Object.keys(filter).length === 0) { continue; } // if the filter is empty => continue (otherwise empty filter will remove all elements!)
if ((filter.active === false) || !filter.keyword && !filter.merchant && !filter.user && !filter.groups && !(filter.local === true) && !filter.priceBelow && !filter.priceAbove && !filter.discountBelow && !filter.discountAbove) {
continue;
}
if ((!filter.keyword || (deal.title && deal.title.search(newRegExp(filter.keyword, 'i')) >= 0) || (deal.description && deal.description.search(newRegExp(filter.keyword, 'i')) >= 0) || (deal.merchant && deal.merchant.search(newRegExp(filter.keyword, 'i')) >= 0))
&& (!filter.merchant || (deal.merchant && deal.merchant.search(newRegExp(filter.merchant, 'i')) >= 0))
&& (!filter.user || (deal.user && deal.user.search(newRegExp(filter.user, 'i')) >= 0))
&& (!filter.groups || (deal.groups && (deal.groups.length > 0) && deal.groups.findIndex(group => newRegExp(filter.groups, 'i').test(group)) >= 0))
&& (!filter.local || deal.local)
&& (!filter.priceBelow || (deal.price !== null && deal.price < filter.priceBelow))
&& (!filter.priceAbove || (deal.price !== null && deal.price > filter.priceAbove))
&& (!filter.discountBelow || (deal.discount !== null && deal.discount < filter.discountBelow))
&& (!filter.discountAbove || (deal.discount !== null && deal.discount > filter.discountAbove))) {
Object.assign(resultStyle, filter.style);
}
}
return resultStyle;
};
const checkFiltersAndApplyStyle = (element, deal) => {
const styleToApply = checkFilters(pepperTweakerConfig.dealsFilters, deal);
if (Object.keys(styleToApply).length > 0) {
if ((styleToApply.display === 'none') && element.classList.contains('thread--type-card')) {
element.parentNode.style.display = 'none';
} else {
delete Object.assign(styleToApply, { ['outline']: styleToApply['border'] })['border']; // outline instead of border, TODO: it's to heaevy here
Object.assign(element.style, styleToApply);
}
}
};
/* List to grid voucher button update */
const updateGridDeal = (dealNode) => {
// Voucher button update
const buttonToMove = dealNode.querySelector('.threadGrid-body div div.width--fromW2-6:last-child');
const threadGridFooterMeta = dealNode.querySelector('.footerMeta .iGrid-item');
if (buttonToMove && threadGridFooterMeta) {
const viewDealButton = threadGridFooterMeta.querySelector('.iGrid-item .btn');
if (viewDealButton) {
viewDealButton.remove();
}
threadGridFooterMeta.appendChild(buttonToMove);
buttonToMove.style.width = '100%';
buttonToMove.style.paddingRight = '0 !important';
buttonToMove.parentNode.style.display = 'block';
}
// Deal refresh ribbon text
const refreshRibbon = dealNode.querySelector('.cept-meta-ribbon .icon--refresh ~ span.hide--toW3');
if (refreshRibbon) {
refreshRibbon.textContent = refreshRibbon.textContent.replace(/Zaktualizowano|temu/ig, '');
}
// Number of comments in discussion
const headerMetaIconComment = dealNode.querySelector('.threadGrid-headerMeta .icon--comment');
if (headerMetaIconComment) {
headerMetaIconComment.parentNode.lastChild.textContent = headerMetaIconComment.parentNode.lastChild.textContent.replace(/ Komentarz(y|e)?/, '');
}
}
/* END */
let dealCount = 0;
const startPage = Number((new URLSearchParams(location.search)).get('page') || 1);
const getVerticalScrollPercentage = (node) => (node.scrollTop || node.parentNode.scrollTop) / (node.parentNode.scrollHeight - node.parentNode.clientHeight ) * 100;
const rescale = (v, rMin, rMax, tMin, tMax) => ((v - rMin) / (rMax - rMin)) * (tMax - tMin) + tMin;
const updatePagination = () => {
const pageSize = window?.__INITIAL_STATE__?.pagination?.pageSize ?? 30;
if (dealCount % pageSize === 0) {
const position = getVerticalScrollPercentage(document.body);
const currentPage = startPage - 1 + Math.round(rescale((dealCount / pageSize) * (position / 100), 0, 10, 1, 10));
const searchParams = new URLSearchParams(location.search);
if (searchParams.get('page') != currentPage) {
searchParams.set('page', currentPage);
const newRelativePathQuery = window.location.pathname + '?' + searchParams.toString();
history.replaceState(null, '', newRelativePathQuery);
// const pagination = document.getElementById('pagination');
// const paginationPageText = pagination?.querySelector('.pagination-page .hide--toW2');
// if (paginationPageText) {
// paginationPageText.textContent = paginationPageText.textContent.replace(/\d+/, currentPage);
// }
// const nextButton = pagination?.querySelector('.cept-next-page button');
// if (nextButton) {
// nextButton.dataset.pagination = nextButton.dataset.pagination.replace(/\d+/, currentPage + 1);
// }
}
}
};
document.addEventListener('scroll', updatePagination);
const processElement = (element, deepSearch = false, isGridLayout = false) => {
if ((element.nodeName === 'DIV') && element.classList.contains('threadCardLayout--card')) {
element = element.querySelector('article[id^="thread"]');
}
if (element && (element.nodeName === 'ARTICLE') && element.id && (element.id.indexOf('thread') === 0)) {
/* Thread Image to Lightbox */
const threadImage = element.querySelector('.cept-thread-img');
if (threadImage) {
threadImage.dataset.handler = 'lightbox';
// threadImage.dataset.lightbox = `{"images":[{"width":640,"height":474,"unattached":"","uid":"","url":"${threadImage.src.replace('thread_large', 'thread_full_screen')}"}]}`;
// image links have beed changed:
// threadImage.src.replace(/\/re.*/, '.jpg') => original image
// threadImage.src.replace('300x300/qt/60', '768x768/qt/90') => scaled image to 768x768 with 90 quality (original scale: 300x300 / 60)
// there are other sizes too: 1024x1024, 1200x1200 (more?)
threadImage.dataset.lightbox = `{"images":[{"width":640,"height":474,"unattached":"","uid":"","url":"${threadImage.src.replace('300x300/qt/60', '768x768/qt/90')}"}]}`;
// remove go to the thread behavior after clicking
try {
const dataHistory = JSON.parse(element.dataset.history);
dataHistory.delegate = undefined;
dataHistory.endpoint = undefined;
element.dataset.history = JSON.stringify(dataHistory);
} catch { }
}
/* END */
/* List to grid update */
if (pepperTweakerConfig.improvements.listToGrid && !isGridLayout) {
updateGridDeal(element);
}
// Pagination
dealCount++;
/* END */
// No deals filtering at search and profile pages (profile => alerts/saved etc.)
if (location.pathname.match(/search|profile/)) return;
// Apparently some info has been moved/copied to the "ThreadMainListItemNormalizer" Vue object
// Becuase the object has to be parsed to find merchant info, it will be faster to get some other info from this object too instead of parsing DOM (e.g. for deal title)
// Some properties are still missing though (e.g. description, user)
const threadVueString = element?.querySelector('div[data-vue2]')?.dataset?.vue2;
const threadVueObject = threadVueString ? JSON.parse(threadVueString)?.props?.thread : undefined;
const title = threadVueObject?.title ?? element.querySelector('.cept-tt')?.textContent?.trim();;
const description = element.querySelector('.userHtml-content div')?.textContent?.trim();
// no more merchant info in the innerHTML property of the thread element => using Vue object instead
const merchant = threadVueObject?.merchant?.merchantName;
const user = threadVueObject?.user?.username ?? element.querySelector('span.thread-user')?.textContent?.trim();
const price = threadVueObject?.price;
let discount = undefined;
if (price !== null && price > 0) {
const nextBestPrice = threadVueObject?.nextBestPrice;
if (nextBestPrice !== null && nextBestPrice > price) {
discount = (nextBestPrice - price) / nextBestPrice * 100;
}
}
const local = threadVueObject?.isLocal;
/**
* Extracts the groups list from the provided HTML document.
* @param {Document} htmlDoc - The HTML document to extract the groups list from.
* @returns {Array<string>} - The list of group names found in the HTML document.
*/
const getGroupsListFromDocument = (htmlDoc) => {
try {
// Get all script elements in the document
const scriptElements = htmlDoc.getElementsByTagName('script');
// Iterate through the script elements
for (const scriptElement of scriptElements) {
const content = scriptElement.textContent;
// Attempt to match the content against the regex
const match = content.match(/window\.__INITIAL_STATE__\s*=\s*(\{[\s\S]*?\});/);
// If there's no match or the match doesn't contain the JSON object, move to the next script element
if (!match || !match[1]) {
continue;
}
// Parse the JSON object from the matched string
const initialState = JSON.parse(match[1]);
// Extract the groups list from the initialState object and return it
return initialState.threadDetail?.groupsPath?.map(({ threadGroupName }) => threadGroupName) || [];
}
} catch (error) {
// Log an error message if something goes wrong during processing
console.error('An error occurred while processing the page:', error);
return [];
}
// Return an empty array if no matching elements were found
return [];
}
const link = element.querySelector('a.cept-tt');
if (deepSearch && link && link.href && link.href.length > 0) {
fetch(link.href)
.then(response => {
if (response.ok) {
return response.text();
}
throw new Error(`fetch() resulted with status ${response.status} for url: ${link.href}`);
})
.then(text => {
let htmlDoc = (new DOMParser()).parseFromString(text, 'text/html');
const groups = getGroupsListFromDocument(htmlDoc);
// After Pepper developers changes there is no more such info preloaded in HTML
// => window.__INITIAL_STATE__ must be used instead, but isLocol is a property of threadVueObject too
// const merchantIcon = htmlDoc.documentElement.querySelector('*[id^="thread"] .threadItem-content svg.icon--merchant');
// const local = merchantIcon !== null && merchantIcon.parentNode.parentNode.textContent.search(/Ogólnopolska/i) < 0;
htmlDoc = null; // inform GC to clear parsed doc???
checkFiltersAndApplyStyle(element, { title, description, merchant, user, groups, local, price, discount });
})
.catch(error => {
console.error(`processElement: ${error}`);
checkFiltersAndApplyStyle(element, { title, description, merchant, user, price, discount });
});
} else {
checkFiltersAndApplyStyle(element, { title, description, merchant, user, price, discount });
}
}
}
let dealsSectionSelector;
const dealsSection = document.querySelector(dealsSectionSelector = '.js-threadList') || document.querySelector(dealsSectionSelector = '#toc-target-deals .js-threadList') || document.querySelector(dealsSectionSelector = '#toc-target-deals') || document.querySelector(dealsSectionSelector = '.listLayout') || document.querySelector(dealsSectionSelector = '.listLayout-scrollBox');
// cannot combine as one selector => div.gridLayout appears before section.gridLayout on the main page
const isGridLayout = dealsSectionSelector.indexOf('gridLayout') >= 0;
// local is no more needed to be parsed from HTML doc => using Vue object instead
// const deepSearch = pepperTweakerConfig.dealsFilters.findIndex(filter => (filter.active !== false) && (filter.groups || (filter.local === true))) >= 0;
const deepSearch = pepperTweakerConfig.dealsFilters.findIndex(filter => (filter.active !== false) && filter.groups) >= 0;
if (dealsSection) {
if (!location.pathname.includes("dyskusji")) {
/* Process already visible elements */
for (let childNode of dealsSection.childNodes) {
processElement(childNode, deepSearch, isGridLayout);
}
/* Set the observer to process elements on addition */
const dealsSectionObserver = new MutationObserver(function (allMutations, observer) {
allMutations.every(function (mutation) {
for (const addedNode of mutation.addedNodes) {
processElement(addedNode, deepSearch, isGridLayout);
}
return false;
});
});
dealsSectionObserver.observe(dealsSection, { childList: true });
}
/* END: Deals Filtering */
/* List to Grid */
if (pepperTweakerConfig.improvements.listToGrid && !isGridLayout) {
const sideWidgets = document.querySelectorAll('.listLayout-side .listLayout-box');
const sideWidgetsWidth = Array.from(sideWidgets).map((widget) => parseFloat(window.getComputedStyle(widget).width));
let sideContainerWidth;
if (location.pathname.match(/\/search|\/grupa/))
sideContainerWidth = 304;
else
sideContainerWidth = sideWidgetsWidth.reduce((acc, cur) => acc || (isNumeric(cur) && cur > 0), false) ? 234 : 0;
const sideContainerPadding = 8;
const columnWidth = 227;
const gridGapWidth = 10;
const gridPadding = 10;
dealsSection.style.display = 'grid';
dealsSection.style.gridGap = `${gridGapWidth}px`;
dealsSection.style.gridAutoRows = 'min-content';
const updateGridView = () => {
const windowSize = getWindowSize();
const gridMaxWidth = windowSize.width - sideContainerWidth - 2 * sideContainerPadding - 2 * gridPadding;
const gridColumnCount = Math.min(pepperTweakerConfig.improvements.gridColumnCount || Infinity, Math.floor(gridMaxWidth / (columnWidth + gridGapWidth)));
dealsSection.style.gridTemplateColumns = `repeat(${gridColumnCount}, ${columnWidth}px)`;
if (location.pathname.indexOf("/profile") < 0) {
const gridMarginLeft = (document.querySelector('.tabbedInterface') != null) ? 0 : Math.floor((gridMaxWidth - gridColumnCount * (columnWidth + gridGapWidth)) / 2);
dealsSection.style.setProperty('margin-left', `${gridMarginLeft}px`, 'important');
// id="listingOptionsPortal" => the search sort option with the number of deals found
document.getElementById('listingOptionsPortal')?.style.setProperty('margin-left', `${gridMarginLeft}px`, 'important');
}
}
updateGridView();
window.addEventListener('resize', updateGridView);
const styleNode = document.createElement('style');
const styleText = document.createTextNode(`
.listLayout-box.bg--color-brandPrimaryPale {
grid-column: 1 / -1;
}
.threadGrid-headerMeta {
grid-column: 1;
grid-row: 1;
-ms-grid-row-span: 1;
width: 196px !important;
}
.cept-meta-ribbon .icon--clock.text--color-green, .cept-meta-ribbon .icon--clock.text--color-green ~ span[class^="hide--"], /* deal starts */
.cept-meta-ribbon .icon--hourglass, .cept-meta-ribbon .icon--hourglass ~ span[class^="hide--"], /* deal ends */
.cept-meta-ribbon .icon--location, .cept-meta-ribbon .icon--location ~ span[class^="hide--"], /* local deal */
.cept-meta-ribbon .icon--world, .cept-meta-ribbon .icon--world ~ span[class^="hide--"], /* delievery */
.vote-box .cept-show-expired-threads, /* deal ended text */
.vote-box span[class^="hide--"], /* discussion ended text */
.threadGrid-headerMeta > div > div:not(.vote-box) button, /* three dots button, covering deal starting date */
#exploreMoreRelatedWidget, #exploreMoreTopWidgetPortal, /* explore more widget */
#incontentFuseZonePortal, #incontent1FuseZonePortal, #incontent2FuseZonePortal, #incontent3FuseZonePortal, #incontent4FuseZonePortal, /* empty tiles on a search page */
#groupHottestWidgetPortal, /* hottests deals widget on the category subpage */
#rlpBannerPortal, /* link to a voucher subpage on a merchant search page */
.js-threadList > div:not([class]):not([id]) { /* empty tiles on category subpages */
display: none;
}
.cept-meta-ribbon .icon--refresh {
margin-right: .35em !important;
}
.cept-vote-box button[data-track*="vote"] { /* smaller vote box */
padding-left: .28em !important;
padding-right: .28em !important;
}
.threadGrid-image {
grid-row-start: 2;
grid-row-end: 4;
-ms-grid-row-span: 3;
grid-column: 1;
width: 196px !important;
padding: 0.35em 0 0.65em 0 !important;
}
.thread-listImgCell, .thread-listImgCell--medium {
width: 100%;
}
.threadGrid-title {
grid-column: 1;
grid-row-start: 5;
grid-row-end: 6;
width: 196px !important;
}
.threadGrid-title .thread-title {
padding-top: 0.2em;
height: 3.3em;
}
.threadGrid-title .overflow--fade {
height: 1.9em;
}
.threadGrid-body {
grid-column: 1;
-ms-grid-column-span: 1;
grid-row: 7;
padding-top: .28571em !important;
height: 4.1em;
text-overflow: ellipsis;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
}
.threadGrid-title .userHtml-content { /* Discussion description */
height: 6.2em;
margin-bottom: 0.5em;
text-overflow: ellipsis;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 4;
-webkit-box-orient: vertical;
}
.userHtml-content .size--fromW3-m {
line-height: 1.05rem;
--line-height: 1.05rem;
}
.threadGrid-body.threadGrid--row--collapsed {
display: none;
}
.threadGrid-body .flex--dir-row-reverse {
flex-direction: column;
}
.threadGrid-body .space--t-2 {
padding-top: 0 !important;
}
.threadGrid-body .thread-updates-top,
.threadGrid-body .voucher {
display: none;
}
.threadGrid-body .width--fromW2-6 {
width: 100%;
padding: 0 !important;
margin: 5px;
}
.threadGrid-body .cept-threadUpdate,
.threadGrid-body .flex--dir-row-reverse {
display: none;
}
.threadGrid-footerMeta {
grid-column: 1;
-ms-grid-column-span: 1;
grid-row: 8;
width: 196px !important;
padding-top: 0.5em !important;
}
.threadGrid-footerMeta .footerMeta.fGrid {
flex-flow: row wrap;
}
.threadGrid-footerMeta .iGrid-item {
margin: 13px 0;
padding: 0 !important;
width: 100%;
}
.threadGrid-footerMeta .iGrid-item .space--fromW2-r-1 {
padding-right: 0 !important;
}
.threadGrid-footerMeta .cept-flag-mobile-source {
display: none;
}
#toc-target-deals div.thread {
display: none !important;
}
/* .threadGrid-footerMeta .cept-off {
display: none;
} */
#toc-target-deals .listLayout-side {
position: absolute !important;
right: 0;
top: 0;
}
/* max-height trims the height of the widget
#toc-target-deals .listLayout-side > div, .card--type-vertical {
min-height: 500px;
max-height: 500px;
}
*/
/* this hides some "get deal" buttons
.footerMeta .iGrid-item.width--all-12.width--fromW3-auto.space--l-0.space--fromW3-l-2.space--t-2.space--fromW3-t-0.hide--empty {
display: none;
}
*/
.js-pagi-top { /* hiding top pagination */
display: none;
}
.listLayout, .tGrid-row.height--all-full .page-content {
position: static;
max-width: none;
}
.tabbedInterface-tabs.width--max-listLayoutWidth, .cept-hottest-widget-position-top {
width: 85.4em;
margin-left: auto;
margin-right: auto;
}
.listLayout-main {
width: max-content;
}
.listLayout-side {
width: ${sideContainerWidth}px;
padding: 0 ${sideContainerPadding}px;
}
.thread .threadGrid {
padding-bottom: 0; /* removes padding that appears at the bootm of outline from filters */
}
/* Font Size */
.cept-description-container {
font-size: 0.75rem !important;
line-height: 1rem !important;
}
.thread-title--list {
font-size: 0.875rem !important;
line-height: 1.25rem !important;
}
/* END: Font Size */
.thread-title--list::after {
top: 20px;
}
.size--all-l {
font-size: 1rem !important;
line-height: 1.5rem !important;
}
.listLayout-main > div:empty {
display: none;
}
/* Alert page */
.flex--expand-v .page-content.page-center {
max-width: 100%;
}
.tabbedInterface-tabs {
max-width: 60em;
min-width: 20em;
margin-left: auto;
margin-right: auto;
}
#tab-manage {
width: 60em; /* TODO: for some reason alert manage tab doesn't keep width set in the '.tabbedInterface-tabs' class */
}
/* END: Alert page */
/* "Your new tab..." div on "For You" subpage */
/* id="listingOptionsPortal" => the search sort option with the number of deals found */
.listLayout-main > div:not([class]):not([id="listingOptionsPortal"]) {
display: none;
}
/* END */
/* Weird empty space as the first tile on the alert subpage */
#threadMainListPortal {
display: none;
}
/* END */
/* Hidding some promo deals with a different class "threadListCard" */
article.thread:has(> .threadListCard) {
display: none !important;
}
/* END */
/* Hidding some deal meta ribbons */
.threadGrid-headerMeta .metaRibbon:not(:has(svg.icon--clock, svg.icon--refresh, svg.icon--flame)) {
display: none !important;
}
/* END */
/* Hiding dilivery cost with an icon */
.threadGrid-title span.color--text-TranslucentSecondary:has(svg.icon--truck) {
display: none;
}
/* END */
/* Hiding the "ended" text when deal is expired */
.thread--expired span:has(> svg.icon--hourglass) span {
display: none !important;
}
/* END */
`);
styleNode.appendChild(styleText);
document.head.appendChild(styleNode);
}
/* END: List to Grid */
/* Auto Update */
if (location.pathname.indexOf("/search") < 0) {
const updateGridWidgetsPosition = (isGridLayout, container, dealsSelector) => {
if (isGridLayout) {
const allCurrentDeals = container.querySelectorAll(dealsSelector);
if (allCurrentDeals.length < 13) { // only 3 widgets => index: 4 + 2 * 4 => 12 (but starting from 0)
return false;
}
const widgets = container.querySelectorAll('.gridLayout-item.hide--toW4[data-grid-pin="n!"]');
for (let i = 0, widgetsLength = widgets.length; i < widgetsLength; i++) {
container.insertBefore(widgets[i], allCurrentDeals[4 + i * 4].parentNode);
}
return true;
}
};
const insertNewDeals = observer => {
for (let newDeal of observer.newChildren) {
// if deal is already present => remove it
const dealToReplace = Array.from(observer.children).find(child => child.id === newDeal.id);
if (dealToReplace) {
dealToReplace.replaceWith(newDeal);
continue;
}
let firstCurrentDeal = observer.container.querySelector(observer.childrenSelector); // first deal can change in the tickCallback!
if (isGridLayout) {
newDeal = newDeal.parentNode;
if (firstCurrentDeal) {
firstCurrentDeal = firstCurrentDeal.parentNode;
}
}
newDeal = repairSvgWithUseChildren(newDeal);
observer.container.insertBefore(newDeal, firstCurrentDeal);
processElement(newDeal, deepSearch);
}
updateGridWidgetsPosition(isGridLayout, observer.container, observer.childrenSelector);
const refreshBar = document.querySelector('div[class=""][data-handler="vue"]');
removeAllChildren(refreshBar);
// observer.container.replaceWith(repairSvgWithUseChildren(observer.remoteContainer));
};
const replaceElementDatasetWith = (targetDataset, sourceDataset) => {
for (const key of Object.keys(targetDataset)) {
delete targetDataset[key];
}
for (const key of Object.keys(sourceDataset)) {
targetDataset[key] = sourceDataset[key];
}
return targetDataset;
};
const newDealsObserver = new RemoteChildrenUpdateObserver({
containerSelector: dealsSectionSelector,
childrenSelector: 'article[id]',
remoteUrl: location.href, // TODO: ?page=2 etc. //.replace(location.search, '')
tickCallback: observer => {
// if (observer.remoteChildren.length < 20) { // no remote children => there will be no matching deals
// return;
// }
let updateWidgets = false;
// updating deals details:
for (const deal of observer.children) {
const matchingRemoteDeal = Array.from(observer.remoteChildren).find(remoteDeal => remoteDeal.id === deal.id);
if (matchingRemoteDeal) {
deal.classList = matchingRemoteDeal.classList; // update class list
replaceElementDatasetWith(deal.dataset, matchingRemoteDeal.dataset); // update data attributes
removeAllChildren(deal);
Array.from(matchingRemoteDeal.children).forEach(child => deal.appendChild(repairSvgWithUseChildren(child)));
processElement(deal, deepSearch);
} else { // deal not found in remoteChildren => remove it
if (isGridLayout) {
deal.parentNode.remove();
} else {
deal.remove();
}
updateWidgets = true;
}
}
if (updateWidgets) {
updateGridWidgetsPosition(isGridLayout, observer.container, observer.childrenSelector);
}
},
updateCallback: observer => blinkingTitle.run('NOWE oferty', () => {
if (pepperTweakerConfig.autoUpdate.askBeforeLoad) {
openConfirmDialog(
'Nowe oferty',
'Czy załadować nowe oferty?\n(anulowanie przerwie obserwację)',
() => {
blinkingTitle.stop();
insertNewDeals(observer);
},
() => {
blinkingTitle.stop();
observer.disconnect();
autoUpdateCheckbox.querySelector('input').checked = false;
}
);
} else {
insertNewDeals(observer);
}
}),
// errorCallback: (observer, error) => {
// if (observer.responseStatus !== 200) {
// if (confirm(`Wystąpił błąd podczas pobierania strony (status: ${observer.responseStatus}).\nCzy przerwać obserwowanie?`)) {
// observer.disconnect();
// autoUpdateCheckbox.querySelector('input').checked = false;
// }
// }
// },
});
const autoUpdateCheckbox = createLabeledCheckbox({
label: 'Obserwuj', callback: event => {
if (event.target.checked) {
newDealsObserver.observe();
} else {
newDealsObserver.disconnect();
}
}
});
autoUpdateCheckbox.classList.add('space--r-3', 'tGrid-cell', 'vAlign--all-m');
autoUpdateCheckbox.title = 'Aktualizuj stronę z ofertami';
if (pepperTweakerConfig.autoUpdate.dealsDefaultEnabled) {
autoUpdateCheckbox.querySelector('input').checked = true;
newDealsObserver.observe();
}
const subNavMenu = document.querySelector('.subNavMenu--menu');
subNavMenu.parentNode.insertBefore(autoUpdateCheckbox, subNavMenu);
}
}
}
/*** END: Deals List ***/
}
/*** END: startPepperTweaker() ***/
if (document.readyState === 'complete' || document.readyState === 'interactive') {
// call on next available tick
setTimeout(startPepperTweaker, 1);
} else {
if (isOperaBrowser) {
window.addEventListener('load', startPepperTweaker);
} else {
document.addEventListener('DOMContentLoaded', startPepperTweaker);
}
}
/***** END: RUN AFTER DOCUMENT HAS BEEN LOADED *****/
})();