PageSourceSearch

https://www.weathercrave.co.uk/contact-form

html weathercrave.co.uk collected 2026-09-25 09:45:48 UTC 93,957 bytes, 1,916 lines download raw bytes

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&amp;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.