{"version":3,"file":"simple.v345.js","mappings":"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","sources":["webpack://posts/./src/main/webapp/js/log.js","webpack://posts/./src/main/webapp/js/strings.js","webpack://posts/./src/main/webapp/js/canonical.js","webpack://posts/./src/main/webapp/js/authorsList.js","webpack://posts/./src/main/webapp/js/authorsPostsIds.js","webpack://posts/./src/main/webapp/js/authorsIds.js","webpack://posts/./src/main/webapp/js/browser.js","webpack://posts/./src/main/webapp/js/cache.js","webpack://posts/./src/main/webapp/js/pool.js","webpack://posts/./src/main/webapp/js/adsense.js","webpack://posts/./src/main/webapp/js/rest.js","webpack://posts/./src/main/webapp/js/posts.js","webpack://posts/./src/main/webapp/js/authors.js","webpack://posts/./src/main/webapp/js/ld.js","webpack://posts/./src/main/webapp/js/comments.js","webpack://posts/./src/main/webapp/js/post.js","webpack://posts/./src/main/webapp/js/content.js","webpack://posts/./src/main/webapp/js/thumbs.js","webpack://posts/./src/main/webapp/js/postersWrapper.js","webpack://posts/./src/main/webapp/js/layout.js","webpack://posts/./src/main/webapp/js/map.js","webpack://posts/./src/main/webapp/js/list.js","webpack://posts/./src/main/webapp/js/subscription.js","webpack://posts/./src/main/webapp/starts.js","webpack://posts/./src/main/webapp/js/page.js"],"sourcesContent":["/* 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","/* Copyright (c) 2023 joanribalta@elmolideponent.com */\n\nimport {Log} from './log.js';\nconst _STRINGS_API_CLIENT_KEY = \"AIzaSyDFr6vHYHoTFEVaBgnAkrSV5wZae_4fiHM\";\nlet STRINGS;\nlet _stringsLang = \"\";\nlet _externalKey = null;\n\nconst _stringsCa = {\n lang: \"ca\",\n locale: \"ca-ES\",\n fb_locale: \"es_ES\",\n blogId: \"6997625422782496180\",\n\n Restaurant: \"Restaurant\",\n Excursion: \"Excursió\",\n Places: \"Llocs\",\n Event: \"Festa\",\n Gastronomy: \"Gastronomia\",\n Lodging: \"Allotjament\",\n Stones: \"Pedres\",\n Sports: \"Esports\",\n Activity: \"Activitat\",\n Organised: \"Activitats organitzades\",\n Pyrenees: \"Pirineus\",\n LandsOfLleida: \"Terres de Lleida\",\n\n Location: \"Localització\",\n Labels: \"Etiquetes\",\n MapCaption: \"Clicka per mapa interactiu\",\n Published: \"Publicat per \",\n PublicationsOf: \"Publicacions de \",\n Sharing: \"Gràcies per compatir-ho\",\n Share: \"Compartir\",\n in: \" a \",\n Comment: \"Comenteu\",\n Comments: \"Comentaris\",\n\n Header:\n \"Paratges, camins, llocs on perdre's, reposar, avituallar-se i descobrir, lluny de les carreteres principals.\",\n Sections: \"Seccions\",\n Regions: \"Comarques\",\n\n CopyPictures: \"Fotografies: \",\n Translator: \"Traductor: \",\n\n More: \"Llegueix la resta del post ...\",\n};\n\nconst _stringsEs = {\n lang: \"es\",\n locale: \"es-ES\",\n fb_locale: \"es_ES\",\n blogId: \"6008874204945714296\",\n\n Restaurant: \"Restaurante\",\n Excursion: \"Excursión\",\n Places: \"Lugares\",\n Event: \"Fiesta\",\n Gastronomy: \"Gastronomía\",\n Lodging: \"Alojamiento\",\n Stones: \"Piedras\",\n Sports: \"Deportes\",\n Activity: \"Actividad\",\n Organised: \"Actividades organizadas\",\n Pyrenees: \"Pirineos\",\n LandsOfLleida: \"Tierras de Lleida\",\n\n Location: \"Localización\",\n Labels: \"Etiquetas\",\n MapCaption: \"Clicka para mapa interactivo\",\n Published: \"Publicado por \",\n PublicationsOf: \"Publicaciones de \",\n Sharing: \"Gracias por compartirlo\",\n Share: \"Compartir\",\n in: \" en \",\n Comment: \"Comentar\",\n Comments: \"Comentarios\",\n\n Header:\n \"Paratges, camins, llocs on perdre's, reposar, avituallar-se i descobrir, lluny de les carreteres principals.\",\n Sections: \"Secciones\",\n Regions: \"Comarcas\",\n\n CopyPictures: \"Fotografías: \",\n Translator: \"Traductor: \",\n\n More: \"Lee el post entero ...\",\n};\n\nconst _stringsEn = {\n lang: \"en\",\n locale: \"en-GB\",\n fb_locale: \"en_GB\",\n blogId: \"1299565222170668810\",\n\n Restaurant: \"Restaurant\",\n Excursion: \"Excursion\",\n Places: \"Places\",\n Event: \"Event\",\n Gastronomy: \"Gastronomy\",\n Lodging: \"Lodging\",\n Stones: \"Stones\",\n Sports: \"Sports\",\n Activity: \"Activity\",\n Organised: \"What's hot\",\n Pyrenees: \"Pyrenees\",\n LandsOfLleida: \"Lands of Lleida\",\n\n Location: \"Location\",\n Labels: \"Labels\",\n MapCaption: \"Click for interactive map\",\n Published: \"Published by \",\n PublicationsOf: \"Publications of \",\n Sharing: \"Thanks for sharing\",\n Share: \"Share\",\n in: \" in \",\n Comment: \"Comment\",\n Comments: \"Comments\",\n\n Header:\n \"Paratges, camins, llocs on perdre's, reposar, avituallar-se i descobrir, lluny de les carreteres principals.\",\n Sections: \"Sections\",\n Regions: \"Regions\",\n\n CopyPictures: \"Pictures: \",\n Translator: \"Translator: \",\n\n More: \"Read the rest of the post ...\",\n};\n\nfunction stringsGetRegion(labelList) {\n if (!labelList) {\n return null;\n }\n\n for (let label of labelList) {\n switch (label) {\n case STRINGS[\"LandsOfLleida\"]:\n case STRINGS[\"Pyrenees\"]:\n return label;\n break;\n }\n }\n return null;\n}\n\n\nfunction stringsGetMainLabel(labelList) {\n if (!labelList) {\n Log.print(\"There is a post with no label defined.\");\n return \"NoLabelDefined\";\n }\n\n for (let label of labelList) {\n switch (label) {\n case STRINGS[\"Restaurant\"]:\n case STRINGS[\"Excursion\"]:\n case STRINGS[\"Places\"]:\n case STRINGS[\"Event\"]:\n case STRINGS[\"Gastronomy\"]:\n case STRINGS[\"Lodging\"]:\n case STRINGS[\"Stones\"]:\n case STRINGS[\"Sports\"]:\n case STRINGS[\"Activity\"]:\n return label;\n break;\n }\n }\n return labelList[0];\n}\n\n// english version uses spanish blog\nfunction stringsTranslateLabel(label) {\n // translate form spanish\n if (_stringsLang === \"en\") {\n switch (label) {\n case \"Restaurant\":\n return \"Restaurants\";\n case \"Excursion\":\n return \"Excursions\";\n case \"Place\":\n return \"Places\";\n case \"Event\":\n return \"Events\";\n case \"Lodging\":\n return \"Lodgings\";\n case \"Activity\":\n return \"Activities\";\n default:\n return label;\n }\n } else if (_stringsLang === \"ca\") {\n switch (label) {\n case \"Restaurant\":\n return \"Restaurants\";\n case \"Excursió\":\n return \"Excursions\";\n case \"Festa\":\n return \"Festes\";\n case \"Allotjament\":\n return \"Allotjaments\";\n case \"Activitat\":\n return \"Activitats\";\n default:\n return label;\n }\n } else {\n switch (label) {\n case \"Restaurante\":\n return \"Restaurantes\";\n case \"Excursión\":\n return \"Excursiones\";\n case \"Fiesta\":\n return \"Fiestas\";\n case \"Alojamiento\":\n return \"Alojamientos\";\n case \"Actividad\":\n return \"Actividades\";\n default:\n return label;\n }\n }\n}\n\nfunction stringsInit(lang) {\n _stringsLang = lang;\n\n if (lang === \"ca\") {\n STRINGS = _stringsCa;\n } else if (lang === \"es\") {\n STRINGS = _stringsEs;\n } else {\n STRINGS = _stringsEn;\n }\n}\n\nfunction stringsSetGoogleClientKey(newkey) {\n _externalKey = newkey;\n}\n\nfunction stringsGetGoogleClientKey() {\n if (_externalKey !== null) {\n return _externalKey;\n }\n return _STRINGS_API_CLIENT_KEY;\n}\n\nexport {\nstringsInit,\n stringsGetMainLabel,\n stringsGetRegion,\n stringsTranslateLabel,\n stringsGetGoogleClientKey,\n stringsSetGoogleClientKey,\n STRINGS\n };\n","/* Copyright (c) 2024 joanribalta@elmolideponent.com */\n\nimport {STRINGS} from './strings.js';\n\nlet _CANONICAL = {};\n\nconst _canonicalCa =\n { \n \"camarasa\": \"Terres-de-Lleida/Camarasa\",\n \"terres-de-lleida\": \"Terres-de-Lleida\",\n \"que-puc-fer-la-noguera\": \"La-Noguera\",\n \"agramunt\": \"Terres-de-Lleida/Agramunt\",\n \"la-muralla-gotica-de-balaguer\": \"Terres-de-Lleida/Balaguer\",\n \"tarrega\": \"Terres-de-Lleida/Tàrrega\",\n \"alos-de-balaguer\": \"Terres-de-Lleida/Alòs-de-Balaguer\",\n \"val-daran-vielha\": \"Val-d%27Aran\",\n \"sant-llorenc-de-montgai\": \"Terres-de-Lleida/Sant-Llorenç-de-Montgai\",\n \"congost-del-mu-camarasa-alos-de-balaguer\": \"Congost-del-Mu\",\n \"els-millors-restaurants-de-les-terres\": \"Terres-de-Lleida/Restaurant\",\n \"els-pirineus\": \"Pirineus\",\n \"refugis-del-pirineu\": \"Pirineus/Refugi\",\n \"grans-travesses-del-pirineu\": \"Pirineus/Excursió\",\n \"esports-dhivern\": \"Pirineus/Esports-d%27hivern\"\n };\n\nconst _canonicalEs =\n { \n \"que-puedo-hacer-en-las-tierras-de-lleida\": \"Tierras-de-Lleida\",\n \"que-puedo-hacer-en-la-comarca-de-la\": \"La-Noguera\",\n \"la-muralla-de-balaguer\": \"Tierras-de-Lleida/Balaguer\",\n \"alos-de-balaguer\": \"Tierras-de-Lleida/Alòs-de-Balaguer\",\n \"val-daran-vielha\": \"Val-d%27Aran\",\n \"sant-llorenc-de-montgai\": \"Tierras-de-Lleida/Sant-Llorenç-de-Montgai\",\n \"congost-de-mu-segre.html\": \"Congost-del-Mu\",\n \"los-mejores-restaurantes-del-valle-de\": \"Val-d%27Aran/Restaurante\",\n \"que-puedo-hacer-en-agramunt\": \"Tierras-de-Lleida/Agramunt\",\n \"el-pirineo-naturaleza-patrimonio-y\": \"Pirineos\"\n };\n\nconst _canonicalEn =\n { \n \"what-can-i-do-in-lands-of-lleida\": \"Lands-of-Lleida\",\n \"introduction-to-balaguer-from-wall\": \"Lands-of-Lleida/Balaguer\",\n \"what-can-i-do-in-noguera-region-balaguer\": \"La-Noguera\",\n \"val-daran-vielha\": \"Val-d%27Aran\",\n \"sant-llorenc-de-montgai-climbing\": \"Lands-of-Lleida/Sant-Llorenç-de-Montgai\",\n \"congost-del-mu-hiking-along-bank-of\": \"Congost-del-Mu\",\n \"the-pyrenees-nature-heritage-and\": \"Pyrenees\"\n };\n\nfunction canonicalGet(url)\n{\n let canonical = url;\n\n if (url.endsWith(\".html\"))\n {\n let fileNameIndex = url.lastIndexOf(\"/\");\n let fileName = url.substring(fileNameIndex + 1, url.length - 5);\n let newName = _CANONICAL[fileName];\n if (newName !== undefined)\n {\n let firstLocaleIndex = url.indexOf(STRINGS['lang'] + '/') + 3;\n canonical = url.substring(0, firstLocaleIndex) + newName;\n }\n }\n return canonical;\n}\n\n\nfunction canonicalInit(lang)\n{\n if (lang === 'ca')\n {\n _CANONICAL = _canonicalCa;\n } else if (lang === 'es')\n {\n _CANONICAL = _canonicalEs;\n } else\n {\n _CANONICAL = _canonicalEn;\n }\n}\n\nexport { canonicalInit, canonicalGet }\n\n\n\n\n","/* Copyright (c) 2024 joanribalta@elmolideponent.com */\n\nimport { AUTHORS_IDS_ELMOLI_ID } from \"./authorsIds.js\";\nimport {STRINGS} from './strings.js'\n\n\n\nlet _AUTHORS_LIST_EL_MOLI_DESCRIPTION = \"\";\nlet _AUTHORS_LIST_EL_MOLI_MESSAGE = \"\";\n\nconst _AUTHORS_LIST_EL_MOLI_MESSAGE_CA = `\n
\n
\n
Volem ser el teu restaurant,
\n
el lloc on celebres,
\n
on gaudeixes amb els teus.
\n
\n
\n
Truca'ns al 629 23 08 67
\n
o envia'ns un WhatsApp
\n
\n
\n`;\n\nconst _AUTHORS_LIST_EL_MOLI_DESCRIPTION_CA =\n \"Volem ser el teu restaurant, el lloc on celebres, on gaudeixes amb els teus. Truca'ns al 629 23 08 67\";\n\n// Spanish\nconst _AUTHORS_LIST_EL_MOLI_MESSAGE_ES = `\n
\n
\n
Queremos ser tu restaurante,
\n
el lugar donde celebras,
\n
donde disfrutas con los tuyos.
\n
\n
\n
Llámanos al 629 23 08 67
\n
o envíanos un WhatsApp
\n
\n
\n`;\n\nconst _AUTHORS_LIST_EL_MOLI_DESCRIPTION_ES =\n \"Queremos ser tu restaurante, el lugar donde celebras, donde disfrutas con los tuyos. Llámanos al 629 23 08 67\";\n\n// English\nconst _AUTHORS_LIST_EL_MOLI_MESSAGE_EN = `\n
\n
\n
We want to be your restaurant,
\n
the place where you celebrate,
\n
where you enjoy with your loved ones.
\n
\n
\n
Call us at 629 23 08 67
\n
or send us a WhatsApp
\n
\n
\n`;\n\nconst _AUTHORS_LIST_EL_MOLI_DESCRIPTION_EN =\n \"We want to be your restaurant, the place where you celebrate, where you enjoy with your loved ones. Call us at 629 23 08 67\";\n\nfunction authorsListInit(lang)\n{\n if (lang === 'ca')\n {\n _AUTHORS_LIST_EL_MOLI_DESCRIPTION = _AUTHORS_LIST_EL_MOLI_DESCRIPTION_CA;\n _AUTHORS_LIST_EL_MOLI_MESSAGE = _AUTHORS_LIST_EL_MOLI_MESSAGE_CA;\n } else if (lang === 'es')\n {\n _AUTHORS_LIST_EL_MOLI_DESCRIPTION = _AUTHORS_LIST_EL_MOLI_DESCRIPTION_ES;\n _AUTHORS_LIST_EL_MOLI_MESSAGE = _AUTHORS_LIST_EL_MOLI_MESSAGE_ES;\n } else\n {\n _AUTHORS_LIST_EL_MOLI_DESCRIPTION = _AUTHORS_LIST_EL_MOLI_DESCRIPTION_EN;\n _AUTHORS_LIST_EL_MOLI_MESSAGE = _AUTHORS_LIST_EL_MOLI_MESSAGE_EN;\n }\n}\n\nfunction authorsListHasExtension(id)\n{\n if (id === AUTHORS_IDS_ELMOLI_ID)\n {\n return(\"/\" + STRINGS['lang'] + \"/list.html?id=\" + id);\n } else\n {\n return(null);\n }\n}\n\nfunction authorsListGetMessage(id)\n{\n if (id === AUTHORS_IDS_ELMOLI_ID)\n {\n return(_AUTHORS_LIST_EL_MOLI_MESSAGE);\n } else\n {\n return(null);\n }\n}\n\nfunction authorsListGetDescription(id)\n{\n if (id === AUTHORS_IDS_ELMOLI_ID)\n {\n return(_AUTHORS_LIST_EL_MOLI_DESCRIPTION);\n } else\n {\n return(null);\n }\n}\n\nexport { authorsListInit, authorsListHasExtension, authorsListGetMessage, authorsListGetDescription }\n\n\n","/* Copyright (c) 2024 joanribalta@elmolideponent.com */\n\nimport {AUTHORS_IDS_ELMOLI_ID} from './authorsIds.js';\n\nlet _authorsPostsIds = {};\n\n\nfunction authorsPostsIdsInit(lang)\n{\n const _authorsPostsIdsCa =\n {\n \"3894834708619994039\": AUTHORS_IDS_ELMOLI_ID, // Alòs de Balaguer\n \"8636022549893883339\": AUTHORS_IDS_ELMOLI_ID, // Sant Mamet\n \"6512998281164853532\": AUTHORS_IDS_ELMOLI_ID, // Pilar d'Almenara\n \"4919512026649706094\": AUTHORS_IDS_ELMOLI_ID, // Castell de Montsonis\n \"3546437260928432334\": AUTHORS_IDS_ELMOLI_ID, // Cova del Parco\n \"9022102206809057558\": AUTHORS_IDS_ELMOLI_ID, // castell d'Alos\n \"5498169847288636987\": AUTHORS_IDS_ELMOLI_ID // congost de mu\n };\n\n const _authorsPostsIdsEs =\n {\n \"7199755660584211445\": AUTHORS_IDS_ELMOLI_ID, // Alòs de Balaguer;\n \"6088629649303469228\": AUTHORS_IDS_ELMOLI_ID, // El castillo de Alós\n \"4146856130840086238\": AUTHORS_IDS_ELMOLI_ID // congost de mu\n };\n\n const _authorsPostsIdsEn =\n {\n \"5177843229333201785\": AUTHORS_IDS_ELMOLI_ID, // Pilar d'Almenara\n \"6361201067664866954\": AUTHORS_IDS_ELMOLI_ID // congost de mu\n };\n\n if (lang === 'ca')\n {\n _authorsPostsIds = _authorsPostsIdsCa;\n } else if (lang === 'es')\n {\n _authorsPostsIds = _authorsPostsIdsEs;\n } else\n {\n _authorsPostsIds = _authorsPostsIdsEn;\n }\n}\n\nfunction authorsPostsIdsGet(postId)\n{\n return(_authorsPostsIds[postId]);\n}\n\n\nfunction authorsGetPostsByAuthor(authorId)\n{\n const postsList = [];\n\n for (const postId in _authorsPostsIds)\n {\n if (_authorsPostsIds[postId] === authorId)\n {\n postsList.push(postId);\n }\n }\n return postsList;\n}\n\nexport { authorsPostsIdsInit, authorsPostsIdsGet, authorsGetPostsByAuthor }","/* Copyright (c) 2023 joanribalta@elmolideponent.com */\n\nimport { authorsListInit } from \"./authorsList.js\";\nimport { authorsPostsIdsInit, authorsPostsIdsGet } from \"./authorsPostsIds.js\";\n\nconst EL_MOLI_DE_LA_NOGUERA_BLOGGER_ID = \"17483096611840607816\";\nconst EL_MOLI_DE_LA_NOGUERA_EMAIL = btoa(\"lesgolfes@elmolideponent.com\");\n\nconst LES_GOLFES_DEL_MOLI_BLOGGER_ID = \"04026203056324014736\";\nconst LES_GOLFES_DEL_MOLI_EMAIL = btoa(\"monicaboronat74@gmail.com\");\n\nconst CA_LA_CARME_BLOGGER_ID = \"10705906482920896862\";\nconst CA_LA_CARME_EMAIL = btoa(\"elmoli.calacarme@gmail.com\");\n\nconst AUTHORS_IDS_ELMOLI_BLOGGER_ID = \"18026394353519130259\";\nconst AUTHORS_IDS_ELMOLI_ID = btoa(\"chezcharpentier@gmail.com\"); // Restaurant el Molí\n\nconst DEFAULT_EMAIL = btoa(\"victordeteruel@gmail.com\");\n\n\nfunction authorsIdsGetId(postAuthorId, postId = null)\n{\n // posts assigned to a new owner\n if (postId !== null)\n {\n let owner = authorsPostsIdsGet(postId);\n if (typeof owner !== 'undefined')\n {\n return(owner);\n }\n }\n\n // from google blog Ids to EMP Ids\n switch (postAuthorId)\n {\n case EL_MOLI_DE_LA_NOGUERA_BLOGGER_ID:\n return EL_MOLI_DE_LA_NOGUERA_EMAIL;\n case LES_GOLFES_DEL_MOLI_BLOGGER_ID:\n return LES_GOLFES_DEL_MOLI_EMAIL;\n case CA_LA_CARME_BLOGGER_ID:\n return CA_LA_CARME_EMAIL;\n case AUTHORS_IDS_ELMOLI_BLOGGER_ID:\n return AUTHORS_IDS_ELMOLI_ID;\n default:\n return DEFAULT_EMAIL;\n }\n}\n\nfunction authorsIdsInit(lang)\n{\n authorsPostsIdsInit(lang);\n authorsListInit(lang);\n}\n\nexport { authorsIdsInit, authorsIdsGetId, AUTHORS_IDS_ELMOLI_ID }\n\n\n\n","/* Copyright (c) 2023 joanribalta@elmolideponent.com */\n\nimport {STRINGS} from './strings.js'\n\n//const _BROWSER_GA_MEASUREMENT_ID = 'UA-24740915-1';\nconst _BROWSER_GA4_MEASUREMENT_ID = \"G-80E78M27SF\";\n\n//let _browserFbInitiased = false;\nlet _browserIsMobile = \"none\";\n\nfunction browserGtag() {\n dataLayer.push(arguments);\n}\n\nfunction browserAnalyticsSendPage(title, location) {\n browserGtag(\"event\", \"page_view\", {\n page_title: title,\n page_location: location,\n });\n}\n\nfunction browserAnalyticsConfig(sendPageView = true) {\n //browserGtag('config', _BROWSER_GA_MEASUREMENT_ID, {'send_page_view': sendPageView});\n browserGtag(\"config\", _BROWSER_GA4_MEASUREMENT_ID, {\n send_page_view: sendPageView,\n });\n}\n\nfunction browserAsyncAnalyticsLoadScript() {\n const script = document.createElement(\"script\");\n script.src =\n \"https://www.googletagmanager.com/gtag/js?id=\" +\n _BROWSER_GA4_MEASUREMENT_ID;\n script.async = true;\n document.head.append(script);\n\n window.dataLayer = window.dataLayer || [];\n browserGtag(\"js\", new Date());\n}\n\n// With GA4 with Enhanced Measurement enabled page views are sent\n// automatically. If sendPageView is set to true, the page event is sent\n// twice\nfunction browserAsyncAnalyticsScript(sendPageView = true) {\n browserAsyncAnalyticsLoadScript();\n browserAnalyticsConfig(sendPageView);\n}\n\nfunction browserGetBrowserWidth() {\n return document.body.clientWidth; // window.innerWidth ||\n}\n\nfunction browserGetBrowserWidthIncludingScroll() {\n return window.innerWidth;\n}\n\nfunction browserGetBrowserHeight() {\n return window.innerHeight || document.body.clientHeight; // ||\n}\n\nfunction browserSetCookie(cname, cvalue, exdays, domain = null) {\n const d = new Date();\n d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);\n const expires = \"expires=\" + d.toUTCString();\n if (domain !== null) {\n document.cookie =\n cname + \"=\" + cvalue + \";\" + expires + \";path=/\" + \";domain=\" + domain;\n } else {\n document.cookie = cname + \"=\" + cvalue + \";\" + expires + \";path=/\";\n }\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\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\nfunction browserMenuToggleInit(buttonId, menuId, classToggle, closeMenuId) {\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\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 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 if (navigator.share) {\n //&& browserIsMobile() === true)\n return true;\n }\n return false;\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\nfunction browserCanShareParse(element) {\n if (browserCanShare()) {\n const shares = element.getElementsByClassName(\"postShare\");\n\n Array.from(shares).forEach((share) => {\n const anchor = document.createElement(\"a\");\n anchor.href = \"javascript:void(0)\";\n if (share.dataset.button === \"icon\") {\n anchor.setAttribute(\"class\", \"anchorShareIcon\");\n anchor.innerHTML =\n \"\";\n } else {\n anchor.setAttribute(\"class\", \"anchorShare\");\n anchor.innerText = STRINGS[\"Share\"];\n }\n\n share.appendChild(anchor);\n\n anchor.addEventListener(\"click\", (event) => {\n browserShare(share.dataset.href);\n });\n });\n }\n}\n\nexport {\n browserCanShareParse,\n browserIsMobile,\n browserMenuToggleInit,\n browserSetCookie,\n browserImageIsReady,\n browserGetCookie,\n browserAnalyticsSendPage,\n browserAsyncAnalyticsScript,\n browserAsyncAnalyticsLoadScript,\n browserGetBrowserWidth,\n browserGetBrowserWidthIncludingScroll,\n browserGetBrowserHeight,\n browserCanShare,\n browserShare,\n browserAnalyticsConfig\n};\n","/* Copyright (c) 2024 joanribalta@elmolideponent.com */\n\n// This allows invalidating all caches in the browser that are fetched if the \n// time between reloads is less than _CACHE_QUICK_RELOAD_TIME\n\nimport { STRINGS } from \"./strings.js\";\nimport { browserGetCookie, browserSetCookie } from \"./browser.js\";\nimport CONFIG from './../config.json';\n\n\n\nlet _cacheTime = null;\nconst _CACHE_QUICK_RELOAD_TIME = 5000; // 5 seconds\n\nfunction cacheSetCacheTime(value)\n{\n _cacheTime = value;\n}\n\nfunction cacheGetCacheTime()\n{\n return(_cacheTime);\n}\n\nfunction cacheIsQuickReload() {\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 < _CACHE_QUICK_RELOAD_TIME) {\n ret = true;\n }\n }\n\n browserSetCookie(\"lastUnloadTime\", now, 1);\n browserSetCookie(\"lastUnloadURL\", currentURL, 1);\n\n return ret;\n}\n\nfunction cacheFlushAuthors()\n{\n try {\n fetch(CONFIG.posters_api_url + \"/flush\");\n } finally {\n time = new Date().getTime();\n browserSetCookie(\"cacheTime\", time, 1);\n cacheSetCacheTime(time);\n }\n\n}\n\nfunction cacheIfQuickReloadFlushEverything()\n{\n let time;\n if (cacheIsQuickReload())\n {\n try {\n fetch(CONFIG.posters_api_url + \"/flush\");\n fetch(\"/\" + STRINGS['lang'] + \"/flush\");\n } finally {\n time = new Date().getTime();\n browserSetCookie(\"cacheTime\", time, 1);\n }\n\n } else\n {\n time = browserGetCookie(\"cacheTime\");\n }\n cacheSetCacheTime(time);\n}\n\nexport {cacheIfQuickReloadFlushEverything, cacheFlushAuthors, cacheGetCacheTime}\n\n\n","/* Copyright (c) 2023 joanribalta@elmolideponent.com */\n\nimport { browserGetBrowserWidthIncludingScroll } from './browser.js';\n\nlet _poolIndex = 0;\nlet _poolHeightLeft = 0;\nlet _poolHeightRight = 0;\nlet _poolWrapper;\nlet _poolItemsClassName;\nlet _poolSpaceAmongItems;\nlet _poolTwoColums = false;\nlet _poolRendered = false;\n\nfunction poolReset()\n{\n _poolIndex = 0;\n _poolHeightLeft = 0;\n _poolHeightRight = 0;\n _poolTwoColums = false;\n}\n\nfunction poolInit(wrapper, itemsClassName, spaceAmongItems)\n{\n _poolWrapper = wrapper;\n _poolItemsClassName = itemsClassName;\n _poolSpaceAmongItems = spaceAmongItems;\n}\n\n\nfunction poolSetAbsoluteHeigth()\n{\n let items = _poolWrapper.getElementsByClassName(_poolItemsClassName);\n\n if (browserGetBrowserWidthIncludingScroll() >= 1024)\n {\n // images can arrive in any order and affect items height\n poolReset();\n _poolTwoColums = true;\n\n while (_poolIndex < items.length)\n {\n if (items[_poolIndex].style.display !== 'none')\n {\n\n items[_poolIndex].style.position = \"absolute\";\n\n if (_poolHeightLeft > _poolHeightRight)\n {\n items[_poolIndex].style.left = \"484px\";\n items[_poolIndex].style.top = _poolHeightRight + \"px\";\n _poolHeightRight += items[_poolIndex].offsetHeight + _poolSpaceAmongItems;\n } else\n {\n items[_poolIndex].style.left = \"0px\";\n items[_poolIndex].style.top = _poolHeightLeft + \"px\";\n _poolHeightLeft += items[_poolIndex].offsetHeight + _poolSpaceAmongItems;\n }\n }\n _poolIndex++;\n }\n\n let maxHeight = (_poolHeightRight > _poolHeightLeft) ? _poolHeightRight : _poolHeightLeft;\n\n _poolWrapper.style.height = maxHeight + \"px\";\n _poolWrapper.style.position = \"relative\";\n } else\n {\n _poolTwoColums = false;\n _poolWrapper.style.height = \"auto\";\n for (; _poolIndex < items.length; _poolIndex++)\n {\n items[_poolIndex].style.position = \"static\";\n }\n }\n\n _poolRendered = true;\n\n}\n\nfunction poolRendered()\n{\n return(_poolRendered);\n}\n\nfunction poolResize()\n{\n if ((browserGetBrowserWidthIncludingScroll() >= 1024) !== _poolTwoColums)\n {\n poolReset();\n poolSetAbsoluteHeigth();\n }\n}\n\nexport {poolInit, poolSetAbsoluteHeigth, poolRendered, poolResize};\n\n\n","/* Copyright (c) 2024 joanribalta@elmolideponent.com */\n\nimport { browserGetBrowserWidthIncludingScroll } from './browser.js';\nimport { THUMBS_CLASS_ITEMS_NAME } from './thumbs.js';\nimport { poolSetAbsoluteHeigth, poolRendered } from './pool.js';\n\nlet _adsenseAdds = 0;\n;\n;\n/* adsbygoogle is not defined inside simple.js*/\n/* this must be called every time new ads are added in a thread */\n/* and in the end of the html when adsbygoogle is defined */\nfunction adsensePushAds()\n{\n if (typeof adsbygoogle !== 'undefined')\n {\n while (_adsenseAdds > 0) \n {\n _adsensePush();\n _adsenseAdds--;\n }\n }\n}\n\nfunction _adsensePush()\n{\n window.adsbygoogle.push({});\n}\n\nfunction adsenseAddAndPushAdsInsidePost(parent)\n{\n if (parent !== null)\n {\n let postAds = parent.getElementsByClassName('c_post_ad');\n\n Array.from(postAds).forEach(postAd =>\n {\n _adsenseAddAdsInsidePost(postAd);\n });\n }\n adsensePushAds();\n}\n\nfunction _adsenseAddAdsInsidePost(parent)\n{\n let insElement = document.createElement('ins');\n insElement.className = 'adsbygoogle';\n insElement.style.display = 'block';\n insElement.style.textAlign = 'center';\n insElement.setAttribute('data-ad-layout', 'in-article');\n insElement.setAttribute('data-ad-format', 'fluid');\n insElement.setAttribute('data-ad-client', 'ca-pub-9941509058397179');\n insElement.setAttribute('data-ad-slot', '3287798227');\n\n parent.appendChild(insElement);\n\n adsenseObserver(insElement);\n\n _adsenseAdds++;\n}\n\nfunction adsenseAddAndPushThumbAd(parent)\n{\n _adsenseAddThumbAd(parent);\n adsensePushAds();\n}\n\nfunction _adsenseAddThumbAd(parent)\n{\n\n // \"Posters footer\" ad\n let template = \"\";\n\n let wrapper, maxWidth;\n let browserWidth = browserGetBrowserWidthIncludingScroll();\n if (browserWidth >= 1024)\n {\n maxWidth = 428;\n } else if (browserWidth > 604)\n {\n maxWidth = 572;\n } else\n {\n maxWidth = browserWidth - 32;\n }\n\n wrapper = document.createElement('div');\n wrapper.setAttribute(\"class\", THUMBS_CLASS_ITEMS_NAME);\n wrapper.innerHTML = template;\n wrapper.style.maxWidth = maxWidth + \"px\";\n wrapper.style.height = \"350px\";\n wrapper.style.textAlign = \"center\";\n wrapper.style.borderWidth = \"2px\";\n wrapper.style.borderColor = \"#285171\";\n wrapper.style.borderStyle = \"solid\";\n\n parent.appendChild(wrapper);\n\n let ad = wrapper.getElementsByClassName('adsbygoogle')[0];\n adsenseObserver(ad);\n\n _adsenseAdds++;\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 if (poolRendered() === true)\n {\n poolSetAbsoluteHeigth();\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 {adsenseAddAndPushAdsInsidePost, adsenseAddAndPushThumbAd, adsensePushAds};\n\n\n","const REST_CACHE_EXPIRY_TIME = 7 * 24 * 60 * 60 * 1000; \nconst REST_DELIMITER = '||';\nconst REST_SHARED_PATH = 'https://www.googleapis.com/blogger/v3/blogs/';\n\nfunction restFetchJson(cacheKey, url) {\n try {\n const cachedData = localStorage.getItem(cacheKey);\n\n if (cachedData !== null) {\n \n const [content, timestampStr] = cachedData.split(REST_DELIMITER);\n const timestamp = parseInt(timestampStr, 10);\n\n if (content && !isNaN(timestamp)) {\n const age = Date.now() - timestamp;\n if (age < REST_CACHE_EXPIRY_TIME) {\n const response = new Response(new Blob([content], { type: 'application/json' }));\n return Promise.resolve(response);\n }\n } else { \n console.info(`Ignoring old cache format for key: ${cacheKey}`);\n }\n }\n } catch (e) {\n console.error('Error reading from localStorage', e);\n }\n\n return fetch(REST_SHARED_PATH + url).then(response => {\n return response.clone().text().then(content => {\n try {\n const timestamp = Date.now();\n const dataToCache = `${content}${REST_DELIMITER}${timestamp}`;\n localStorage.setItem(cacheKey, dataToCache);\n } catch (e) {\n console.error('Error writing to localStorage', e);\n }\n\n return response;\n });\n });\n}\n\nfunction restFetchClear() {\n try {\n localStorage.clear();\n } catch (e) {\n console.error('Error clearing localStorage', e);\n }\n}\n\nexport { restFetchJson, restFetchClear, REST_SHARED_PATH };\n\n\n\n","/* Copyright (c) 2023 joanribalta@elmolideponent.com */\n\nimport { STRINGS, stringsGetGoogleClientKey } from \"./strings.js\";\nimport { restFetchJson } from './rest.js';\n\nconst POSTS_BIG_SCREENS_MARGIN = 64;\nconst POSTS_SMALL_SCREENS_MARGIN = 34;\nconst POSTS_SCREEN_BOUNDARY = 640;\nconst POSTS_FETCH_NUMBER = 20;\n\nlet posts = []; // caches, cursors could imply posts repetitions\nlet postsId = []; // avoiding posts repetitions in the same page\nlet postsIndex = 0;\nlet _postsInitialIndex = 0;\nlet postsAbsoluteIndex = 0;\nlet postsToReturn = 0;\nlet postsElementWrapper;\nlet postsToResolve = [];\n//var postsBatchNumber = 0;\nlet postsAllDownloaded = false;\nlet postsFetching = false;\nlet postsReject;\nlet postsCursor = null;\nlet postsLabels = \"\";\nlet _postsIdsFilter = [];\nlet _postsLocation = \"\";\nlet _postsCircularFinalIndex = 0;\nlet _postsCircular = false;\n\nlet postsFieldsToFetch =\n \"items(id, content,title,labels,url,location(lat, lng, name), author(id)),nextPageToken\";\n\nfunction postsSetFieldsToFetch(fields) {\n postsFieldsToFetch = fields;\n}\n\nfunction postsSetIndex(index, circular) {\n postsIndex = index;\n _postsInitialIndex = index;\n _postsCircularFinalIndex = index;\n _postsCircular = circular;\n}\n\nfunction postsGetIndex() {\n return postsIndex;\n}\n\nfunction postsGetInitialIndex() {\n return _postsInitialIndex;\n}\n\nfunction postsReset() {\n posts.length = 0;\n postsId.length = 0;\n postsIndex = 0;\n postsAbsoluteIndex = 0;\n postsToReturn = 0;\n postsToResolve.length = 0;\n postsAllDownloaded = false;\n postsFetching = false;\n postsCursor = null;\n _postsIdsFilter.length = 0;\n _postsLocation = \"\";\n _postsCircularFinalIndex = 0;\n _postsCircular = false;\n}\n\nfunction postsGetMargin() {\n if (browserGetBrowserWidth() <= POSTS_SCREEN_BOUNDARY) {\n return POSTS_SMALL_SCREENS_MARGIN;\n } else {\n return POSTS_BIG_SCREENS_MARGIN;\n }\n}\n\nfunction postsReplaceApostrophesInText(str) {\n return str.split(\"'\").join(\"'\");\n}\n\nfunction postsEscapeSpacesAndApostrophes(str) {\n return str.split(\" \").join(\"-\").split(\"'\").join(\"_\");\n}\n\nfunction postsUnescapeSpacesAndApostrophes(str) {\n return str.split(\"-\").join(\" \").split(\"_\").join(\"'\");\n}\n\nfunction postsFetch(createAndAppend) {\n //\n while (postsToReturn > 0) {\n if (postsIndex >= posts.length) {\n if (postsAllDownloaded === false) {\n postsFetchFromServer(createAndAppend);\n } else {\n if (_postsCircular === true) {\n _postsCircular = false;\n if (posts.length > _postsCircularFinalIndex) {\n posts.length = _postsCircularFinalIndex;\n }\n postsIndex = 0;\n postsFetch(createAndAppend);\n return;\n }\n\n while (postsToReturn > 0) {\n let resolve = postsToResolve.shift();\n resolve({ index: null, post: null, wrapper: null, image: null });\n postsToReturn--;\n }\n }\n break;\n }\n\n // appending post to the dom -----------------------------------------\n if (\n postsId.includes(posts[postsIndex].id) === false &&\n (_postsIdsFilter.length === 0 ||\n _postsIdsFilter.includes(posts[postsIndex].id)) &&\n (_postsLocation === \"\" ||\n postsHasLabel(posts[postsIndex], _postsLocation)) &&\n postsHasAnyLabel(posts[postsIndex])\n ) {\n // avoiding repetitions due to batches incoherences-----------------\n postsId.push(posts[postsIndex].id);\n\n // resolving promise\n let resolve = postsToResolve.shift();\n\n // do not change resolve variable names !!!\n let wrapper = null;\n if (createAndAppend !== null) {\n wrapper = createAndAppend(\n posts[postsIndex],\n postsElementWrapper,\n postsLabels\n );\n }\n //let image = wrapper.getElementsByClassName('postImage')[0];\n let image = \"undefined\";\n let index = postsAbsoluteIndex;\n let post = posts[postsIndex];\n resolve({ index, post, wrapper, image });\n\n //\n postsToReturn--;\n }\n //\n postsIndex++;\n postsAbsoluteIndex++;\n }\n}\n\nfunction postsFetchFromServer(createAndAppend) {\n postsFetching = true;\n\n let resource =\n STRINGS[\"blogId\"] +\n \"/posts?key=\" +\n stringsGetGoogleClientKey() +\n \"&maxResults=\" +\n POSTS_FETCH_NUMBER +\n \"&orderBy=updated\" +\n \"&fields=\" +\n postsFieldsToFetch;\n\n if (postsCursor !== null && postsCursor !== \"\") {\n resource += \"&pageToken=\" + postsCursor;\n }\n\n if (postsLabels !== null && postsLabels !== \"\") {\n resource += \"&labels=\" + postsLabels;\n }\n\n restFetchJson(\n STRINGS[\"blogId\"] +\n \"-\" +\n postsFieldsToFetch +\n \"-\" +\n postsLabels +\n \"-\" +\n postsCursor,\n resource\n )\n .then((response) => {\n // if (response.ok !== true)\n // {\n // throw Error(response.status);\n // }\n return response.json();\n })\n .then((aux) => {\n if (aux.hasOwnProperty(\"error\")) {\n throw Error(aux.error.message);\n }\n //\n if (aux.hasOwnProperty(\"items\") === false) {\n throw Error(\"Label: \" + postsLabels + \" does not return items\");\n }\n\n posts.push(...aux.items);\n\n // is there more posts?\n if (!aux.hasOwnProperty(\"nextPageToken\")) {\n postsAllDownloaded = true;\n } else {\n postsCursor = aux.nextPageToken;\n }\n postsFetching = false;\n //\n postsFetch(createAndAppend);\n })\n .catch((err) => {\n postsReject(err);\n });\n}\n\nfunction postsFetchAPost(labels, createAndAppend, wrapper) {\n return new Promise(function (resolve, reject) {\n postsLabels = labels;\n postsToReturn++;\n postsElementWrapper = wrapper;\n postsToResolve.push(resolve);\n // it only saves one !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n postsReject = reject;\n\n if (postsFetching === false) {\n postsFetch(createAndAppend);\n }\n });\n}\n\nfunction postsSetIdsFilter(idsFilter) {\n _postsIdsFilter = idsFilter;\n}\n\nfunction postsSetLocation(location) {\n _postsLocation = location;\n}\n\nfunction postsHasAnyLabel(post) {\n return post.labels && post.labels.length > 0;\n}\n\nfunction postsHasLabel(post, label) {\n if (post.labels && post.labels.length > 0) {\n for (let i = 0; i < post.labels.length; i++) {\n if (post.labels[i] === label) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport {\n postsSetLocation,\n postsSetIdsFilter,\n postsFetchAPost,\n postsUnescapeSpacesAndApostrophes,\n postsEscapeSpacesAndApostrophes,\n postsReplaceApostrophesInText,\n postsGetMargin,\n postsReset,\n postsGetIndex,\n postsGetInitialIndex,\n postsSetIndex,\n postsSetFieldsToFetch,\n};\n","/* Copyright (c) 2023 joanribalta@elmolideponent.com */\n\nimport {cacheFlushAuthors, cacheGetCacheTime} from './cache.js';\nimport {STRINGS} from './strings.js';\nimport {authorsListHasExtension } from './authorsList.js';\nimport CONFIG from './../config.json';\n\nconst AUTHORS_PROFILE_PUBLIC_BATCH =\n CONFIG.posters_api_url + \"/resource/profile/public/batch\";\nconst AUTHORS_FETCH_NUMBER = 20;\nlet _authorsCards = [];\nlet _authorsFetching = false;\nlet _authorsToResolve = [];\nlet _authorsAllDownloaded = false;\nlet _authorsFlushCache = false;\nlet _authorsCursor = null;\n\nfunction authorsEscapeSpacesAndApostrophes(str) {\n return str.split(\" \").join(\"-\").split(\"'\").join(\"_\");\n}\n\nfunction authorGetHeader(author) {\n let authorTemplate =\n '
' +\n '' +\n '
' +\n '

' +\n author.name +\n \"

\" +\n '
' +\n author.activity +\n \"
\" +\n '
' +\n author.location +\n \"
\" +\n '\" +\n \"
\" +\n \"
\";\n return authorTemplate;\n}\n\nfunction authorsGetCard(author) {\n let link = authorsListHasExtension(author.id);\n if (link === null) link = \"http://\" + author.webLink;\n\n let authorTemplate =\n \"

\" +\n STRINGS[\"Published\"] +\n \"

\" +\n \"\" +\n \"\" +\n \"
\";\n return authorTemplate;\n}\n\nfunction authorGetPublishedByTemplate(author) {\n let link = authorsListHasExtension(author.id);\n if (link === null) link = \"http://\" + author.webLink;\n\n let authorTemplate =\n STRINGS[\"Published\"] + \"\" + author.name + \"\";\n return authorTemplate;\n}\n\nfunction authorsGet(id) {\n if (_authorsCards !== null) {\n for (const authorCard of _authorsCards) {\n if (authorCard.id === id) {\n return authorCard;\n }\n }\n }\n return undefined;\n}\n\nfunction _authorsGetAnonymous()\n{\n let anonimous =\n {id: \"Anonymous\",\n imageUrl: 'https://emp-api-a6xuu22t6q-uc.a.run.app/images/anonymous_v2.png',\n authorWebLink: 'cartells.elmolideponent.com',\n name: 'Anonymous',\n activity: ''};\n\n return(anonimous);\n}\n\nfunction _authorsFetchFromServer() {\n const url = _authorsBuildFetchUrl();\n\n return fetch(url)\n .then((response) => {\n if (!response.ok) {\n throw new Error(\"Failed to fetch authors\");\n }\n return response.json();\n })\n .then((data) => {\n _authorsProcessData(data);\n })\n .catch((error) => {\n console.error(\"Fetch authors error:\", error);\n throw error;\n })\n .finally(() => {\n _authorsFetching = false;\n });\n}\n\nfunction _authorsBuildFetchUrl() {\n let url = AUTHORS_PROFILE_PUBLIC_BATCH;\n if (_authorsCursor !== null) {\n url += `?cursor=${_authorsCursor}&`;\n } else {\n url += \"?\";\n }\n\n // local cache control see cacheFlushAuthors\n let cacheTime = cacheGetCacheTime();\n if (cacheTime !== null && cacheTime !== \"\") {\n url += \"cacheTime=\" + cacheTime;\n }\n return url;\n}\n\nfunction _authorsProcessData(data) {\n _authorsCards.push(...data.list);\n\n if (data.list.length < AUTHORS_FETCH_NUMBER) {\n _authorsAllDownloaded = true;\n } else {\n _authorsCursor = data.cursor;\n }\n\n _authorsResolvePending(data.list);\n}\n\nfunction _authorsResolvePending(authorList) {\n while (_authorsToResolve.length > 0) {\n const authorToResolve = _authorsToResolve.shift();\n const resolvedAuthor = authorList.find(\n (author) => author.id === authorToResolve.id\n );\n if (resolvedAuthor) {\n authorToResolve.resolve(resolvedAuthor);\n } else {\n _authorsHandleUnresolved(authorToResolve);\n }\n }\n}\n\nfunction _authorsHandleUnresolved(authorToResolve) {\n if (_authorsAllDownloaded === false) {\n _authorsToResolve.push(authorToResolve); // Retry resolving later\n _authorsFetchFromServer();\n } else {\n authorToResolve.resolve(_authorsGetAnonymous());\n } \n}\n\nfunction authorsFetchCard(id) {\n return new Promise(function (resolve, reject) {\n let author = authorsGet(id);\n if (author === undefined) {\n let aux = { id, resolve, reject };\n _authorsToResolve.push(aux);\n\n // Check if fetching is already in progress\n if (!_authorsFetching) {\n _authorsFetching = true;\n _authorsFetchFromServer()\n .then(() => {\n _authorsFetching = false;\n })\n .catch((error) => {\n _authorsFetching = false;\n console.error(\"Error fetching authors:\", error);\n });\n }\n } else {\n resolve(author);\n }\n });\n}\n\nexport {\n authorsFetchCard,\n authorsEscapeSpacesAndApostrophes,\n authorGetHeader,\n authorGetPublishedByTemplate,\n authorsGetCard\n};\n","/* Copyright (c) 2023 joanribalta@elmolideponent.com */\n\n/* \n \n */\n\nimport { STRINGS } from \"./strings.js\";\n\nlet _ldjson = undefined;\nlet _ldparent = null;\n\nfunction _ldWrapLicenseHolderName(name)\n{\n return(\"\" + name + \"\");\n}\n\nfunction ldAddCopyrightPictures(parent = document)\n{\n let wrapper = parent.getElementsByClassName(\"c_pictures_copyright\");\n\n if (wrapper.length !== 0)\n {\n let nameHolder = ldGetCopyrightHolderName(parent);\n if (nameHolder === null)\n {\n wrapper[0].innerHTML = STRINGS['CopyPictures'] + _ldWrapLicenseHolderName(\"Carme & Joan\");\n } else\n {\n if (nameHolder !== \"none\")\n {\n wrapper[0].innerHTML = STRINGS['CopyPictures'] + _ldWrapLicenseHolderName(nameHolder);\n }\n }\n }\n return;\n}\n\nfunction ldAddTranslationAttribution(parent = document)\n{\n let wrapper = parent.getElementsByClassName(\"c_translator\");\n\n if (wrapper.length !== 0)\n {\n let translaterName = ldGetTranslatorName(parent);\n if (translaterName !== null)\n {\n wrapper[0].innerHTML = STRINGS['Translator'] + _ldWrapLicenseHolderName(translaterName);\n }\n }\n return;\n}\n\nfunction ldGetTranslatorName(parent = document)\n{\n let ldJson = ldGetLdJsonScript(parent);\n\n if (ldJson !== null)\n {\n if (ldJson.hasOwnProperty('translator'))\n {\n return ldJson['translator']['name'];\n }\n }\n return (null);\n}\n\nfunction ldGetCopyrightHolderName(parent = document)\n{\n let ldJson = ldGetLdJsonScript(parent);\n\n if (ldJson !== null)\n {\n if (ldJson.hasOwnProperty('copyrightHolder'))\n {\n return ldJson['copyrightHolder']['name'];\n }\n }\n return (null);\n}\n\n\nfunction ldGetLdJsonScript(parent = document)\n{\n if ((_ldjson === undefined) || (parent !== _ldparent))\n {\n _ldparent = parent;\n var scripts = _ldparent.getElementsByTagName('script');\n for (var i = 0; i < scripts.length; i++)\n {\n var script = scripts[i];\n if (script.getAttribute('type') === 'application/ld+json')\n {\n var jsonContent = script.textContent || script.innerText;\n _ldjson = JSON.parse(jsonContent);\n return(_ldjson);\n }\n }\n _ldjson = null;\n }\n return _ldjson;\n}\n\nexport {ldAddCopyrightPictures, ldAddTranslationAttribution};\n\n","/* Copyright (c) 2023 joanribalta@elmolideponent.com */\n\n\n\nimport {STRINGS, stringsGetGoogleClientKey} from './strings.js';\nimport {Log} from './log.js';\nimport {REST_SHARED_PATH} from \"./rest.js\";\n\nfunction commentsAdd(wrapper)\n{\n if (wrapper === null) return;\n // if not, the page is cached and people can not see theirs comments inmediatelly\n // if (wrapper.dataset.totalItems >= 1)\n {\n commentsFetch(wrapper.dataset.postId, wrapper);\n }\n}\n\n\nfunction commentsFetch(postId, wrapper)\n{\n let resource = REST_SHARED_PATH + STRINGS['blogId']\n + '/posts/'\n + postId\n + '/comments'\n + '?key='\n + stringsGetGoogleClientKey()\n + \"&fields=items(content,author(displayName,url))\";\n\n fetch(resource)\n .then(response =>\n {\n return(response.json());\n })\n .then(aux =>\n {\n if (aux.hasOwnProperty('error'))\n {\n throw Error(aux.error.message);\n }\n\n if (aux.items !== undefined)\n {\n let template = \"\";\n aux.items.forEach((comment) =>\n {\n template += \"
\"\n + comment.author.displayName\n + \": \"\n + comment.content\n + \"
\";\n });\n wrapper.innerHTML = template;\n }\n\n })\n .catch((err) =>\n {\n Log.print('Fetch Post error: ' + err);\n });\n\n}\n\nexport {commentsAdd, commentsFetch};\n\n","/* Copyright (c) 2023 joanribalta@elmolideponent.com */\n\nimport {adsenseAddAndPushAdsInsidePost} from './adsense.js';\nimport {postsSetFieldsToFetch,\n postsFetchAPost } from './posts.js';\nimport { STRINGS,\n stringsGetMainLabel,\n stringsGetRegion,\n stringsGetGoogleClientKey,\n stringsTranslateLabel} from \"./strings.js\";\nimport { restFetchJson } from './rest.js';\nimport { authorsIdsGetId } from \"./authorsIds.js\";\nimport {Log} from './log.js';\nimport { authorGetPublishedByTemplate,\n authorsGetCard,\n authorsFetchCard} from \"./authors.js\";\nimport {ldAddCopyrightPictures,\n ldAddTranslationAttribution} from \"./ld.js\";\nimport { commentsAdd} from \"./comments.js\";\nimport { contentGetBrief} from \"./content.js\";\nimport { browserCanShareParse } from \"./browser.js\";\nimport {canonicalGet} from './canonical.js';\n\nlet _postNextPostLink = null;\nlet _postPreviousPostLink = null;\nlet _postMapLink = null;\nlet _postFinalPreviousNextCallback = null;\n\nlet _postCreateMap = true;\nlet _postBrief = false;\nlet _postFooter = true;\n\nfunction postDecode(str) {\n return str.split(\"-\").join(\" \");\n}\n\nfunction postEncode(str) {\n let aux = str.split(\" \").join(\"-\").split(\"'\").join(\"%27\");\n return aux;\n}\n\nfunction postStartUp() {\n _postAddAuthor();\n ldAddCopyrightPictures();\n ldAddTranslationAttribution();\n _postMoveReferences();\n postTransformArrowLinks(\"c_arrow\");\n let content = document.getElementById(\"c_content\");\n if (content === null)\n {\n const collection = document.getElementsByClassName(\"c_page_description\");\n if (collection.length !== 0)\n {\n content = collection[0];\n }\n }\n\n adsenseAddAndPushAdsInsidePost(content);\n}\n\nfunction postTransformArrowLinks(className) {\n let arrows = document.getElementsByClassName(className);\n for (let i = 0; i < arrows.length; i++) {\n arrows[i].addEventListener(\"click\", () => {\n let test = arrows[i].dataset.client_href;\n if (test !== \"undefined\") {\n arrows[i].href = arrows[i].dataset.client_href;\n }\n });\n }\n}\n\nfunction postSetContentLayout(brief = false, map = true, footer = true) {\n _postBrief = brief;\n _postCreateMap = map;\n _postFooter = footer;\n}\n\nfunction _postAddAuthor(parent = null) {\n if (parent === null) {\n parent = document;\n }\n\n // publisher ---------------------------------------------------------------\n const wrapper = parent.getElementsByClassName(\"c_publisher\");\n if (wrapper.length === 0)\n return;\n\n const blogAuthorId = wrapper[0].getAttribute(\"data-author-id\");\n const postId = wrapper[0].getAttribute(\"data-post-id\");\n\n const authorId = authorsIdsGetId(blogAuthorId, postId);\n\n authorsFetchCard(authorId)\n .then((content) => {\n wrapper[0].innerHTML = authorGetPublishedByTemplate(content);\n\n // brief content does not have c_author ------------------------\n const authorWrapper = parent.getElementsByClassName(\"c_author\");\n if (authorWrapper.length > 0) {\n authorsFetchCard(authorId)\n .then((content2) => {\n authorWrapper[0].innerHTML = authorsGetCard(content2);\n })\n .catch((err) => {\n Log.print(\"Fetch Publisher error: \" + err);\n });\n }\n })\n .catch((err) => {\n Log.print(\"Fetch Author error: \" + err);\n });\n}\n\nfunction _postMoveReferences(parent = null) {\n if (parent === null) {\n parent = document;\n }\n\n try {\n const source = parent.getElementsByClassName(\"references\");\n // warning is Id => only one per page\n document.getElementById(\"c_footer_links\").appendChild(source[0]);\n } catch (err) {\n // none\n}\n}\n\nfunction postGetLocationLng(location) {\n if (location === undefined) {\n return \"0.99\";\n }\n return location.lng;\n}\n\nfunction postGetLocationLat(location) {\n if (location === undefined) {\n return \"41.97\";\n }\n return location.lat;\n}\n\nfunction postGetLocationName(location) {\n if (location === undefined) {\n return \"No location defined\";\n }\n return location.name;\n}\n\nfunction _postCreatePostElement(post, label) {\n if (label === \"\") {\n label = stringsGetMainLabel(post.labels);\n }\n\n let absoluteLink = postGetAbsoluteLink(true, label, post);\n\n // Create poster element ---------------------------------------------------\n let wrapper = document.createElement(\"div\");\n wrapper.setAttribute(\"class\", \"postWrapper\");\n wrapper.setAttribute(\"data-post-id\", post.id);\n wrapper.setAttribute(\"data-post-lng\", postGetLocationLng(post.location));\n wrapper.setAttribute(\"data-post-lat\", postGetLocationLat(post.location));\n\n let postTemplate =\n \"
\" +\n \"
\" +\n \"\" +\n \"
\" +\n \"
\" +\n \"

\" +\n post.title +\n \"

\";\n\n if (_postBrief) {\n postTemplate += \"
\";\n postTemplate += contentGetBrief(post.content, absoluteLink);\n } else {\n postTemplate += \"
\";\n postTemplate += post.content;\n }\n\n if (_postCreateMap === true && post.location !== undefined) {\n _postMapLink =\n \"/\" +\n STRINGS[\"lang\"] +\n \"/map.html?lat=\" +\n postGetLocationLat(post.location) +\n \"&lng=\" +\n postGetLocationLng(post.location) +\n \"&zoom=15&label=\" +\n postEncode(label) +\n \"&id=\" +\n post.id;\n\n postTemplate += \"

\" + STRINGS[\"Location\"] + \"

\";\n\n postTemplate +=\n \"\";\n\n postTemplate +=\n \"
\\r\\n
\" +\n \" \" +\n \"
\" +\n STRINGS[\"MapCaption\"] +\n \"
\\r\\n\";\n }\n\n postTemplate += \"

\" + STRINGS[\"Labels\"] + \"

\";\n\n post.labels.forEach((label) => {\n postTemplate +=\n \"\" +\n label +\n \"\";\n });\n\n if (_postCreateMap) {\n postTemplate += \"\";\n }\n\n if (_postFooter) {\n postTemplate +=\n \"
\";\n\n postTemplate +=\n \"

\" +\n STRINGS[\"Sharing\"] +\n \"

\" +\n \"
\";\n //+ \"
\";\n\n postTemplate +=\n \"

\" +\n STRINGS[\"Comments\"] +\n \"

\" +\n STRINGS[\"Comment\"] +\n \"
\";\n }\n\n postTemplate +=\n \"
\" + // c_content\n \"
\"; // c_post\n\n if (_postCreateMap) {\n // post sidebar\n postTemplate += \"
\";\n post.labels.forEach((label) => {\n postTemplate +=\n \"\" +\n label +\n \"\";\n });\n postTemplate += \"
\"; // c_post_sidebar\n }\n\n postTemplate += \"
\"; // c_page\n\n //\n wrapper.innerHTML = postTemplate;\n\n return wrapper;\n}\n\nfunction postCreateAndAppend(post, parent, label) {\n // appending the post ----------------------------------------------\n let postElement = _postCreatePostElement(post, label);\n parent.appendChild(postElement);\n\n // appending author card -------------------------------------------\n _postAddAuthor(postElement);\n\n // pictures copyright & translation attribution\n ldAddCopyrightPictures(postElement);\n ldAddTranslationAttribution(postElement);\n\n // moving references after the map ---------------------------------\n if (_postCreateMap) {\n _postMoveReferences(postElement);\n }\n\n //\n browserCanShareParse(postElement);\n\n if (_postFooter) {\n commentsAdd(document.getElementById(\"commentsItems\"));\n }\n\n return postElement;\n}\n\nfunction _postBuildPostLink(anchor, post, label) {\n if (post !== null) {\n anchor.href = postGetRelativeLinkToRoot(label, post);\n anchor.dataset.client_href =\n \"/\" + STRINGS[\"lang\"] + \"/post.html?id=\" + post.id + \"&label=\" + label;\n anchor.style.display = \"inline-block\";\n }\n}\n\nfunction _postFetchPreviousNextLabelsLinks(\n label,\n id,\n previousPost,\n final = false\n ) {\n postsFetchAPost(label, null, null)\n .then((th) => {\n if (final === true) {\n _postBuildPostLink(_postNextPostLink, th.post, label);\n\n if (_postFinalPreviousNextCallback !== null) {\n _postFinalPreviousNextCallback();\n }\n\n postTransformArrowLinks(\"c_arrow\");\n\n return;\n }\n\n if (th.post !== null) {\n let isNextLink = false;\n if (th.post.id === id) {\n if (previousPost !== null) {\n _postBuildPostLink(_postPreviousPostLink, previousPost, label);\n }\n isNextLink = true;\n }\n _postFetchPreviousNextLabelsLinks(label, id, th.post, isNextLink);\n }\n })\n .catch((err) => {\n Log.print(\"Fetch Post Links error: \" + err);\n });\n}\n\nfunction postFetchPreviousNextLabelsLinks(\n previous,\n next,\n labelWrapper,\n callback = null\n ) {\n let params = new URL(document.location).searchParams;\n let id = params.get(\"id\");\n let label = params.get(\"label\");\n\n if (params.get(\"label\") === null) {\n label = \"\";\n }\n\n labelWrapper.parentElement.href = \"/\" + STRINGS[\"lang\"] + \"/\" + label;\n label = postDecode(label);\n\n _postFinalPreviousNextCallback = callback;\n\n postsSetFieldsToFetch(\"items(id,url,labels),nextPageToken\");\n _postFetchPreviousNextLabelsLinks(label, id, null);\n\n previous.style.display = \"none\";\n next.style.display = \"none\";\n _postPreviousPostLink = previous;\n _postNextPostLink = next;\n labelWrapper.innerHTML = stringsTranslateLabel(label);\n}\n\nfunction _postSetMapLink(mapLinkWrapper) {\n if (_postMapLink !== null) {\n mapLinkWrapper.href = _postMapLink;\n }\n}\n\nfunction postFetchFromServer(postWrapper, mapLinkWrapper, callback = null) {\n let params = new URL(document.location).searchParams;\n let id = postDecode(params.get(\"id\"));\n let label = params.get(\"label\");\n\n if (params.get(\"label\") === null) {\n label = \"\";\n }\n label = postDecode(label);\n\n document.getElementById(\"postLoader\").style.display = \"inline-block\";\n\n let resource =\n STRINGS[\"blogId\"] +\n \"/posts/\" +\n id +\n \"?key=\" +\n stringsGetGoogleClientKey() +\n \"&fields=id, content,title,labels,url,location(lat,lng,name),author(id)\";\n\n restFetchJson(STRINGS[\"blogId\"] + \"-POST-\" + id, resource)\n .then((response) => {\n // if (response.ok !== true)\n // {\n // throw Error(response.status);\n // }\n return response.json();\n })\n .then((aux) => {\n if (aux.hasOwnProperty(\"error\")) {\n throw Error(aux.error.message);\n }\n let postElement = postCreateAndAppend(aux, postWrapper, label);\n if (callback !== null) {\n callback(aux);\n }\n _postSetMapLink(mapLinkWrapper);\n _postAddCanonicalLink(label, aux);\n adsenseAddAndPushAdsInsidePost(postElement);\n })\n .catch((err) => {\n Log.print(\"Fetch Post error: \" + err);\n })\n .finally(() => {\n document.getElementById(\"postLoader\").style.display = \"none\";\n });\n}\n\nfunction _postAddCanonicalLink(term, entry) {\n let canonical = canonicalGet(postGetAbsoluteLink(true, term, entry));\n let link = document.createElement(\"link\");\n link.setAttribute(\"rel\", \"canonical\");\n link.setAttribute(\"href\", canonical);\n document.head.appendChild(link);\n}\n\nfunction postGetAlternate(entry) {\n let aux = entry.url;\n let slash = aux.lastIndexOf(\"/\");\n let ext = aux.length;\n if (slash !== -1 && ext > slash) {\n return aux.substring(slash + 1, ext);\n }\n return null;\n}\n\nfunction postGetAbsoluteLink(ssl, term, entry) {\n if (entry !== null) {\n let aux;\n if (ssl === true) {\n aux = \"https\";\n } else {\n aux = \"http\";\n }\n\n let regionPath = \"\";\n const region = stringsGetRegion(entry.labels);\n if (region !== null)\n {\n regionPath = region + \"/\";\n }\n\n return (\n aux +\n \"://www.elmolideponent.com/\" +\n STRINGS[\"lang\"] +\n \"/\" +\n postEncode(regionPath) +\n postEncode(term) +\n \"/\" +\n postGetAlternate(entry)\n );\n }\n return null;\n}\n\nfunction postGetRelativeLinkToRoot(term, entry) {\n if (entry !== null) {\n\n\n let regionPath = \"\";\n const region = stringsGetRegion(entry.labels);\n if (region !== null)\n {\n regionPath = region + \"/\";\n }\n\n return (\n \"/\" +\n STRINGS[\"lang\"] +\n \"/\" +\n postEncode(regionPath) +\n postEncode(term) +\n \"/\" +\n postGetAlternate(entry)\n );\n }\n return null;\n}\n\nexport {\npostTransformArrowLinks,\n postEncode,\n postDecode,\n postFetchFromServer,\n postGetAbsoluteLink,\n postGetRelativeLinkToRoot,\n postStartUp,\n postSetContentLayout,\n postFetchPreviousNextLabelsLinks,\n postGetLocationLat,\n postGetLocationLng,\n postCreateAndAppend\n };\n","/* Copyright (c) 2024 joanribalta@elmolideponent.com */\n\nimport {STRINGS} from './strings.js';\n\nfunction contentGetBrief(content, absoluteLink)\n{\n let textContent = \"\";\n let scriptHTML = \"\";\n let tempElement = document.createElement('div');\n tempElement.innerHTML = content;\n\n for (let i = 0; i < tempElement.children.length; i++) \n {\n let child = tempElement.children[i]; \n if(child.tagName === 'SCRIPT')\n {\n scriptHTML = child.outerHTML;\n }\n else if ((child.tagName !== 'CAPTION') && (child.tagName !== 'H2'))\n {\n textContent = child.textContent.trim();\n if (textContent.length > 0) \n { \n break;\n }\n }\n }\n \n let firstImage = tempElement.querySelector('img');\n let firstImageHTML = firstImage ? firstImage.outerHTML : '';\n \n let brief = scriptHTML + \"
\" + firstImageHTML +\n \"

\" + textContent + \"

\" +\n \"
\" +\n STRINGS['More'] +\n \"
\";\n \n return brief;\n \n}\n\nexport {contentGetBrief};","/* Copyright (c) 2023 joanribalta@elmolideponent.com */\n\nimport {postGetRelativeLinkToRoot, postEncode, postGetAbsoluteLink} from './post.js';\nimport {authorsFetchCard, authorGetPublishedByTemplate} from './authors.js';\nimport {canonicalGet} from './canonical.js';\nimport {postsReset,\n postsSetIndex,\n postsGetIndex,\n postsGetInitialIndex,\n postsSetFieldsToFetch,\n postsSetLocation,\n postsFetchAPost,\n postsReplaceApostrophesInText } from './posts.js';\nimport {Log} from './log.js';\nimport { STRINGS, stringsGetMainLabel } from \"./strings.js\";\nimport { browserImageIsReady, browserGetBrowserWidthIncludingScroll } from './browser.js';\nimport { adsenseAddAndPushThumbAd } from './adsense.js';\nimport {poolInit,\n poolSetAbsoluteHeigth,\n poolResize } from './pool.js';\nimport { authorsIdsGetId } from \"./authorsIds.js\";\n\n\nconst THUMBS_FILE_NAME = \"THUMBS\";\n\nconst THUMBS_CLASS_ITEMS_NAME = \"c_thumbs_item\";\nconst THUMBS_AMONG_ITEMS_MARGIN = 50;\n\nlet _thumbsToReturn = 0;\nlet _thumbsNumber = 0;\nlet _thumbsDownloaded = 0;\nlet _thumbsWrapper = null;\nlet _thumbsInicialised = false;\nlet _thumbsAbsoluteLinks = false;\nlet _thumbsNextLink = null;\nlet _thumbsNextWrapper = null;\nlet _thumbsCategoryFilter;\nlet _thumbsLocationFilter;\n\nfunction _thumbsCreateDefaultImage()\n{\n return(\"\");\n}\n\nfunction _thumbsCreateCustomImage(source, alt)\n{\n // Added 'no-referrer' because started to fail getting images user google content with localhost server\n\n return(\"\"\n            + postsReplaceApostrophesInText(alt)\n            + \"\");\n}\n\nfunction _thumbsSrcImage(source, size)\n{\n const pattern = /\\/s\\d{3}\\//;\n return(source.replace(pattern, size));\n}\n\nfunction _thumbsCreateImage(post)\n{\n let img;\n if (post.images === undefined)\n {\n img = _thumbsCreateDefaultImage();\n } else\n {\n img = _thumbsCreateCustomImage(post.images[0].url, post.title);\n }\n return(img);\n}\n\n\nfunction _thumbsGetPostLink(label, post)\n{\n if (_thumbsAbsoluteLinks === true)\n {\n return(postGetAbsoluteLink(true, label, post));\n } else\n {\n return(postGetRelativeLinkToRoot(label, post));\n }\n}\n\n\n\nfunction _thumbsCreatePostElement(post)\n{\n // Create poster element ---------------------------------------------------\n const wrapper = document.createElement('article');\n wrapper.setAttribute(\"class\", THUMBS_CLASS_ITEMS_NAME);\n\n const canonical = canonicalGet(_thumbsGetPostLink(stringsGetMainLabel(post.labels), post));\n\n const postTemplate = \"
\"\n + _thumbsCreateImage(post)\n + \"
\"\n + \"

\"\n + \"\"\n + post.title\n + \"

\";\n\n //\n wrapper.innerHTML = postTemplate;\n\n return(wrapper);\n}\n\n// This function has been changed by pool.js\n// from display flex to absolute items\nfunction _thumbsSetHeigth()\n{\n if (browserGetBrowserWidthIncludingScroll() >= 1024)\n {\n if ((_thumbsWrapper.style.height === 'auto') || (_thumbsWrapper.style.height === ''))\n {\n const items = _thumbsWrapper.getElementsByClassName(THUMBS_CLASS_ITEMS_NAME);\n let begin = 0;\n let end = items.length - 1;\n let beginSize = 0;\n let endSize = 0;\n\n while (begin <= end)\n {\n if (beginSize < endSize)\n {\n beginSize += items[begin++].offsetHeight;\n beginSize += THUMBS_AMONG_ITEMS_MARGIN; // margin\n //console.log('A' + beginSize);\n } else\n {\n endSize += items[end--].offsetHeight;\n endSize += THUMBS_AMONG_ITEMS_MARGIN; // margin\n //console.log('B' + endSize);\n }\n }\n\n let bigger = (beginSize > endSize) ? beginSize : endSize;\n\n // an extra margin\n bigger += THUMBS_AMONG_ITEMS_MARGIN;\n\n _thumbsWrapper.style.height = bigger + \"px\";\n }\n } else\n {\n _thumbsWrapper.style.height = 'auto';\n }\n\n\n}\n\nfunction _thumbsInicialise()\n{\n if (_thumbsInicialised === false)\n {\n _thumbsInicialised = true;\n\n poolSetAbsoluteHeigth();\n _thumbsFetchPublishers();\n window.addEventListener('resize', function ()\n {\n poolResize();\n });\n }\n}\n\n\nfunction _thumbsCreateAndAppend(post, parent, label)\n{\n // appending the post --------------------------------------------\n const postElement = _thumbsCreatePostElement(post);\n parent.appendChild(postElement);\n const image = postElement.getElementsByClassName('thumbnail')[0];\n browserImageIsReady(image).then(() =>\n {\n _thumbsDownloaded++;\n if (_thumbsDownloaded >= _thumbsToReturn)\n {\n _thumbsInicialise();\n }\n }).catch((err) =>\n {\n Log.print(THUMBS_FILE_NAME + ' - Fetch Image: ' + image.src + ' Error: ' + err);\n });\n return(postElement);\n}\n\nfunction _thumbsFetchPublishers()\n{\n const wrapper = document.getElementsByClassName(\"c_thumbs_publisher\");\n for (const publisher of wrapper)\n {\n const blogAuthorId = publisher.getAttribute(\"data-author-id\");\n const postId = publisher.getAttribute(\"data-post-id\");\n\n const authorId = authorsIdsGetId(blogAuthorId, postId);\n\n authorsFetchCard(authorId)\n .then(content =>\n {\n publisher.innerHTML = authorGetPublishedByTemplate(content);\n })\n .catch((err) =>\n {\n Log.print(THUMBS_FILE_NAME + ' - Fetch Thumb Publisher error: ' + err);\n });\n }\n}\n\nfunction _thumbsFetchPosts(categoryFilter, thumbsWrapper)\n{\n postsFetchAPost(categoryFilter, _thumbsCreateAndAppend, thumbsWrapper).then((th) =>\n {\n _thumbsNumber++;\n if ((th.wrapper !== null) && (_thumbsNumber < _thumbsToReturn))\n {\n if ((_thumbsNumber % 4) === 0)\n {\n adsenseAddAndPushThumbAd(thumbsWrapper);\n }\n _thumbsFetchPosts(categoryFilter, thumbsWrapper);\n } else\n {\n const loader = document.getElementById('c_loader');\n if (loader !== null)\n {\n loader.style.display = 'none';\n }\n\n // there is not enough thumbs\n if ((_thumbsNumber <= _thumbsToReturn) && (th.wrapper === null))\n {\n _thumbsToReturn = --_thumbsNumber;\n if (_thumbsDownloaded >= _thumbsToReturn)\n {\n _thumbsInicialise();\n }\n if (_thumbsNextLink !== null)\n _thumbsNextLink.style.display = 'none';\n\n if (_thumbsNextWrapper !== null)\n {\n if (!_thumbsNextWrapper.getElementsByClassName(\"c_thumbs_previous\").length)\n {\n _thumbsNextWrapper.style.display = 'none';\n }\n }\n\n } else\n {\n if (_thumbsNextLink !== null)\n _thumbsNextLink.href = _thumbsGetNextLink();\n }\n\n }\n }).catch((err) =>\n {\n Log.print(THUMBS_FILE_NAME + ' - Fetch Thumb error: ' + err);\n Log.print(THUMBS_FILE_NAME + ' - Fetch Thumb error Stack trace: ' + err.stack);\n });\n}\n\n\nfunction _thumbsGetNextLink()\n{\n let aux = \"/\" + STRINGS['lang'];\n if (_thumbsLocationFilter)\n {\n aux += \"/\" + postEncode(_thumbsLocationFilter);\n }\n if (_thumbsCategoryFilter)\n {\n aux += \"/\" + postEncode(_thumbsCategoryFilter);\n }\n aux += \"?index=\" + postsGetIndex();\n aux += \"&p=\" + postsGetInitialIndex();\n aux += _thumbsQueryNextPages();\n return (aux);\n}\n\nfunction _thumbsQueryNextPages()\n{\n const urlSearchParams = new URLSearchParams(window.location.search);\n let query = \"\";\n let key = \"p\";\n do\n {\n const value = urlSearchParams.get(key);\n if (!value)\n break;\n query = query + \"&\" + key + \"p=\" + value;\n key = key + \"p\";\n } while (1);\n return(query);\n}\n\n\nfunction thumbsFetchPosts(thumbsWrapper,\n thumbsToReturn = 11,\n index = null,\n locationFilter = null,\n categoryFilter = null,\n absoluteLinks = false)\n{\n _thumbsWrapper = thumbsWrapper;\n _thumbsToReturn = thumbsToReturn;\n _thumbsNumber = 0;\n _thumbsAbsoluteLinks = absoluteLinks;\n _thumbsCategoryFilter = categoryFilter;\n _thumbsLocationFilter = locationFilter;\n postsReset();\n if ((locationFilter !== null) && (locationFilter !== \"\"))\n {\n postsSetLocation(locationFilter);\n }\n poolInit(thumbsWrapper, THUMBS_CLASS_ITEMS_NAME, THUMBS_AMONG_ITEMS_MARGIN);\n // null index => random start !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n if (index === null) // null case\n {\n let begin = 50;\n if (categoryFilter !== null)\n {\n begin = 10;\n }\n postsSetIndex(Math.floor(Math.random() * begin), true);\n } else\n {\n postsSetIndex(index, false);\n }\n postsSetFieldsToFetch('items(id,url,title,labels, images,author(id)),nextPageToken&fetchImages=true');\n _thumbsFetchPosts(categoryFilter, thumbsWrapper);\n}\n\nfunction thumbsSetNextLink(thumbsNextWrapper, thumbsNextLink)\n{\n _thumbsNextWrapper = thumbsNextWrapper;\n _thumbsNextLink = thumbsNextLink;\n}\n\nexport {thumbsFetchPosts, thumbsSetNextLink, THUMBS_CLASS_ITEMS_NAME};\n\n\n","/* Copyright (c) 2023 - 2024 joanribalta@elmolideponent.com */\n\nimport { browserGetCookie, browserSetCookie } from \"./browser.js\";\nimport { STRINGS } from \"./strings.js\";\nimport {Log} from './log.js';\nimport CONFIG from './../config.json';\n\nvar _postersWrapperFetchNumber = 0;\n\nfunction _postersWrapperGetDateString(date, time)\n{\n var parts = date.split('/');\n var ddate = new Date(parts[2], parts[1] - 1, parts[0]);\n var options = {weekday: 'long', year: 'numeric', month: 'long', day: 'numeric'};\n var dateString = ddate.toLocaleDateString(STRINGS['locale'], options);\n return(dateString.charAt(0).toUpperCase() + dateString.slice(1));\n}\n\nfunction _postersWrapperGetTimeString(time)\n{\n var dateString = \"\";\n if (time !== \"\")\n {\n dateString = \"a les \" + time;\n }\n return(dateString);\n}\n\nfunction _postersWrapperGetEndDateOrTime(beginDate, endDate, time)\n{\n var dateString = \"\";\n if (beginDate !== endDate)\n {\n dateString = \"- \" + _postersWrapperGetDateString(endDate);\n } else\n {\n dateString = _postersWrapperGetTimeString(time);\n }\n return(dateString);\n}\n\nfunction _postersWrapperCreateAndAppend(poster, parent)\n{\n let absoluteLink = \"https://cartells.elmolideponent.com/\" + \n encodeURIComponent(Posters.postersEscapeSpacesAndApostrophes(poster.id)) +\n \".html?id=\" +\n poster.publisherId;\n\n let template =\n \"
\" +\n \"
\" +\n _postersWrapperGetDateString(poster.dateBegin) + \" \" +\n _postersWrapperGetEndDateOrTime(poster.dateBegin, poster.dateEnd, poster.timeBegin) +\n \"
\" +\n \"
\" +\n \"\" +\n poster.title +\n \"\" +\n \"
\";\n\n if (poster.subtitle !== \"\")\n {\n template += \"
\" +\n poster.subtitle +\n \"
\";\n }\n\n template += \"
\";\n poster.labelsList.forEach(value =>\n {\n template += \"\" +\n value +\n \"\";\n });\n template += \"\" +\n poster.town +\n \"\";\n\n template += \"\" +\n poster.region +\n \"\";\n\n template += \"
\"; // posterListLabelWrapper\n\n //template += \"
\"\n // + \"
Gràcies per compartir-ho\"\n // + \"
\"\n // + \"
\";\n\n template += \"
\"; // posterListBlock\n\n let wrapper = document.createElement('article');\n wrapper.innerHTML = template;\n wrapper.setAttribute(\"class\", \"posterListWrapper\");\n\n parent.appendChild(wrapper);\n\n\n return(wrapper);\n\n}\n\n\nfunction _postersWrapperFetchStart(postersWrapper)\n{\n let index;\n \n Posters.Log.init();\n \n index = browserGetCookie(\"posterInxex\");\n if (index === \"\")\n {\n index = Math.floor(Math.random() * 12);\n }\n Posters.postersSetPostersIndexAndCursor(index);\n\n _postersWrapperFetchAPoster(postersWrapper);\n}\n\n\nfunction _postersWrapperFetchAPoster(postersWrapper)\n{\n \n Posters.postersFetchAPoster(null, null).then(th =>\n {\n if (th.poster !== null)\n {\n _postersWrapperCreateAndAppend(th.poster, postersWrapper);\n _postersWrapperFetchNumber++;\n if (_postersWrapperFetchNumber < 3)\n {\n _postersWrapperFetchAPoster(postersWrapper);\n } else\n {\n let index = Posters.postersGetPostersIndex();\n browserSetCookie(\"posterInxex\", index, 1);\n }\n } else\n {\n if (Posters.postersGetPostersIndex() >= 3)\n {\n Posters.postersReset();\n Posters.postersSetPostersIndex(0);\n browserSetCookie(\"posterInxex\", 0, 1);\n _postersWrapperFetchAPoster(postersWrapper);\n }\n }\n\n }).catch(err =>\n {\n Log.print('Fetch Posters error: ' + err);\n });\n}\n\nfunction postersWrapperGetSomePosters(postersWrapper)\n{\n let script = document.createElement('script');\n script.src = \"https://cartells.elmolideponent.com/exports.js?v=\" + CONFIG.version;\n script.async = true;\n document.body.append(script);\n\n script.addEventListener(\"load\", () =>\n {\n _postersWrapperFetchStart(postersWrapper);\n });\n}\n\n// -----------------------------------------------------------------------------\n\nfunction _postersWrapperFetchAndAppendPosters(author, postersWrapper)\n{\n Posters.postersSetPublisherFilter(author);\n\n function fetchPoster()\n {\n Posters.postersFetchAPoster(null, null)\n .then(th =>\n {\n if (th.poster !== null)\n {\n _postersWrapperCreateAndAppend(th.poster, postersWrapper);\n if (Posters.postersIsThereMorePosters())\n {\n fetchPoster();\n }\n }\n })\n .catch(err =>\n {\n console.error('Fetch Posters error: ', err);\n });\n }\n\n fetchPoster();\n}\n\nfunction postersWrapperGetAllPostersByAuthor(author, postersWrapper) {\n let script = document.createElement('script');\n script.src = \"https://cartells.elmolideponent.com/exports.js?v=\" + CONFIG.version;\n script.async = true;\n document.body.append(script);\n\n script.addEventListener(\"load\", () =>\n {\n _postersWrapperFetchAndAppendPosters(author, postersWrapper);\n });\n}\n\nexport {postersWrapperGetAllPostersByAuthor, postersWrapperGetSomePosters};\n\n\n\n\n\n\n","/* Copyright (c) 2024 joanribalta@elmolideponent.com */\n\nimport {STRINGS, stringsTranslateLabel} from './strings.js';\nimport {postEncode} from './post.js';\n\nfunction layoutMenuCreate()\n{\n let template = \"
\"\n + \"\"\n + \"\"\n + \"
\"\n + \"
\"\n + \"

\"\n + STRINGS['Sections']\n + \"

\"\n + \"\"\n + \"
\"\n + \"
\"\n + \"

\"\n + STRINGS['Regions']\n + \"

\"\n + \"\"\n + \"
\"\n + \"
\"\n + \"\"\n + \"
\";\n\n\n let menu = document.getElementById('c_sidebar');\n //\n menu.innerHTML = template;\n\n}\n\n\nfunction layoutHeaderCreate(topId = 'c_top')\n{\n let template = \"
\"\n + \"
\";\n\n if ((STRINGS['lang']) === 'ca')\n {\n template += \"es\"\n + \"en\";\n } else if ((STRINGS['lang']) === 'es')\n {\n template += \"ca\"\n + \"en\";\n } else\n {\n template += \"es\"\n + \"ca\";\n }\n\n template += \"\"\n + \"\\r\\n\"\n + \"
\\r\\n\";\n\n template += \"
\" // c_languages\n + \"
\" // c_top_flex\n + \"\";// topId\n\n template += \"
\"\n + \"
El Molí de Ponent
\"\n + \"

\"\n + STRINGS['Header']\n + \"

\";\n\n let header = document.getElementById('c_header_container');\n //\n header.innerHTML = template;\n}\n\nfunction layoutPageLinks()\n{\n let template = \"
\"\n + \"\"\n + \"\"\n + \"\"\n + \"
\";\n\n return(template);\n}\n\nfunction layoutPageLinksCreate()\n{\n let links = document.getElementById('c_page_links');\n links.innerHTML = layoutPageLinks();\n}\n\n\nfunction layoutPageAndMapLinksCreate()\n{\n let template = \"\";\n\n let links = document.getElementById('c_page_links');\n //\n links.innerHTML = template;\n}\n\nfunction layoutListCreate()\n{\n layoutMenuCreate();\n layoutHeaderCreate();\n}\n\nfunction layoutPostCreate()\n{\n layoutMenuCreate();\n layoutHeaderCreate();\n layoutPageAndMapLinksCreate();\n}\n\nfunction layoutMapCreate()\n{\n layoutMenuCreate();\n layoutHeaderCreate(\"c_top_map\");\n layoutPageLinksCreate();\n}\n\nexport { layoutListCreate, layoutPostCreate, layoutMapCreate };\n\n","/* Copyright (c) 2023 joanribalta@elmolideponent.com */\n\nimport {STRINGS, stringsGetGoogleClientKey, stringsTranslateLabel} from './strings.js';\nimport {Log} from './log.js';\nimport {postEncode,\n postDecode,\n postSetContentLayout,\n postCreateAndAppend,\n postGetLocationLat,\n postGetLocationLng} from './post.js';\nimport {postsFetchAPost, postsReset } from './posts.js';\nimport {browserGetBrowserHeight, browserGetBrowserWidth, browserAnalyticsSendPage} from './browser.js';\nimport {adsenseAddAndPushAdsInsidePost} from './adsense.js';\n\nconst MAP_DEFAULT_LAT = 41.97;\nconst MAP_DEFAULT_LNG = 0.99;\nconst MAP_DEFAULT_ZOOM = 9;\n\nvar map;\nvar mapPostsWrapper;\nvar mapPostsModal;\nvar mapLabelPosts = {};\nvar mapLabel = \"\";\nvar mapPostId = \"\";\nvar mapCrossMarker = null;\nvar mapCurrentMarkedPost = -1;\nvar mapTitle;\n\nfunction mapAsyncDeferMapsScript() {\n let script = document.createElement(\"script\");\n script.src =\n \"https://maps.googleapis.com/maps/api/js?key=\" +\n stringsGetGoogleClientKey() +\n \"&callback=mapInit\";\n script.async = true;\n script.defer = true;\n document.head.append(script);\n}\n\nfunction mapGetBorderSize() {\n return 6;\n}\n\nfunction _mapFetchLabelPosts(label) {\n if (mapLabelPosts.hasOwnProperty(label) === false) {\n //\n mapLabelPosts[label] = {\n markersCreated: false,\n fetching: false,\n items: [],\n };\n\n // it's created a div that wraps each label items\n let labelWrapper = document.createElement(\"div\");\n labelWrapper.setAttribute(\"id\", label);\n mapPostsWrapper.appendChild(labelWrapper);\n\n //\n _mapFetchPosts(label, labelWrapper);\n }\n}\n\nfunction _mapFetchPosts(label, wrapper) {\n mapLabelPosts[label].fetching = true;\n postsFetchAPost(label, postCreateAndAppend, wrapper)\n .then((th) => {\n if (th.wrapper !== null) {\n //\n th.wrapper.style.display = \"none\";\n //\n _mapFetchPosts(label, wrapper);\n if (th.post.location !== undefined) {\n mapLabelPosts[label].items.push(th);\n }\n // with of the Post like the image Post plus margins\n // browserImageIsReady(th.image).then(() =>\n // {\n // if ((th.image.naturalWidth + postsGetMargin() + mapGetBorderSize()) <= browserGetBrowserWidth())\n // {\n // th.wrapper.style.width = th.image.naturalWidth + \"px\";\n // } else\n // {\n // th.wrapper.style.width = (browserGetBrowserWidth() - postsGetMargin() - mapGetBorderSize()) + \"px\";\n // }\n // });\n } else {\n mapLabelPosts[label].fetching = false;\n }\n //\n if (\n mapLabelPosts[label].fetching === false &&\n mapLabelPosts[label].items.length === 0\n ) {\n var message = \"No hi ha cartells\";\n message += \", amb l'etiqueta '\" + mapLabel + \"'\";\n\n document.getElementById(\"mapInfoErrorContent\").innerHTML = message;\n var modal = document.getElementById(\"mapWindowError\");\n modal.style.display = \"inline-block\";\n\n if (browserGetBrowserWidth() > 640) {\n modal.style.left = (browserGetBrowserWidth() - 640) / 2 + \"px\";\n modal.style.top = \"45px\";\n } else {\n modal.style.left = \"0px\";\n modal.style.right = \"0px\";\n modal.style.top = \"45px\";\n }\n }\n })\n .catch((err) => {\n Log.print(\"Fetch Map Posts error: \" + err);\n mapLabelPosts[label].fetching = false;\n });\n}\n\nfunction mapFetchPosts(modal, wrapper) {\n let params = new URL(document.location).searchParams;\n let label = postDecode(params.get(\"label\") || \"\");\n\n mapPostsWrapper = wrapper;\n mapPostsModal = modal;\n postSetContentLayout(true, false, false);\n _mapFetchLabelPosts(label);\n}\n\nfunction _mapRefetchPostsAndMarkThem(label) {\n document.getElementById(\"mapLoader\").style.display = \"inline-block\";\n\n // resetting map marking variables ------------------------------------------\n //mapMarkersLocation.length = 0;\n // removing previous markers from the map\n mapLabelPosts[mapLabel].items.forEach((item) => {\n item.marker.setMap(null);\n });\n\n map.setCenter({lat: MAP_DEFAULT_LAT, lng: MAP_DEFAULT_LNG});\n map.setZoom(MAP_DEFAULT_ZOOM);\n\n _mapSetPageCategory(label);\n\n // fetching the Posts ans marking them in the map\n postsReset();\n _mapFetchLabelPosts(label);\n _mapMarking(label, 0);\n}\n\nfunction _mapGetSpriteOffset(labels) {\n // starting with more genercics\n if (labels.includes(STRINGS[\"Restaurant\"]))\n // brown\n return {x: 220, y: 55};\n else if (labels.includes(STRINGS[\"Gastronomy\"]))\n // blue\n return {x: 110, y: 0};\n else if (labels.includes(STRINGS[\"Places\"]))\n // gray\n return {x: 165, y: 55};\n else if (labels.includes(STRINGS[\"Excursion\"]))\n // green\n return {x: 165, y: 0};\n else if (labels.includes(STRINGS[\"Stones\"]))\n // orange\n return {x: 55, y: 55};\n else if (labels.includes(STRINGS[\"Sports\"]))\n // purple\n return {x: 55, y: 0};\n else if (labels.includes(STRINGS[\"Event\"]))\n // yellow\n return {x: 220, y: 0};\n else if (labels.includes(STRINGS[\"Lodging\"]))\n // red\n return {x: 0, y: 0};\n else\n return {x: 0, y: 55};\n}\n\nfunction _mapMarking(label, labelPostIndex) {\n if (\n mapLabelPosts[label].fetching === false &&\n labelPostIndex >= mapLabelPosts[label].items.length\n ) {\n mapLabelPosts[label].markersCreated = true;\n document.getElementById(\"mapLoader\").style.display = \"none\";\n return;\n }\n\n if (labelPostIndex < mapLabelPosts[label].items.length) {\n let labelPost = mapLabelPosts[label].items[labelPostIndex];\n\n let lat = postGetLocationLat(labelPost.post.location);\n let lng = postGetLocationLng(labelPost.post.location);\n let position = {lat, lng};\n\n if (mapLabelPosts[label].markersCreated === false) {\n let offset = _mapGetSpriteOffset(mapLabel);\n let icon = {\n url: \"/images/markers.png\",\n size: new google.maps.Size(55, 55),\n origin: new google.maps.Point(offset.x, offset.y),\n // scaledSize: new google.maps.Size(25, 25)\n };\n let title = labelPost.post.title;\n let zIndex = google.maps.Marker.MAX_ZINDEX + 11;\n let marker = new google.maps.Marker({\n position,\n icon,\n zIndex,\n title,\n map,\n });\n marker.addListener(\n \"click\",\n (function () {\n let itemIndex = labelPostIndex;\n return () => {\n mapCurrentMarkedPost = itemIndex;\n let item = mapLabelPosts[label].items[itemIndex];\n item.wrapper.style.display = \"inline-block\";\n //mapInfoWindow.open(map, marker);\n mapPostsModal.style.display = \"inline-block\";\n //\n _mapAddAd(item.wrapper);\n _mapSetMarker(item.post);\n _mapSendPopUpPostTitleToAnalytics(item.post.title);\n };\n })()\n );\n labelPost.marker = marker;\n } else {\n labelPost.marker.setMap(map);\n }\n\n if (labelPost.post.id === mapPostId) {\n mapCurrentMarkedPost = labelPostIndex;\n _mapSetMarker(labelPost.post);\n }\n\n //mapMarkers.push(marker);\n labelPostIndex++;\n }\n setTimeout(_mapMarking, 0, label, labelPostIndex);\n}\n\nfunction _mapAddAd(wrapper) {\n if (wrapper.hasAttribute(\"data-rendered-ad\")) {\n if (wrapper.getAttribute(\"data-rendered-ad\") === \"true\") {\n return;\n }\n }\n wrapper.setAttribute(\"data-rendered-ad\", \"true\");\n adsenseAddAndPushAdsInsidePost(wrapper);\n}\n\nfunction _mapSendPopUpPostTitleToAnalytics(title) {\n browserAnalyticsSendPage(\"popup map - \" + title, location.href);\n}\n\nfunction _mapSetMarker(post) {\n let position = {\n lat: postGetLocationLat(post.location),\n lng: postGetLocationLng(post.location),\n };\n\n mapCrossMarker.setPosition(position);\n mapCrossMarker.setMap(map);\n mapTitle.innerHTML = post.title;\n mapTitle.style.display = \"inline-block\";\n // map is not yet initialized?\n try {\n if (map.getBounds().contains(position) === false) {\n map.setCenter(position);\n }\n } catch (err) {\n }\n}\n\nfunction _mapSetPageCategory(label) {\n let labelWrapper = document.getElementById(\"c_label\");\n\n mapLabel = label;\n labelWrapper.innerHTML = stringsTranslateLabel(label);\n labelWrapper.parentElement.href =\n \"/\" + STRINGS[\"lang\"] + \"/\" + postEncode(label);\n}\n\nfunction mapInit() {\n let params = new URL(document.location).searchParams;\n let mapLat = parseFloat(params.get(\"lat\")) || MAP_DEFAULT_LAT;\n let mapLng = parseFloat(params.get(\"lng\")) || MAP_DEFAULT_LNG;\n let mapZoom = parseInt(params.get(\"zoom\")) || MAP_DEFAULT_ZOOM;\n mapPostId = params.get(\"id\") || \"\";\n\n // sets page label\n _mapSetPageCategory(postDecode(params.get(\"label\") || \"\"));\n\n // set radio intial label\n let radios = document.getElementsByName(\"labelFilter\");\n for (let i = 0; i < radios.length; i++) {\n if (radios[i].value === mapLabel) {\n radios[i].checked = true;\n break;\n }\n }\n\n var mapElement = document.getElementById(\"map\");\n mapElement.style.height = browserGetBrowserHeight() - 80 + \"px\";\n mapElement.style.width = \"100%\";\n\n window.addEventListener(\"resize\", function (event) {\n mapElement.style.height = browserGetBrowserHeight() - 80 + \"px\";\n });\n\n map = new google.maps.Map(mapElement, {\n center: {lat: mapLat, lng: mapLng},\n mapTypeControl: false,\n zoom: mapZoom,\n });\n\n let icon = {\n url: \"/images/cross_55.png\",\n size: new google.maps.Size(55, 55),\n origin: new google.maps.Point(0, 0),\n //anchor: new google.maps.Point(32, 32)\n };\n let clickable = false;\n mapCrossMarker = new google.maps.Marker({icon, clickable});\n mapCrossMarker.setZIndex(google.maps.Marker.MAX_ZINDEX + 10);\n\n mapTitle = document.getElementById(\"mapTitle\");\n //mapPostIndex = 0;\n _mapMarking(mapLabel, 0);\n\n // map marked title --------------------------------------------------------\n map.controls[google.maps.ControlPosition.TOP_LEFT].push(mapTitle);\n\n //\n let markerBackward = document.getElementById(\"markerBackward\");\n markerBackward.addEventListener(\"click\", (event) => {\n let items = mapLabelPosts[mapLabel].items;\n //\n --mapCurrentMarkedPost;\n if (mapCurrentMarkedPost < 0)\n mapCurrentMarkedPost = items.length - 1;\n //\n _mapSetMarker(items[mapCurrentMarkedPost].post);\n });\n\n //\n let markerForward = document.getElementById(\"markerForward\");\n markerForward.addEventListener(\"click\", (event) => {\n let items = mapLabelPosts[mapLabel].items;\n //\n mapCurrentMarkedPost++;\n mapCurrentMarkedPost = mapCurrentMarkedPost % items.length;\n //\n _mapSetMarker(items[mapCurrentMarkedPost].post);\n });\n\n // Modal window info -------------------------------------------------------\n if (browserGetBrowserWidth() > 640) {\n mapPostsModal.style.left = (browserGetBrowserWidth() - 640) / 2 + \"px\";\n mapPostsModal.style.top = \"3px\";\n } else {\n mapPostsModal.style.left = \"0px\";\n mapPostsModal.style.top = \"0px\";\n }\n\n document.getElementById(\"mapWindowInfoLabel\").textContent =\n stringsTranslateLabel(mapLabel);\n\n var close = document.getElementById(\"mapWindowInfoClose\");\n close.addEventListener(\"click\", (event) => {\n mapPostsModal.style.display = \"none\";\n mapLabelPosts[mapLabel].items[mapCurrentMarkedPost].wrapper.style.display =\n \"none\";\n });\n\n // window info backward ----------------------------------------------------\n var backward = document.getElementById(\"mapWindowInfoBackward\");\n backward.addEventListener(\"click\", (event) => {\n let items = mapLabelPosts[mapLabel].items;\n items[mapCurrentMarkedPost].wrapper.style.display = \"none\";\n\n --mapCurrentMarkedPost;\n if (mapCurrentMarkedPost < 0)\n mapCurrentMarkedPost = items.length - 1;\n\n items[mapCurrentMarkedPost].wrapper.style.display = \"inline-block\";\n _mapAddAd(items[mapCurrentMarkedPost].wrapper);\n _mapSetMarker(items[mapCurrentMarkedPost].post);\n _mapSendPopUpPostTitleToAnalytics(items[mapCurrentMarkedPost].post.title);\n });\n\n // window info forward -----------------------------------------------------\n var forward = document.getElementById(\"mapWindowInfoForward\");\n forward.addEventListener(\"click\", (event) => {\n let items = mapLabelPosts[mapLabel].items;\n items[mapCurrentMarkedPost].wrapper.style.display = \"none\";\n\n mapCurrentMarkedPost++;\n mapCurrentMarkedPost = mapCurrentMarkedPost % items.length;\n\n items[mapCurrentMarkedPost].wrapper.style.display = \"inline-block\";\n _mapAddAd(items[mapCurrentMarkedPost].wrapper);\n _mapSetMarker(items[mapCurrentMarkedPost].post);\n _mapSendPopUpPostTitleToAnalytics(items[mapCurrentMarkedPost].post.title);\n });\n\n // labels filters ----------------------------------------------------------\n var radios2 = document.getElementsByName(\"labelFilter\");\n [].forEach.call(radios2, (radio2) => {\n radio2.addEventListener(\"change\", (event) => {\n if (event.target.checked) {\n document.getElementById(\"mapWindowInfoLabel\").textContent =\n event.target.value;\n mapPostId = \"\";\n mapCrossMarker.setMap(null);\n mapTitle.style.display = \"none\";\n mapCurrentMarkedPost = -1;\n document.documentElement.scrollTop = 0;\n _mapRefetchPostsAndMarkThem(event.target.value);\n }\n });\n });\n}\n\nexport { mapAsyncDeferMapsScript, mapFetchPosts, mapGetBorderSize, mapInit };\n","/* Copyright (c) 2023 joanribalta@elmolideponent.com */\n\nimport {postGetRelativeLinkToRoot, postEncode, postTransformArrowLinks} from './post.js';\nimport {authorsListGetDescription, authorsListGetMessage } from './authorsList.js';\nimport {authorsGetPostsByAuthor} from './authorsPostsIds.js';\nimport {postsSetFieldsToFetch, postsFetchAPost, postsSetIdsFilter } from './posts.js';\nimport {STRINGS, stringsGetMainLabel} from './strings.js';\nimport {Log} from './log.js';\nimport {authorsFetchCard, authorGetHeader} from './authors.js';\n\n\nfunction listAddOpenGraphMetaTags(url, title, image, description)\n{\n var metaTags =\n [\n {property: 'fb:app_id', content: '798366963612327'},\n {property: 'og:site_name', content: 'El Molí de Ponent'},\n {property: 'og:type', content: 'article'},\n {property: 'og:url', content: url},\n {property: 'og:title', content: title},\n {property: 'og:image', content: image},\n {property: 'og:description', content: description}\n ];\n\n var head = document.getElementsByTagName('head')[0];\n metaTags.forEach(function (meta)\n {\n var element = document.createElement('meta');\n element.setAttribute('property', meta.property);\n element.setAttribute('content', meta.content);\n head.appendChild(element);\n });\n\n}\n\n\nfunction _listCreatePostElement(post)\n{\n // Create poster element ---------------------------------------------------\n let wrapper = document.createElement('article');\n wrapper.setAttribute(\"class\", \"listItem\");\n\n let label = stringsGetMainLabel(post.labels);\n\n let postTemplate = \"
\"\n + post.title + \"
\";\n\n postTemplate += \"
\";\n\n post.labels.forEach((label) =>\n {\n postTemplate += \"\"\n + label\n + \"\";\n });\n\n postTemplate += \"
\";\n //\n wrapper.innerHTML = postTemplate;\n\n return(wrapper);\n}\n\n\nfunction _listCreateAndAppend(post, parent, label)\n{\n // appending the post --------------------------------------------\n let postElement = _listCreatePostElement(post);\n parent.appendChild(postElement);\n return(postElement);\n}\n\n\nfunction _listFetchPostsByAuthor(listWrapper)\n{\n postsFetchAPost(null, _listCreateAndAppend, listWrapper).then((th) =>\n {\n if (th.wrapper !== null)\n {\n _listFetchPostsByAuthor(listWrapper);\n } else\n {\n document.getElementById('listLoader').style.display = 'none';\n postTransformArrowLinks(\"c_anchor\");\n }\n }).catch((err) =>\n {\n document.getElementById('listLoader').style.display = 'none';\n Log.print('Fetch Post error: ' + err);\n });\n}\n\nfunction listRemoveTags(htmlString)\n{\n return htmlString.replace(/<[^>]*>/g, '');\n}\n\nfunction listAddTitleAndDescription(author)\n{\n // set page title and description\n document.title = STRINGS['PublicationsOf'] + listRemoveTags(author.name) + \" - \" + author.location;\n document.head.innerHTML += \"\";\n}\n\nfunction listGetHeaders(author)\n{\n // creates the author header\n return(authorGetHeader(author));\n}\n\nfunction listFetchHeader(headerWrapper)\n{\n let params = (new URL(document.location)).searchParams;\n let id = params.get(\"id\");\n\n authorsFetchCard(id).\n then(content =>\n {\n listAddTitleAndDescription(content);\n listAddOpenGraphMetaTags(window.location.href,\n document.title,\n content.imageUrl,\n authorsListGetDescription(content.id));\n headerWrapper.innerHTML = listGetHeaders(content);\n })\n .catch((err) =>\n {\n Log.print('Fetch List error: ' + err);\n });\n\n}\n\nfunction listGetAuthorMessage(messageWrapper)\n{\n let params = (new URL(document.location)).searchParams;\n let id = params.get(\"id\");\n\n let message = authorsListGetMessage(id);\n\n if (message !== null)\n {\n messageWrapper.innerHTML = message;\n }\n\n}\n\n\nfunction listFetchPostsByAuthor(listWrapper)\n{\n let params = (new URL(document.location)).searchParams;\n let id = params.get(\"id\");\n\n //postsSetFieldsToFetch('items(id,url,title,labels,author(id)),nextPageToken');\n postsSetFieldsToFetch('items(id,url,title,labels),nextPageToken');\n let postsIds = authorsGetPostsByAuthor(id);\n postsSetIdsFilter(postsIds);\n _listFetchPostsByAuthor(listWrapper);\n}\n\nexport {listFetchPostsByAuthor, listFetchHeader, listGetAuthorMessage};\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, \"posts\", 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('subscription-wrapper');\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","/* Copyright (c) 2024 joanribalta@elmolideponent.com */\n\nimport {stringsInit} from \"./js/strings.js\";\nimport {canonicalInit} from \"./js/canonical.js\";\nimport {authorsIdsInit} from \"./js/authorsIds.js\";\nimport {Log} from \"./js/log.js\";\nimport {cacheIfQuickReloadFlushEverything} from \"./js/cache.js\";\nimport {thumbsFetchPosts, thumbsSetNextLink} from \"./js/thumbs.js\";\nimport {postersWrapperGetSomePosters,\n postersWrapperGetAllPostersByAuthor} from \"./js/postersWrapper.js\";\nimport {browserAnalyticsConfig,\n browserMenuToggleInit,\n browserCanShareParse,\n browserAsyncAnalyticsScript,\n browserAsyncAnalyticsLoadScript} from \"./js/browser.js\";\nimport {pageAddAuthor} from \"./js/page.js\";\nimport {adsensePushAds} from \"./js/adsense.js\";\nimport {layoutMapCreate, layoutListCreate, layoutPostCreate} from \"./js/layout.js\";\nimport {mapAsyncDeferMapsScript, mapInit, mapFetchPosts} from \"./js/map.js\";\nimport {commentsAdd} from \"./js/comments.js\";\nimport {listFetchHeader, listGetAuthorMessage, listFetchPostsByAuthor} from \"./js/list.js\";\nimport {postStartUp, postFetchFromServer,\n postFetchPreviousNextLabelsLinks} from \"./js/post.js\";\nimport { subscriptionSendNewConnection, subscriptionLoadForm } from \"./js/subscription.js\";\n\nfunction startUpServerIndex(locale)\n{\n stringsInit(locale);\n cacheIfQuickReloadFlushEverything();\n canonicalInit(locale);\n authorsIdsInit(locale);\n Log.init();\n //Log.print(\"test 2\");\n\n // posts \n let params = new URLSearchParams(window.location.search);\n let index = params.get('index');\n if ((index === \"\") || (index === null))\n {\n index = 0;\n }\n thumbsFetchPosts(document.getElementById('c_thumbs_wrapper'), 11, index);\n thumbsSetNextLink(document.getElementById('c_thumbs_more'), document.getElementById('c_thumbs_next'));\n // \n postersWrapperGetSomePosters(document.getElementById('c_posters_wrapper'));\n browserMenuToggleInit('c_menu_button', 'c_sidebar', 'c_sidebar_invisible', 'c_sidebar_close_button');\n //cookiesPolicy();\n\n subscriptionLoadForm();\n subscriptionSendNewConnection();\n\n}\n\nfunction startUpServerCategory(locale, category)\n{\n stringsInit(locale);\n cacheIfQuickReloadFlushEverything();\n canonicalInit(locale);\n authorsIdsInit(locale);\n Log.init();\n\n let params = new URLSearchParams(window.location.search);\n let index = params.get('index');\n if ((index === \"\") || (index === null))\n {\n index = 0;\n }\n thumbsFetchPosts(document.getElementById('c_thumbs_wrapper'), 11, index, null, category);\n thumbsSetNextLink(document.getElementById('c_thumbs_more'), document.getElementById('c_thumbs_next'));\n //\n postersWrapperGetSomePosters(document.getElementById('c_posters_wrapper'));\n browserMenuToggleInit('c_menu_button', 'c_sidebar', 'c_sidebar_invisible', 'c_sidebar_close_button');\n\n subscriptionLoadForm();\n subscriptionSendNewConnection();\n\n}\n\nfunction startUpServerLocationCategory(locale, location, category)\n{\n stringsInit(locale);\n cacheIfQuickReloadFlushEverything();\n canonicalInit(locale);\n authorsIdsInit(locale);\n Log.init();\n\n let params = new URLSearchParams(window.location.search);\n let index = params.get('index');\n if ((index === \"\") || (index === null))\n {\n index = 0;\n }\n thumbsFetchPosts(document.getElementById('c_thumbs_wrapper'), 11, index, location, category);\n thumbsSetNextLink(document.getElementById('c_thumbs_more'), document.getElementById('c_thumbs_next'));\n //\n postersWrapperGetSomePosters(document.getElementById('c_posters_wrapper'));\n browserMenuToggleInit('c_menu_button', 'c_sidebar', 'c_sidebar_invisible', 'c_sidebar_close_button');\n\n subscriptionLoadForm();\n subscriptionSendNewConnection();\n\n}\n\n\nfunction startUpServerPost(locale)\n{\n stringsInit(locale);\n cacheIfQuickReloadFlushEverything();\n canonicalInit(locale);\n authorsIdsInit(locale);\n Log.init();\n\n postStartUp();\n commentsAdd(document.getElementById('commentsItems'));\n postersWrapperGetSomePosters(document.getElementById('c_posters_wrapper'));\n thumbsFetchPosts(document.getElementById('c_thumbs_wrapper'), 4);\n browserMenuToggleInit('c_menu_button', 'c_sidebar', 'c_sidebar_invisible', 'c_sidebar_close_button');\n browserCanShareParse(document);\n\n subscriptionLoadForm();\n subscriptionSendNewConnection();\n}\n\nfunction startUpServerLocationCategoryPost(locale, location, category)\n{\n stringsInit(locale);\n cacheIfQuickReloadFlushEverything();\n canonicalInit(locale);\n authorsIdsInit(locale);\n Log.init();\n\n postStartUp();\n commentsAdd(document.getElementById('commentsItems'));\n\n let params = new URLSearchParams(window.location.search);\n let index = params.get('index');\n if ((index === \"\") || (index === null))\n {\n index = 0;\n }\n\n thumbsFetchPosts(document.getElementById('c_thumbs_wrapper'), 11, index, location, category);\n thumbsSetNextLink(document.getElementById('c_thumbs_more'), document.getElementById('c_thumbs_next'));\n\n postersWrapperGetSomePosters(document.getElementById('c_posters_wrapper'));\n\n browserMenuToggleInit('c_menu_button', 'c_sidebar', 'c_sidebar_invisible', 'c_sidebar_close_button');\n browserCanShareParse(document);\n\n subscriptionLoadForm();\n subscriptionSendNewConnection();\n}\n\n\nfunction startUpPost(locale)\n{\n stringsInit(locale);\n cacheIfQuickReloadFlushEverything();\n canonicalInit(locale);\n authorsIdsInit(locale);\n Log.init();\n\n layoutPostCreate();\n postFetchFromServer(document.getElementById('postWrapper'),\n document.getElementById('mapLink'),\n (post) =>\n {\n document.title = post.title;\n browserAnalyticsConfig(true);\n });\n postFetchPreviousNextLabelsLinks(document.getElementById('markerBackward'),\n document.getElementById('markerForward'),\n document.getElementById('c_label'), () =>\n {\n thumbsFetchPosts(document.getElementById('c_thumbs_wrapper'), 4);\n });\n postersWrapperGetSomePosters(document.getElementById('c_posters_wrapper'));\n browserMenuToggleInit('c_menu_button', 'c_sidebar', 'c_sidebar_invisible', 'c_sidebar_close_button');\n\n subscriptionLoadForm();\n subscriptionSendNewConnection();\n}\n\n\nfunction startUpList(locale)\n{\n stringsInit(locale);\n cacheIfQuickReloadFlushEverything();\n canonicalInit(locale);\n authorsIdsInit(locale);\n Log.init();\n\n listFetchHeader(document.getElementById('c_owner'));\n listGetAuthorMessage(document.getElementById('c_owner_message'));\n listFetchPostsByAuthor(document.getElementById('postList'));\n layoutListCreate();\n browserMenuToggleInit('c_menu_button', 'c_sidebar', 'c_sidebar_invisible', 'c_sidebar_close_button');\n\n let params = (new URL(document.location)).searchParams;\n let publisher = params.get(\"id\");\n\n postersWrapperGetAllPostersByAuthor(publisher, document.getElementById('posterList'));\n\n subscriptionLoadForm();\n subscriptionSendNewConnection();\n\n}\n\n\nfunction startUpMap(locale)\n{\n stringsInit(locale);\n cacheIfQuickReloadFlushEverything();\n canonicalInit(locale);\n authorsIdsInit(locale);\n Log.init();\n\n layoutMapCreate();\n mapFetchPosts(document.getElementById('mapWindowInfo'), document.getElementById('mapPosts'));\n browserMenuToggleInit('c_menu_button', 'c_sidebar', 'c_sidebar_invisible', 'c_sidebar_close_button');\n\n subscriptionLoadForm();\n subscriptionSendNewConnection();\n}\n\nfunction startUpRegion(locale, category)\n{\n stringsInit(locale);\n cacheIfQuickReloadFlushEverything();\n canonicalInit(locale);\n authorsIdsInit(locale);\n Log.init();\n\n let params = new URLSearchParams(window.location.search);\n let index = params.get('index');\n if ((index === \"\") || (index === null))\n {\n index = 0;\n let element = document.getElementById(\"c_category\");\n if (element !== null)\n {\n element.style.display = 'block';\n }\n }\n\n pageAddAuthor();\n browserCanShareParse(document);\n\n thumbsFetchPosts(document.getElementById('c_thumbs_wrapper'), 11, index, null, category);\n thumbsSetNextLink(document.getElementById('c_thumbs_more'), document.getElementById('c_thumbs_next'));\n //\n postersWrapperGetSomePosters(document.getElementById('c_posters_wrapper'));\n browserMenuToggleInit('c_menu_button', 'c_sidebar', 'c_sidebar_invisible', 'c_sidebar_close_button');\n\n subscriptionLoadForm();\n subscriptionSendNewConnection();\n\n}\n\nwindow.startUpRegion = startUpRegion;\nwindow.startUpMap = startUpMap;\nwindow.startUpPost = startUpPost;\nwindow.startUpList = startUpList;\nwindow.startUpServerIndex = startUpServerIndex;\nwindow.startUpServerCategory = startUpServerCategory;\nwindow.startUpServerLocationCategory = startUpServerLocationCategory;\nwindow.startUpServerPost = startUpServerPost;\nwindow.startUpServerLocationCategoryPost = startUpServerLocationCategoryPost;\nwindow.browserAsyncAnalyticsScript = browserAsyncAnalyticsScript;\nwindow.browserAsyncAnalyticsLoadScript = browserAsyncAnalyticsLoadScript;\nwindow.mapAsyncDeferMapsScript = mapAsyncDeferMapsScript;\nwindow.adsensePushAds = adsensePushAds;\nwindow.mapInit = mapInit;\n\n\n\n","/* Copyright (c) 2023 joanribalta@elmolideponent.com */\n\nimport { authorsIdsGetId } from \"./authorsIds.js\";\nimport { authorsGetCard, authorGetPublishedByTemplate } from \"./authors.js\";\nimport {Log} from './log.js';\nimport {authorsFetchCard} from './authors.js';\n\n\nfunction pageAddAuthor(parent = null)\n{\n if (parent === null)\n {\n parent = document;\n }\n\n let wrapper = parent.getElementsByClassName(\"c_author\");\n let blogAuthorId = wrapper[0].getAttribute(\"data-author-id\");\n let postId = wrapper[0].getAttribute(\"data-post-id\");\n \n let authorId = authorsIdsGetId(blogAuthorId, postId);\n\n authorsFetchCard(authorId)\n .then(content =>\n {\n wrapper[0].innerHTML = authorsGetCard(content);\n\n // publisher ------------------------------------------------\n let wrapper2 = parent.getElementsByClassName(\"c_publisher\");\n authorsFetchCard(authorId)\n .then(content =>\n {\n wrapper2[0].innerHTML = authorGetPublishedByTemplate(content);\n })\n .catch(err =>\n {\n Log.print('Fetch Publisher error: ' + err);\n });\n })\n .catch((err) =>\n {\n Log.print('Fetch Author error: ' + err);\n });\n}\n\nexport { pageAddAuthor };\n\n\n"],"names":["Log","_classCallCheck","key","value","_this","consoleDebug","arguments","length","undefined","serverDebug","this","_browserConsoleDebug","_serverDebug","window","onerror","message","print","console","log","fetch","method","body","encodeURIComponent","headers","STRINGS","_STRINGS_API_CLIENT_KEY","_stringsLang","_externalKey","_stringsCa","lang","locale","fb_locale","blogId","Restaurant","Excursion","Places","Event","Gastronomy","Lodging","Stones","Sports","Activity","Organised","Pyrenees","LandsOfLleida","Location","Labels","MapCaption","Published","PublicationsOf","Sharing","Share","in","Comment","Comments","Header","Sections","Regions","CopyPictures","Translator","More","_stringsEs","_stringsEn","stringsGetRegion","labelList","_step","_iterator","_createForOfIteratorHelper","s","n","done","label","err","e","f","stringsGetMainLabel","_step2","_iterator2","stringsTranslateLabel","stringsInit","stringsGetGoogleClientKey","_CANONICAL","_canonicalCa","_canonicalEs","_canonicalEn","canonicalGet","url","canonical","endsWith","fileNameIndex","lastIndexOf","fileName","substring","newName","firstLocaleIndex","indexOf","canonicalInit","_AUTHORS_LIST_EL_MOLI_DESCRIPTION","_AUTHORS_LIST_EL_MOLI_MESSAGE","authorsListHasExtension","id","AUTHORS_IDS_ELMOLI_ID","authorsListGetDescription","_authorsPostsIds","EL_MOLI_DE_LA_NOGUERA_BLOGGER_ID","EL_MOLI_DE_LA_NOGUERA_EMAIL","btoa","LES_GOLFES_DEL_MOLI_BLOGGER_ID","LES_GOLFES_DEL_MOLI_EMAIL","CA_LA_CARME_BLOGGER_ID","CA_LA_CARME_EMAIL","AUTHORS_IDS_ELMOLI_BLOGGER_ID","DEFAULT_EMAIL","authorsIdsGetId","postAuthorId","postId","owner","authorsPostsIdsGet","authorsIdsInit","authorsPostsIdsInit","authorsListInit","_BROWSER_GA4_MEASUREMENT_ID","browserGtag","dataLayer","push","browserAnalyticsConfig","send_page_view","browserAsyncAnalyticsLoadScript","script","document","createElement","src","async","head","append","Date","browserGetBrowserWidth","clientWidth","browserGetBrowserWidthIncludingScroll","innerWidth","browserGetBrowserHeight","innerHeight","clientHeight","browserSetCookie","cname","cvalue","exdays","domain","d","setTime","getTime","expires","toUTCString","cookie","browserGetCookie","name","ca","split","i","c","charAt","browserMenuToggleInit","buttonId","menuId","classToggle","closeMenuId","button","getElementById","close","menu","addEventListener","event","preventDefault","classList","toggle","contains","isClickInsideMenu","target","isClickInsideButton","isClickInsideClose","add","browserCanShareParse","element","navigator","share","shares","getElementsByClassName","Array","from","forEach","anchor","href","dataset","setAttribute","innerHTML","innerText","appendChild","urlString","then","error","_cacheTime","cacheIfQuickReloadFlushEverything","time","lastUnloadTime","lastUnloadURL","currentURL","now","ret","location","CONFIG","_poolWrapper","_poolItemsClassName","_poolSpaceAmongItems","_poolIndex","_poolHeightLeft","_poolHeightRight","_poolTwoColums","_poolRendered","poolReset","poolSetAbsoluteHeigth","items","style","display","position","left","top","offsetHeight","maxHeight","height","_adsenseAdds","adsensePushAds","adsbygoogle","adsenseAddAndPushAdsInsidePost","parent","postAds","postAd","insElement","className","textAlign","adsenseObserver","_adsenseAddAdsInsidePost","asdenseCallback","mutations","observer","mutation","type","attributeName","adStatus","parentElement","disconnect","ad","MutationObserver","observe","attributes","REST_CACHE_EXPIRY_TIME","REST_DELIMITER","REST_SHARED_PATH","restFetchJson","cacheKey","cachedData","localStorage","getItem","_cachedData$split2","content","timestampStr","timestamp","parseInt","isNaN","response","Response","Blob","Promise","resolve","info","concat","clone","text","dataToCache","setItem","postsElementWrapper","postsReject","POSTS_FETCH_NUMBER","posts","postsId","postsIndex","_postsInitialIndex","postsAbsoluteIndex","postsToReturn","postsToResolve","postsAllDownloaded","postsFetching","postsCursor","postsLabels","_postsIdsFilter","_postsLocation","_postsCircularFinalIndex","_postsCircular","postsFieldsToFetch","postsSetFieldsToFetch","fields","postsSetIndex","index","circular","postsReset","postsFetch","createAndAppend","postsFetchFromServer","shift","post","wrapper","image","includes","postsHasLabel","labels","resource","json","aux","hasOwnProperty","Error","apply","nextPageToken","postsFetchAPost","reject","AUTHORS_PROFILE_PUBLIC_BATCH","AUTHORS_FETCH_NUMBER","_authorsCards","_authorsFetching","_authorsToResolve","_authorsAllDownloaded","_authorsCursor","authorsGetCard","author","link","webLink","imageUrl","activity","authorGetPublishedByTemplate","_authorsFetchFromServer","_authorsBuildFetchUrl","ok","data","list","cursor","authorList","_loop","authorToResolve","resolvedAuthor","find","authorWebLink","_authorsHandleUnresolved","_authorsResolvePending","_authorsProcessData","authorsFetchCard","authorCard","authorsGet","_ldjson","_ldparent","_ldWrapLicenseHolderName","ldAddCopyrightPictures","nameHolder","ldJson","ldGetLdJsonScript","ldGetCopyrightHolderName","ldAddTranslationAttribution","translaterName","ldGetTranslatorName","scripts","getElementsByTagName","getAttribute","jsonContent","textContent","JSON","parse","commentsAdd","template","comment","displayName","commentsFetch","_postNextPostLink","_postPreviousPostLink","_postMapLink","_postFinalPreviousNextCallback","_postCreateMap","_postBrief","_postFooter","postDecode","str","join","postEncode","postStartUp","_postAddAuthor","_postMoveReferences","postTransformArrowLinks","collection","arrows","client_href","authorId","authorWrapper","content2","source","postGetLocationLng","lng","postGetLocationLat","lat","postCreateAndAppend","postElement","absoluteLink","postGetAbsoluteLink","postTemplate","title","scriptHTML","tempElement","children","child","tagName","outerHTML","trim","firstImage","querySelector","contentGetBrief","postGetLocationName","_postCreatePostElement","_postBuildPostLink","postGetRelativeLinkToRoot","_postFetchPreviousNextLabelsLinks","previousPost","final","th","isNextLink","postFetchPreviousNextLabelsLinks","previous","next","labelWrapper","callback","params","URL","searchParams","get","postGetAlternate","entry","slash","ext","ssl","term","regionPath","region","_thumbsCategoryFilter","_thumbsLocationFilter","THUMBS_FILE_NAME","THUMBS_CLASS_ITEMS_NAME","_thumbsToReturn","_thumbsNumber","_thumbsDownloaded","_thumbsInicialised","_thumbsAbsoluteLinks","_thumbsNextLink","_thumbsNextWrapper","_thumbsSrcImage","size","replace","_thumbsCreatePostElement","_thumbsGetPostLink","img","alt","images","_thumbsCreateImage","_thumbsInicialise","publisher","_thumbsFetchPublishers","_thumbsCreateAndAppend","complete","browserImageIsReady","_thumbsFetchPosts","categoryFilter","thumbsWrapper","maxWidth","browserWidth","borderWidth","borderColor","borderStyle","_adsenseAddThumbAd","loader","urlSearchParams","URLSearchParams","search","query","_thumbsQueryNextPages","stack","thumbsFetchPosts","locationFilter","postsSetLocation","begin","Math","floor","random","thumbsSetNextLink","thumbsNextWrapper","thumbsNextLink","_postersWrapperFetchNumber","_postersWrapperGetDateString","date","parts","dateString","toLocaleDateString","weekday","year","month","day","toUpperCase","slice","_postersWrapperCreateAndAppend","poster","beginDate","endDate","Posters","postersEscapeSpacesAndApostrophes","publisherId","dateBegin","dateEnd","timeBegin","_postersWrapperGetTimeString","subtitle","labelsList","town","_postersWrapperFetchStart","postersWrapper","init","postersSetPostersIndexAndCursor","_postersWrapperFetchAPoster","postersFetchAPoster","postersGetPostersIndex","postersReset","postersSetPostersIndex","postersWrapperGetSomePosters","layoutMenuCreate","layoutHeaderCreate","map","mapPostsWrapper","mapPostsModal","mapTitle","mapLabelPosts","mapLabel","mapPostId","mapCrossMarker","mapCurrentMarkedPost","_mapFetchLabelPosts","markersCreated","fetching","_mapFetchPosts","modal","right","_mapMarking","labelPostIndex","labelPost","offset","x","y","icon","google","maps","Size","origin","Point","zIndex","Marker","MAX_ZINDEX","marker","addListener","itemIndex","item","_mapAddAd","_mapSetMarker","_mapSendPopUpPostTitleToAnalytics","setMap","setTimeout","hasAttribute","page_title","page_location","browserAnalyticsSendPage","setPosition","getBounds","setCenter","_mapSetPageCategory","_listCreateAndAppend","_listCreatePostElement","_listFetchPostsByAuthor","listWrapper","listFetchPostsByAuthor","postsIds","postsList","authorsGetPostsByAuthor","COOKIE_NAME","subscriptionSendNewConnection","token","credentials","subscriptionLoadForm","mainSubscriptionDiv","emailPattern","email","test","alert","to","startUpRegion","category","wrapper2","pageAddAuthor","startUpMap","postSetContentLayout","startUpPost","postWrapper","mapLinkWrapper","_postSetMapLink","postFetchFromServer","startUpList","messageWrapper","headerWrapper","metaTags","property","meta","authorGetHeader","listGetHeaders","postersSetPublisherFilter","fetchPoster","postersIsThereMorePosters","_postersWrapperFetchAndAppendPosters","startUpServerIndex","startUpServerCategory","startUpServerLocationCategory","startUpServerPost","startUpServerLocationCategoryPost","browserAsyncAnalyticsScript","sendPageView","mapAsyncDeferMapsScript","defer","mapInit","mapLat","parseFloat","mapLng","mapZoom","radios","getElementsByName","checked","mapElement","width","Map","center","mapTypeControl","zoom","clickable","setZIndex","controls","ControlPosition","TOP_LEFT","radios2","call","radio2","documentElement","scrollTop","setZoom"],"sourceRoot":""}