1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 5 <meta charset="utf-8"/> 6 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2, interactive-widget=resizes-content, viewport-fit=cover"/> 7 8 9 <link rel="preload" href="https://www.weathercrave.co.uk/build/main_redesign.bcb0f22eb3707182578d.css" as="style" fetchpriority="high"/> 10 11 <link rel="preload" href="https://cdn.appconsent.io/loader.js" as="script"/> 12 <link rel="preload" href="https://cdn.hubvisor.io/wrapper/01BYK28ENND8X5G8K0AJ2DPK9E/hubvisor-lcm.js" as="script"/> 13 14 <link rel="preconnect" href="https://c.client-context.hubvisor.io"/> 15 16 17 18 <link rel="preconnect" href="https://securepubads.g.doubleclick.net"> 19 20 21 22 23 <link rel="preload" href="//static5.mclcm.net/lcm2018/fonts/nunito_sans_v8/regular_variable.woff2" as="font" 24 type="font/woff2" crossorigin 25 fetchpriority="high" 26 > 27 <link rel="preload" href="//static5.mclcm.net/lcm2018/fonts/nunito_sans_v8/italic_variable.woff2" as="font" 28 type="font/woff2" crossorigin 29 fetchpriority="high" 30 > 31 <link rel="preload" href="https://www.weathercrave.co.uk/build/contact_page.b42871b67c252936f5a4.css" as="style"/> 32 33 34 <title>Contact us - Weather Crave</title> 35<meta name="description" lang="en" content="Weather Crave"/> 36<meta name="robots" content="index, follow"/> 37<link rel="canonical" href="https://www.weathercrave.co.uk/contact-form"/> 38 39 40 41 42<meta property="og:site_name" content="Weather Crave"/> 43<meta property="og:title" content="Contact us - Weather Crave"/> 44<meta property="og:type" content="website"/> 45<meta property="og:url" content="https://www.weathercrave.co.uk/contact-form"/> 46<meta property="og:description" content="Weather Crave"/> 47 <meta property="og:image" content="https://static5.mclcm.net/lcm2018/int/logo_lcm_partage.jpg"/> 48 49<meta name="twitter:card" content="summary_large_image"/> 50<meta name="twitter:site" content="@lachainemeteo"/> 51 <meta name="twitter:creator" content="@lachainemeteo"> 52<meta name="twitter:title" content="Contact us - Weather Crave"/> 53<meta name="twitter:description" content="Weather Crave"/> 54 55 56 <meta property="fb:app_id" content="263364420578"/> 57
58<script type="application/ld+json"> 59 { 60 "@context": "http://schema.org", 61 "@type": "Organization", 62 "name": "Weather Crave", 63 "url": "https://www.weathercrave.co.uk/weather-forecast-united-kingdom/weather-forecast-united-kingdom-today", 64 "logo": 65 { 66 "@context": "http://schema.org", 67 "@type": "ImageObject", 68 "url": "https://static5.mclcm.net/lcm2018/en/common/logo.png" 69 } 70 } 71 72</script>
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
89<script> 90 91 92 window.lcm = {}; 93 window.googletag = window.googletag || {cmd: []};window.logMeasure = () => { 94}; 95window.logMeasureEnd = () => { 96}; 97window.stopMeasurements = () => { 98}; 99 100 101const builtFilesMap = new Map([['menu_core', 'https://www.weathercrave.co.uk/build/menu_core.e8881768343ec6fc33e2.js'],['panel_manager', 'https://www.weathercrave.co.uk/build/panel_manager.836ef45b083253b332ea.js'],['menu_client', 'https://www.weathercrave.co.uk/build/menu_client.e6f7f783152e10b0adb8.js'],['menu_small', 'https://www.weathercrave.co.uk/build/menu_small.218d0e08a9e17796974e.js'],['popin', 'https://www.weathercrave.co.uk/build/popin.72634c394f352a36920b.js'],['popin_store', 'https://www.weathercrave.co.uk/build/popin_store.3e33f643d4103bf7e4aa.js'],['slider_store', 'https://www.weathercrave.co.uk/build/slider_store.31b5fc2b0f5305ffde3a.js'],['cookies', 'https://www.weathercrave.co.uk/build/cookies.3ef71970b4b16e2eb6f2.js'],['share', 'https://www.weathercrave.co.uk/build/share.18d4d459d4bcfb086379.js'],['favorite', 'https://www.weathercrave.co.uk/build/favorite.6a3c97d4c2aafdde3db3.js'],['user', 'https://www.weathercrave.co.uk/build/user.a84220064da9b811e50a.js'],['shortcut', 'https://www.weathercrave.co.uk/build/shortcut.2f0cc7b0092917dca66d.js'],['bookmark', 'https://www.weathercrave.co.uk/build/bookmark.18c1bd0445e6c4659a81.js'],['slider', 'https://www.weathercrave.co.uk/build/slider.43f075b1c6c2e86040a9.js'],['historical', 'https://www.weathercrave.co.uk/build/historical.0dbe5280551188c16285.js'],['video', 'https://www.weathercrave.co.uk/build/video.8bc950cc72f37f1f4a88.js'],['alert', 'https://www.weathercrave.co.uk/build/alert.677954e727bd5c2f7a1e.js'],['fonts', 'https://www.weathercrave.co.uk/build/fonts.c8a52773dab1a212109c.js'],['device', 'https://www.weathercrave.co.uk/build/device.3af0138b6fbbd68e6a2b.js'],['perf_client', 'https://www.weathercrave.co.uk/build/perf_client.9ee097c91f1d974ae928.js'],['autocomplete', 'https://www.weathercrave.co.uk/build/autocomplete.75dbc15609bd675ce6d0.js'],['autocomplete_header', 'https://www.weathercrave.co.uk/build/autocomplete_header.3ff865a383818d56735c.js'],['autocomplete_section', 'https://www.weathercrave.co.uk/build/autocomplete_section.a7cb17f18eaabd4562df.js'],['timetable', 'https://www.weathercrave.co.uk/build/timetable.11ff0cff6d8ef985839a.js'],['reporter', 'https://www.weathercrave.co.uk/build/reporter.aa20337c3d1e2053f534.js'],['video_news', 'https://www.weathercrave.co.uk/build/video_news.b56281473f87560846a8.js'],['meteomail', 'https://www.weathercrave.co.uk/build/meteomail.9339f35ff4c196dec264.js'],['top_poi', 'https://www.weathercrave.co.uk/build/top_poi.85c027aea262d34b6493.js'],['geo_history', 'https://www.weathercrave.co.uk/build/geo_history.e8182ab77ad6a0015deb.js'],['top_section', 'https://www.weathercrave.co.uk/build/top_section.130525c25bd8a4b8ba9e.js'],['top_section_abroad', 'https://www.weathercrave.co.uk/build/top_section_abroad.5f81674ff79b99a96f03.js'],['top_section_main_place', 'https://www.weathercrave.co.uk/build/top_section_main_place.e1157c7cd11de2a570b0.js'],['main_video', 'https://www.weathercrave.co.uk/build/main_video.c36c51f8e119e9e380a6.js'],['serie_video', 'https://www.weathercrave.co.uk/build/serie_video.2db18b4fa379e622df68.js'],['near_cities_forecast', 'https://www.weathercrave.co.uk/build/near_cities_forecast.9ae7e1ff45b4900a2863.js'],['live_core', 'https://www.weathercrave.co.uk/build/live_core.5da167fa27827d45c555.js'],['live_5min', 'https://www.weathercrave.co.uk/build/live_5min.95838bec756d1afeb032.js'],['live_graph', 'https://www.weathercrave.co.uk/build/live_graph.232b659f25296e8de125.js'],['live_nav', 'https://www.weathercrave.co.uk/build/live_nav.24a1ab167596e4908fc9.js'],['edito_health', 'https://www.weathercrave.co.uk/build/edito_health.c34788a2b19e1c1fa8f5.js'],['edito_beach', 'https://www.weathercrave.co.uk/build/edito_beach.2640cf6b0e9b31e01867.js'],['edito_climate', 'https://www.weathercrave.co.uk/build/edito_climate.b93fe52bb53cbd60ae8f.js'],['climate_info', 'https://www.weathercrave.co.uk/build/climate_info.daa1144d8a9a09baed29.js'],['comparator_info', 'https://www.weathercrave.co.uk/build/comparator_info.16f571412525932fe723.js'],['edito_live', 'https://www.weathercrave.co.uk/build/edito_live.ee6ab40449af91e5b9bc.js'],['ias', 'https://www.weathercrave.co.uk/build/ias.a438a7ea70ec35b40c1b.js'],['gam', 'https://www.weathercrave.co.uk/build/gam.f6e4a97c6cdc2bd37b9f.js'],['cmp', 'https://www.weathercrave.co.uk/build/cmp.94fac8b9686b06797c7f.js'],['ppid', 'https://www.weathercrave.co.uk/build/ppid.b5948df9f3
1011e32057107.js'],['oneplusx', 'https://www.weathercrave.co.uk/build/oneplusx.2cd5bde319a541983478.js'],['mc_lcm_map', 'https://www.weathercrave.co.uk/build/mc_lcm_map.a017605a77bbf3fb100d.js'],['user_agent', 'https://www.weathercrave.co.uk/build/user_agent.e0f288e54dedc0043f1d.js'],['weather_news', 'https://www.weathercrave.co.uk/build/weather_news.0005a5460a026f62c12d.js'],['log_ajax', 'https://www.weathercrave.co.uk/build/log_ajax.8ec0ab058c33fcef77b0.js'],['refresh', 'https://www.weathercrave.co.uk/build/refresh.2c8fddcd7643e275cc46.js'],['profile_user', 'https://www.weathercrave.co.uk/build/profile_user.5e959935197272509847.js'],['favorites_user', 'https://www.weathercrave.co.uk/build/favorites_user.a6bf6d1455ff34663bc4.js'],['meteomails_user', 'https://www.weathercrave.co.uk/build/meteomails_user.31d6cfe0d16ae931b73c.js'],['pictures_user', 'https://www.weathercrave.co.uk/build/pictures_user.8607b8d2486a6d6adce6.js'],['subscriptions_user', 'https://www.weathercrave.co.uk/build/subscriptions_user.4dd4ae2966201cecb814.js'],['means_payment_user', 'https://www.weathercrave.co.uk/build/means_payment_user.b483766fab8156d2fd63.js'],['login_user', 'https://www.weathercrave.co.uk/build/login_user.0e2b4965098c096a4b85.js'],['paypal', 'https://www.weathercrave.co.uk/build/paypal.636aade3c06812f8eabd.js'],['form_element', 'https://www.weathercrave.co.uk/build/form_element.8ba7974840f6ca1e84b1.js'],['check_password', 'https://www.weathercrave.co.uk/build/check_password.b973bd664b2f7c643393.js'],['collapse_list', 'https://www.weathercrave.co.uk/build/collapse_list.8106d888b1eade1e686f.js'],['top_beach', 'https://www.weathercrave.co.uk/build/top_beach.a67995d53a461a77d7c9.js'],['dataset_filter_items', 'https://www.weathercrave.co.uk/build/dataset_filter_items.43c918d8b51c64e4760e.js'],['description_serie', 'https://www.weathercrave.co.uk/build/description_serie.1c72ad8d2f2f874ae23c.js'],['media_reporter', 'https://www.weathercrave.co.uk/build/media_reporter.9139c185e96ca914ef88.js'],['popin_vip_teaser', 'https://www.weathercrave.co.uk/build/popin_vip_teaser.05d605e4535527667470.js'],['utiq', 'https://www.weathercrave.co.uk/build/utiq.a5e03dccb82810a0757a.js'],['webcam', 'https://www.weathercrave.co.uk/build/webcam.b00e053832f7d5b45506.js'],['table_hover', 'https://www.weathercrave.co.uk/build/table_hover.094d6d0777f9099b9bff.js'],['table_scroll', 'https://www.weathercrave.co.uk/build/table_scroll.310af745c1e6a1fb851e.js'],['remarkable_phenomena', 'https://www.weathercrave.co.uk/build/remarkable_phenomena.cc26cc7e2e319a9dff0e.js'],['legendTrip', 'https://www.weathercrave.co.uk/build/legendTrip.a119126e5fb4740db7a5.js'],['vod', 'https://www.weathercrave.co.uk/build/vod.772af801a9cee9a47211.js'],['hour_by_hour_day', 'https://www.weathercrave.co.uk/build/hour_by_hour_day.15c5af479b36e3b1d8dd.js'],['hour_by_hour', 'https://www.weathercrave.co.uk/build/hour_by_hour.3056fe3521e638df3501.js'],['mails_user', 'https://www.weathercrave.co.uk/build/mails_user.f43a275e516240bd30cb.js'],['popin_mails_user', 'https://www.weathercrave.co.uk/build/popin_mails_user.8e86f9b7133ace150c49.js'],['alertmail', 'https://www.weathercrave.co.uk/build/alertmail.9339f35ff4c196dec264.js'],['flash', 'https://www.weathercrave.co.uk/build/flash.1a8dee6cc026cb5f3740.js'],['menu_alert', 'https://www.weathercrave.co.uk/build/menu_alert.1ccbd46613154f7db3fa.js']]); 102class BuiltFilesAccessor { 103 #a; 104 105 constructor(e) { 106 this.#a = e ?? new Map 107 } 108 109 getFileName(e) { 110 let s = this.#a.get(e); 111 if (!s) throw Error(`Can't find "${e}" in built list.`); 112 return s 113 } 114}const filesAccessor = new BuiltFilesAccessor(builtFilesMap);builtFiles = {getFileName: filesAccessor.getFileName.bind(filesAccessor)};function _needsAuth(a) { 115 try { 116 if (/^https?:\/\//i.test(a)) return /^(https?:\/\/)(phl-|pp-)/i.test(a); 117 const b = a.split('?')[0]; 118 if (/\/(phl-|pp-)\//i.test(b) || /^(phl-|pp-)\//i.test(b)) return true; 119 } catch (_) {} 120 return false; 121} 122 123class FetchWrapper { 124 #a = new Map; 125 #b = window.location.origin; 126 127 async fetch(e, t = {}) { 128 let n = !t.method || "GET" === t.method.toUpperCase(); 129 if (n && this.#a.has(e)) { 130 return this.#a.get(e).then(e => e.clone()); 131 } 132 let o = n ? "GET" : t.method.toUpperCase(), 133 a = t.body || "", 134 s = n ? e : `${o}:${e}:${a instanceof FormData ? "" : a}`;
135 if (!n && this.#a.has(s)) { 136 return this.#a.get(s).then(e => e.clone()); 137 } 138 (t.headers || !n) && this.#c(e, o, t.headers); 139 let c = { 140 mode: "cors", 141 method: o, 142 ...t 143 }; 144 "GET" === o && void 0 === c.credentials && (c.credentials = _needsAuth(e) ? "include" : "omit"); 145 let i = fetch(e, c).finally(() => { 146 this.#a.delete(s) 147 }); 148 this.#a.set(s, i); 149 let r = await i; 150 if (!r.ok) { 151 throw Error(r.status); 152 } 153 return r 154 } 155 156 #c(e, t, n) { 157 if (!e.startsWith(this.#b)) { 158 let o = !["GET", "POST", "HEAD"].includes(t); 159 if (!o && n) { 160 let a = new Headers(n), s = a.get("content-type")?.toLowerCase(); 161 o = s && ![ 162 "text/plain", 163 "multipart/form-data", 164 "application/x-www-form-urlencoded" 165 ].includes(s) 166 || Array.from(a.keys()).some( 167 e => ![ 168 "accept", 169 "accept-language", 170 "content-language", 171 "content-type" 172 ].includes(e.toLowerCase()) 173 ); 174 } 175 o && console.warn( 176 `%c[PREFLIGHT] %c${t} ${e}`, 177 "color:red;font-weight:bold", 178 "" 179 ); 180 } 181 } 182} 183 184const fw = new FetchWrapper; 185window.lcm.fetch = fw.fetch.bind(fw);class Logger { 186 static #a = {success: 1, add: 1, info: 1, user: 1, deprecated: 2, warning: 2, error: 3, errorLog: 4}; 187 static #b = { 188 success: {str: "s", c: "#292929", bgc: "#6BEC7C"}, 189 add: {str: "a", c: "#292929", bgc: "#6BEC7C"}, 190 info: {str: "i", c: "#292929", bgc: "#00b0b0"}, 191 user: {str: "u", c: "#fff", bgc: "#a00"}, 192 deprecated: {str: "d", c: "#fff", bgc: "#ed7d04"}, 193 warning: {str: "w", c: "#fff", bgc: "#ed7d04"}, 194 error: {str: "e", c: "#fff", bgc: "#f00"}, 195 errorLog: {str: "e", c: "#fff", bgc: "#f00"} 196 }; 197 #c; 198 #d = JSON.parse(sessionStorage.getItem("logDebugEnabled")) || !1; 199 #e; 200 201 constructor(e, r) { 202 this.#c = e, this.#e = r, !1 === this.#d && /log/.test(new
202URLSearchParams(window.location.search).get("extra")) && (sessionStorage.setItem("logDebugEnabled", 1), this.#d = !0) 203 } 204 205 log({module: e, type: r = "info", data: g = []}) { 206 let o = Logger.#a[r] || 0; 207 if (!this.#d && o < this.#c) return; 208 let c = Logger.#b[r], t = new Date, 209 l = `${t.getHours()}:${t.getMinutes()}:${t.getSeconds()}.${t.getMilliseconds()}`, 210 a = [`%c${l}%c${e}%c${c.str}`, "color: #000; padding: 1px 3px; border-radius: 3px 0 0 3px; background: #cecece;", "color: #fff; padding: 1px 3px; border-radius: 3px 0 0 3px; background: #0000bd;", `color: ${c.c}; padding: 1px 3px; border-radius: 0 3px 3px 0; background: ${c.bgc};`]; 211 console.log.apply(console, a.concat(g)), o >= this.#c && this.#f({module: e, data: g, type: r}) 212 } 213 214 #f({module: e, data: r, type: g}) { 215 try { 216 window.lcm && window.lcm.logAjax && "function" == typeof window.lcm.logAjax.log ? window.lcm.logAjax.log({ 217 url: window.location.href, 218 module: e, 219 type: g, 220 data: JSON.stringify(r), 221 ua: navigator.userAgent, 222 logUrl: this.#e 223 }) : console.error("LogAjax module not ready.") 224 } catch (o) { 225 console.error("Problem while logging to ajax:", o) 226 } 227 } 228}const loggerInstance = new Logger( 229 4, 230 'https://www.weathercrave.co.uk/ajax/log' 231); 232_log = ({module, type = 'info', data = []}) => { 233 loggerInstance.log({module, type, data}); 234};class Evt { 235 #a = new Set; 236 #b = "lcmc_"; 237 version = "2.0.0"; 238 239 listen(e, t) { 240 this.#a.has(e) ? t() : document.addEventListener(this.#b + e, t, {once: !0}) 241 } 242 243 dispatch(e) { 244 "function" == typeof _log && _log({module: "Evt", type: "success", data: e}), this.#a.add(e); 245 let t = new Event(this.#b + e); 246 document.dispatchEvent(t) 247 } 248}window.evt = new Evt, document.addEventListener("DOMContentLoaded", () => { 249 window.evt.dispatch("DOMContentLoaded") 250});class ScriptLoader { 251 #a = {}; 252 253 loadScript(e) { 254 let r; 255 try { 256 r = builtFiles.getFileName(e) 257 } catch (t) { 258 console.error("Error fetching built filename:", t, e); 259 return 260 } 261 if (e in this.#a) return; 262 this.#a[e] = !0; 263 let a = document.createElement("script"); 264 a.async = !0, a.src = r; 265 let d = /\.min$/.test(e) ? `${e.slice(0, -4)}Loaded` : `${e}Loaded`; 266 a.onload = () => { 267 window.evt.dispatch(d) 268 }, a.onerror = () => { 269 console.error("Error loading file:", e, r), delete this.#a[e] 270 }, document.head.appendChild(a) 271 } 272}const loaderInstance = new ScriptLoader;window.loadScriptBuild = loaderInstance.loadScript.bind(loaderInstance);const isHoverEnable = () => !window.matchMedia("(any-hover: none)").matches;window.isHoverEnable = () => !window.matchMedia("(any-hover: none)").matches;class Breakpoint { 273 #a = [{id: "xxxl", mediaQuery: "(min-width: 2530px)"}, {id: "xxl", mediaQuery: "(min-width: 1440px)"}, { 274 id: "xl", 275 mediaQuery: "(min-width: 1280px)" 276 }, {id: "l", mediaQuery: "(min-width: 1000px)"}, {id: "m", mediaQuery: "(min-width: 768px)"}, { 277 id: "s", 278 mediaQuery: "(min-width: 576px)" 279 }, {id: "xs", mediaQuery: "(min-width: 360px)"}, {id: "xxs", mediaQuery: "(min-width: 320px)"}]; 280 #b = null; 281 #c = 50; 282 #d; 283 284 constructor() { 285 this.#d = this.#a[this.#a.length - 1].id 286 } 287 288 #e() { 289 !this.#b && (this.#b = setTimeout(() => { 290 this.#f(), this.#b = null 291 }, this.#c)) 292 } 293 294 #f(e = !1) { 295 let i = this.#d; 296 for (let t of this.#a) if (window.matchMedia(t.mediaQuery).matches) { 297 i = t.id; 298 break 299 } 300 let r = this.#d; 301 this.#d = i, !1 === e && r !== this.#d && (document.dispatchEvent(new CustomEvent("breakpointChange", { 302 detail: { 303 size: this.#d, 304 previous: r 305 } 306 })), document.dispatchEvent(new CustomEvent(`breakpoint${i.toUpperCase()}`, {detail: {size: this.#d}}))) 307 } 308 309 load() { 310 let e = e => { 311 e.preventDefault(), this.#e() 312 }; 313 window.addEventListener("resize", e, !1), window.addEventListener("orientationchange", e, !1), this.#f(!0), evt.dispatch("breakpoint") 314 } 315 316 getCurrent() { 317 return this.#d 318 } 319}(() => {
320 let e = new Breakpoint; 321 window.lcm.breakpoint = e, e.load() 322})();class Lazyload { 323 #a = null; 324 325 #b(target) { 326 let functionPath = target.dataset.onload; 327 if (functionPath) try { 328 let func = window[functionPath] || eval(`window.${functionPath}`); 329 "function" == typeof func ? func.call(target) : console.error(`Lazyload: Function not found or non-callable ${functionPath}`, target) 330 } catch (e) { 331 console.error(`Lazyload: Error executing (${functionPath}):`, e, target) 332 } 333 } 334 335 #c = (a, t) => { 336 a.forEach(a => { 337 if (!a.isIntersecting) return; 338 let e = a.target; 339 e.dataset.srcset && (e.srcset = e.dataset.srcset), e.dataset.src && (e.src = e.dataset.src), e.dataset.poster && (e.poster = e.dataset.poster), e.dataset.onload && (e.dataset.evt ? evt.listen(e.dataset.evt, () => { 340 this.#b(e) 341 }) : this.#b(e)), e.classList.remove("lazyload"), _log({ 342 module: "lazyload", 343 data: e 344 }), e.classList.add("lazyloaded"), t.unobserve(e) 345 }) 346 }; 347 348 constructor() { 349 evt.listen("DOMContentLoaded", () => { 350 this.checkLazyload() 351 }), evt.dispatch("lazyload") 352 } 353 354 addLazyload(a, t = null) { 355 let e = { 356 threshold: a.dataset.threshold ? parseFloat(a.dataset.threshold) : 0, 357 rootMargin: t?.rootMargin || "0px" 358 }; 359 a.dataset.root && (e.root = document.getElementById(a.dataset.root) || null); 360 let o = new IntersectionObserver(this.#c, e); 361 o.observe(a) 362 } 363 364 checkLazyload() { 365 document.querySelectorAll(".lazyload").forEach(a => { 366 this.addLazyload(a) 367 }) 368 } 369}window.lcm.lazyload = new Lazyload;class Device { 370 static #a = "mobile"; 371 static #b = "tablet"; 372 static #c = "desktop"; 373 #d = ""; 374 375 constructor() { 376 this.load(), "" === this.#d && this.#e(), _log({ 377 module: "Device", 378 type: "info", 379 data: {deviceType: this.getDeviceType()} 380 }) 381 } 382 383 load() { 384 evt.listen("breakpoint", () => { 385 this.#e(), _log({ 386 module: "Device", 387 type: "info", 388 data: {deviceType: this.getDeviceType()} 389 }), evt.dispatch("deviceType") 390 }) 391 } 392 393 getDeviceType() { 394 return this.#d 395 } 396 397 isMobile() { 398 return this.#d === Device.#a 399 } 400 401 isTablet() { 402 return this.#d === Device.#b 403 } 404 405 isDesktop() { 406 return this.#d === Device.#c 407 } 408 409 #e() { 410 let e = window.lcm.breakpoint.getCurrent(), i; 411 i = ["xxs", "xs", "s"].includes(e) ? Device.#a : "m" !== e || window.isHoverEnable() ? Device.#c : Device.#b, this.#d = i 412 } 413}window.lcm.device = new Device;class NodeSize { 414 #a = new Map; 415 #b = new Map; 416 417 listen(e) { 418 if (!e) return console.error("nodeSize : can't find node"), Promise.reject(Error("Node not found")); 419 if (this.#a.has(e)) return this.#a.get(e); 420 let t = new Promise(t => { 421 let s = new ResizeObserver(i => { 422 let n = i[0].contentRect, r = {width: n.width, height: n.height}; 423 s.unobserve(e), this.#b.delete(e), t(r) 424 }); 425 this.#b.set(e, s), s.observe(e) 426 }); 427 return this.#a.set(e, t), t 428 } 429}window.nodeSize = new NodeSize;document.addEventListener("DOMContentLoaded", () => { 430 window.ajaxLogUrl = 'https://www.weathercrave.co.uk/ajax/log'; 431 loadScriptBuild('log_ajax'); 432});(() => { 433 class CmpShort { 434 435 constructor() { 436 this._uuid = null; 437 } 438 439 _setCookieSession(name, value) { 440 _log({module: 'CMP', data: ['set cookie', name, value]}); 441 const domain = '.weathercrave.co.uk'; 442 const path = '/'; 443 let data = value; 444 const date = new Date(); 445 date.setTime(date.getTime() + (364 * 86400000)); 446 document.cookie = name + '=' + data 447 + '; domain=' + domain 448 + '; expires=' + date.toUTCString() 449 + '; path=' + path; 450 } 451 452 _getCookieSession(name) { 453 _log({module: 'CMP', data: `get cookie : ${name}`}); 454 const oRegex = new RegExp('[; ]?' + name + '=([^;]*)'); 455 return ((' ' + document.cookie).match(oRegex)) ? RegExp["$1"] : null; 456 } 457 458 getUuid() { 459 return this._uuid; 460 } 461 462 _setCmpUuid() { 463 let cmp_uuid = this._getCookieSession('cmp_v2_uuid'); 464 _log({module: 'CMP', data: `cmp_uuid : ${cmp_uuid}`}); 465 if (cmp_uuid === null) { 466 cmp_uuid = `cmp${((new Date()).getTime() + Math.random())}`; 467 _log({module: 'CMP', data: `cmp_uuid : ${cmp_uuid}`}); 468 this._setCookieSession('cmp_v2_uuid', cmp_uuid); 469 } 470 471 this._uuid = cmp_uuid; 472 } 473 474 load() { 475 this._setCmpUuid(); 476 } 477 } 478 479 window.lcm.cmpShort = new CmpShort(); 480 window.lcm.cmpShort.load(); 481 482 window.loadCmpScripts = () => { 483 window.configSFBXAppConsent = { 484 appKey: 'e2486122\u002Dc57c\u002D4f0f\u002Daee5\u002Dfbdf7f3b2704', 485 forceGDPRApplies: true, 486 uuid: window.lcm.cmpShort.getUuid(), 487 callbacks: { 488 init: (error, state) => { 489 _log({module: "CMP", data: [state, error]}) 490 }, 491 show: (error) => { 492 if (error !== null) { 493 _log({module: "CMP", data: ["show", error], type: 'warning'}) 494 } 495 }, 496 listener: (tcData, success) => { 497 if (tcData !== null) { 498 _log({module: "CMP", data: [tcData.eventStatus]}) 499 } 500 501 evt.listen('cmpLoaded', () => { 502 window.lcm.cmp.check(tcData, success) 503 }); 504 } 505 } 506 }; 507 logMeasure('cmp', 'file'); 508 const sCMP = document.createElement('script'); 509 sCMP.src = 'https://cdn.appconsent.io/loader.js'; 510 sCMP.async = true; 511 document.head.appendChild(sCMP); 512 sCMP.onload = () => { 513 logMeasureEnd('cmp', 'file'); 514 _log({module: 'CMP', type: 'success', data: 'cmp.js tier loaded'}); 515 evt.dispatch('cmpScriptTierLoaded'); 516 }; 517 518 loadScriptBuild('cmp'); 519 520 }; 521 522 523})();(() => { 524 class GamPlacement { 525 getInstance() { 526 return new GamPlacement(); 527 } 528 529 constructor() { 530 this.invCode = null; 531 this.slotName = null; 532 this.tag = null; 533 this.sizes = null; 534 this.isAtf = null; 535 this.refreshActive = null; 536 this.refreshDelay = null; 537 this.refreshCurrent = null; 538 this.refreshVisible = null; 539 this.target = null; 540 this.slot = null; 541 this.targeting = null; 542 } 543 } 544 545 window.lcm.newGamPlacement = new GamPlacement(); 546 547 window.lcm.gamConfig = { 548 targeting: [], 549 gamSlots: { 550 desktop: [], 551 tablet: [], 552 mobile: [] 553 }, 554 readyDiv: [], 555 closeAd: {} 556 }; 557 558 window.lcm.ads = {}; 559 560 class Slot { 561 constructor() { 562 this._idGam = null; 563 this._idDom = null; 564 this._bp = null; 565 this._invCode = null; 566 } 567 568 setIdGam(v) { 569 this._idGam = v; 570 } 571 572 setIdDom(v) { 573 this._idDom = v; 574 } 575 576 setBp(v) { 577 this._bp = v; 578 } 579 580 setInvCode(v) { 581 this._invCode = v; 582 } 583 } 584 585 class SlotCollection { 586 constructor() { 587 this.currentBreakpoint = null; 588 this.allowedCollection = {}; 589 this.currentCollection = {}; 590 } 591 592 setConfig(gamConfig) { 593 gamConfig.readyDiv.forEach(div => { 594 div.display_bp.forEach(bp => { 595 if (!this.allowedCollection[bp]) { 596 this.allowedCollection[bp] = {}; 597 } 598 if (!this.allowedCollection[bp][div.tag]) { 599 this.allowedCollection[bp][div.tag] = []; 600 }
601 let obj = new Slot(); 602 obj.setIdGam(div.tag); 603 obj.setIdDom(div.target); 604 obj.setBp(bp); 605 606 607 let device = this._getDeviceByBreakpoint(bp); 608 609 let gamPlacement = null; 610 for (let k = 0; k < gamConfig.gamSlots[device].length; k++) { 611 if (gamConfig.gamSlots[device][k].slotName === div.tag) { 612 gamPlacement = gamConfig.gamSlots[device][k]; 613 break; 614 } 615 } 616 if (gamPlacement !== null) { 617 obj.setInvCode(gamPlacement.invCode); 618 } 619 this.allowedCollection[bp][div.tag].push(obj); 620 621 }); 622 623 }); 624 return this; 625 } 626 627 run(breakpoint) { 628 629 this.currentBreakpoint = breakpoint; 630 this.currentCollection = this.allowedCollection[this.currentBreakpoint]; 631 632 _log({module: 'SlotCollection', data: [`run`, {'allowedCollection': this.allowedCollection}]}); 633 634 return this; 635 } 636 637 getSlotsByGamId() { 638 return this.currentCollection; 639 } 640 641 _getDeviceByBreakpoint(bp) { 642 let device = 'desktop'; 643 if (['xxs', 'xs', 's'].indexOf(bp) !== -1) { 644 device = 'mobile'; 645 } else if (['m'].indexOf(bp) !== -1) { 646 device = 'tablet'; 647 } 648 return device; 649 } 650 651 addSlotVideo(videoConfig, targetId) { 652 ['l', 'm', 's', 'xl', 'xs', 'xxs', 'xxl', 'xxxl'].forEach(bp => { 653 if (!this.allowedCollection[bp]) { 654 this.allowedCollection[bp] = {}; 655 } 656 let device = this._getDeviceByBreakpoint(bp); 657 658 if (!this.allowedCollection[bp][videoConfig[device].idGam]) { 659 this.allowedCollection[bp][videoConfig[device].idGam] = []; 660 } 661 662 let obj = new Slot(); 663 obj.setBp(bp); 664 obj.setInvCode(videoConfig[device]['invCode']); 665 obj.setIdGam(videoConfig[device].idGam); 666 obj.setIdDom(targetId); 667 668 this.allowedCollection[bp][videoConfig[device].idGam].push(obj); 669 }); 670 671 672 } 673 } 674 675 window.lcm.ads.slotCollection = new SlotCollection(); 676 677 class Keywords { 678 constructor() { 679 this._currentDevice; 680 this._globals = []; 681 this._globalsPrebid = []; 682 this._globals1PlusX = []; 683 this._slots = {};//by device 684 this._videos = {}; 685 686 this.setDevice(this._getBreakpointDevice(window.lcm.breakpoint.getCurrent())); 687 } 688 689 setDevice(name) { 690 _log({module: 'Keyword', data: ['set device', name]}); 691 this._currentDevice = name; 692 } 693 694 setGlobals(arr) { 695 _log({module: 'Keyword', data: ['set globals', arr]}); 696 this._globals = this._globals.concat(arr); 697 } 698 699 setGlobalsPrebid(obj) { 700 _log({module: 'Keyword', data: ['set globals prebid', obj]}); 701 for (let k in obj) { 702 this._globalsPrebid.push({key: k, value: obj[k]}); 703 } 704 } 705 706 setGlobals1PlusX(obj) { 707 _log({module: 'Keyword', data: ['set globals 1PlusX', obj]}); 708 for (let k in obj) { 709 this._globals1PlusX.push({key: k, value: obj[k]}); 710 } 711 } 712 _initSlot(slotName) { 713 if (!this._slots[this._currentDevice]) { 714 this._slots[this._currentDevice] = {}; 715 } 716 if (!this._slots[this._currentDevice][slotName]) { 717 this._slots[this._currentDevice][slotName] = []; 718 } 719 } 720 721 delSlot(slotName) { 722 this._initSlot(slotName); 723 this._slots[this._currentDevice][slotName] = []; 724 } 725 726 setSlot(slotName, obj) { 727 _log({module: 'Keyword', data: ['set slot', slotName, obj]}); 728 this._initSlot(slotName); 729 for (let k in obj) { 730 this._slots[this._currentDevice][slotName].push({key: k, value: obj[k]}); 731 } 732 } 733 734 getGlobals() {//call depuis gam 735 return this._globals; 736 } 737 738 getGlobalsPrebid() {//call depuis ias 739 return this._globalsPrebid; 740 } 741 742 // TODO use for HBV only 1plusX et ctx1plusx 743 getGlobals1PlusX() { 744 return this._globals1PlusX; 745 } 746 getBySlotName(slotName) { 747 _log({module: 'Keyword', data: ['get by slot name', slotName]}); 748 try { 749 const test = this._slots[this._currentDevice][slotName]; 750 if (test === undefined) { 751 throw 'slotName not found'; 752 } 753 return test; 754 } catch (e) { 755 return []; 756 } 757 } 758 759 getKwValue(slotName, keyName) {
760 const kwList = this.getBySlotName(slotName); 761 let kwValue = ''; 762 if (kwList) { 763 const kwObj = kwList.filter(x => x.key === keyName); 764 if (kwObj.length) { 765 kwValue = kwObj[0].value; 766 } 767 } 768 return kwValue; 769 } 770 771 setVideoKw(videoName, str) { 772 this._videos[videoName] = str; 773 } 774 775 getVideoKw(videoName) { 776 _log({module: 'Keyword', data: ['get video KW', videoName]}); 777 try { 778 const test = this._videos[videoName]; 779 if (test === undefined) { 780 throw 'videoName not found'; 781 } 782 return test; 783 } catch (e) { 784 return ''; 785 } 786 } 787 788 _getBreakpointDevice(breakpoint) { 789 let device = null; 790 if (['xxs', 'xs', 's'].indexOf(breakpoint) !== -1) { 791 device = 'mobile'; 792 } else if (['m'].indexOf(breakpoint) !== -1) { 793 device = 'tablet'; 794 } else if (['l', 'xl', 'xxl', 'xxxl'].indexOf(breakpoint) !== -1) { 795 device = 'desktop'; 796 } 797 return device; 798 } 799 800 } 801 802 window.lcm.ads.keywords = new Keywords(); 803 804 window.Hubvisor = window.Hubvisor || {cmd: []}; 805 806 807})(); 808// UTIQ 809 810 811 812 813 814 window.wls = { 815 options: { 816 list: {id: "lachainemeteo"}, 817 stats: {trackingId: "UA-75588349-1"} 818 } 819}; 820evt.listen('cmp', () => { 821 s = document.createElement('script'); 822 s.src = 'https://static-lists.linternaute.com/wls/wls.js'; 823 document.head.appendChild(s); 824 s.onload = () => { 825 window.googletag.cmd.push(() => { 826 if (typeof wls !== 'undefined' && typeof wls.getData !== 'undefined') { 827 wls.getData( 828 'isWhitelisted', 829 null, 830 function (result) { 831 var desadblock = result ? '1' : '0'; 832 googletag.pubads().setTargeting('ccm_whitelist', desadblock); 833 } 834 ); 835 } 836 }); 837 }; 838}); 839 </script>
839 840 841 842 843
843<script> 844 var dataLayer = [{ 845 'site':`WEATHER CRAVE (weathercrave.co.uk)`, 846 'environnement':`production`, 847 'support':'', 848 'websiteVersion':'', 849 'level1':`autres_pages`, 850 'level2':`sans_tag`, 851 'level3':``, 852 'idType':``, 853 'idPays':``, 854 'namePays':``, 855 'idRegion':``, 856 'nameRegion':``, 857 'idDpt':``, 858 'nameDpt':``, 859 'idEntite':``, 860 'echeance':``, 861 'source':(function () { try { let val = ((window.location.hash).substring(1)); return val.substring(0, 149); } catch (e) { return ''; } })(), 862 'siteLanguage':`en_GB`, 863 'pageCategory':``, 864 'userAgent':(function () { try { let val = (navigator.userAgent); return val.substring(0, 149); } catch (e) { return ''; } })(), 865 'userStatus':`non abonné`, 866 'adblocks':``, 867 'sessionType':``, 868 'idArticle':``, 869 'subscriptionContentType':`gratuit`, 870 'estCANAL':`non` 871 }]; 872 873 874 875 evt.listen('deviceType', function () { 876 try { 877 let val = (window.lcm.device.getDeviceType()); 878 dataLayer.push({'support': val.substring(0, 149)}); 879 } catch (e) { 880 console.log('DataLayer Error ['+e.message+']'); 881 } 882 }); 883 evt.listen('deviceType', function () { 884 try { 885 let val = (window.lcm.device.getDeviceType()); 886 dataLayer.push({'websiteVersion': val.substring(0, 149)}); 887 } catch (e) { 888 console.log('DataLayer Error ['+e.message+']'); 889 } 890 }); _log({module:'DataLayer', type:'info', data:{ 891 'DataLayer': dataLayer 892 }}) 893 function loadGTM() {
vendor: 461 bytes, lines 893-901
893 894 (function (w, d, s, l, i) { 895 w[l] = w[l] || []; 896 w[l].push({'gtm.start': new Date().getTime(), event: 'gtm.js'}); 897 var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; 898 j.async = true; 899 j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; 900 f.parentNode.insertBefore(j, f); 901 })(window, document, 'script', 'dataLayer', '
901GTM-TGN88WM
vendor: 8 bytes, lines 901-902
901'); 902
902} 903</script>
903 904
904<script> 905 // evt.listen('cmpAccepted',()=>{ 906 loadGTM(); 907 // }); 908 </script>
908 909 910
910<script> 911 (function(x,p,l,n,a,i) { 912 a=p.createElement(l);a.async=!0;a.src=n;a.xpln=x; 913 i=p.currentScript||p.getElementsByTagName(l)[0];i.parentNode.insertBefore(a,i); 914 })({xid:'mediafigaro'},document,'script','https://cdn.xpln.tech/page.js'); 915 916 (function(x,p,l,n,a,i) { 917 self.xpln_targeting=function(){}; 918 self.get_xpln_targeting=function(){}; 919 a=x.createElement(p);a.async=!0; 920 a.src = l + 'mediafigaro' + '/'+location.hostname+ 921 '.js'; 922 i=x.currentScript||x.getElementsByTagName(p)[0];i.parentNode.insertBefore(a,i); 923 })(document,'script','https://cdn.xpln.tech/'); 924</script>
924 925
925<script> 926 const oneplusxInfos = { 'page_attr_pagecategory':`autres_pages`, 927 'page_attr_level1':`autres_pages`, 928 'page_attr_level2':`sans_tag`, 929 'page_attr_level3':``, 930 'page_attr_tagname1':``, 931 'page_attr_tagname2':``, 932 'page_attr_tagname3':``, 933 'page_attr_articleid':``, 934 'page_attr_author':``, 935 'page_attr_pays':``, 936 'page_attr_region':``, 937 'page_attr_departement':``, 938 'page_attr_montant':``, 939 'page_attr_quantite':``, 940 'page_attr_subscriptioncontentstate':``, 941 'page_attr_subscriptioncontenttype':``, 942 'page_attr_userstatus':`inconnu`, 943 'page_attr_userstate':`non-connecte`, 944 'page_attr_subscription':``, 945 'page_attr_visitor_id':``, 946 'type':`default`, 947 'page_attr_url_path_1':`contact-form`, 948 'page_attr_url_path_2':``, 949 'page_attr_url_path_3':``, 950 'page_attr_url_path_4':``, 951 'page_attr_page_title':``, 952 'page_attr_ctnt_qual':``, 953 'page_attr_domain':`co.uk`, 954 'page_attr_full_domain':`www.weathercrave.co.uk`, 955 'page_attr_url_cleaned':`www.weathercrave.co.uk/contact-form`, 956 'page_attr_Seen-een':``, 957 'page_attr_sourcesite':(function () { try { return document.referrer; } catch(e) {return ''; } })() 958 }; 959</script>
959 960 961 <link rel="apple-touch-icon" sizes="120x120" href="https://static5.mclcm.net/lcm2018/en/common/favicons/120_iPhone_retina.png"/> 962<link rel="apple-touch-icon" sizes="152x152" href="https://static5.mclcm.net/lcm2018/en/common/favicons/152_iPad_retina.png"/> 963<link rel="apple-touch-icon" sizes="167x167" href="https://static5.mclcm.net/lcm2018/en/common/favicons/167_iPad_pro.png"/> 964<link rel="apple-touch-icon" sizes="180x180" href="https://static5.mclcm.net/lcm2018/en/common/favicons/180_iPhone_6_plus.png"/> 965 966<link rel="icon" type="image/png" sizes="32x32" href="https://static5.mclcm.net/lcm2018/en/common/favicons/32_taskbar_shortcut_icon.png"/> 967<link rel="icon" type="image/png" sizes="96x96" href="https://static5.mclcm.net/lcm2018/en/common/favicons/96_desktop_shortcut_icon.png"/> 968<link rel="icon" type="image/png" sizes="16x16" href="https://static5.mclcm.net/lcm2018/en/common/favicons/16_browser_favicon.png"/> 969 970<link rel="icon" type="image/png" sizes="128x128" href="https://static5.mclcm.net/lcm2018/en/common/favicons/128_chrome_webstore_icon.png"/> 971<link rel="icon" type="image/png" sizes="196x196" href="https://static5.mclcm.net/lcm2018/en/common/favicons/196_android_chrome_icon.png"/> 972<link rel="icon" type="image/png" sizes="228x228" href="https://static5.mclcm.net/lcm2018/en/common/favicons/228_opera_coast_icon.png"/> 973 974<link rel="icon" type="image/png" sizes="70x70" href="https://static5.mclcm.net/lcm2018/en/common/favicons/70_windows.png"/> 975<link rel="icon" type="image/png" sizes="270x270" href="https://static5.mclcm.net/lcm2018/en/common/favicons/270_windows.png"/> 976<link rel="icon" type="image/png" sizes="310x310" href="https://static5.mclcm.net/lcm2018/en/common/favicons/310_310_windows.png"/> 977<link rel="icon" type="image/png" sizes="310x150" href="https://static5.mclcm.net/lcm2018/en/common/favicons/310_150_windows.png"/> 978 979 980 981 982 983 <link rel="stylesheet" href="https://www.weathercrave.co.uk/build/main_redesign.bcb0f22eb3707182578d.css" /> 984 985 <link rel="stylesheet" href="https://www.weathercrave.co.uk/build/contact_page.b42871b67c252936f5a4.css"> 986 987 <style> 988 @font-face { 989 font-family: 'Nunito Sans'; 990 font-style: normal; 991 font-weight: 400 700; 992 src: url('//static5.mclcm.net/lcm2018/fonts/nunito_sans_v8/regular_variable.woff2'); 993 } 994 995 @font-face { 996 font-family: 'Nunito Sans'; 997 font-style: italic; 998 font-weight: 400 700; 999 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 1000 src: url('//static5.mclcm.net/lcm2018/fonts/nunito_sans_v8/italic_variable.woff2'); 1001 } 1002 </style> 1003 1004 1005</head> 1006<body class="subset-font "> 1007<div class="background-interact"></div> 1008 1009 1010<header id="header" class="show-overlay 1011 "> 1012 <div class="header-container"> 1013 1014 <div class="burger-container"> 1015 <button id="menu" class="burger" aria-label="menu"> 1016 <span class="icon-burger"></span> 1017 <span class="alert-container"> 1018 <svg class="icon icon-MenuAlert " aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#menuAlert" /></svg> 1019 </span> 1020 </button> 1021 </div> 1022 1023 <div class="logo"> 1024 <a href="https://www.weathercrave.co.uk/weather-forecast-united-kingdom/weather-forecast-united-kingdom-today" id="logoHref"> 1025 <div class="img-container"> 1026 <picture id="headerLogo"> 1027 <source class="img-fluid" 1028 media="(min-width: 1000px)" 1029 srcset="https://static5.mclcm.net/lcm2018/en/common/logo.svg" 1030 width="96" 1031 height="54" 1032 /> 1033 <img class="img-fluid" 1034 src="https://static5.mclcm.net/lcm2018/en/common/logo.svg" 1035 width="70" 1036 height="40" 1037 alt="Weather Crave" 1038 /> 1039 </picture> 1040 </div> 1041 </a> 1042 </div> 1043 1044 <div class="search-container"> 1045 <div class="search-input-container autocomplete" id="genericSearch"> 1046 <form class="autocomplete-form" action="https://www.weathercrave.co.uk/weather-forecast-search" method="get" autocomplete="off"> 1047 <input type="search" name="q" class="autocomplete-field" disabled="true" 1048 placeholder="Search for a location or a favorite" 1049 required/> 1050 <button class="search-submit" type="submit" aria-label="search submit"> 1051 <svg class="icon icon-Search " aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#search" /></svg> 1052 </button> 1053 <button class="search-aborted" type="button" aria-label="search aborted"> 1054 <svg class="icon icon-Close " aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#close" /></svg> 1055 </button> 1056 </form> 1057 </div> 1058 <button id="mainSearch" class="magnifier" aria-label="search"> 1059 <svg class="icon icon-Magnifier " aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#magnifier" /></svg> 1060 </button> 1061 <button 1062 class="account-access a-href 1063 " 1064 aria-label="My account" 1065 data-href="https://www.weathercrave.co.uk/sign-in"> 1066 <svg class="icon icon-MenuCompteOn " aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#menuCompteOn" /></svg> 1067 </button> 1068 </div> 1069 </div> 1070 1071 <nav class="nav-overlay"> 1072 <ul class="nav-list"> 1073 <li class="item nav-home "> 1074 <a href="https://www.weathercrave.co.uk/weather-forecast-united-kingdom/weather-forecast-united-kingdom-today" data-target="" "> 1075 <svg class="icon icon-MenuAccueilOff off" aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#menuAccueilOff" /></svg> 1076 <svg class="icon icon-MenuAccueilOn on" aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#menuAccueilOn" /></svg>
1076 <span class="nav-title">Home</span> 1077 </a> 1078 </li> 1079 <li class="item nav-interactiveWeatherMap "> 1080 <a href="https://www.weathercrave.co.uk/weather-map/rain-radar" data-target="" "> 1081 <svg class="icon icon-MenuRadarOff off" aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#menuRadarOff" /></svg> 1082 <svg class="icon icon-MenuRadarOn on" aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#menuRadarOn" /></svg> <span class="nav-title">Radar</span> 1083 </a> 1084 </li> 1085 <li class="item nav-mountain "> 1086 <a href="https://www.weathercrave.co.uk/weather-forecast-mountain/weather-forecast-mountain" data-target="" "> 1087 <svg class="icon icon-MenuMountain off" aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#menuMountain" /></svg> 1088 <svg class="icon icon-MenuMountain on" aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#menuMountain" /></svg> <span class="nav-title">Mountain</span> 1089 </a> 1090 </li> 1091 <li class="item nav-world "> 1092 <a href="https://www.weathercrave.co.uk/weather-forecast-world/weather-forecast-world" data-target="" "> 1093 <svg class="icon icon-MenuWorld off" aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#menuWorld" /></svg> 1094 <svg class="icon icon-MenuWorld on" aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#menuWorld" /></svg> <span class="nav-title">World</span> 1095 </a> 1096 </li> 1097 <li class="item nav-country "> 1098 <a href="https://www.weathercrave.co.uk/weather-forecast-united-kingdom/country-149/weather-forecast-united-kingdom-today" data-target="" "> 1099 <svg class="icon icon-MenuUk off" aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#menuUk" /></svg> 1100 <svg class="icon icon-MenuUk on" aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#menuUk" /></svg> <span class="nav-title">United Kingdom</span> 1101 </a> 1102 </li> 1103 <li class="item nav-contact active "> 1104 <a href="https://www.weathercrave.co.uk/contact-form" data-target="" "> 1105 <svg class="icon icon-NewsletterOff off" aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#newsletter-off" /></svg> 1106 <svg class="icon icon-NewsletterOff on" aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#newsletter-off" /></svg> <span class="nav-title">Contact us</span> 1107 </a> 1108 </li> 1109 <li class="item nav-account "> 1110 <a href="https://www.weathercrave.co.uk/my-account" data-target="" "> 1111 <svg class="icon icon-MenuCompteOff off" aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#menuCompteOff" /></svg> 1112 <svg class="icon icon-MenuCompteOn on" aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#menuCompteOn" /></svg>
1112 <span class="nav-title">My account</span> 1113 </a> 1114 </li> 1115 <li class="item nav-connexion "> 1116 <button class="a-href" data-href="https://www.weathercrave.co.uk/sign-in?cb=http://www.weathercrave.co.uk/contact-form" data-target="" type="button"> 1117 <svg class="icon icon-MenuCompteOff off" aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#menuCompteOff" /></svg> 1118 <svg class="icon icon-MenuCompteOn on" aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#menuCompteOn" /></svg> <span class="nav-title">Log in</span> 1119 </button> 1120 </li> 1121 </ul> 1122 </nav> 1123 1124 <div class="grid-container container-fluid nav-container">
1125 <nav class="nav grid col-m-16" id="nav-bar"> 1126 <div class="container-menu"> 1127 <ul class="nav-list"> 1128 <li class="item nav-home "> 1129 <a href="https://www.weathercrave.co.uk/weather-forecast-united-kingdom/weather-forecast-united-kingdom-today" data-target="" > 1130 <svg class="icon icon-MenuAccueilOff off" aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#menuAccueilOff" /></svg> 1131 <span class="nav-title">Home</span> 1132 </a> 1133 1134 </li> 1135 <li class="item nav-interactiveWeatherMap "> 1136 <a href="https://www.weathercrave.co.uk/weather-map/rain-radar" data-target="" > 1137 <svg class="icon icon-MenuRadarOff off" aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#menuRadarOff" /></svg> 1138 <span class="nav-title">Radar</span> 1139 </a> 1140 1141 </li> 1142 <li class="item nav-mountain "> 1143 <a href="https://www.weathercrave.co.uk/weather-forecast-mountain/weather-forecast-mountain" data-target="" > 1144 <svg class="icon icon-MenuMountain off" aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#menuMountain" /></svg> 1145 <span class="nav-title">Mountain</span> 1146 </a> 1147 1148 </li> 1149 <li class="item nav-world "> 1150 <a href="https://www.weathercrave.co.uk/weather-forecast-world/weather-forecast-world" data-target="" > 1151 <svg class="icon icon-MenuWorld off" aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#menuWorld" /></svg> 1152 <span class="nav-title">World</span> 1153 </a> 1154 1155 </li> 1156 <li class="item nav-country "> 1157 <a href="https://www.weathercrave.co.uk/weather-forecast-united-kingdom/country-149/weather-forecast-united-kingdom-today" data-target="" > 1158 <svg class="icon icon-MenuUk off" aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#menuUk" /></svg> 1159 <span class="nav-title">United Kingdom</span> 1160 </a> 1161 1162 </li> 1163 <li class="item nav-contact "> 1164 <a href="https://www.weathercrave.co.uk/contact-form" data-target="" > 1165 <svg class="icon icon-NewsletterOff off" aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#newsletter-off" /></svg> 1166 <span class="nav-title">Contact us</span> 1167 </a> 1168 1169 </li> 1170 <li class="item nav-account "> 1171 <a href="https://www.weathercrave.co.uk/my-account" data-target="" > 1172 <svg class="icon icon-MenuCompteOff off" aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#menuCompteOff" /></svg> 1173 <sp
1173an class="nav-title">My account</span> 1174 </a> 1175 1176 </li> 1177 <li class="item nav-connexion "> 1178 <button class="a-href" data-href="https://www.weathercrave.co.uk/sign-in" data-target="" type="button"> 1179 <svg class="icon icon-MenuCompteOff off" aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#menuCompteOff" /></svg> 1180 <span class="nav-title">Log in</span> 1181 </button> 1182 1183 </li> 1184 </ul> 1185 <div class="header-share"> 1186 <div class="social-container"> 1187 <button class="a-href" data-href="https://www.facebook.com/lameilleureinfometeo" rel="nofollow" data-target="_blank"><div class="bout4"><svg class="icon icon-Facebook " aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#facebook" /></svg></div></button> 1188 <button class="a-href" data-href="https://twitter.com/LaChaineMeteo" rel="nofollow" data-target="_blank"><div class="bout4"><svg class="icon icon-Twitter " aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#twitter" /></svg></div></button> 1189 <button class="a-href" data-href="https://www.instagram.com/lachainemeteo/" rel="nofollow" data-target="_blank"><div class="bout4"><svg class="icon icon-Instagram " aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#instagram" /></svg></div></button> 1190 <button class="a-href" data-href="https://www.snapchat.com/add/lachainemeteo" rel="nofollow" data-target="_blank"><div class="bout4"><svg class="icon icon-Snapchat " aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#snapchat" /></svg></div></button> 1191 <button class="a-href" data-href="https://www.tiktok.com/@lachainemeteofrance" rel="nofollow" data-target="_blank"><div class="bout4"><svg class="icon icon-Tiktok " aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#tiktok" /></svg></div></button> 1192 </div> 1193 </div> 1194 </div> 1195 </nav> 1196 </div> 1197 1198 <div class="grid-container container-fluid search-nav-container">
1199 <nav class="nav grid col-m-16" id="nav-bar-search"> 1200 <div id="resultContainerHeader" class="result-container"> 1201 <div class="result-title"> 1202 <div class="section-title">Search results</div> 1203 </div> 1204 <div class="autocomplete-results-block"> 1205 <ul id ="headerResult" class="autocomplete-results"></ul> 1206 <div class="result-all-container"> 1207 <svg class="icon icon-Magnifier " aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#magnifier" /></svg> 1208 <span class="result-all-title">See all results</span> 1209 </div> 1210 <div class="autocomplete-more"> 1211 <span id="autocomplete-more-label" class="autocomplete-more-label">CAN'T FIND YOUR LOCATION?</span> 1212 <div id="autocomplete-more-container" class="autocomplete-more-container"> 1213 <img data-src="https://static5.mclcm.net/lcm2018/int/menu/bckg_add_place_330x85.png" 1214 data-srcset="https://static5.mclcm.net/lcm2018/int/menu/bckg_add_place_330x85.png 330w,https://static5.mclcm.net/lcm2018/int/menu/bckg_add_place_660x170.png 660w" 1215 width="330" 1216 height="85" 1217 sizes="100vw" 1218 alt="" 1219 role="none" 1220 /> 1221 <div class="autocomplete-more-btn"> 1222 <svg class="icon icon-SearchEdit " aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#searchEdit" /></svg> 1223 <button id="btnMorePlace">Request the creation of a location</button> 1224 </div> 1225 </div> 1226 <div id="addPlaceHeader" class="add-place-header"> 1227 </div> 1228 </div> 1229 </div> 1230 </div> 1231 <div id="underResultsContainer"> 1232 <div class="geoloc-container"> 1233 <div class="geoloc-title"> 1234 My location 1235 </div> 1236 <a href=""> 1237 <div id="geolocContainerHeader" class="geoloc-content"> 1238 <div class="icon-container"> 1239 <svg class="icon icon-DirectionArrowSW " aria-hidden="true" ><use xlink:href="/images/int/svg/icons-forecast-v1.1.18.svg#direction-arrow-sw" /></svg> 1240 </div> 1241 <div class="text-content"> 1242 <span class="main-title"></span> 1243 <span class="subtitle"></span> 1244 </div> 1245 <div class="last-icon"> 1246 <svg class="icon icon-ChevronRightBold " aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#angle-right-bold" /></svg> 1247 </div> 1248 </div> 1249 </a> 1250 </div> 1251 <div id="historicalContainerHeader" class="historical-container"> 1252 <div class="historical-title"> 1253 <div class="section-title">Recent searches</div> 1254 </div> 1255 <div class="historical-block"> 1256 <ul id="headerHistorical" class="historical-list"></ul> 1257 <div class="historical-remove"> 1258 <svg class="icon icon-Trash " aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#trash" /></svg> 1259 <span class="remove-title">Clear my history</span> 1260 </div> 1261 </div> 1262 </div> 1263 <div id="favoriteContainerHeader" class="favorite-container show"> 1264 <div class="favorite-title a-href" data-href="https://www.weathercrave.co.uk/my-account/favorites"> 1265 <div class="section-title">My favorites</div> 1266 </div> 1267 <div class="favorite-block"> 1268 <ul id="headerFavorite" class="favorite-list"></ul> 1269 <div class="favorite-edit a-href" data-href="https://www.weathercrave.co.uk/my-account/favorites"> 1270 <svg class="icon icon-SearchEdit " aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#searchEdit" /></svg>
1271 <span class="edit-title">Edit my favorites</span> 1272 </div> 1273 </div> 1274 </div> 1275 <div class="noconnect-favorite-container"> 1276 <span class="noconnect-favorite-label">Create your account to save your favorites.</span> 1277 <div class="noconnect-favorite-btn a-href" data-href="https://www.weathercrave.co.uk/sign-in">Log in</div> 1278 </div> 1279 </div> 1280 </nav> 1281 </div> 1282 1283</header> 1284<div id="header-margin"></div> 1285 1286 1287 <div id="contactLCM" style="background-image: url('https://static5.mclcm.net/lcm2018/int/service/background-formulaire-contact.png');"> 1288 <div class="background-img"> 1289 <div class="content"> 1290 <h1> 1291 <strong>Contact</strong> 1292 <div class="toggleMobile"></div> 1293 Weather Crave 1294 </h1> 1295 1296 <form name="lcm_contact_form" method="post"> 1297 1298 <div class="form-subject"> 1299 <p class="title"> 1300 You wish to contact us for... 1301 </p> 1302 1303 <span class="select-wrapper"> 1304 <select id="lcm_contact_form_object" name="lcm_contact_form[object]"><option value="contactLCM.object1">Sales request</option><option value="contactLCM.object2">Comments on a forecasts</option><option value="contactLCM.object3">Comments on the TV channel</option><option value="contactLCM.object4">Comments on the community</option><option value="contactLCM.object5">Technical problem</option><option value="contactLCM.object6">Another reason</option></select> 1305 1306 <svg class="icon icon-ChevronBottom " aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#angle-bottom" /></svg> 1307 </span> 1308 </div> 1309 1310 <div class="form-infos"> 1311 <div class="infos-inputs"> 1312 <input type="text" id="lcm_contact_form_lastname" name="lcm_contact_form[lastname]" required="required" placeholder="name" /> 1313 <input type="text" id="lcm_contact_form_firstname" name="lcm_contact_form[firstname]" required="required" placeholder="First name" /> 1314 </div> 1315 1316 1317 <div class="infos-inputs"> 1318 <input type="text" id="lcm_contact_form_phone" name="lcm_contact_form[phone]" placeholder="Telephone" /> 1319 <input type="email" id="lcm_contact_form_email" name="lcm_contact_form[email]" required="required" placeholder="E-mail address " class="" /> 1320 </div> 1321 1322 </div> 1323 1324 <div class="clear"></div> 1325 1326 <div class="form-textarea"> 1327 <p class="title"> 1328 Write to us in the field below: 1329 </p> 1330 1331 <textarea id="lcm_contact_form_content" name="lcm_contact_form[content]" required="required" rows="5" placeholder="Your message..."></textarea> 1332 </div> 1333 1334 <div class="form-submit"> 1335 <button type="submit" id="lcm_contact_form_submitBtn" name="lcm_contact_form[submitBtn]" class="submit">Send</button> 1336 </div> 1337 1338 1339 </form> 1340 1341 <div class="lcm-address"> 1342 You can also reach us by post at :<br/> 1343 METEOCONSULT - La Chaîne Météo - Domaine de Marsinval F-78540 - Vernouillet<br/> 1344 or by phone: 01 39 28 19 90 (non-premium rate number) 1345 </div> 1346 1347 <div class="legal-notices"> 1348 <div class="line"></div> 1349 1350 <div class="text"> 1351 The information collected is processed electronically in order to manage your account, 1352 declared under the number 1413483. Unless you specify otherwise, your details may be kept
1353 and used for commercial purposes by Weather Crave. 1354 In accordance with the French data protection and privacy law of 6 January 1978, you have a right of access 1355 and correct your personal data as well as object to its use by writing to the following address 1356 METEO CONSULT - Weather Crave - Domaine de Marsinval -78540 - Vernouillet - France or by email at 1357 [email protected] (please specify your last name, first name, email address and, if possible, your subscriber reference). 1358 1359 </div> 1360 </div> 1361 1362 </div> 1363 </div> 1364 </div> 1365 1366 1367<footer id="footer" class="footer"> 1368 <div class="grid-container container-fluid"> 1369 <div class="grid col-16 section"> 1370 <div class="grid-container"> 1371 <div class="grid col-16 col-m-5 col-l-6 items-0"> 1372 <div class="logo"> 1373 <svg class="icon icon-LogoWeatherCrave " aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#logo-weather-crave" /></svg> 1374 <div class="logo-devices"> 1375 <svg class="icon icon-Mobile " aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#mobile" /></svg> 1376 <svg class="icon icon-Laptop " aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#laptop" /></svg> 1377 <svg class="icon icon-Tv " aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#tv" /></svg> 1378 </div> 1379 </div> 1380 </div> 1381 1382 <ul class="grid col-16 col-m-5 items items-1"> 1383 <li class="item"> 1384 <a href="https://www.weathercrave.co.uk/change-language" class="link"> 1385 <strong>Language of the site : EN</strong> 1386 <img class="flag lazyload" 1387 src="data:image/png;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=" 1388 data-src="https://static5.mclcm.net/lcm2018/int/flags/gb.svg" 1389 alt="gb" 1390 width="20" 1391 height="15" 1392 /> 1393 </a> 1394 </li> 1395 1396 <li class="item"> 1397 <a href="https://www.weathercrave.co.uk/weather-services/presentation/newsroom" class="link">Our weather experts</a> 1398 </li> 1399 <li class="item"> 1400 <a href="https://www.weathercrave.co.uk/weather-services/info/about-meteo-consult" class="link">About us</a> 1401 </li> 1402 <li class="item"> 1403 <a href="https://www.weathercrave.co.uk/contact-form" class="link">Contact us</a> 1404 </li> 1405 <li class="item"> 1406 <a href="https://www.weathercrave.co.uk/legend-pictograms" class="link">Legend of pictograms</a> 1407 </li> 1408 </ul> 1409 1410 <ul class="grid col-16 col-m-5 items items-2"> 1411 <li class="item">METEO CONSULT</li> 1412 <li class="item"> 1413 <a href="https://marine.meteoconsult.co.uk" class="link">Shipping Forecast</a> 1414 </li> 1415 <li class="item"> 1416 <a href="https://www.meteoconsult.co.uk/" class="link">Professional Forecast</a> 1417 </li> 1418 </ul> 1419 1420 </div> 1421 1422 <div class="app-links"> 1423 <div class="label">Get our apps :</div> 1424 1425 <div class="icons"> 1426 <button class="a-href" 1427 aria-label="" 1428 title="Weather app iPhone and iPad" 1429 data-href="https://itunes.apple.com/fr/app/la-chaine-meteo/id324565014?mt=8" 1430 > 1431 <img class="lazyload icon" 1432 src="data:image/png;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=" 1433 data-src="https://static5.mclcm.net/lcm2018/en/common/apple-store-badge-130x40.png" 1434 data-srcset="https://static5.mclcm.net/lcm2018/en/common/apple-store-badge-130x40.png 130w, https://static5.mclcm.net/lcm2018/en/common/apple-store-badge-260x80.png 260w" 1435 alt="Weather app iPhone and iPad" 1436 width="130" 1437 height="40" 1438 sizes="130px" 1439 /> 1440 </button> 1441 1442 <button class="a-href" 1443 aria-label="" 1444 title="Android Weather app"
1445 data-href="https://play.google.com/store/apps/details?id=com.lachainemeteo.androidapp&hl=fr" 1446 > 1447 1448 <img class="lazyload icon" 1449 src="data:image/png;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=" 1450 data-src="https://static5.mclcm.net/lcm2018/en/common/google-play-badge-130x40.png" 1451 data-srcset="https://static5.mclcm.net/lcm2018/en/common/google-play-badge-130x40.png 130w, https://static5.mclcm.net/lcm2018/en/common/google-play-badge-260x80.png 260w" 1452 alt="Android Weather app" 1453 width="130" 1454 height="40" 1455 sizes="130px" 1456 /> 1457 </button> 1458 </div> 1459 </div> 1460 1461 <ul class="sitemap"> 1462 <li class="item"> 1463 <a href="https://www.weathercrave.co.uk/weather-services/info/legal-notice" class="link">Legal notice</a> 1464 </li> 1465 <li class="item"> 1466 <a href="https://www.weathercrave.co.uk/weather-services/info/terms-of-service" class="link">TOS</a> 1467 </li> 1468 <li class="item"> 1469 <a href="https://www.weathercrave.co.uk/website-map" class="link">Site map</a> 1470 </li> 1471 <li class="item"> 1472 <a href="https://www.weathercrave.co.uk/weather-services/info/cookies" class="link">Information about cookies</a> 1473 </li> 1474 <li class="item"> 1475 <a href="https://www.weathercrave.co.uk/weather-services/info/privacy-policy" class="link">Confidentiality policy</a> 1476 </li> 1477 1478 <li class="item"> 1479 <button id="cookies-config" class="link">Set cookies</button> 1480 </li> 1481 1482 <li class="item"> 1483 <button class="link" onclick="__tcfapi('show', 2, function(){}, {})">Display the Privacy Center</button> 1484 </li> 1485 </ul> 1486 1487 <p class="copyright"><span onclick="copySlotsInfo()">©</span>2026 Weather Crave</p> 1488 </div> 1489 </div> 1490</footer> 1491
1492<script> 1493 const copySlotsInfo = () => { 1494 let text = ""; 1495 1496 window.googletag.pubads().getSlots().forEach( slot => { 1497 let slotData = { 1498 invCode: null, 1499 slotName: null, 1500 tag: null, 1501 campagne: null 1502 } 1503 slotData.campagne = slot.getResponseInformation(); 1504 1505 let tag = slot.getSlotId().getName(); 1506 1507 lcm.gam.getSlots().forEach((gamSlot)=>{ 1508 if(gamSlot.tag === tag){ 1509 slotData.invCode = gamSlot.invCode; 1510 slotData.slotName = gamSlot.slotName; 1511 slotData.tag = gamSlot.tag; 1512 } 1513 }); 1514 text += "\n \n" + JSON.stringify(slotData); 1515 }); 1516 1517 navigator.clipboard.writeText(text).then(function() { 1518 console.log('Slots info to clipboard OK'); 1519 }, function(err) { 1520 console.log('Slots info to clipboard KO'); 1521 // console.log(err); 1522 }); 1523 } 1524</script>
1524 1525 1526
1527<script> 1528 1529 1530 evt.listen('DOMContentLoaded', () => { 1531 1532 try { 1533 const header = document.getElementById('header'); 1534 let btnMagnifier = header.querySelector('#mainSearch'); 1535 let btnFavorite = header.querySelector('.magnifier-favorite'); 1536 1537 if (btnMagnifier !== null) { 1538 btnMagnifier.addEventListener('click', () => { 1539 loadScriptBuild('autocomplete_header'); 1540 header.querySelector('#genericSearch input[type="search"]').focus(); 1541 }, {once: true}); 1542 if(btnFavorite){ 1543 btnFavorite.addEventListener('click', () => { 1544 loadScriptBuild('autocomplete_header'); 1545 header.querySelector('#genericSearch input[type="search"]').focus(); 1546 }, {once: true}); 1547 } 1548 } 1549 1550 let field = header.querySelector('#genericSearch input[type="search"]'); 1551 if (field !== null) { 1552 field.addEventListener('focus', () => { 1553 loadScriptBuild('autocomplete_header'); 1554 }, {once: true}); 1555 } 1556 1557 } catch (e) { 1558 console.warn('header error', e); 1559 console.warn(e); 1560 } 1561 1562 1563 loadScriptBuild('cookies'); 1564 loadScriptBuild('panel_manager'); 1565 1566 1567 1568}); 1569 1570 1571evt.listen('autocomplete_headerLoaded', () => { 1572 let starFull = '<svg class="icon icon-StarFull " aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#star-full" /></svg>'; 1573 let historical = '<svg class="icon icon-Historical " aria-hidden="true" ><use xlink:href="/images/int/svg/icons-v1.1.33.svg#historical" /></svg>'; 1574 1575 window.lcm.autocompleteHeader.getInstance() 1576 .setConfig({ 1577 "containerId": "genericSearch", 1578 "urlSearchByEntity": 'https://www.weathercrave.co.uk/ajax/search-entity?e=', 1579 "urlSearchByQuery": 'https://www.weathercrave.co.uk/ajax/search-autocomplete?q=', 1580 }) 1581 .setIconStarFull(starFull) 1582 .setIconHistorical(historical) 1583 .run(); 1584}); 1585 1586 1587evt.listen('shortcutLoaded', () => { 1588 evt.listen('lazyload', () => { 1589 window.lcm.shortcut 1590 .setUrlEntityForecast({ 1591 url: 'https\u003A\/\/www.weathercrave.co.uk\/ajax\/entity\/99999\u002D88888', 1592 typeId: '99999', 1593 id: '88888' 1594 }) 1595 .setIcons({ 1596 alert: '\u003Csvg\u0020class\u003D\u0022icon\u0020icon\u002DAlertStroke\u0020\u0022\u0020aria\u002Dhidden\u003D\u0022true\u0022\u0020\u003E\u003Cuse\u0020xlink\u003Ahref\u003D\u0022\/images\/int\/svg\/icons\u002Dv1.1.33.svg\u0023alertStroke\u0022\u0020\/\u003E\u003C\/svg\u003E', 1597 close: '\u003Csvg\u0020class\u003D\u0022icon\u0020icon\u002DClose\u0020\u0022\u0020aria\u002Dhidden\u003D\u0022true\u0022\u0020\u003E\u003Cuse\u0020xlink\u003Ahref\u003D\u0022\/images\/int\/svg\/icons\u002Dv1.1.33.svg\u0023close\u0022\u0020\/\u003E\u003C\/svg\u003E', 1598 geolocation: '\u003Csvg\u0020class\u003D\u0022icon\u0020icon\u002DGeolocation\u0020\u0022\u0020aria\u002Dhidden\u003D\u0022true\u0022\u0020\u003E\u003Cuse\u0020xlink\u003Ahref\u003D\u0022\/images\/int\/svg\/icons\u002Dv1.1.33.svg\u0023geolocation\u0022\u0020\/\u003E\u003C\/svg\u003E', 1599 historical: '\u003Csvg\u0020class\u003D\u0022icon\u0020icon\u002DHistorical\u0020\u0022\u0020aria\u002Dhidden\u003D\u0022true\u0022\u0020\u003E\u003Cuse\u0020xlink\u003Ahref\u003D\u0022\/images\/int\/svg\/icons\u002Dv1.1.33.svg\u0023historical\u0022\u0020\/\u003E\u003C\/svg\u003E', 1600 starFull: '\u003Csvg\u0020class\u003D\u0022icon\u0020icon\u002DStarFull\u0020\u0022\u0020aria\u002Dhidden\u003D\u0022true\u0022\u0020\u003E\u003Cuse\u0020xlink\u003Ahref\u003D\u0022\/images\/int\/svg\/icons\u002Dv1.1.33.svg\u0023star\u002Dfull\u0022\u0020\/\u003E\u003C\/svg\u003E', 1601 chevronLeft: '\u003Csvg\u0020class\u003D\u0022icon\u0020icon\u002DChevronLeft\u0020\u0022\u0020aria\u002Dhidden\u003D\u0022true\u0022\u0020\u003E\u003Cuse\u0020xlink\u003Ahref\u003D\u0022\/images\/int\/svg\/icons\u002Dv1.1.33.svg\u0023angle\u002Dleft\u0022\u0020\/\u003E\u003C\/svg\u003E', 1602 chevronRight: '\u003Csvg\u0020class\u003D\u0022icon\u0020icon\u002DChevronRight\u0020\u0022\u0020aria\u002Dhidden\u003D\u0022true\u0022\u0020\u003E\u003Cuse\u0020xlink\u003Ahref\u003D\u0022\/images\/int\/svg\/icons\u002Dv1.1.33.svg\u0023angle\u002Dright\u0022\u0020\/\u003E\u003C\/svg\u003E', 1603 chevronRightBold: '\u003Csvg\u0020class\u003D\u0022icon\u0020icon\u002DChevronRightBold\u0020\u0022\u0020aria\u002Dhidden\u003D\u0022true\u0022\u0020\u003E\u003Cuse\u0020xlink\u003Ahref\u003D\u0022\/images\/int\/svg\/icons\u002Dv1.1.33.svg\u0023angle\u002Dright\u002Dbold\u0022\u0020\/\u003E\u003C\/svg\u003E' 1604 }) 1605 .setPopinParams({ 1606 deleteBookmark: { 1607 title: "Confirmation", 1608 message: "Your bookmark has been deleted", 1609 close: true, 1610 icon: 'none', 1611 buttons: [{ 1612 label: "Close" 1613 }] 1614 }, 1615 deleteHistorical: { 1616 title: "Confirmation", 1617 message: "This forecast has been deleted from your search history", 1618 close: true, 1619 icon: 'none', 1620 buttons: [{ 1621 label: "Close" 1622 }] 1623 }, 1624 connect: { 1625 title: "Sorry !", 1626 message: "To manage your favourites, you must be logged in.", 1627 close: true, 1628 icon: 'none', 1629 buttons: [ 1630 { 1631 label: "Register", 1632 callback: function () { 1633 window.location.href = 'https\u003A\/\/www.weathercrave.co.uk\/sign\u002Dup'; 1634 } 1635 }, 1636 { 1637 label: "Login", 1638 callback: function () { 1639 sessionStorage.setItem('redirectAfterLogin', window.location.href); 1640 window.location.href = 'https\u003A\/\/www.weathercrave.co.uk\/sign\u002Din'; 1641 } 1642 } 1643 ] 1644 }, 1645 favorite: { 1646 title: "Your Bookmarks", 1647 message: "To organize your bookmarks, you will be redirected to your My Account page", 1648 close: true, 1649 icon: "none", 1650 buttons: [ 1651 { 1652 label: "Cancel" 1653 }, 1654 { 1655 label: "Continue", 1656 callback: function () { 1657 window.location.href = 'https\u003A\/\/www.weathercrave.co.uk\/my\u002Daccount'; 1658 } 1659 } 1660 ] 1661 } 1662 }); 1663 }); 1664}); 1665evt.listen('historicalLoaded', () => { 1666 window.lcm.historical 1667 .setCookieDomain('.weathercrave.co.uk') 1668 .load(); 1669}); 1670evt.listen('bookmarkLoaded', () => { 1671 window.lcm.bookmark 1672 .setUrlBookmarkList('https\u003A\/\/www.weathercrave.co.uk\/ajax\/favorites') 1673 .setUrlBookmarkDelete("https\u003A\/\/www.weathercrave.co.uk\/ajax\/favorite\/remove") 1674 .load(); 1675}); 1676 1677
1678evt.listen('cookiesLoaded', () => { 1679 loadScriptBuild('user'); 1680}); 1681 1682evt.listen('userLoaded', () => { 1683 if (!window.lcm.user.isLoaded()) { 1684 window.lcm.user 1685 .setCookieDomain('.weathercrave.co.uk') 1686 .setUrlInfo('https\u003A\/\/www.weathercrave.co.uk\/ajax\/user\u002Dinfos') 1687 .load(); 1688 } 1689}); 1690 1691evt.listen('menu_coreLoaded', () => { 1692 const addPlaceBtn = document.querySelector('#btnMorePlace'); 1693 const formAddPlaceContainer = document.querySelector('#addPlaceHeader'); 1694 // const containerMore = document.querySelector('.autocomplete-more'); 1695 const addPlaceLabel = document.getElementById('autocomplete-more-label'); 1696 const addPlaceCTA = document.getElementById('autocomplete-more-container'); 1697 1698 addPlaceBtn.addEventListener('click', () => { 1699 document.querySelector('#resultContainerHeader').classList.add('fixed-open'); 1700 addPlaceLabel.classList.add('d-none'); 1701 addPlaceCTA.classList.add('d-none'); 1702 1703 window.lcm.fetch('https://www.weathercrave.co.uk/ajax/add-place-form', {method: 'POST'}) 1704 .then(response => response.json()) 1705 .then((data) => { 1706 formAddPlaceContainer.innerHTML = data.html; 1707 const url = 'https\u003A\/\/www.weathercrave.co.uk\/ajax\/search\u002Dadd\u002Dplace'; 1708 const form_add_place = document.getElementById('addPlaceHeader'); 1709 const form_search_namePlace = document.getElementById('add_place_search_namePlace'); 1710 const form_select_country = document.getElementById('add_place_search_country'); 1711 const header = document.getElementById('header'); 1712 const form = form_add_place.querySelector('form[name="add_place_search"]'); 1713 let data_loaded = false; 1714 1715 function triggerForm() { 1716 const searchQuery = document.querySelector('.autocomplete-field').value; 1717 form_add_place.classList.toggle('active'); 1718 form_search_namePlace.value = searchQuery; 1719 // TODO remove 1720 window.scroll({top: form_add_place.offsetTop - header.offsetHeight, behavior: 'smooth'}); 1721 } 1722 1723 if (!data_loaded) { 1724 window.lcm.fetch(url) 1725 .then(response => response.json()) 1726 .then((data) => { 1727 for (let item in data) { 1728 if (data.hasOwnProperty(item)) { 1729 let element = document.createElement("option"); 1730 element.value = item; 1731 element.innerHTML = data[item]; 1732 form_select_country.append(element); 1733 } 1734 } 1735 1736 if (data.hasOwnProperty('France')) { 1737 form_select_country.value = data['France']; 1738 } 1739 1740 data_loaded = true; 1741 triggerForm(); 1742 }) 1743 } else { 1744 triggerForm(); 1745 } 1746 1747 1748 form.addEventListener('submit', (e) => { 1749 e.preventDefault(); 1750 const formData = new FormData(form); 1751 window.lcm.fetch(form.action, { 1752 method: form.method, 1753 headers: { 1754 'X-Requested-With': 'XMLHttpRequest' 1755 }, 1756 body: formData 1757 }) 1758 .then(response => response.json()) 1759 .then(data => { 1760 if (data.success) { 1761 const confirmationDiv = document.createElement('div'); 1762 confirmationDiv.classList.add('confirmation-message'); 1763 confirmationDiv.innerHTML = `Your message has been sent. 1764 <br/><p>Thank you.<br />
1764Our team will come back to you as soon as possible.<br />A très bientôt!</p> `; 1765 formAddPlaceContainer.append(confirmationDiv); 1766 } else { 1767 const errorAddPlaceDiv = document.createElement('div'); 1768 errorAddPlaceDiv.classList.add('confirmation-message'); 1769 errorAddPlaceDiv.innerHTML = `Une erreur est survenu lors de la demande d'ajout d'un lieu.<br/><p>Contacter nous par email [email protected] (merci de préciser vos nom, prénom, email et les information du lieu).<br />Nos équipes vont revenir vers vous dans les meilleurs délais.<br />A très bientôt!</p>`; 1770 formAddPlaceContainer.append(errorAddPlaceDiv); 1771 } 1772 }) 1773 }); 1774 1775 }); 1776 }); 1777 1778 1779 // load bkg 1780 let img = document.querySelector('#autocomplete-more-container img'); 1781 window.lcm.lazyload.addLazyload(img); 1782 1783}); 1784 1785 1786// TODO refacto 1787evt.listen('panel_managerLoaded', () => { 1788 const searchContainer = document.querySelector('#genericSearch'); 1789 const searchInput = searchContainer.querySelector('input'); 1790 // todo remove 1791 searchInput.disabled = false; 1792 const allResutContainer = document.querySelector('.result-all-container'); 1793 const formContainer = document.querySelector('#genericSearch'); 1794 const inputForm = formContainer.querySelector('input[name="q"]'); 1795 const formSearch = formContainer.querySelector('.autocomplete-form'); 1796 if (allResutContainer) { 1797 allResutContainer.addEventListener('click', () => { 1798 if (inputForm.value !== '') { 1799 formSearch.submit(); 1800 } 1801 }); 1802 } 1803 1804 1805 document.querySelector('#mainSearch').addEventListener('click', () => { 1806 loadScriptBuild('menu_core'); 1807 }, {once: true}); 1808 1809 if(document.querySelector('.magnifier-favorite')){ 1810 document.querySelector('.magnifier-favorite').addEventListener('click', () => { 1811 loadScriptBuild('menu_core'); 1812 document.getElementById('favoriteContainerHeader')?.scrollIntoView({ behavior: "smooth", block: "start", inline: "start" }); 1813 }, {once: true}); 1814 } 1815 1816 1817 evt.listen('DOMContentLoaded', () => { 1818 evt.listen('breakpoint', () => { 1819 if (['xxxl', 'xxl', 'xl', 'l'].indexOf(window.lcm.breakpoint.getCurrent()) !== -1) { 1820 loadScriptBuild('menu_core'); 1821 } 1822 if (['xxxl'].indexOf(window.lcm.breakpoint.getCurrent()) !== -1) { 1823 window.lcm.panelManager.openOnLoad(); 1824 } 1825 }); 1826 1827 }); 1828 1829}); 1830 1831 1832 evt.listen('DOMContentLoaded', () => { 1833 loadScriptBuild('popin'); 1834}); 1835 1836evt.listen('popinLoaded', () => { 1837 window.lcm.popin.setCloseImg('\u003Csvg\u0020class\u003D\u0022icon\u0020icon\u002DClose\u0020\u0022\u0020aria\u002Dhidden\u003D\u0022true\u0022\u0020\u003E\u003Cuse\u0020xlink\u003Ahref\u003D\u0022\/images\/int\/svg\/icons\u002Dv1.1.33.svg\u0023close\u0022\u0020\/\u003E\u003C\/svg\u003E'); 1838}); evt.listen('DOMContentLoaded', () => { 1839 document.getElementById('cookies-config').addEventListener('click', (e) => { 1840 e.preventDefault(); 1841 e.stopPropagation(); 1842 if (window.lcm.cmp){ 1843 window.lcm.cmp.showConfig(); 1844 } else { 1845 window.location.href = `https\u003A\/\/www.weathercrave.co.uk\/weather\u002Dservices\/info\/cookies` 1846 } 1847 }); 1848}); 1849 const eventClickGeneric = function (evt) { 1850 let url = this.dataset.href; 1851 if (typeof url !== "undefined" && url !== '') { 1852 let target = this.dataset.target || '_self'; 1853 1854 if (this.nodeName === 'A') { 1855 evt.preventDefault(); 1856 } 1857 1858 // Append current page as callback for sign_in (replace existing cb if present) 1859 if (url.includes('/sign-in')) { 1860 const hash = url.indexOf('#'); 1861 const baseUrl = hash > 0 ? url.substring(0, hash) : url; 1862 const anchor = hash > 0 ? url.substring(hash) : ''; 1863 const cbValue = encodeURIComponent(window.location.href); 1864 const cbIndex = baseUrl.indexOf('cb='); 1865 if (cbIndex > -1) { 1866 let ampIndex = baseUrl.indexOf('&', cbIndex + 3); 1867 if (ampIndex === -1) ampIndex = baseUrl.length; 1868 url = baseUrl.substring(0, cbIndex) + 'cb=' + cbValue + baseUrl.substring(ampIndex) + anchor; 1869 } else { 1870 const separator = baseUrl.includes('?') ? '&' : '?'; 1871 url = baseUrl + separator + 'cb=' + cbValue + anchor; 1872 } 1873 } 1874 1875 if (evt.ctrlKey || (navigator.platform.startsWith('Mac') && evt.metaKey) || target === '_blank') { 1876 window.open(url, '_blank'); 1877 } else { 1878 try { 1879 //intertitiel 1880 const fakeLink = document.getElementById('interstitialFakeLink'); 1881 fakeLink.href = url; 1882 fakeLink.click(); 1883 } catch (e) { 1884 window.location.href = url; 1885 } 1886 } 1887 } 1888}; 1889evt.listen('DOMContentLoaded', () => { 1890 document.querySelectorAll('.a-href').forEach( 1891 (el) => { 1892 el.addEventListener('click', eventClickGeneric); 1893 } 1894 ); 1895}); 1896 </script>
vendor: 66 bytes, lines 1896-1898
1896 1897 1898 <script src="https://www.google.com/recaptcha/api.js?render=
18986LcRAX4UAAAAAFsc5RD62tSraWJV24dVRLztAwDW
vendor: 16 bytes, lines 1898-1899
1898"></script> 1899
1899<script src="https://www.weathercrave.co.uk/js/recaptcha.js?mv=153"></script>
1899 1900
1900<script> 1901 document.addEventListener('DOMContentLoaded', function () { 1902 let contactForm = document.querySelector("form[name='lcm_contact_form']"); 1903 recaptcha.setActionForm('contact').setFormTarget(contactForm).load(); 1904 }); 1905 1906 1907 </script>
1907 1908
1909<script> 1910 evt.dispatch('mainContentVisible'); 1911</script>
1911 1912
1913<script> 1914 </script>
1914 1915</body> 1916</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.