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