{"version":3,"file":"simple.v129.js","mappings":"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","sources":["webpack://posters/./src/main/webapp/js/menu.js","webpack://posters/./src/main/webapp/js/browser.js","webpack://posters/./src/main/webapp/js/cache.js","webpack://posters/./src/main/webapp/js/log.js","webpack://posters/./src/main/webapp/js/authors.js","webpack://posters/./src/main/webapp/js/maps.js","webpack://posters/./src/main/webapp/js/validate.js","webpack://posters/./src/main/webapp/js/poster.js","webpack://posters/./src/main/webapp/js/posters.js","webpack://posters/./src/main/webapp/js/adsense.js","webpack://posters/./src/main/webapp/js/control.js","webpack://posters/./src/main/webapp/js/analytics.js","webpack://posters/./src/main/webapp/js/page.js","webpack://posters/./src/main/webapp/js/main.js","webpack://posters/./src/main/webapp/js/tags.js","webpack://posters/./src/main/webapp/js/map.js","webpack://posters/./src/main/webapp/js/emp.js","webpack://posters/./src/main/webapp/js/subscription.js","webpack://posters/./src/main/webapp/starts.js","webpack://posters/./src/main/webapp/js/links.js"],"sourcesContent":["const menuContent = `\n
\n Tancar Menu\n
\n\n
\n Les Garrigues\n Borges Blanques\n La Noguera\n Balaguer\n L'Urgell\n Tàrrega\n El Pla d'Urgell\n Mollerussa\n La Segarra\n Cervera\n El Segrià\n Lleida\n L'Alt Urgell\n Cervera\n El Solsonès\n Solsona\n Pallars Jussà\n Tremp\n Pallars Sobirà\n Sort\n Alta Ribagorça\n El Pont de Suert\n Era Val d'Aran\n Vielha\n
\n
\n Com publicar?\n I'm alive!\n Subscriure's\n
\n`;\n\n\n function menuInsert()\n {\n const menuContainer = document.getElementById('mainMenuNav');\n \n if (menuContainer !== null)\n {\n menuContainer.innerHTML = menuContent;\n }\n }\n\n export { menuInsert };\n\n\n","import { menuInsert } from \"./menu.js\";\n\n\nconst BROWSER_SMALL_SCREEN = 480;\nlet _browserIsMobile = \"none\";\n\nfunction browserGetBrowserWidth() {\n return document.body.clientWidth; // window.innerWidth ||\n}\n\nfunction browserGetBrowserHeight() {\n return window.innerHeight || document.body.clientHeight; // ||\n}\n\n// Cookies ---------------------------------------------------------------------\n\nfunction browserSetCookie(cname, cvalue, exdays) {\n const d = new Date();\n d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);\n const expires = \"expires=\" + d.toUTCString();\n document.cookie = cname + \"=\" + cvalue + \";\" + expires + \";path=/\";\n}\n\nfunction browserGetCookie(cname) {\n const name = cname + \"=\";\n const ca = document.cookie.split(\";\");\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === \" \") {\n c = c.substring(1);\n }\n if (c.indexOf(name) === 0) {\n return c.substring(name.length, c.length);\n }\n }\n return \"\";\n}\n\n// rendering\n\nfunction browserAfterRendering(action) {\n requestAnimationFrame(() => {\n setTimeout(() => {\n action();\n });\n });\n}\n\n// images ----------------------------------------------------------------------\n\nfunction browserImageIsReady(image) {\n return new Promise((resolve, reject) => {\n //\n if (image.complete) {\n resolve();\n } else {\n image.addEventListener(\"load\", (e) => {\n resolve();\n });\n image.addEventListener(\"error\", () => {\n reject(new Error(`Failed to load image's URL: ${image}`));\n });\n }\n });\n}\n\n// menu ------------------------------------------------------------------------\n\nfunction browserMenuToggleInit(buttonId, menuId, classToggle, closeMenuId) {\n menuInsert();\n\n const button = document.getElementById(buttonId);\n const close = document.getElementById(closeMenuId);\n const menu = document.getElementById(menuId);\n\n if (button !== null && menu !== null && close !== null) {\n button.addEventListener(\"click\", (event) => {\n event.preventDefault();\n menu.classList.toggle(classToggle);\n });\n\n close.addEventListener(\"click\", (event) => {\n event.preventDefault();\n menu.classList.toggle(classToggle);\n });\n document.addEventListener(\"click\", (event) => {\n if (!menu.classList.contains(classToggle)) {\n const isClickInsideMenu = menu.contains(event.target);\n const isClickInsideButton = button.contains(event.target);\n const isClickInsideClose = close.contains(event.target);\n\n if (!isClickInsideMenu && !isClickInsideButton && !isClickInsideClose) {\n menu.classList.add(classToggle);\n }\n }\n });\n }\n}\n\nfunction browserIsSmallScreen()\n{\n if (browserGetBrowserWidth() < BROWSER_SMALL_SCREEN)\n {\n return true;\n }\n else\n {\n return (false);\n }\n}\n\n// mobile ----------------------------------------------------------------------\nfunction browserIsMobile() {\n if (_browserIsMobile === \"none\") {\n if (/Mobi|Android|iPhone/i.test(navigator.userAgent)) {\n _browserIsMobile = true;\n } else {\n _browserIsMobile = false;\n }\n }\n return _browserIsMobile;\n}\n\n// sharing ---------------------------------------------------------------------\nfunction browserCanShare() {\n return !!navigator.share;\n}\n\nfunction browserShare(urlString) {\n navigator\n .share({\n url: urlString\n })\n .then(() => console.log(\"Share was successful.\"))\n .catch((error) => console.log(\"Sharing failed\", error));\n}\n\n// ------------------------------------------------------------------------------\nfunction onBrowserTooltip(event) {\n if (browserGetBrowserWidth() < 480) {\n const target = event.target;\n const tooltipText = target.getElementsByClassName(\"posterTooltiptext\");\n const marginLeft =\n -target.getBoundingClientRect().left +\n (browserGetBrowserWidth() - 280) / 2;\n tooltipText[0].style.marginLeft = marginLeft + \"px\";\n }\n}\n\n// -----------------------------------------------------------------------------\n\nexport {\n BROWSER_SMALL_SCREEN,\n browserGetBrowserWidth,\n browserGetBrowserHeight,\n browserSetCookie,\n browserGetCookie,\n browserAfterRendering,\n browserImageIsReady,\n browserMenuToggleInit,\n browserIsSmallScreen,\n browserIsMobile,\n browserCanShare,\n browserShare,\n onBrowserTooltip\n};\n","// This allows invalidate all caches in browser tha are get with fetches\n\nimport {browserGetCookie, browserSetCookie} from \"./browser.js\";\nimport CONFIG from \"./../config.json\";\n\nlet _cacheTime = null;\n\nfunction cacheSetCacheTime(value)\n{\n _cacheTime = value;\n}\n\nfunction cacheGetCacheTime()\n{\n return(_cacheTime);\n}\n\nfunction caheIsQuickReload() {\n let lastUnloadTime = browserGetCookie(\"lastUnloadTime\");\n let lastUnloadURL = browserGetCookie(\"lastUnloadURL\");\n let currentURL = window.location.href;\n let now = new Date().getTime();\n let ret = false;\n\n if (lastUnloadTime && lastUnloadURL === currentURL) {\n let timeDifference = now - lastUnloadTime;\n if (timeDifference < 5000) {\n ret = true;\n }\n }\n\n browserSetCookie(\"lastUnloadTime\", now, 1);\n browserSetCookie(\"lastUnloadURL\", currentURL, 1);\n\n return ret;\n}\n\nfunction IfQuickReloadFlushEverything()\n{\n let time;\n if (caheIsQuickReload())\n {\n try {\n fetch(`${CONFIG.posters_api_url}/flush`);\n fetch(\"/flush\");\n } finally {\n time = new Date().getTime();\n browserSetCookie(\"cacheTime\", time, 1);\n }\n } else\n {\n time = browserGetCookie(\"cacheTime\");\n }\n cacheSetCacheTime(time);\n}\n\nexport {IfQuickReloadFlushEverything, cacheGetCacheTime}\n","/* Copyright (c) 2023 joanribalta@elmolideponent.com */\n\nclass Log\n{\n static init(consoleDebug = true, serverDebug = true)\n {\n this._browserConsoleDebug = consoleDebug;\n this._serverDebug = serverDebug;\n window.onerror = (message) =>\n {\n this.print(\"OnError: \" + message);\n return false;\n };\n\n // this.print(\"test\");\n }\n\n static print(message)\n {\n if (this._browserConsoleDebug === true)\n {\n console.log(message);\n }\n\n if (this._serverDebug === true)\n {\n fetch('/log', {\n method: \"POST\",\n body: 'message=' + encodeURIComponent(message),\n headers: {\"Content-type\": \"application/x-www-form-urlencoded; charset=UTF-8\"}\n });\n }\n }\n}\n\nexport { Log };\n\n","import CONFIG from \"./../config.json\";\nimport {cacheGetCacheTime} from \"./cache.js\";\nimport {Log} from \"./log.js\";\n\nconst AUTHORS_FETCH_NUMBER = 20;\nlet authorsCards = [];\nlet authorsFetching = false;\nlet authorsToResolve = [];\nlet authorsAllDownloaded = false;\nlet authorsFlushCache = false;\nlet authorsCursor = null;\n\n\n\n// only for testing new possibilities\nfunction _authorGetWebLink(author)\n{\n // testing for the Restaurant el Molí author\n if (author.id === \"Y2hlemNoYXJwZW50aWVyQGdtYWlsLmNvbQ==\")\n {\n return(\"www.elmolideponent.com/ca/list.html?id=Y2hlemNoYXJwZW50aWVyQGdtYWlsLmNvbQ==\");\n }\n return(author.webLink);\n}\n\nfunction authorsGetCard(author)\n{\n let authorWebLink = _authorGetWebLink(author);\n //let authorRef = \"/list/\" + + postersEscapeSpacesAndApostrophes(author.name) + \".html?id=\" + author.id ;\n let authorTemplate =\n \"
\" +\n \"\" +\n \"\" +\n \"
\";\n return(authorTemplate);\n}\n\nfunction authorsGetAnonymous()\n{\n let anonimous =\n {imageUrl: `${CONFIG.posters_api_url}/images/anonymous_v2.png`,\n authorWebLink: 'cartells.elmolideponent.com',\n name: 'Anonymous',\n activity: ''};\n\n return(anonimous);\n}\n\nfunction authorsGet(id)\n{\n if (authorsCards !== null)\n {\n for (const authorCard of authorsCards)\n {\n if (authorCard.id === id)\n {\n return authorCard;\n }\n }\n }\n return(undefined);\n}\n\nfunction authorsFetchFromServer()\n{\n // resource ------------------------------------------------------------\n let resource = `${CONFIG.posters_api_url}/resource/profile/public/batch`;\n if (authorsCursor !== null)\n resource += \"?cursor=\" + authorsCursor + \"&\";\n else\n resource += \"?\";\n resource += \"flush=\" + authorsFlushCache;\n\n let cacheTime = cacheGetCacheTime();\n if ((cacheTime !== null) && (cacheTime !== \"\"))\n {\n resource += \"&cacheTime=\" + cacheTime;\n }\n\n // fetch ---------------------------------------------------------------\n // authors are cached by the browser \n fetch(resource)\n .then(response => response.json())\n .then(aux =>\n {\n authorsCards.push(...aux.list);\n\n // is there more authors\n if (aux.list.length < AUTHORS_FETCH_NUMBER)\n {\n authorsAllDownloaded = true;\n } else\n {\n authorsCursor = aux.cursor;\n }\n // \n while (authorsToResolve.length > 0)\n {\n let au = authorsToResolve.shift();\n let author = authorsGet(au.id);\n if (author === undefined)\n {\n // we need to flush all caches\n if (authorsAllDownloaded === true)\n {\n author = authorsGetAnonymous();\n// if (authorsFlushCache === false)\n// {\n// authorsFlushCache = true;\n// authorsAllDownloaded = false;\n// //authorsCards.length = 0;\n// authorsCursor = null;\n// // not fetch yet pushed to the end of the array\n// authorsToResolve.push(au);\n// authorsFetchFromServer();\n// break;\n// } else\n// {\n// au.reject(\"No s'ha trobat l'autor \" + au.id);\n// }\n } else\n {\n // not fetch yet pushed to the end of the array\n authorsToResolve.push(au);\n authorsFetchFromServer();\n break;\n }\n\n }\n //\n au.resolve(author);\n }\n })\n .catch(error =>\n {\n Log.print('Fetch authors error: ' + error);\n })\n .finally(() =>\n {\n authorsFetching = false;\n });\n}\n\nfunction authorsFetch()\n{\n if (authorsFetching === false)\n {\n authorsFetching = true;\n authorsFetchFromServer();\n }\n}\n\n\nfunction authorsfetchCard(id)\n{\n return new Promise(function (resolve, reject)\n {\n let author = authorsGet(id);\n if (author === undefined)\n {\n let aux = {id, resolve, reject};\n authorsToResolve.push(aux);\n if (authorsFetching === false)\n {\n authorsFetch();\n }\n } else\n {\n resolve(author);\n }\n\n\n });\n}\n\nexport {authorsGetCard, authorsfetchCard};\n\n\n","import { postersEscapeSpacesAndApostrophes } from \"./posters.js\";\n\n\nconst _mapsMappedRegions = ['Noguera', 'Urgell', 'Segrià', 'Pallars-Sobirà'];\nconst _mapsMappedLabels = ['Festa-Major', 'Falles', 'Astronomia'];\n\nfunction mapsLabel(region, label)\n{\n let aux = \"\";\n\n if (region)\n {\n aux = \"/\" + postersEscapeSpacesAndApostrophes(region);\n }\n\n const value = postersEscapeSpacesAndApostrophes(label);\n if (_mapsMappedLabels.includes(value))\n {\n return (aux + '/' + value);\n }\n return (aux + '/?label=' + value);\n}\n\nfunction mapsTown(region, town)\n{\n const value = postersEscapeSpacesAndApostrophes(town);\n if ((value === 'Tàrrega'))\n {\n return ('/Urgell/' + value);\n } else if (value === 'Balaguer')\n {\n return ('/Noguera/' + value);\n } else if (value === 'Lleida')\n {\n return ('/Segrià/' + value);\n }\n // -------------------------------------------------------------------------\n let aux = \"\";\n\n if (region)\n {\n aux = \"/\" + postersEscapeSpacesAndApostrophes(region);\n }\n\n return (aux + '/?town=' + value);\n}\n\nfunction mapsRegion(region)\n{\n const value = postersEscapeSpacesAndApostrophes(region);\n if (_mapsMappedRegions.includes(value))\n {\n return ('/' + value);\n }\n return ('/?region=' + value);\n}\n\nexport { mapsLabel, mapsTown, mapsRegion };\n\n\n","function isValidHtml(description, allowedTags) {\n const regex = /<\\/?([a-zA-Z0-9]+)[^>]*>/g;\n let match;\n while ((match = regex.exec(description)) !== null) {\n let tag = match[1].toLowerCase();\n if (!allowedTags.includes(tag)) {\n return false;\n }\n }\n return true;\n}\n\nfunction validateAndReturnHtml(description, allowedTags) {\n return isValidHtml(description, allowedTags) ? description : \"\";\n}\n\nfunction validateAndReturnComments(comments) {\n const COMMENTS_ALLOWED_TAGS = [\"br\", \"a\", \"b\"];\n return validateAndReturnHtml(comments, COMMENTS_ALLOWED_TAGS);\n}\n\nfunction validateAndReturnDescription(description) {\n const DESCRIPTION_ALLOWED_TAGS = [\"p\", \"b\", \"li\", \"ul\", \"br\", \"i\"];\n return validateAndReturnHtml(description, DESCRIPTION_ALLOWED_TAGS);\n}\n\nexport {\nvalidateAndReturnComments, validateAndReturnDescription\n};\n\n\n","import { authorsfetchCard, authorsGetCard } from \"./authors.js\";\nimport CONFIG from \"./../config.json\";\nimport { cacheGetCacheTime } from \"./cache.js\";\nimport {browserImageIsReady,\n browserCanShare,\n browserShare} from \"./browser.js\";\nimport {postersSetPosterResposiveWidth,\n getPostersMaximumImageWidth,\n postersEscapeSpacesAndApostrophes,\n postersReplaceApostrophesInText,\n postersGetYear,\n postersGetDateString,\n postersGetEndDateOrTime} from \"./posters.js\";\nimport {mapsRegion,\n mapsTown,\n mapsLabel} from \"./maps.js\";\n\nimport {validateAndReturnComments,\n validateAndReturnDescription }from \"./validate.js\";\n\n\nconst POSTER_MINIMUM_WIDTH = 290;\n\nfunction posterFetchPosterId(parent, id, wrapper) {\n return new Promise(function (resolve, reject) {\n let resource =\n `${CONFIG.posters_api_url}/resource/poster/public/${parent}/${id}`;\n\n const cacheTime = cacheGetCacheTime();\n if (cacheTime !== null && cacheTime !== \"\") {\n resource += \"?cacheTime=\" + cacheTime;\n }\n\n fetch(resource)\n .then((response) => response.json())\n .then((aux) => {\n posterCreateAndAppend(aux, wrapper);\n resolve(true);\n })\n .catch((err) => {\n reject(err);\n });\n });\n}\n\nfunction posterStartUp() {\n const params = new URL(document.location).searchParams;\n const posterId = params.get(\"id\");\n const posterParent = params.get(\"parent\");\n\n posterFetchPosterId(\n posterParent,\n posterId,\n document.getElementById(\"mainPostersWrapper\")\n )\n .then(() => {\n })\n .catch((err) => {\n window.alert(\"Alguna cosa ha anat malament: \" + err);\n })\n .finally(() => {\n document.getElementById(\"mainLoader\").style = \"display: none;\";\n });\n}\n\nfunction posterRender(parent = document) {\n const wrappers = parent.getElementsByClassName(\"posterWrapper\");\n\n if (wrappers.length > 0) {\n [].forEach.call(wrappers, (poster) => {\n const posterImages = poster.getElementsByClassName(\"posterImage\");\n\n if (posterImages.length > 0) {\n browserImageIsReady(posterImages[0]).then(() => {\n const maximumImageWidth = getPostersMaximumImageWidth(\n posterImages[0].naturalWidth,\n posterImages[0].naturalHeight\n );\n postersSetPosterResposiveWidth(poster, maximumImageWidth);\n });\n }\n });\n}\n}\n\nfunction posterCreatePosterElement(poster) {\n // Create poster element ---------------------------------------------------\n const wrapper = document.createElement(\"article\");\n wrapper.setAttribute(\"class\", \"posterWrapper mainItem\");\n wrapper.setAttribute(\"data-author-id\", poster.publisherId);\n wrapper.setAttribute(\"data-post-id\", poster.id);\n wrapper.setAttribute(\"data-post-lng\", poster.geoPt.longitude);\n wrapper.setAttribute(\"data-post-lat\", poster.geoPt.latitude);\n //\n const relativeLink =\n \"/\" +\n encodeURIComponent(postersEscapeSpacesAndApostrophes(poster.id)) +\n \".html?id=\" +\n poster.publisherId;\n let posterTemplate =\n \"

\" +\n poster.title +\n \"

\" +\n \"

\" +\n poster.subtitle +\n \"

\";\n posterTemplate += \"
\" +\n            postersReplaceApostrophesInText(\n                    \"Cartell de
\";\n posterTemplate += \"
\";\n posterTemplate += postersGetDateString(poster.dateBegin);\n posterTemplate += \"
\";\n posterTemplate += postersGetEndDateOrTime(\n poster.dateBegin,\n poster.dateEnd,\n poster.timeBegin\n );\n posterTemplate += \"
\";\n posterTemplate +=\n \"
\";\n posterTemplate +=\n \"
?\";\n posterTemplate += validateAndReturnDescription(poster.description);\n posterTemplate += \"
\";\n posterTemplate += \"
\";\n posterTemplate += validateAndReturnComments(poster.comments);\n posterTemplate += \"
\";\n posterTemplate += \"
\";\n posterTemplate += \"
\";\n posterTemplate +=\n \"\";\n posterTemplate +=\n \"\" +\n poster.town +\n \"\";\n posterTemplate +=\n \"\" +\n poster.region +\n \"\";\n posterTemplate += \"
\";\n posterTemplate += \"
\";\n poster.labelsList.forEach((value) => {\n posterTemplate +=\n \"\" +\n value +\n \"\";\n });\n posterTemplate += \"
\";\n posterTemplate += \"
\";\n posterTemplate += \"
\";\n posterTemplate += \"Publicat per:
\";\n posterTemplate +=\n \"
\";\n\n posterTemplate +=\n \"
\" +\n \"Gràcies per compartir-ho\" +\n \"
\" +\n \"
\" +\n // + \"
\"\n \"
\";\n\n //\n wrapper.innerHTML = posterTemplate;\n\n return wrapper;\n}\n\nfunction posterParseDocument() {\n const posterSocial = document.getElementById(\"posterSocial\");\n posterParse(posterSocial);\n}\n\nfunction posterParse(element) {\n if (browserCanShare() === true) {\n const share = element.getElementsByClassName(\"posterShare\");\n\n const anchor = document.createElement(\"a\");\n anchor.setAttribute(\"class\", \"anchorShare\");\n anchor.href = \"javascript:void(0)\";\n anchor.innerText = \"Compartir\";\n share[0].appendChild(anchor);\n\n anchor.addEventListener(\"click\", (event) => {\n browserShare(share[0].dataset.href);\n });\n }\n}\n\nfunction posterCreateAndAppend(poster, parent) {\n // appending the poster --------------------------------------------\n const posterElement = posterCreatePosterElement(poster);\n parent.appendChild(posterElement);\n\n // appending author card -------------------------------------------\n posterAppendAuthor(posterElement);\n\n // facebook share button ----------------------------------------------\n // fbParse(posterElement);\n\n // poster share button\n posterParse(posterElement);\n\n return posterElement;\n}\n\nfunction posterAppendAuthor(posterElement) {\n const authorWrappers = posterElement.getElementsByClassName(\n \"posterAuthorWrapper\"\n );\n (function () {\n const auxElement = authorWrappers[0];\n authorsfetchCard(auxElement.getAttribute(\"data-author-id\")).then(\n (author) => {\n auxElement.innerHTML = authorsGetCard(author);\n auxElement.setAttribute(\"data-author-attached\", true);\n }\n );\n })();\n}\n\nexport {\nposterAppendAuthor,\n posterCreateAndAppend,\n posterRender,\n posterStartUp,\n posterParse,\n posterParseDocument,\n posterFetchPosterId,\n POSTER_MINIMUM_WIDTH\n};\n","import {browserGetBrowserWidth,\n browserAfterRendering,\n BROWSER_SMALL_SCREEN,\n browserIsSmallScreen\n } from \"./browser.js\";\nimport { cacheGetCacheTime } from \"./cache.js\";\nimport { pagePxSizeToInt } from \"./page.js\";\nimport { POSTER_MINIMUM_WIDTH } from \"./poster.js\";\nimport CONFIG from \"./../config.json\";\n\nconst POSTERS_BIG_SCREENS_MARGIN = 66; // 16*2 + 16*2 + 1*2\nconst POSTERS_SMALL_SCREENS_MARGIN = 36; // 16*2 + 1*2 + 1*2\nconst POSTERS_SCREEN_BOUNDARY = 640;\nconst POSTERS_FETCH_NUMBER = 20;\nconst POSTERS_IMAGE_MAXIMUM_SIZE = 512;\n\nconst _posters = []; // caches, cursors could imply posters repetitions\nlet _postersEntries = {}; // avoiding posters repetitions in the same page\nlet _postersIndex = 0;\nlet _postersAbsoluteIndex = 0;\nlet _postersToReturn = 0;\nlet _postersElementWrapper;\nconst _postersToResolve = [];\nlet _postersBatchNumber = 0;\nlet _postersAllDownloaded = false;\nlet _postersFetching = false;\nlet _postersReject;\nlet _postersFilter = \"\";\nlet _postersFilterTown = \"\";\nlet _postersFilterRegion = \"\";\nlet _postersFilterPublisherId = \"\";\nconst _postersCursor = [];\n\nfunction postersReset() {\n _posters.length = 0;\n _postersEntries = {};\n _postersIndex = 0;\n _postersAbsoluteIndex = 0;\n _postersToReturn = 0;\n _postersToResolve.length = 0;\n _postersBatchNumber = 0;\n _postersAllDownloaded = false;\n _postersFetching = false;\n _postersFilter = \"\";\n _postersFilterTown = \"\";\n _postersFilterRegion = \"\";\n _postersFilterPublisherId = \"\";\n _postersCursor.length = 0;\n}\n\nfunction postersResetResolve() {\n _postersToReturn = 0;\n _postersToResolve.length = 0;\n}\n\nfunction postersGetMargin() {\n if (browserGetBrowserWidth() <= POSTERS_SCREEN_BOUNDARY) {\n return POSTERS_SMALL_SCREENS_MARGIN;\n } else {\n return POSTERS_BIG_SCREENS_MARGIN;\n }\n}\n\nfunction getPostersMaximumImageWidth(naturalWidth, naturalHeight) {\n if ((naturalWidth > POSTERS_IMAGE_MAXIMUM_SIZE) && (naturalWidth >= naturalHeight)) {\n return POSTERS_IMAGE_MAXIMUM_SIZE;\n } else if (naturalHeight > POSTERS_IMAGE_MAXIMUM_SIZE) {\n return (POSTERS_IMAGE_MAXIMUM_SIZE * naturalWidth) / naturalHeight;\n }\n return naturalWidth;\n}\n\nfunction postersSetPosterResposiveWidth(\n poster,\n width,\n margin,\n checkTitleOverflow = true\n ) {\n\n if ((poster.id) && (poster.id === \"poster-main-poster\"))\n {\n if (browserIsSmallScreen() === false)\n return;\n }\n\n poster.style.width = postersGetPosterResposiveWidth(width, margin) + \"px\";\n\n // poster title is overflowing after rendering?\n if (checkTitleOverflow === true) {\n postersCheckTitleOverflowAfterRendering(poster, margin);\n}\n}\n\nfunction postersCheckTitleOverflowAfterRendering(poster, margin) {\n browserAfterRendering(() => {\n const titleWidth = postersGetPosterTitleWidth(poster);\n if (pagePxSizeToInt(poster.style.width) < titleWidth) {\n poster.style.width =\n postersGetPosterResposiveWidth(titleWidth, margin) + \"px\";\n }\n });\n}\n\nfunction postersGetPosterResposiveWidth(width, margin) {\n if (typeof margin === \"undefined\") {\n margin = postersGetMargin();\n }\n\n if (width < POSTER_MINIMUM_WIDTH) {\n width = POSTER_MINIMUM_WIDTH;\n }\n\n const browserWidth = browserGetBrowserWidth();\n const totalWidthWithMargin = width + margin;\n\n if (\n totalWidthWithMargin <= browserWidth &&\n browserWidth > BROWSER_SMALL_SCREEN\n ) {\n return width;\n } else {\n return browserWidth - margin;\n }\n}\n\nfunction postersGetPosterTitleWidth(poster) {\n const posterTitle = poster.getElementsByClassName(\"posterTitle\");\n if (posterTitle.length === 0) {\n return 0;\n }\n return posterTitle[0].offsetWidth;\n}\n\nfunction postersExcludePoster(posterPublisherId, posterId) {\n if (!_postersEntries[posterPublisherId]) {\n _postersEntries[posterPublisherId] = [];\n }\n\n if (!_postersEntries[posterPublisherId].includes(posterId)) {\n _postersEntries[posterPublisherId].push(posterId);\n }\n}\n\nfunction postersIsExcluded(posterPublisherId, posterId) {\n if (_postersEntries[posterPublisherId]) {\n return _postersEntries[posterPublisherId].includes(posterId);\n }\n return false;\n}\n\nfunction postersGetYear(date) {\n const parts = date.split(\"/\");\n return parts[2];\n}\n\nfunction postersGetDateString(date, time) {\n const parts = date.split(\"/\");\n const ddate = new Date(parts[2], parts[1] - 1, parts[0]);\n const options = {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\"\n };\n const dateString = ddate.toLocaleDateString(\"ca-ES\", options);\n return dateString.charAt(0).toUpperCase() + dateString.slice(1);\n}\n\nfunction postersGetTimeString(time) {\n let dateString = \"\";\n if (time !== \"\") {\n dateString = \"a les \" + time;\n }\n return dateString;\n}\n\nfunction postersGetEndDateOrTime(beginDate, endDate, time) {\n let dateString = \"\";\n if (beginDate !== endDate) {\n dateString = \"- \" + postersGetDateString(endDate);\n } else {\n dateString = postersGetTimeString(time);\n }\n return dateString;\n}\n\nfunction postersReplaceApostrophesInText(str) {\n return str.split(\"'\").join(\"'\");\n}\n\nfunction postersEscapeSpacesAndApostrophes(str) {\n return str.split(\" \").join(\"-\").split(\"'\").join(\"_\");\n}\n\nfunction postersUnescapeSpacesAndApostrophes(str) {\n return str.split(\"-\").join(\" \").split(\"_\").join(\"'\");\n}\n\nfunction _postersFetch(createAndAppend) {\n //\n while (_postersToReturn > 0) {\n if (_postersIndex >= _posters.length) {\n if (_postersAllDownloaded === false) {\n _postersFetchFromServer(createAndAppend);\n } else {\n while (_postersToReturn > 0) {\n const resolve = _postersToResolve.shift();\n resolve({index: null, poster: null, wrapper: null, image: null});\n _postersToReturn--;\n }\n }\n break;\n }\n\n // appending poster to the dom -----------------------------------------\n const currentPoster = _posters[_postersIndex];\n if (\n postersIsExcluded(currentPoster.publisherId, currentPoster.id) ===\n false &&\n (_postersFilter === \"\" ||\n currentPoster.labelsList.includes(_postersFilter)) &&\n (_postersFilterTown === \"\" ||\n currentPoster.town === _postersFilterTown) &&\n (_postersFilterRegion === \"\" ||\n currentPoster.region === _postersFilterRegion) &&\n (_postersFilterPublisherId === \"\" ||\n currentPoster.publisherId === _postersFilterPublisherId)\n ) {\n // avoiding repetitions due to batches incoherences-----------------\n postersExcludePoster(currentPoster.publisherId, currentPoster.id);\n\n // resolving promise\n const resolve = _postersToResolve.shift();\n\n // do not change resolve variable names !!!\n // backward compatibility !!!! TO BE REMOVED WHEN CC & LG & POST UPDATED!!!\n // and map.js too\n let wrapper;\n let image;\n if (createAndAppend !== null) {\n wrapper = createAndAppend(currentPoster, _postersElementWrapper);\n image = wrapper.getElementsByClassName(\"posterImage\")[0];\n }\n const index = _postersAbsoluteIndex;\n const poster = currentPoster;\n resolve({index, poster, wrapper, image});\n\n //\n _postersToReturn--;\n }\n //\n _postersIndex++;\n _postersAbsoluteIndex++;\n }\n}\n\nfunction posterGetDayMonthPattern(separator) {\n const date = new Date();\n const month = date.getMonth() + 1;\n const day = date.getDate();\n return day + separator + month;\n}\n\nfunction postersSaveCursor(batchNumber, cursor) {\n if (batchNumber !== 0) {\n _postersCursor[batchNumber - 1] = cursor;\n }\n}\n\nfunction postersGetCursor(batchNumber) {\n if (batchNumber === 0) {\n return null;\n }\n return _postersCursor[batchNumber - 1];\n}\n\nfunction posterGetCursorByAbsoluteIndex(absoluteIndex) {\n const auxBatchNumber = Math.floor(absoluteIndex / POSTERS_FETCH_NUMBER);\n return postersGetCursor(auxBatchNumber);\n}\n\n// function postersSetCursorCookie(batchNumber, cursor)\n// {\n// browserSetCookie(\"cursor-\" + posterGetDayMonthPattern('-') + \"-batch-\" + batchNumber, cursor, 1);\n// }\n\n// function postersGetCursorCookie(batchNumber)\n// {\n// return(browserGetCookie(\"cursor-\" + posterGetDayMonthPattern('-') + \"-batch-\" + batchNumber));\n// }\n\nfunction _postersFetchFromServer(createAndAppend) {\n let _postersQueryLink = \"?\";\n _postersFetching = true;\n\n let resource =\n `${CONFIG.posters_api_url}/resource/poster/public/from/${posterGetDayMonthPattern(\"/\")}`;\n\n if (_postersBatchNumber !== 0) {\n resource += \"?cursor=\" + postersGetCursor(_postersBatchNumber);\n _postersQueryLink = \"&\";\n }\n\n const cacheTime = cacheGetCacheTime();\n if (cacheTime !== null && cacheTime !== \"\") {\n resource += _postersQueryLink + \"cacheTime=\" + cacheTime;\n }\n\n fetch(resource)\n .then((response) => response.json())\n .then((aux) => {\n //\n _posters.push(...aux.list);\n _postersBatchNumber++;\n postersSaveCursor(_postersBatchNumber, aux.cursor);\n\n // is there more authors\n if (aux.list.length < POSTERS_FETCH_NUMBER) {\n _postersAllDownloaded = true;\n }\n _postersFetching = false;\n //\n _postersFetch(createAndAppend);\n })\n .catch((err) => {\n _postersFetching = false;\n _postersReject(err);\n });\n}\n\nfunction postersFetchAPoster(createAndAppend, wrapper) {\n return new Promise(function (resolve, reject) {\n _postersToReturn++;\n _postersElementWrapper = wrapper;\n _postersToResolve.push(resolve);\n // it only saves one !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n _postersReject = reject;\n\n if (_postersFetching === false) {\n _postersFetch(createAndAppend);\n }\n });\n}\n\nfunction postersIsThereMorePosters() {\n if (_postersAllDownloaded === true) {\n if (_postersIndex >= _posters.length) {\n return false;\n }\n }\n return true;\n}\n\nfunction postersGetPostersIndex() {\n return _postersAbsoluteIndex;\n}\n\nfunction postersSetPostersIndex(index) {\n postersSetPostersIndexAndCursor(index);\n}\n\nfunction postersSetPostersIndexAndCursor(index, cursor = \"\") {\n // server index\n _postersAbsoluteIndex = index;\n // local array index\n _postersIndex = index % POSTERS_FETCH_NUMBER;\n // offset where to star to fecth in the server\n _postersBatchNumber = Math.floor(index / POSTERS_FETCH_NUMBER);\n // batch cursor\n postersSaveCursor(_postersBatchNumber, cursor);\n}\n\n// function posterIsThereCursorForTheIndex(index)\n// {\n//\n// if (index >= POSTERS_FETCH_NUMBER)\n// {\n// if (postersGetCursorCookie(Math.floor(index / POSTERS_FETCH_NUMBER)) === \"\")\n// {\n// return(false);\n// }\n// }\n//\n// return(true);\n// }\n\nfunction postersSetPostersFilter(filter) {\n _postersFilter = filter;\n}\n\nfunction postersSetRegionTownFilter(region, town) {\n _postersFilterRegion = region;\n _postersFilterTown = town;\n}\n\nfunction postersSetPublisherFilter(publisherId) {\n _postersFilterPublisherId = publisherId;\n}\n\nexport {\npostersReset,\n postersSetPublisherFilter,\n postersSetRegionTownFilter,\n postersSetPostersFilter,\n postersSetPostersIndex,\n postersGetPostersIndex,\n postersIsThereMorePosters,\n postersFetchAPoster,\n posterGetCursorByAbsoluteIndex,\n postersUnescapeSpacesAndApostrophes,\n postersGetYear,\n postersSetPosterResposiveWidth,\n getPostersMaximumImageWidth,\n postersResetResolve,\n postersGetEndDateOrTime,\n postersEscapeSpacesAndApostrophes,\n postersReplaceApostrophesInText,\n postersExcludePoster,\n postersGetDateString,\n postersCheckTitleOverflowAfterRendering,\n postersGetMargin,\n postersGetPosterResposiveWidth,\n postersSetPostersIndexAndCursor\n };\n","// Google Adsense -------------------------------------------------------------\n\nimport {browserGetBrowserWidth} from \"./browser.js\";\n\nconst ADSENSE_MAXIMUM_WIDTH = 320;\n\n\nfunction adsensePush()\n{\n window.adsbygoogle = window.adsbygoogle || [];\n window.adsbygoogle.push({});\n}\n\nfunction adsensePushFullAds()\n{\n let ads = document.getElementsByClassName(\"fullAdWrapper\");\n [].forEach.call(ads, (ad) =>\n {\n adsensePush();\n });\n}\n\n\nfunction adsenseAddAndPush(parent, width = 0)\n{\n\n // \"Posters footer\" ad\n let template = \" ADSENSE_MAXIMUM_WIDTH))\n {\n template += \" data-ad-format='vertical'\";\n } else\n {\n template += \" data-ad-format='auto'\";\n }\n\n template += \" data-full-width-responsive='true'>\";\n\n if (width !== 0)\n {\n let wrapper;\n wrapper = document.createElement('div');\n wrapper.setAttribute(\"class\", \"adWrapper mainItem\");\n wrapper.innerHTML = template;\n wrapper.style.width = width + \"px\";\n wrapper.style.minHeight = \"320px\";\n wrapper.style.textAlign = \"center\";\n parent.appendChild(wrapper);\n } else\n {\n parent.innerHTML = template;\n }\n\n let ad = parent.getElementsByClassName('adsbygoogle')[0];\n adsenseObserver(ad);\n\n adsensePush();\n}\n\nfunction asdenseCallback(mutations, observer)\n{\n for (let mutation of mutations)\n {\n if (mutation.type === 'attributes')\n {\n if (mutation.attributeName === 'data-ad-status')\n {\n if (mutation.target.dataset.adStatus === 'unfilled')\n {\n mutation.target.parentElement.style.display = 'none';\n }\n observer.disconnect();\n }\n }\n }\n}\n\nfunction adsenseObserver(ad)\n{\n let observer = new MutationObserver(asdenseCallback);\n\n observer.observe(ad, {attributes: true});\n}\n\nexport {ADSENSE_MAXIMUM_WIDTH, adsenseAddAndPush, adsensePushFullAds}\n\n\n","let _controlIsIntersecting = false;\nlet _controlCallback = null;\nlet _controlIO = null;\nlet _controlElement = null;\n\nfunction controlSentinelIsVisible()\n{\n return(_controlIsIntersecting);\n}\n\nfunction controlSetCallback(callback)\n{\n _controlCallback = callback;\n}\n\nfunction controlStartUp(controlIdName)\n{\n\n if (_controlIO !== null)\n {\n _controlIO.unobserve(_controlElement);\n } \n else\n {\n _controlIO = new IntersectionObserver(entries =>\n {\n _controlIsIntersecting = entries[0].isIntersecting;\n if ((_controlCallback !== null) && (_controlIsIntersecting === true))\n {\n // console.log(\"Control Callback\");\n _controlCallback();\n _controlCallback = null;\n }\n },\n {\n /* Using default options. Details below */\n });\n }\n\n _controlElement = document.getElementById(controlIdName);\n _controlIO.observe(_controlElement);\n}\n\nexport { controlStartUp, controlSentinelIsVisible, controlSetCallback };\n\n","const _BROWSER_GA_MEASUREMENT_ID = 'UA-136104257-1';\nconst _BROWSER_GA4_MEASUREMENT_ID = 'G-1YB5SWQ7NP';\n\n\nfunction analyticsPush()\n{\n dataLayer.push(arguments);\n}\n\nfunction analyticsSendPage(title, location)\n{\n analyticsPush('event', 'page_view',\n {\n page_title: title,\n page_location: location\n });\n}\n\nfunction analyticsInit(sendPageView = true)\n{\n let script = document.createElement('script');\n script.src = \"https://www.googletagmanager.com/gtag/js?id=\" + _BROWSER_GA_MEASUREMENT_ID;\n script.async = true;\n document.head.append(script);\n\n window.dataLayer = window.dataLayer || [];\n analyticsPush('js', new Date());\n analyticsPush('config', _BROWSER_GA4_MEASUREMENT_ID, {'send_page_view': sendPageView});\n}\n\nexport { analyticsInit, analyticsSendPage, analyticsPush };\n\n","import {\r\n postersFetchAPoster,\r\n postersIsThereMorePosters,\r\n postersGetMargin, \r\n postersGetPosterResposiveWidth,\r\n getPostersMaximumImageWidth,\r\n postersSetPosterResposiveWidth,\r\n postersResetResolve,\r\n postersSetPostersIndexAndCursor,\r\n postersSetPostersFilter,\r\n postersSetRegionTownFilter,\r\n postersGetPostersIndex,\r\n posterGetCursorByAbsoluteIndex\r\n} from \"./posters.js\";\r\n\r\nimport { posterCreateAndAppend } from \"./poster.js\";\r\n\r\nimport { browserGetBrowserWidth, browserImageIsReady } from \"./browser.js\";\r\nimport { adsenseAddAndPush, ADSENSE_MAXIMUM_WIDTH } from \"./adsense.js\";\r\nimport { controlSentinelIsVisible, controlSetCallback } from \"./control.js\";\r\nimport { analyticsPush } from \"./analytics.js\";\r\n\r\nconst PAGE_MINIMUM_POSTER_NUMBER = 5;\r\nconst PAGE_MAXIMUM_POSTER_NUMBER = 20;\r\n\r\nlet pageLines = 0;\r\nlet _pageCurrentLineWidth = 0;\r\nlet _pageHiddenPosterWrapper = null;\r\nlet _pagePostersNumber = 0;\r\nlet _pagePostersImagesNumber = 0;\r\n// var pagePostersArray = [];\r\nlet pagePostersResolve;\r\nlet pagePostersReject;\r\nlet _pagePostersFilter;\r\nlet pageFetchNumber = 0;\r\nlet _pageNoPoster = false;\r\n\r\nlet _pageAdsNumber = 0;\r\nlet _pagePostersTown;\r\nlet _pagePostersRegion;\r\n\r\nlet _pageMinimumPostersNumber = PAGE_MINIMUM_POSTER_NUMBER;\r\nlet _pageEndingLine = false;\r\n\r\nlet _pageWrapper;\r\n\r\nfunction pagePxSizeToInt(css) {\r\n return parseInt(css.replace(\"px\", \"\"));\r\n}\r\n\r\nfunction _pageResetLine() {\r\n _pageCurrentLineWidth = 0;\r\n _pageHiddenPosterWrapper = null;\r\n _pageEndingLine = false;\r\n _pageNoPoster = false;\r\n}\r\n\r\nfunction pageIsNewLine(width) {\r\n // margins = 16 *4\r\n _pageCurrentLineWidth += width + postersGetMargin();\r\n\r\n // console.log(\"lineWidth \", _pageCurrentLineWidth);\r\n\r\n if (_pageCurrentLineWidth > browserGetBrowserWidth()) {\r\n pageLines++;\r\n _pageCurrentLineWidth = width + postersGetMargin();\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction pageFetch(pageElement) {\r\n postersFetchAPoster(null, null)\r\n .then((th) => {\r\n pageFetchNumber++;\r\n if (th.poster !== null) {\r\n _pagePostersNumber++;\r\n //\r\n let wrapper = posterCreateAndAppend(th.poster, pageElement);\r\n let image = wrapper.getElementsByClassName(\"posterImage\")[0];\r\n\r\n //\r\n // if it is endding the line no new ads\r\n if (_pagePostersNumber >= _pageMinimumPostersNumber === false) {\r\n if (Math.floor(_pagePostersNumber / 3) > _pageAdsNumber) {\r\n _pageAdsNumber++;\r\n adsenseAddAndPush(\r\n pageElement,\r\n postersGetPosterResposiveWidth(ADSENSE_MAXIMUM_WIDTH)\r\n );\r\n }\r\n }\r\n\r\n // this can be asynchronous ----------------------------------------\r\n browserImageIsReady(image)\r\n .then(() => {\r\n _pagePostersImagesNumber++;\r\n\r\n //\r\n let maximumImageWidth = getPostersMaximumImageWidth(\r\n image.naturalWidth,\r\n image.naturalHeight\r\n );\r\n postersSetPosterResposiveWidth(wrapper, maximumImageWidth);\r\n\r\n //\r\n if (_pagePostersImagesNumber >= _pageMinimumPostersNumber) {\r\n if (controlSentinelIsVisible() === true) {\r\n if (pageFetchMorePosters() === true) {\r\n return;\r\n }\r\n }\r\n\r\n // cal aquesta funcio??? o es priscndile\r\n if (pageAreAllImageWidthAvailable() === true) {\r\n if (pageIsLineFinished(wrapper) === false) {\r\n pageFetch(pageElement);\r\n return;\r\n }\r\n }\r\n\r\n if (_pageMinimumPostersNumber >= PAGE_MAXIMUM_POSTER_NUMBER) {\r\n pageFetchEnd(true);\r\n return;\r\n }\r\n }\r\n })\r\n .catch((err) => {\r\n pagePostersReject(err);\r\n });\r\n } else {\r\n _pageNoPoster = true;\r\n }\r\n // Wait 5 fetches to return there are no all the posters asked\r\n if (\r\n pageFetchNumber >= _pageMinimumPostersNumber &&\r\n _pageNoPoster === true\r\n ) {\r\n pageFetchEnd(false);\r\n }\r\n })\r\n .catch((err) => {\r\n pagePostersReject(err);\r\n });\r\n}\r\n\r\nfunction pageAreAllImageWidthAvailable() {\r\n let auxItems = _pageWrapper.getElementsByClassName(\"mainItem\");\r\n return [].every.call(auxItems, (item) => item.style.width !== \"\");\r\n}\r\n\r\nfunction pageIsLineFinished(wrapper) {\r\n if (_pageEndingLine === true) {\r\n if (pageIsNewLine(pagePxSizeToInt(wrapper.style.width)) === true) {\r\n _pageHiddenPosterWrapper = wrapper;\r\n wrapper.style.display = \"none\";\r\n controlSetCallback(pageFetchMorePosters);\r\n return true;\r\n }\r\n } else {\r\n // finishing the last line ---------------------------------\r\n let auxItems = _pageWrapper.getElementsByClassName(\"mainItem\");\r\n [].forEach.call(auxItems, (item) => {\r\n pageIsNewLine(pagePxSizeToInt(item.style.width));\r\n });\r\n\r\n _pageEndingLine = true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction pageFetchMorePosters() {\r\n if (_pageMinimumPostersNumber < PAGE_MAXIMUM_POSTER_NUMBER) {\r\n // reset ending line\r\n _pageCurrentLineWidth = 0;\r\n _pageEndingLine = false;\r\n\r\n //\r\n if (_pageHiddenPosterWrapper !== null) {\r\n // hideen poster has been already contabilised\r\n _pageHiddenPosterWrapper.style.display = \"block\";\r\n _pageHiddenPosterWrapper = null;\r\n }\r\n\r\n _pageMinimumPostersNumber = _pagePostersNumber;\r\n\r\n // at least one more\r\n let newPageFetch = 0;\r\n do {\r\n pageFetch(_pageWrapper);\r\n _pageMinimumPostersNumber++;\r\n newPageFetch++;\r\n if (newPageFetch === 4) break;\r\n } while (_pageMinimumPostersNumber < PAGE_MAXIMUM_POSTER_NUMBER);\r\n\r\n analyticsPush(\"event\", _pageMinimumPostersNumber.toString(), {\r\n event_category: \"Posters Number\"\r\n });\r\n\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction pageFetchEnd(final) {\r\n if (_pageAdsNumber === 0) {\r\n let ads = document.getElementsByClassName(\"mainAdWrapper\");\r\n if (ads.length > 0) {\r\n adsenseAddAndPush(ads[0]);\r\n _pageAdsNumber++;\r\n }\r\n }\r\n pagePostersResolve(final);\r\n}\r\n\r\nfunction pageFetchPosters(wrapper, region, town, label, index, cursor = \"\") {\r\n postersResetResolve();\r\n _pageResetLine();\r\n postersSetPostersIndexAndCursor(index, cursor);\r\n postersSetPostersFilter(label);\r\n postersSetRegionTownFilter(region, town);\r\n _pagePostersFilter = label;\r\n _pagePostersRegion = region;\r\n _pagePostersTown = town;\r\n //\r\n window.addEventListener(\"resize\", function (event) {\r\n let auxPosters = document.getElementsByClassName(\"mainItem\");\r\n [].forEach.call(auxPosters, (poster) => {\r\n let auxImages = poster.getElementsByClassName(\"posterImage\");\r\n let width;\r\n if (auxImages.length !== 0) {\r\n width = auxImages[0].naturalWidth;\r\n } else {\r\n width = ADSENSE_MAXIMUM_WIDTH;\r\n }\r\n postersSetPosterResposiveWidth(poster, width);\r\n });\r\n });\r\n //\r\n return new Promise(function (resolve, reject) {\r\n pagePostersResolve = resolve;\r\n pagePostersReject = reject;\r\n _pageWrapper = wrapper;\r\n // fetches 5 posters and ends the line\r\n pageFetch(wrapper);\r\n pageFetch(wrapper);\r\n pageFetch(wrapper);\r\n pageFetch(wrapper);\r\n pageFetch(wrapper);\r\n });\r\n}\r\n\r\nfunction pageIsThereMorePosters() {\r\n if (\r\n _pageHiddenPosterWrapper !== null ||\r\n postersIsThereMorePosters() === true\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction pageGetNextPageHref() {\r\n let currentIndex = postersGetPostersIndex();\r\n if (_pageHiddenPosterWrapper !== null) {\r\n currentIndex--;\r\n }\r\n let ret = `/?v=${process.env.APP_VERSION}&index=${currentIndex}`;\r\n if (_pagePostersFilter !== \"\") ret += \"&label=\" + _pagePostersFilter;\r\n if (_pagePostersTown !== \"\") ret += \"&town=\" + _pagePostersTown;\r\n if (_pagePostersRegion !== \"\") ret += \"®ion=\" + _pagePostersRegion;\r\n\r\n let cursor = posterGetCursorByAbsoluteIndex(currentIndex);\r\n if (cursor !== null) {\r\n ret += \"&cursor=\" + cursor;\r\n }\r\n\r\n return ret;\r\n}\r\n\r\nfunction pageGetPostersNumber() {\r\n return _pagePostersNumber;\r\n}\r\n\r\nexport {\r\n pageGetPostersNumber,\r\n pageFetchPosters,\r\n pageIsThereMorePosters,\r\n pageGetNextPageHref,\r\n pagePxSizeToInt\r\n};\r\n","import {\r\npostersUnescapeSpacesAndApostrophes,\r\n } from \"./posters.js\";\r\nimport {\r\nposterAppendAuthor,\r\n posterRender\r\n } from \"./poster.js\";\r\nimport { IfQuickReloadFlushEverything } from \"./cache.js\";\r\nimport {\r\npageFetchPosters,\r\n pageGetNextPageHref,\r\n pageGetPostersNumber\r\n } from \"./page.js\";\r\nimport { controlStartUp } from \"./control.js\";\r\n\r\n// function mainSetGetLabelCookie(label, labelName)\r\n// {\r\n// if (label === null)\r\n// {\r\n// label = browserGetCookie(labelName);\r\n// } else\r\n// {\r\n// if (label !== \"\")\r\n// {\r\n// label = postersUnescapeSpacesAndApostrophes(label);\r\n// }\r\n// browserSetCookie(labelName, label, 1);\r\n// }\r\n// return(label);\r\n// }\r\n\r\nfunction mainGetString(param, label = null, unescape = true) {\r\n if (label) {\r\n param = label;\r\n }\r\n\r\n if (param === null) {\r\n return \"\";\r\n } else {\r\n if (unescape === true) {\r\n return postersUnescapeSpacesAndApostrophes(param);\r\n } else {\r\n return param;\r\n }\r\n}\r\n}\r\n\r\nfunction mainStartUp(label = null, town = null, region = null) {\r\n let params = new URL(document.location).searchParams;\r\n let mainIndex = params.get(\"index\") || 0;\r\n let mainLabel = mainGetString(params.get(\"label\"), label);\r\n let mainTown = mainGetString(params.get(\"town\"), town);\r\n let mainRegion = mainGetString(params.get(\"region\"), region);\r\n let mainFlush = mainGetString(params.get(\"flush\"));\r\n let mainCursor = mainGetString(params.get(\"cursor\"), null, false);\r\n\r\n // check that there is cursor cookie for the index\r\n // if (posterIsThereCursorForTheIndex(mainIndex) === false)\r\n // {\r\n // window.location.replace(\"/\");\r\n // return;\r\n // }\r\n\r\n // set region, erases town cookie\r\n if (mainRegion !== \"\" && mainRegion !== null && mainTown === null) {\r\n mainTown = \"\";\r\n }\r\n // set town erases region\r\n if (mainTown !== \"\" && mainTown !== null && mainRegion === null) {\r\n mainRegion = \"\";\r\n }\r\n\r\n // it is there a quick reload is flushed everything ---------------------\r\n IfQuickReloadFlushEverything();\r\n\r\n // page posters ----------------------------------------------------\r\n let mainPostersWrapper = document.getElementById(\"mainPostersWrapper\");\r\n if (mainPostersWrapper.dataset.postersLoaded === \"false\") {\r\n //\r\n document.getElementById(\"mainLoader\").style.display = \"inline-block\";\r\n\r\n //\r\n pageFetchPosters(\r\n mainPostersWrapper,\r\n mainRegion,\r\n mainTown,\r\n mainLabel,\r\n mainIndex,\r\n mainCursor\r\n )\r\n .then((isThereMorePosters) => {\r\n //\r\n if (pageGetPostersNumber() === 0) {\r\n let element = document.createElement(\"div\");\r\n element.setAttribute(\"id\", \"mainNoPostersMessage\");\r\n let text;\r\n text = \"No hi ha cartells\";\r\n\r\n if (mainLabel !== \"\") {\r\n text += \" amb l'etiqueta \" + mainLabel + \",\";\r\n }\r\n if (mainTown !== \"\") {\r\n text += \" a \" + mainTown + \",\";\r\n }\r\n if (mainRegion !== \"\") {\r\n text += \" a \" + mainRegion + \",\";\r\n }\r\n text +=\r\n \" publica el teu cartell a \" +\r\n \" editor.elmolideponent.com\";\r\n element.innerHTML = text;\r\n mainPostersWrapper.appendChild(element);\r\n }\r\n // next page button --------------------------------------------\r\n if (isThereMorePosters === true) {\r\n document.getElementById(\"mainNextPageButtonWrapper\").style.display =\r\n \"block\";\r\n document\r\n .getElementById(\"mainNextPageButton\")\r\n .setAttribute(\"href\", pageGetNextPageHref());\r\n } else {\r\n if (mainIndex !== 0) {\r\n document.getElementById(\"mainNextPageButtonWrapper\").style.display =\r\n \"block\";\r\n document.getElementById(\"mainNextPageButton\").textContent =\r\n \"Pricipal\";\r\n document\r\n .getElementById(\"mainNextPageButton\")\r\n .setAttribute(\"href\", \"/\");\r\n } else if (mainLabel !== \"\" || mainTown !== \"\" || mainRegion !== \"\") {\r\n // document.getElementById('mainNextPageButtonWrapper').style.display = 'block';\r\n // document.getElementById('mainNextPageButton').textContent = \"Pricipal\";\r\n // document.getElementById('mainNextPageButton').setAttribute('href', \"/?label=&town=®ion=\");\r\n document.getElementById(\"mainNextPageButtonWrapper\").style.display =\r\n \"none\";\r\n _mainOthersPosters();\r\n } else {\r\n document.getElementById(\"mainNextPageButtonWrapper\").style.display =\r\n \"none\";\r\n }\r\n }\r\n })\r\n .catch((err) => {\r\n console.log(err.stack);\r\n window.alert(\"Alguna cosa ha anat malament: \" + err);\r\n })\r\n .finally(() => {\r\n document.getElementById(\"mainLoader\").style.display = \"none\";\r\n });\r\n } else {\r\n // crawl version ------------------------------------------------------\r\n // rendering posters\r\n posterRender();\r\n\r\n // download publishers\r\n let auxPosters = mainPostersWrapper.getElementsByClassName(\"posterWrapper\");\r\n [].forEach.call(auxPosters, (poster) => {\r\n posterAppendAuthor(poster);\r\n });\r\n }\r\n\r\n// moved to the server\r\n// if (mainLabel !== \"\" || mainTown !== \"\" || mainRegion !== \"\") {\r\n// document.getElementById(\"mainFilters\").style = \"display: block;\";\r\n//}\r\n}\r\n\r\nfunction _mainOthersPosters() {\r\n let mainOtherPosters = document.getElementById(\"mainOtherPosters\");\r\n if (mainOtherPosters !== null) {\r\n mainOtherPosters.style = \"display: block;\";\r\n\r\n let mainOtherPostersWrapper = document.getElementById(\r\n \"mainOtherPostersWrapper\"\r\n );\r\n\r\n //console.log(\"other \");\r\n\r\n controlStartUp(\"mainOtherSentinel\");\r\n\r\n pageFetchPosters(mainOtherPostersWrapper, \"\", \"\", \"\", 0).then(\r\n (isThereMorePosters) => {\r\n if (isThereMorePosters === true) {\r\n document.getElementById(\r\n \"mainOtherNextPageButtonWrapper\"\r\n ).style.display = \"block\";\r\n document\r\n .getElementById(\"mainOtherNextPageButton\")\r\n .setAttribute(\"href\", pageGetNextPageHref());\r\n } else {\r\n document.getElementById(\r\n \"mainOtherNextPageButtonWrapper\"\r\n ).style.display = \"none\";\r\n }\r\n }\r\n );\r\n }\r\n}\r\n\r\nexport { mainStartUp };\r\n","import CONFIG from \"./../config.json\";\r\nimport {cacheGetCacheTime} from \"./cache.js\";\r\nimport {mapsTown, mapsLabel} from \"./maps.js\";\r\nimport {postersEscapeSpacesAndApostrophes} from \"./posters.js\";\r\nimport {Log} from \"./log.js\";\r\n\r\n\r\nlet tagsTopLabels = [\"Festa\", \"Fira\", \"Esport\", \"Música\", \"Cinema\", \"Teatre\", \"Per nens\"];\r\n\r\nfunction tagsDynamicFetch()\r\n{\r\n return new Promise(function (resolve, reject)\r\n {\r\n let resource = `${CONFIG.posters_api_url}/resource/poster/public/tagsnumber`;\r\n\r\n const cacheTime = cacheGetCacheTime();\r\n if ((cacheTime !== null) && (cacheTime !== \"\"))\r\n {\r\n resource += \"?cacheTime=\" + cacheTime;\r\n }\r\n\r\n fetch(resource)\r\n .then(response => response.json())\r\n .then(aux =>\r\n {\r\n tagsDynamicCreateAndAppend(aux);\r\n tagsDynamicMapLegendCreateAndAppend(aux);\r\n resolve(true);\r\n })\r\n .catch(err =>\r\n {\r\n Log.print(\"Tag dynamic fetch error: \" + err);\r\n reject(err);\r\n });\r\n });\r\n}\r\n\r\nfunction tagsDynamicCreateAndAppend(tagsJson)\r\n{\r\n const dynamicTags = document.getElementById('dynamicTags');\r\n if (dynamicTags !== null)\r\n {\r\n\r\n const allTags = [\r\n ...Object.entries(tagsJson.towns).map(([tag, count]) => [tag, count, \"town\"]),\r\n ...Object.entries(tagsJson.labels).map(([tag, count]) => [tag, count, \"label\"])\r\n ];\r\n\r\n if (allTags.length > 10)\r\n {\r\n // Find the top 10 tags by count\r\n const topTags = allTags\r\n .sort((a, b) => b[1] - a[1])\r\n .slice(0, 10);\r\n\r\n const htmlTags = topTags.map(entry =>\r\n {\r\n const label = entry[0];\r\n const path = (entry[2] === 'town') ? mapsTown(null, label) : mapsLabel(null, label);\r\n // const url = ;\r\n return `${label}`;\r\n });\r\n\r\n dynamicTags.innerHTML = htmlTags.join(\"\\n\");\r\n }\r\n\r\n }\r\n}\r\n\r\nfunction tagsDynamicMapLegendCreateAndAppend(tagsJson)\r\n{\r\n const dynamicLegen = document.getElementById('mapLegendLabels');\r\n if (dynamicLegen !== null)\r\n {\r\n const tags = Object.entries(tagsJson.labels);\r\n\r\n if (tags.length >= 7)\r\n {\r\n tagsTopLabels = tags.sort((a, b) => b[1] - a[1])\r\n .slice(0, 7)\r\n .map(entry => entry[0]);\r\n\r\n const htmlTags = tagsTopLabels.map((label, index) =>\r\n {\r\n const scapedLabel = postersEscapeSpacesAndApostrophes(label);\r\n const labelClass = `map${index + 1}`;\r\n return `\r\n \r\n \r\n ${label}\r\n \r\n \r\n `;\r\n });\r\n\r\n htmlTags[7] = `\r\n \r\n Tots\r\n \r\n \r\n `;\r\n\r\n\r\n dynamicLegen.innerHTML = htmlTags.join(\"\\n\");\r\n }\r\n }\r\n}\r\n\r\nexport {tagsDynamicFetch, tagsTopLabels};\r\n\r\n\r\n\r\n","import {\r\n postersFetchAPoster, \r\n postersSetPosterResposiveWidth,\r\n postersCheckTitleOverflowAfterRendering,\r\n getPostersMaximumImageWidth,\r\n postersGetMargin,\r\n postersSetPostersFilter,\r\n postersReset\r\n} from \"./posters.js\";\r\n\r\nimport { posterCreateAndAppend } from \"./poster.js\";\r\n\r\nimport { tagsTopLabels } from \"./tags.js\";\r\nimport { browserGetBrowserHeight, browserGetBrowserWidth, browserImageIsReady } from \"./browser.js\";\r\n\r\n\r\nlet map;\r\nlet mapPostersMaximumDate;\r\nlet mapPostersFetching = false;\r\nconst mapPostersResolveValue = [];\r\nlet mapPosterIndex;\r\n// var mapInfoWindow;\r\nlet mapPostersWrapper;\r\nlet mapPosterModal;\r\nlet mapCurrentDisplayedPoster = null;\r\nconst mapMarkersLocation = [];\r\nconst mapMarkers = [];\r\nconst mapFilterLabel = [\"\"];\r\nlet mapLat = 41.97;\r\nlet mapLng = 0.99;\r\nlet mapZoom = 9;\r\n\r\nlet AdvancedMarkerElement;\r\n\r\nfunction mapGetBorderSize() {\r\n return 6;\r\n}\r\n\r\nfunction mapFetchPoster() {\r\n mapPostersFetching = true;\r\n postersFetchAPoster(posterCreateAndAppend, mapPostersWrapper)\r\n .then((th) => {\r\n if (th.wrapper !== null) {\r\n //\r\n th.wrapper.style.display = \"none\";\r\n //\r\n const parts = th.poster.dateBegin.split(\"/\");\r\n const ddate = new Date(parts[2], parts[1] - 1, parts[0]);\r\n if (ddate < mapPostersMaximumDate) {\r\n mapFetchPoster();\r\n mapPostersResolveValue.push(th);\r\n // width of the poster like the image poster plus margins\r\n browserImageIsReady(th.image).then(() => {\r\n const maximumImageWidth = getPostersMaximumImageWidth(\r\n th.image.naturalWidth,\r\n th.image.naturalHeight\r\n );\r\n postersSetPosterResposiveWidth(\r\n th.wrapper,\r\n maximumImageWidth,\r\n postersGetMargin() + mapGetBorderSize(),\r\n false\r\n );\r\n });\r\n } else {\r\n mapPostersWrapper.removeChild(th.wrapper);\r\n mapPostersFetching = false;\r\n }\r\n } else {\r\n mapPostersFetching = false;\r\n }\r\n //\r\n if (mapPostersFetching === false && mapPostersResolveValue.length === 0) {\r\n let message = \"No hi ha cartells\";\r\n if (mapFilterLabel[0] !== \"\") {\r\n message += \", amb l'etiqueta '\" + mapFilterLabel[0] + \"',\";\r\n }\r\n const radios = document.getElementsByName(\"days\");\r\n for (let i = 0; i < radios.length; i++) {\r\n if (radios[i].checked) {\r\n message += \" en els pròxims \" + radios[i].value + \" dies.\";\r\n break;\r\n }\r\n }\r\n message +=\r\n \"

Pot penjar el teu cartell a editor.elmolideponent.com\";\r\n document.getElementById(\"mapInfoErrorContent\").innerHTML = message;\r\n const modal = document.getElementById(\"mapWindowError\");\r\n modal.style.display = \"inline-block\";\r\n\r\n if (browserGetBrowserWidth() > 640) {\r\n modal.style.left = (browserGetBrowserWidth() - 640) / 2 + \"px\";\r\n modal.style.top = \"45px\";\r\n } else {\r\n modal.style.left = \"0px\";\r\n modal.style.right = \"0px\";\r\n modal.style.top = \"45px\";\r\n }\r\n }\r\n })\r\n .catch((err) => {\r\n console.log(\"Fetch Map posters error: \", err);\r\n mapPostersFetching = false;\r\n });\r\n}\r\n\r\nfunction mapSetPostersMaximunDays(days) {\r\n const now = new Date();\r\n mapPostersMaximumDate = now.setDate(now.getDate() + days);\r\n}\r\n\r\nfunction mapFetchPosters(modal, wrapper) {\r\n mapSetPostersMaximunDays(30);\r\n mapPostersWrapper = wrapper;\r\n mapPosterModal = modal;\r\n\r\n // let mapFlush = mainSetGetLabelCookie(null, \"flush\");\r\n // postersSetFlushValue(mapFlush);\r\n\r\n mapFetchPoster();\r\n}\r\n\r\nfunction mapRefetchPostersAndMarkThem() {\r\n document.getElementById(\"mainLoader\").style.display = \"inline-block\";\r\n\r\n // reseting map marking variables ------------------------------------------\r\n mapMarkersLocation.length = 0;\r\n //\r\n mapMarkers.forEach((marker) => {\r\n marker.setMap(null);\r\n });\r\n mapMarkers.length = 0;\r\n // reseting posters --------------------------------------------------------\r\n mapPostersResolveValue.length = 0;\r\n mapPosterIndex = 0;\r\n mapCurrentDisplayedPoster = null;\r\n while (mapPostersWrapper.firstChild) {\r\n mapPostersWrapper.removeChild(mapPostersWrapper.firstChild);\r\n }\r\n //\r\n postersReset();\r\n\r\n postersSetPostersFilter(mapFilterLabel[0]);\r\n\r\n // fetching the posters ans marking them in the map\r\n mapFetchPoster();\r\n mapMarking();\r\n}\r\n\r\nfunction mapGetSpriteOffset(labels) {\r\n // starting with more genercics\r\n if (labels.includes(tagsTopLabels[1])) return { x: 0, y: 55 };\r\n else if (labels.includes(tagsTopLabels[0])) return { x: 110, y: 0 };\r\n else if (labels.includes(tagsTopLabels[2])) return { x: 220, y: 0 };\r\n else if (labels.includes(tagsTopLabels[3])) return { x: 0, y: 0 };\r\n else if (labels.includes(tagsTopLabels[4])) return { x: 55, y: 0 };\r\n else if (labels.includes(tagsTopLabels[5])) return { x: 165, y: 0 };\r\n else if (labels.includes(tagsTopLabels[6])) return { x: 110, y: 55 };\r\n else return { x: 55, y: 55 };\r\n}\r\n\r\nfunction mapMarking() {\r\n if (\r\n mapPostersFetching === false &&\r\n mapPosterIndex >= mapPostersResolveValue.length\r\n ) {\r\n document.getElementById(\"mainLoader\").style.display = \"none\";\r\n return;\r\n }\r\n if (mapPosterIndex < mapPostersResolveValue.length) {\r\n let lat = mapPostersResolveValue[mapPosterIndex].poster.geoPt.latitude;\r\n let lng = mapPostersResolveValue[mapPosterIndex].poster.geoPt.longitude;\r\n let position;\r\n while (1) {\r\n const aux = mapMarkersLocation.some((marker) => {\r\n return marker.lat === lat && marker.lng === lng;\r\n });\r\n if (aux === false) {\r\n position = { lat, lng };\r\n mapMarkersLocation.push(position);\r\n break;\r\n }\r\n lat += 0.0001;\r\n lng += 0.0001;\r\n }\r\n\r\n let auxArray;\r\n if (mapFilterLabel[0] !== \"\") {\r\n auxArray = mapFilterLabel;\r\n } else {\r\n auxArray = mapPostersResolveValue[mapPosterIndex].poster.labelsList;\r\n }\r\n\r\n const offset = mapGetSpriteOffset(auxArray);\r\n const iconUrl = \"/images/markers.png\";\r\n\r\n const markerElement = document.createElement(\"div\");\r\n markerElement.className = \"custom-marker\";\r\n markerElement.style.backgroundImage = `url(${iconUrl})`;\r\n markerElement.style.width = \"55px\";\r\n markerElement.style.height = \"55px\";\r\n markerElement.style.backgroundPosition = `-${offset.x}px -${offset.y}px`;\r\n\r\n const title = mapPostersResolveValue[mapPosterIndex].poster.title;\r\n\r\n const advancedMarker = new AdvancedMarkerElement({\r\n position: position,\r\n content: markerElement,\r\n map: map,\r\n title: title\r\n });\r\n\r\n advancedMarker.addListener(\r\n \"click\",\r\n (function () {\r\n const wrapper = mapPostersResolveValue[mapPosterIndex].wrapper;\r\n return () => {\r\n if (mapCurrentDisplayedPoster !== null) {\r\n mapCurrentDisplayedPoster.style.display = \"none\";\r\n }\r\n mapCurrentDisplayedPoster = wrapper;\r\n wrapper.style.display = \"inline-block\";\r\n mapPosterModal.style.display = \"inline-block\";\r\n };\r\n })()\r\n );\r\n\r\n mapMarkers.push(advancedMarker);\r\n mapPosterIndex++;\r\n }\r\n setTimeout(mapMarking, 0);\r\n}\r\n\r\nfunction _mapCheckTitleOverflow(poster) {\r\n postersCheckTitleOverflowAfterRendering(\r\n poster,\r\n postersGetMargin() + mapGetBorderSize()\r\n );\r\n}\r\n\r\nasync function mapInit() {\r\n const params = new URL(document.location).searchParams;\r\n mapLat = parseFloat(params.get(\"lat\")) || mapLat;\r\n mapLng = parseFloat(params.get(\"lng\")) || mapLng;\r\n mapZoom = parseInt(params.get(\"zoom\")) || mapZoom;\r\n\r\n const mapElement = document.getElementById(\"map\");\r\n mapElement.style.height = browserGetBrowserHeight() - 90 + \"px\";\r\n mapElement.style.width = \"100%\";\r\n\r\n window.addEventListener(\"resize\", function (event) {\r\n mapElement.style.height = browserGetBrowserHeight() - 90 + \"px\";\r\n });\r\n\r\n const { Map } = await google.maps.importLibrary(\"maps\");\r\n const markerLibrary = await google.maps.importLibrary(\"marker\");\r\n AdvancedMarkerElement = markerLibrary.AdvancedMarkerElement;\r\n\r\n map = new Map(mapElement, {\r\n center: { lat: mapLat, lng: mapLng },\r\n zoom: mapZoom,\r\n mapId: \"POSTERS_ID\"\r\n });\r\n mapPosterIndex = 0;\r\n\r\n mapMarking();\r\n\r\n // Modal wndow info --------------------------------------------------------\r\n if (browserGetBrowserWidth() > 640) {\r\n mapPosterModal.style.left = (browserGetBrowserWidth() - 640) / 2 + \"px\";\r\n mapPosterModal.style.top = \"3px\";\r\n } else {\r\n mapPosterModal.style.left = \"0px\";\r\n mapPosterModal.style.top = \"0px\";\r\n }\r\n\r\n document.getElementById(\"mapWindowInfoLabel\").textContent = mapFilterLabel[0];\r\n\r\n const close = document.getElementById(\"mapWindowInfoClose\");\r\n close.addEventListener(\"click\", (event) => {\r\n mapPosterModal.style.display = \"none\";\r\n });\r\n\r\n // window info backward ----------------------------------------------------\r\n const backward = document.getElementById(\"mapWindowInfoBackward\");\r\n backward.addEventListener(\"click\", (event) => {\r\n mapCurrentDisplayedPoster.style.display = \"none\";\r\n //\r\n for (let ii = 0; ii < mapPostersWrapper.children.length; ii++) {\r\n for (let i = 0; i < mapPostersWrapper.children.length; i++) {\r\n if (mapPostersWrapper.children[i] === mapCurrentDisplayedPoster) {\r\n if (i === 0)\r\n mapCurrentDisplayedPoster =\r\n mapPostersWrapper.children[mapPostersWrapper.children.length - 1];\r\n else mapCurrentDisplayedPoster = mapPostersWrapper.children[i - 1];\r\n break;\r\n }\r\n }\r\n // is visible in the map?\r\n const lat = parseFloat(\r\n mapCurrentDisplayedPoster.getAttribute(\"data-post-lat\")\r\n );\r\n const lng = parseFloat(\r\n mapCurrentDisplayedPoster.getAttribute(\"data-post-lng\")\r\n );\r\n if (map.getBounds().contains({ lat, lng })) {\r\n break;\r\n }\r\n }\r\n //\r\n mapCurrentDisplayedPoster.style.display = \"inline-block\";\r\n _mapCheckTitleOverflow(mapCurrentDisplayedPoster);\r\n });\r\n\r\n // window info forward -----------------------------------------------------\r\n const forward = document.getElementById(\"mapWindowInfoForward\");\r\n forward.addEventListener(\"click\", (event) => {\r\n mapCurrentDisplayedPoster.style.display = \"none\";\r\n //\r\n for (let ii = 0; ii < mapPostersWrapper.children.length; ii++) {\r\n for (let i = 0; i < mapPostersWrapper.children.length; i++) {\r\n if (mapPostersWrapper.children[i] === mapCurrentDisplayedPoster) {\r\n if (i === mapPostersWrapper.children.length - 1)\r\n mapCurrentDisplayedPoster = mapPostersWrapper.children[0];\r\n else mapCurrentDisplayedPoster = mapPostersWrapper.children[i + 1];\r\n break;\r\n }\r\n }\r\n // is visible in the map?\r\n const lat = parseFloat(\r\n mapCurrentDisplayedPoster.getAttribute(\"data-post-lat\")\r\n );\r\n const lng = parseFloat(\r\n mapCurrentDisplayedPoster.getAttribute(\"data-post-lng\")\r\n );\r\n if (map.getBounds().contains({ lat, lng })) {\r\n break;\r\n }\r\n }\r\n //\r\n mapCurrentDisplayedPoster.style.display = \"inline-block\";\r\n _mapCheckTitleOverflow(mapCurrentDisplayedPoster);\r\n });\r\n\r\n // radios legend -----------------------------------------------------------\r\n const radios = document.getElementsByName(\"days\");\r\n [].forEach.call(radios, (radio) => {\r\n radio.addEventListener(\"change\", (event) => {\r\n if (event.target.checked) {\r\n mapSetPostersMaximunDays(parseInt(event.target.value));\r\n mapRefetchPostersAndMarkThem();\r\n }\r\n });\r\n });\r\n\r\n const legend = document.getElementById(\"mapLegend\");\r\n map.controls[google.maps.ControlPosition.LEFT_CENTER].push(legend);\r\n\r\n // labels filters ----------------------------------------------------------\r\n const radios2 = document.getElementsByName(\"labelFilter\");\r\n radios2.forEach((radio2) => {\r\n if (!radio2.onchange) {\r\n radio2.addEventListener(\"change\", (event) => {\r\n mapRadioLabelFilterChange(event);\r\n });\r\n }\r\n });\r\n}\r\n\r\nfunction mapRadioLabelFilterChange(event) {\r\n if (event.target.checked) {\r\n mapFilterLabel[0] = event.target.value;\r\n document.getElementById(\"mapWindowInfoLabel\").textContent =\r\n mapFilterLabel[0];\r\n mapRefetchPostersAndMarkThem();\r\n }\r\n}\r\n\r\nexport { mapInit, mapFetchPosters, mapRadioLabelFilterChange };\r\n\r\n\r\n","import CONFIG from \"./../config.json\";\n\n\nfunction empOnClickLink(event, element) {\n event.preventDefault();\n\n var overlay = document.createElement('div');\n overlay.style.position = 'fixed';\n overlay.style.top = '0';\n overlay.style.left = '0';\n overlay.style.width = '100%';\n overlay.style.height = '100%';\n overlay.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';\n overlay.style.backdropFilter = 'blur(10px)';\n overlay.style.zIndex = '999';\n overlay.style.display = 'flex';\n overlay.style.flexDirection = 'column';\n overlay.style.justifyContent = 'center';\n overlay.style.alignItems = 'center';\n\n var loadingImage = document.createElement('img');\n loadingImage.src = '../cartells_192.png';\n loadingImage.alt = 'Loading...';\n loadingImage.style.marginBottom = '20px';\n \n var linkImage = document.createElement('a');\n linkImage.href = 'https://cartells.elmolideponent.com';\n\n var link2 = document.createElement('a');\n link2.href = 'https://editor.elmolideponent.com';\n link2.innerText = 'editor.elmolideponent.com';\n link2.style.color = 'white';\n link2.style.textDecoration = 'none';\n link2.style.marginBottom = '10px';\n\n var link1 = document.createElement('a');\n link1.href = 'https://cartells.elmolideponent.com';\n link1.innerText = 'cartells.elmolideponent.com';\n link1.style.color = 'white';\n link1.style.textDecoration = 'none';\n \n linkImage.appendChild(loadingImage);\n overlay.appendChild(linkImage);\n overlay.appendChild(link2);\n overlay.appendChild(link1);\n\n document.body.appendChild(overlay);\n\n window.location.href = element.href;\n}\n\n\n\nfunction empEditorWakeUp()\n{\n //\n try {\n fetch(`${CONFIG.posters_editor_url}/wakeup`);\n } catch (e) {\n\n }\n}\n\nexport { empOnClickLink, empEditorWakeUp };\n\n\n","import CONFIG from \"./../config.json\";\nimport {browserGetCookie, browserSetCookie} from \"./browser.js\" ;\nconst COOKIE_NAME = \"subscription-src\";\n\n\n\n\nfunction subscriptionSendNewConnection() {\n\n const urlParams = new URLSearchParams(window.location.search);\n const token = urlParams.get('token');\n\n // send one a day \n if (!token && browserGetCookie(COOKIE_NAME))\n return;\n\n browserSetCookie(COOKIE_NAME, \"posters\", 1);\n \n const url = `${CONFIG.subscription_url}/api/user/posters/visit`;\n if (token) url.searchParams.append(\"token\", token); \n\n try {\n fetch(url, {\n method: \"GET\",\n credentials: 'include'\n });\n } catch (e) {\n Log.print('Subscription Send New Connection Error:' + e);\n }\n\n}\n\n\nfunction subscriptionLoadForm() {\n const mainSubscriptionDiv = document.getElementById('mainSubscription');\n\n if (!mainSubscriptionDiv)\n return;\n\n mainSubscriptionDiv.innerHTML = `\n
\n
Segueix-nos
\n
\n \n \n
\n
\n\n \n
\n
\n
T'estàs subscribint a Cartells de Ponent.
\n
T'enviarem un correu electrònic de verificació.
\n
Vols continuar?
\n
\n \n \n
\n
\n
\n `;\n\n const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\n\n document.getElementById(\"subscribe-button\").addEventListener(\"click\", function () {\n const email = document.getElementById(\"email\").value;\n\n if (emailPattern.test(email)) {\n document.getElementById(\"subscription-modal\").style.display = \"flex\";\n } else {\n alert(\"L'email no és vàlid.\");\n }\n });\n\n document.getElementById(\"subscription-confirm-button\").addEventListener(\"click\", function () {\n const email = document.getElementById(\"email\").value;\n\n document.getElementById(\"subscription-modal\").style.display = \"none\";\n\n fetch(`${CONFIG.subscription_url}/api/subscription/petition`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n body: new URLSearchParams({\n to: email\n })\n })\n .then(response => response.json())\n .then(data => {\n console.log(\"Molt bé: \" + data.message);\n })\n .catch(error => {\n console.log(\"Hi ha hagut algun problema: \" + error);\n });\n });\n\n document.getElementById(\"subscription-cancel-button\").addEventListener(\"click\", function () {\n document.getElementById(\"subscription-modal\").style.display = \"none\";\n });\n}\n\n\nexport { subscriptionSendNewConnection, subscriptionLoadForm };\n","import { mainStartUp } from \"./js/main.js\";\r\nimport { analyticsInit } from \"./js/analytics.js\";\r\nimport { controlStartUp } from \"./js/control.js\";\r\nimport { browserMenuToggleInit, onBrowserTooltip } from \"./js/browser.js\";\r\nimport { tagsDynamicFetch } from \"./js/tags.js\";\r\nimport { mapInit, mapFetchPosters, mapRadioLabelFilterChange } from \"./js/map.js\";\r\nimport { Log } from \"./js/log.js\";\r\nimport { empOnClickLink, empEditorWakeUp } from \"./js/emp.js\";\r\nimport { posterRender, posterParseDocument } from \"./js/poster.js\";\r\nimport { linksCreate } from \"./js/links.js\";\r\nimport { adsensePushFullAds} from \"./js/adsense.js\";\r\nimport { subscriptionSendNewConnection, subscriptionLoadForm } from \"./js/subscription.js\";\r\n\r\n\r\n\r\nfunction startMain(label = null, town = null, region = null) {\r\n mainStartUp(label, town, region);\r\n analyticsInit(false);\r\n controlStartUp(\"mainSentinel\");\r\n browserMenuToggleInit(\r\n \"mainMenuButton\",\r\n \"mainMenuNav\",\r\n \"mainMenuNavInvisible\",\r\n \"mainMenuClose\"\r\n );\r\n tagsDynamicFetch();\r\n subscriptionLoadForm();\r\n subscriptionSendNewConnection();\r\n empEditorWakeUp();\r\n}\r\n\r\nfunction startPage()\r\n{\r\n analyticsInit(false);\r\n browserMenuToggleInit(\r\n 'mainMenuButton',\r\n 'mainMenuNav',\r\n 'mainMenuNavInvisible',\r\n 'mainMenuClose');\r\n posterRender();\r\n posterParseDocument();\r\n tagsDynamicFetch();\r\n subscriptionLoadForm();\r\n subscriptionSendNewConnection();\r\n empEditorWakeUp();\r\n}\r\n\r\nfunction startLinks()\r\n{\r\n linksCreate('posterLinksWrapper');\r\n controlStartUp('posterSentinel');\r\n}\r\n\r\nfunction startList()\r\n{\r\n analyticsInit(false);\r\n browserMenuToggleInit(\r\n 'mainMenuButton',\r\n 'mainMenuNav',\r\n 'mainMenuNavInvisible',\r\n 'mainMenuClose');\r\n}\r\n\r\nfunction startMap() {\r\n Log.init();\r\n mapInit();\r\n tagsDynamicFetch();\r\n mapFetchPosters(\r\n document.getElementById(\"mapWindowInfo\"),\r\n document.getElementById(\"mapPosters\")\r\n );\r\n analyticsInit(false);\r\n subscriptionLoadForm();\r\n browserMenuToggleInit(\r\n \"mainMenuButton\",\r\n \"mainMenuNav\",\r\n \"mainMenuNavInvisible\",\r\n \"mainMenuClose\"\r\n );\r\n}\r\n\r\nwindow.startMain = startMain;\r\nwindow.startPage = startPage;\r\nwindow.startLinks = startLinks;\r\nwindow.startList = startList;\r\nwindow.startMap = startMap;\r\nwindow.empOnClickLink = empOnClickLink;\r\nwindow.adsensePushFullAds = adsensePushFullAds;\r\nwindow.mapRadioLabelFilterChange = mapRadioLabelFilterChange;\r\nwindow.onBrowserTooltip = onBrowserTooltip;\r\nwindow.analyticsInit = analyticsInit;\r\nwindow.subscriptionLoadForm = subscriptionLoadForm;\r\n","import { pageFetchPosters, pageGetNextPageHref } from \"./page.js\";\nimport {\n postersExcludePoster,\n postersEscapeSpacesAndApostrophes,\n postersGetDateString,\n postersGetEndDateOrTime\n} from \"./posters.js\";\n\nfunction linksCreateAndAppend(poster, parent) {\n let relativeLink =\n encodeURIComponent(postersEscapeSpacesAndApostrophes(poster.id)) +\n \".html?id=\" +\n poster.publisherId;\n\n let template =\n \"
\" +\n \"
\" +\n postersGetDateString(poster.dateBegin) +\n \" \" +\n postersGetEndDateOrTime(\n poster.dateBegin,\n poster.dateEnd,\n poster.timeBegin\n ) +\n \"
\" +\n \"
\" +\n \"\" +\n poster.title +\n \"\" +\n \"
\";\n\n if (poster.subtitle !== \"\") {\n template += \"
\" + poster.subtitle + \"
\";\n }\n template += \"
\"; // posterListBlock\n template += \"
\";\n poster.labelsList.forEach((value) => {\n template +=\n \"\" +\n value +\n \"\";\n });\n template +=\n \"\" +\n poster.town +\n \"\";\n\n template +=\n \"\" +\n poster.region +\n \"\";\n\n template += \"
\"; // posterLabelWrapper\n\n template +=\n \"
\" +\n \"
Gràcies per compartir-ho\" +\n \"
\" +\n \"
\";\n\n let wrapper = document.createElement(\"div\");\n wrapper.innerHTML = template;\n wrapper.setAttribute(\"class\", \"posterListWrapper\");\n\n parent.appendChild(wrapper);\n\n return wrapper;\n}\n\nfunction linksCreate(parentId) {\n let parent = document.getElementById(parentId);\n\n let posterWrapper = document.getElementsByClassName(\"posterWrapper\")[0];\n\n postersExcludePoster(\n posterWrapper.getAttribute(\"data-author-id\"),\n posterWrapper.getAttribute(\"data-post-id\")\n );\n\n // postersFetchAPoster(linksCreateAndAppend, parent);\n // postersFetchAPoster(linksCreateAndAppend, parent);\n // postersFetchAPoster(linksCreateAndAppend, parent);\n\n // let linksFlush = mainSetGetLabelCookie(null, \"flush\");\n // postersSetFlushValue(linksFlush);\n\n pageFetchPosters(parent, \"\", \"\", \"\", 0).then((isThereMorePosters) => {\n if (isThereMorePosters === true) {\n document.getElementById(\"posterNextPageButtonWrapper\").style.display =\n \"block\";\n document\n .getElementById(\"posterNextPageButton\")\n .setAttribute(\"href\", pageGetNextPageHref());\n } else {\n document.getElementById(\"posterNextPageButtonWrapper\").style.display =\n \"none\";\n }\n });\n}\n\nexport { linksCreate, linksCreateAndAppend };\n"],"names":["BROWSER_SMALL_SCREEN","browserGetBrowserWidth","document","body","clientWidth","browserGetBrowserHeight","window","innerHeight","clientHeight","browserSetCookie","cname","cvalue","exdays","d","Date","setTime","getTime","expires","toUTCString","cookie","browserGetCookie","name","ca","split","i","length","c","charAt","substring","indexOf","browserImageIsReady","image","Promise","resolve","reject","complete","addEventListener","e","Error","concat","browserMenuToggleInit","buttonId","menuId","classToggle","closeMenuId","menuContainer","getElementById","innerHTML","button","close","menu","event","preventDefault","classList","toggle","contains","isClickInsideMenu","target","isClickInsideButton","isClickInsideClose","add","_cacheTime","cacheGetCacheTime","Log","_classCallCheck","key","value","_this","consoleDebug","arguments","undefined","serverDebug","this","_browserConsoleDebug","_serverDebug","onerror","message","print","console","log","fetch","method","encodeURIComponent","headers","AUTHORS_FETCH_NUMBER","authorsCards","authorsFetching","authorsToResolve","authorsAllDownloaded","authorsFlushCache","authorsCursor","authorsGet","id","_step","_iterator","_createForOfIteratorHelper","s","n","done","authorCard","err","f","authorsFetchFromServer","resource","CONFIG","cacheTime","then","response","json","aux","push","apply","list","cursor","au","shift","author","imageUrl","authorWebLink","activity","error","_mapsMappedRegions","_mapsMappedLabels","mapsLabel","region","label","postersEscapeSpacesAndApostrophes","includes","mapsTown","town","validateAndReturnHtml","description","allowedTags","match","regex","exec","tag","toLowerCase","isValidHtml","POSTER_MINIMUM_WIDTH","posterRender","wrappers","getElementsByClassName","forEach","call","poster","posterImages","maximumImageWidth","getPostersMaximumImageWidth","naturalWidth","naturalHeight","postersSetPosterResposiveWidth","posterParse","element","navigator","share","anchor","createElement","setAttribute","href","innerText","appendChild","urlString","dataset","url","posterCreateAndAppend","parent","posterElement","wrapper","publisherId","geoPt","longitude","latitude","beginDate","endDate","time","relativeLink","posterTemplate","title","subtitle","pictureUrl","dateBegin","join","postersGetDateString","dateEnd","timeBegin","dateString","postersGetTimeString","webLink","comments","labelsList","posterCreatePosterElement","posterAppendAuthor","auxElement","authorWrappers","getAttribute","_authorGetWebLink","authorsGetCard","ADSENSE_MAXIMUM_WIDTH","adsensePush","adsbygoogle","adsenseAddAndPush","ad","width","template","style","minHeight","textAlign","MutationObserver","asdenseCallback","observe","attributes","mutations","observer","mutation","type","attributeName","adStatus","parentElement","display","disconnect","_controlIsIntersecting","_controlCallback","_controlIO","_controlElement","controlStartUp","controlIdName","unobserve","IntersectionObserver","entries","isIntersecting","analyticsPush","dataLayer","analyticsInit","sendPageView","script","src","async","head","append","pagePostersResolve","pagePostersReject","_pagePostersFilter","_pagePostersTown","_pagePostersRegion","_pageWrapper","PAGE_MAXIMUM_POSTER_NUMBER","_pageCurrentLineWidth","_pageHiddenPosterWrapper","_pagePostersNumber","_pagePostersImagesNumber","pageFetchNumber","_pageNoPoster","_pageAdsNumber","_pageMinimumPostersNumber","_pageEndingLine","pagePxSizeToInt","css","parseInt","replace","pageIsNewLine","postersGetMargin","pageFetch","pageElement","postersFetchAPoster","th","Math","floor","postersGetPosterResposiveWidth","auxItems","pageFetchMorePosters","every","item","pageIsLineFinished","pageFetchEnd","newPageFetch","toString","event_category","final","ads","pageFetchPosters","index","_postersToReturn","_postersToResolve","_postersAbsoluteIndex","_postersIndex","POSTERS_FETCH_NUMBER","postersSaveCursor","_postersBatchNumber","postersSetPostersIndexAndCursor","postersSetPostersFilter","_postersFilterRegion","_postersFilterTown","postersSetRegionTownFilter","auxPosters","auxImages","pageGetNextPageHref","currentIndex","ret","process","absoluteIndex","postersGetCursor","_postersElementWrapper","_postersReject","POSTERS_BIG_SCREENS_MARGIN","POSTERS_SMALL_SCREENS_MARGIN","POSTERS_SCREEN_BOUNDARY","POSTERS_IMAGE_MAXIMUM_SIZE","_posters","_postersEntries","_postersAllDownloaded","_postersFetching","_postersFilter","_postersFilterPublisherId","_postersCursor","margin","checkTitleOverflow","postersCheckTitleOverflowAfterRendering","action","titleWidth","posterTitle","offsetWidth","postersGetPosterTitleWidth","requestAnimationFrame","setTimeout","browserWidth","postersExcludePoster","posterPublisherId","posterId","date","parts","toLocaleDateString","weekday","year","month","day","toUpperCase","slice","str","_postersFetch","createAndAppend","_postersFetchFromServer","currentPoster","batchNumber","_postersQueryLink","getMonth","getDate","filter","mainGetString","param","mainStartUp","params","URL","location","searchParams","mainIndex","get","mainLabel","mainTown","mainRegion","mainCursor","lastUnloadTime","lastUnloadURL","currentURL","now","IfQuickReloadFlushEverything","mainPostersWrapper","postersLoaded","isThereMorePosters","text","textContent","mainOtherPosters","mainOtherPostersWrapper","_mainOthersPosters","stack","alert","map","mapPostersMaximumDate","tagsTopLabels","tagsDynamicFetch","tagsJson","dynamicTags","allTags","_toConsumableArray","Object","towns","_ref","_ref2","_slicedToArray","labels","_ref3","_ref4","htmlTags","sort","a","b","entry","path","tagsDynamicCreateAndAppend","dynamicLegen","tags","labelClass","tagsDynamicMapLegendCreateAndAppend","_regeneratorRuntime","t","r","prototype","hasOwnProperty","o","defineProperty","Symbol","iterator","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","arg","h","l","y","GeneratorFunction","GeneratorFunctionPrototype","p","getPrototypeOf","v","values","g","defineIteratorMethods","_invoke","AsyncIterator","invoke","_typeof","__await","callInvokeWithMethodAndArg","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","isNaN","displayName","isGeneratorFunction","constructor","mark","setPrototypeOf","__proto__","awrap","keys","reverse","pop","prev","stop","rval","handle","finish","delegateYield","asyncGeneratorStep","mapPosterIndex","mapPostersWrapper","mapPosterModal","AdvancedMarkerElement","mapPostersFetching","mapPostersResolveValue","mapCurrentDisplayedPoster","mapMarkersLocation","mapMarkers","mapFilterLabel","mapLat","mapLng","mapZoom","mapFetchPoster","removeChild","radios","getElementsByName","checked","modal","left","top","right","mapSetPostersMaximunDays","days","setDate","mapRefetchPostersAndMarkThem","marker","setMap","firstChild","mapMarking","position","lat","lng","some","offset","x","markerElement","className","backgroundImage","height","backgroundPosition","advancedMarker","content","addListener","_mapCheckTitleOverflow","_mapInit","_callee","mapElement","_yield$google$maps$im","Map","markerLibrary","legend","_context","parseFloat","google","maps","importLibrary","center","zoom","mapId","ii","children","getBounds","radio","controls","ControlPosition","LEFT_CENTER","radio2","onchange","mapRadioLabelFilterChange","_next","_throw","empEditorWakeUp","COOKIE_NAME","subscriptionSendNewConnection","token","URLSearchParams","search","credentials","subscriptionLoadForm","mainSubscriptionDiv","emailPattern","email","test","to","data","startMain","startPage","startLinks","posterWrapper","startList","startMap","init","mapInit","empOnClickLink","overlay","backgroundColor","backdropFilter","zIndex","flexDirection","justifyContent","alignItems","loadingImage","alt","marginBottom","linkImage","link2","color","textDecoration","link1","adsensePushFullAds","onBrowserTooltip","tooltipText","marginLeft","getBoundingClientRect"],"sourceRoot":""}