1 2 3<!DOCTYPE html> 4 5<html lang="en-GB"> 6<head><!-- Powered by www.ukmsl.com - v8.90.2609.303 --><title> 7 Moving Into Rented Accommodation 8</title><meta charset="utf-8" /><link href="//static-uk.ukmsl.net/8.90/skins/print.css" rel="stylesheet" type="text/css" media="print" /> 9<link href="//static-uk.ukmsl.net/8.90/skins/system.css" rel="stylesheet" type="text/css" media="all" /> 10<link href="//static-uk.ukmsl.net/8.90/skins/icons.css" rel="stylesheet" type="text/css" media="all" /> 11<link href="//static-uk.ukmsl.net/8.90/skins/Froala.css" rel="stylesheet" type="text/css" media="all" /> 12 13<!-- start of su-meta snippet --> 14<!-- Basic Meta Tags --> 15<meta charset="utf-8"> 16<meta name="viewport" content="width=device-width, initial-scale=1.0"> 17<meta name="referrer" content="strict-origin-when-cross-origin"> 18<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin=""> 19<link rel="preload" href="/assets/site_resources/Lato-Light.woff2" as="font" type="font/woff2" crossorigin> 20<link rel="preload" href="/assets/site_resources/league-spartan-700.woff2" as="font" type="font/woff2" crossorigin> 21 22<!-- Branding --> 23<meta name="theme-color" content="#22004d"> 24<meta name="msapplication-TileColor" content="#22004d"> 25<!-- 26 Removed msapplication-navbutton-color: Windows Phone IE only, no modern 27 browser reads it (same dead-platform relic as the old UA-sniffing code). 28--> 29 30<!-- iOS / mobile web app --> 31<!-- apple-mobile-web-app-status-bar-style only accepts "default", 32 "black", or "black-translucent" â a hex color is invalid and is 33 silently ignored by iOS. Using "black-translucent" as the closest 34 supported equivalent for a dark theme-color; adjust if you want the 35 plain black bar instead. --> 36<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> 37<!-- apple-mobile-web-app-capable is required for standalone/home-screen 38 mode on iOS versions before 16.4; mobile-web-app-capable alone is not 39 enough for those older Safari versions. Keeping both. --> 40<meta name="apple-mobile-web-app-capable" content="yes"> 41<meta name="mobile-web-app-capable" content="yes"> 42<meta name="apple-itunes-app" content="app-id=1579307063"> 43 44<!-- App Titles --> 45<meta name="application-name" content="Keele SU"> 46<meta name="apple-mobile-web-app-title" content="Keele SU"> 47 48<!-- Icons --> 49<link rel="apple-touch-icon" sizes="180x180" href="https://keelesu.com/stylesheet/Brand/apple-touch-icon.png"> 50<link rel="icon" type="image/png" sizes="32x32" href="https://keelesu.com/stylesheet/Brand/favicon-32x32.png"> 51<link rel="icon" type="image/png" sizes="16x16" href="https://keelesu.com/stylesheet/Brand/favicon-16x16.png"> 52<link rel="manifest" href="https://keelesu.com/stylesheet/Brand/site.webmanifest"> 53<link rel="mask-icon" href="https://keelesu.com/stylesheet/Brand/safari-pinned-tab.svg" color="#2e1a47"> 54<link rel="shortcut icon" href="https://keelesu.com/stylesheet/Brand/favicon.ico"> 55 56<!-- Open Graph (Global defaults via MSL fields) --> 57<meta property="og:type" content="website"> 58<meta property="og:site_name" content="Keele SU"> 59<meta property="og:locale" content="en_GB"> 60<meta property="og:url" content="https://keelesu.com/news/article/advice/moving-into-rented-accommodation/"> 61<meta property="og:title" content="Moving Into Rented Accommodation"> 62<meta property="og:description" content="Following these steps could save you from future problems!"> 63<meta property="og:image" content="https://keelesu.com/asset/News/7171/Moving-in.png"> 64 65<!-- Twitter --> 66<meta name="twitter:card" content="summary_large_image"> 67<meta name="twitter:site" content="@keelesu"> 68<meta name="twitter:url" content="https://keelesu.com/news/article/advice/moving-into-rented-accommodation/"> 69<meta name="twitter:title" content="Moving Into Rented Accommodation"> 70<meta name="twitter:description" content="Following these steps could save you from future problems!"> 71<meta name="twitter:image" content="https://keelesu.com/asset/News/7171/Moving-in.png"> 72 73<!-- General --> 74<meta name="author" content="Keele SU">
75<meta name="url" content="https://keelesu.com/news/article/advice/moving-into-rented-accommodation/"> 76<meta name="title" content="Moving Into Rented Accommodation"> 77<meta name="description" content="Following these steps could save you from future problems!"> 78<meta name="image" content="https://keelesu.com/asset/News/7171/Moving-in.png"> 79<!-- 80 NOTE: <meta name="title"> is not a recognised SEO tag â it does nothing 81 for search engines or browsers. Confirm the CMS also emits a real 82 <title>...</title> element somewhere in this head; none is present in 83 this fragment. 84--> 85 86<!-- Facebook Verify --> 87<meta name="facebook-domain-verification" content="j8zqeuyega64aha524xuxeb1913wri" /> 88 89<!-- 90 Meta Pixel Code 91 NOTE: this fires unconditionally on every page load. As a UK site, 92 this is subject to UK GDPR/PECR, which requires consent before 93 non-essential tracking pixels/cookies load. If a consent-management 94 layer elsewhere gates this script (e.g. only injecting it after 95 opt-in, or holding it via a tag manager's consent mode), that's fine â 96 but as a standalone unconditional
96<script> it loads Facebook's 97 tracker before any opt-in choice is made. Verify a consent gate wraps 98 this before shipping. 99-->
100<script>
vendor: 408 bytes, lines 100-109
100 101!function(f,b,e,v,n,t,s) 102{if(f.fbq)return;n=f.fbq=function(){n.callMethod? 103n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 104if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 105n.queue=[];t=b.createElement(e);t.async=!0; 106t.src=v;s=b.getElementsByTagName(e)[0]; 107s.parentNode.insertBefore(t,s)}(window, document,'script', 108'https://connect.facebook.net/en_GB/fbevents.js'); 109fbq('init', '
1092123049768236773
vendor: 32 bytes, lines 109-110
109'); 110fbq('track', 'PageView');
111</script>
111 112<noscript><img height="1" width="1" style="display:none" 113src="https://www.facebook.com/tr?id=2123049768236773&ev=PageView&noscript=1" 114/></noscript> 115<!-- End Meta Pixel Code --> 116 117<!-- Structured Data (Unified Organization/EducationalOrganization) -->
118<script type="application/ld+json"> 119{ 120 "@context": "https://schema.org", 121 "@type": ["Organization", "EducationalOrganization"], 122 "@id": "https://keelesu.com/#organization", 123 "name": "Keele University Students' Union", 124 "alternateName": "Keele SU", 125 "url": "https://keelesu.com/", 126 "logo": "https://keelesu.com/stylesheet/Brand/keelesu_rich_blue_logo_long.png", 127 "sameAs": [ 128 "https://www.facebook.com/keelestudentsunion/", 129 "https://www.instagram.com/keelesu/", 130 "https://www.tiktok.com/@keelesu", 131 "https://www.youtube.com/@KeeleSU", 132 "https://www.linkedin.com/company/keele-students-union/", 133 "https://linktr.ee/keelesu" 134 ], 135 "address": { 136 "@type": "PostalAddress", 137 "streetAddress": "Keele University", 138 "addressLocality": "Keele", 139 "addressRegion": "Staffordshire", 140 "postalCode": "ST5 5BJ", 141 "addressCountry": "GB" 142 }, 143 "contactPoint": { 144 "@type": "ContactPoint", 145 "telephone": "+44 1782 733700", 146 "email": "[email protected]", 147 "contactType": "Customer Service", 148 "availableLanguage": "English" 149 }, 150 "parentOrganization": { 151 "@type": "CollegeOrUniversity", 152 "name": "Keele University", 153 "url": "https://www.keele.ac.uk/" 154 } 155} 156</script>
156 157 158<!-- ========================= --> 159<!-- Structured Data: Consistent Author --> 160<!-- ========================= --> 161<!-- 162 This now correctly resolves: the "@id" above matches the "@id" this 163 block references below, so search engines can actually connect the 164 two entities. Previously the first schema had no "@id" at all, so the 165 link was broken. 166-->
167<script type="application/ld+json"> 168{ 169 "@context": "https://schema.org", 170 "@type": "Organization", 171 "@id": "https://keelesu.com/#author", 172 "name": "Keele SU Team", 173 "url": "https://keelesu.com/yoursu/aboutus/", 174 "parentOrganization": { 175 "@id": "https://keelesu.com/#organization" 176 } 177} 178</script>
178 179 180<!-- 181 Canonical link. 182 IMPORTANT: this is still a client-side fallback, kept only for parity 183 with the original snippet. A canonical tag this important should 184 ideally be rendered server-side directly into the HTML <head> by the 185 CMS/MSL template, since crawlers that don't execute JavaScript (and 186 even Googlebot, under rendering-budget constraints) may never see a 187 tag injected this way. Treat this script as a safety net, not the 188 primary mechanism, and prefer wiring MSL's own canonical/URL field 189 into a real <link rel="canonical"> tag if one exists. 190 191 Fixes applied vs the original inline script: 192 - Skips entirely if a canonical <link> already exists in <head>, to 193 avoid emitting a duplicate (which causes Google to ignore or 194 arbitrarily choose between them). 195 - Does NOT force a trailing slash onto paths that already end in a 196 file extension (.aspx, .pdf, .jpg, etc.) â this site's markup 197 (ctl00_basket_lnk... control IDs) indicates ASP.NET/MSL, where many 198 real URLs end in .aspx and would 404 if forced to end in "/". 199 - Uses the built-in URL API instead of ad hoc string/regex surgery to 200 avoid double slashes or malformed protocols. 201 - Deliberately still drops the query string, matching the original 202 behavior. If any pages rely on query strings for distinct content 203 (pagination, filters, search results), those pages need their own 204 canonical logic â this generic script should not run on them. 205-->
206<script> 207(function () { 208 if (document.querySelector('link[rel="canonical"]')) return; 209 210 var url = new URL(window.location.href); 211 var path = url.pathname; 212 213 // Only add a trailing slash if the last path segment has no file 214 // extension (i.e. looks like a directory/route, not a file). 215 var lastSegment = path.split('/').pop(); 216 var looksLikeFile = lastSegment.indexOf('.') !== -1; 217 218 if (!looksLikeFile && !path.endsWith('/')) { 219 path += '/'; 220 } 221 222 var canonicalURL = url.origin + path; 223 224 var link = document.createElement('link'); 225 link.rel = 'canonical'; 226 link.href = canonicalURL; 227 228 document.head.appendChild(link); 229})(); 230</script>
230 231 232<!-- Google tag (gtag.js) -->
vendor: 65 bytes, lines 232-233
232 233<script async src="https://www.googletagmanager.com/gtag/js?id=
233AW-18398694871
vendor: 13 bytes, line 233
233"></script>
234<script> 235
vendor: 138 bytes, lines 235-239
235window.dataLayer = window.dataLayer || []; 236 function gtag(){dataLayer.push(arguments);} 237 gtag('js', new Date()); 238 239 gtag('config', '
239AW-18398694871
vendor: 5 bytes, line 239
239');
240</script>
240 241 242 <!-- Google Tag Manager -->
243<script>
vendor: 331 bytes, lines 243-247
243(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 244new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 245j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 246'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 247})(window,document,'script','dataLayer','
247GTM-W8L44PJ6
vendor: 3 bytes, line 247
247');
247</script>
247 248<!-- End Google Tag Manager --> 249<!-- end of su-meta snippet --> 250 251 252<!-- start of novus-head snippet --> 253<!-- JavaScript Bundle with Popper -->
254<script defer src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.8/js/bootstrap.bundle.min.js" integrity="sha512-HvOjJrdwNpDbkGJIG2ZNqDlVqMo77qbs4Me4cah0HoDrfhrbA+8SBlZn1KrvAQw7cILLPFJvdwIgphzQmMm+Pw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
vendor: 2 bytes, line 254
254
255<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js" integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
255 256<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/7.0.1/css/all.min.css" integrity="sha512-2SwdPD6INVrV/lHTZbO2nodKhrnDdJK9/kg2XD1r9uGqPo1cUbujc+IYdlYdEErWNu69gVcYgdxlmVmzTWnetw==" crossorigin="anonymous" referrerpolicy="no-referrer" /> 257 258<!-- Selfâhosted fonts --> 259<style> 260/* Lato Light â Weight 300 */ 261@font-face { 262 font-family: "Lato"; 263 font-style: normal; 264 font-weight: 300; 265 font-display: swap; 266 src: url("https://keelesu.com/assets/site_resources/Lato-Light.woff2") format("woff2"); 267} 268 269/* League Spartan Bold â Weight 700 270@font-face { 271 font-family: "League Spartan"; 272 font-style: normal; 273 font-weight: 700; 274 font-display: swap; 275 src: url("https://keelesu.com/assets/site_resources/league-spartan-700.woff2") format("woff2"); 276} 277 278/* League Spartan Bold â Weight 700 */ 279@font-face { 280 font-family: "League Spartan"; 281 font-style: normal; 282 font-weight: 600; 283 font-display: swap; 284 src: url("https://keelesu.com/assets/site_resources/Spartan-Bold.ttf") format("ttf"); 285} 286</style> 287 288 289 290
291<script> 292 (function() { 293 const canonicalLink = document.createElement('link'); 294 canonicalLink.rel = 'canonical'; 295 canonicalLink.href = 'https://keelesu.com' + window.location.pathname; 296 document.head.appendChild(canonicalLink); 297 })(); 298</script>
298 299<!-- end of novus-head snippet --> 300 301<link href="//static-uk.ukmsl.net/8.90/skins/Controls/Rating.css" rel="stylesheet" type="text/css" media="all" /> 302<link href="//static-uk.ukmsl.net/8.90/skins/Controls/Breadcrumb.css" rel="stylesheet" type="text/css" media="all" /> 303<link href="//static-uk.ukmsl.net/8.90/skins/Controls/BasketLink.css" rel="stylesheet" type="text/css" media="all" /> 304<link href="//static-uk.ukmsl.net/8.90/skins/Common/News/NewsItem.css" rel="stylesheet" type="text/css" media="all" /> 305<link href="/stylesheet/novus/core.css?v=1405" rel="stylesheet" type="text/css" /> 306<link href="/stylesheet/novus/navigation.css?v=380" rel="stylesheet" type="text/css" /> 307<link href="/stylesheet/novus/bootstrap.css?v=152" rel="stylesheet" type="text/css" /> 308<link href="/pagestylesheet/news/article/advice/moving-into-rented-accommodation/styles.css?v=32" rel="stylesheet" type="text/css" media="all" /><!-- Global site tag (gtag.js) - Google Analytics -->
vendor: 65 bytes, lines 308-309
308 309<script async src="https://www.googletagmanager.com/gtag/js?id=
309G-6L5N1C41XV
vendor: 13 bytes, line 309
309"></script>
310<script> 311
vendor: 133 bytes, lines 311-314
311window.dataLayer = window.dataLayer || []; 312 function gtag(){dataLayer.push(arguments);} 313 gtag('js', new Date()); 314 gtag('config', '
314G-6L5N1C41XV
vendor: 5 bytes, line 314
314');
315</script>
315 316<link href="https://ajax.aspnetcdn.com/ajax/act/16_1_1/Content/AjaxControlToolkit/Styles/Backgrounds.min.css" type="text/css" rel="stylesheet" /></head> 317<body id="msl"> 318 <form method="post" action="./" id="aspnetForm"> 319<div class="aspNetHidden"> 320<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> 321<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> 322<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="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" /> 323</div> 324
325<script type="text/javascript"> 326//<![CDATA[ 327var theForm = document.forms['aspnetForm']; 328if (!theForm) { 329 theForm = document.aspnetForm; 330} 331function __doPostBack(eventTarget, eventArgument) { 332 if (!theForm.onsubmit || (theForm.onsubmit() != false)) { 333 theForm.__EVENTTARGET.value = eventTarget; 334 theForm.__EVENTARGUMENT.value = eventArgument; 335 theForm.submit(); 336 } 337} 338//]]> 339</script>
339 340 341
342<script src="https://ajax.aspnetcdn.com/ajax/4.6/1/WebForms.js" type="text/javascript"></script>
vendor: 2 bytes, line 342
342
343<script type="text/javascript"> 344//<![CDATA[ 345window.WebForm_PostBackOptions||document.write('
345<script type="text/javascript" src="/WebResource.axd?d=pynGkmcFUV13He1Qd6_TZA5Pm6HoQodZMTRqDRmkRQVgWn7tOgQlDkJJRuri60lphrOTNQ2&t=639190869332169432"><\/script>');//]]> 346</script>
346 347 348 349
350<script type="text/javascript"> 351//<![CDATA[ 352var __cultureInfo = {"name":"en-GB","numberFormat":{"CurrencyDecimalDigits":2,"CurrencyDecimalSeparator":".","IsReadOnly":true,"CurrencyGroupSizes":[3],"NumberGroupSizes":[3],"PercentGroupSizes":[3],"CurrencyGroupSeparator":",","CurrencySymbol":"£","NaNSymbol":"NaN","CurrencyNegativePattern":1,"NumberNegativePattern":1,"PercentPositivePattern":1,"PercentNegativePattern":1,"NegativeInfinitySymbol":"-â","NegativeSign":"-","NumberDecimalDigits":2,"NumberDecimalSeparator":".","NumberGroupSeparator":",","CurrencyPositivePattern":0,"PositiveInfinitySymbol":"â","PositiveSign":"+","PercentDecimalDigits":2,"PercentDecimalSeparator":".","PercentGroupSeparator":",","PercentSymbol":"%","PerMilleSymbol":"â°","NativeDigits":["0","1","2","3","4","5","6","7","8","9"],"DigitSubstitution":1},"dateTimeFormat":{"AMDesignator":"AM","Calendar":{"MinSupportedDateTime":"\/Date(-62135596800000)\/","MaxSupportedDateTime":"\/Date(253402300799999)\/","AlgorithmType":1,"CalendarType":1,"Eras":[1],"TwoDigitYearMax":2049,"IsReadOnly":true},"DateSeparator":"/","FirstDayOfWeek":1,"CalendarWeekRule":2,"FullDateTimePattern":"dd MMMM yyyy HH:mm:ss","LongDatePattern":"dd MMMM yyyy","LongTimePattern":"HH:mm:ss","MonthDayPattern":"d MMMM","PMDesignator":"PM","RFC1123Pattern":"ddd, dd MMM yyyy HH\u0027:\u0027mm\u0027:\u0027ss \u0027GMT\u0027","ShortDatePattern":"dd/MM/yyyy","ShortTimePattern":"HH:mm","SortableDateTimePattern":"yyyy\u0027-\u0027MM\u0027-\u0027dd\u0027T\u0027HH\u0027:\u0027mm\u0027:\u0027ss","TimeSeparator":":","UniversalSortableDateTimePattern":"yyyy\u0027-\u0027MM\u0027-\u0027dd HH\u0027:\u0027mm\u0027:\u0027ss\u0027Z\u0027","YearMonthPattern":"MMMM yyyy","AbbreviatedDayNames":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"ShortestDayNames":["Su","Mo","Tu","We","Th","Fr","Sa"],"DayNames":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"AbbreviatedMonthNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthNames":["January","February","March","April","May","June","July","August","September","October","November","December",""],"IsReadOnly":true,"NativeCalendarName":"Gregorian Calendar","AbbreviatedMonthGenitiveNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthGenitiveNames":["January","February","March","April","May","June","July","August","September","October","November","December",""]},"eras":[1,"A.D.",null,0]};//]]> 353</script>
353 354
355<script src="https://ajax.aspnetcdn.com/ajax/4.6/1/MicrosoftAjax.js" type="text/javascript"></script>
vendor: 2 bytes, line 355
355
356<script type="text/javascript"> 357//<![CDATA[ 358(window.Sys && Sys._Application && Sys.Observer)||document.write('
358<script type="text/javascript" src="/ScriptResource.axd?d=NJmAwtEo3Ipnlaxl6CMhvl6DVv6mN-f_T9GleXprYSdJat24ORSRp2MgHzKTv7RMDyjpmNp17kiLYmqNfTjOiH9ZwxJObGjuiB_78QzmIFo3Ld4bu-KqIXFacyxI7uv3b6pZYUkoIdYqrIdUk5FZxvfOUcU1&t=ffffffffbec1863d"><\/script>');//]]> 359</script>
359 360
361<script src="https://ajax.aspnetcdn.com/ajax/4.6/1/MicrosoftAjaxWebForms.js" type="text/javascript"></script>
vendor: 2 bytes, line 361
361
362<script type="text/javascript"> 363//<![CDATA[ 364(window.Sys && Sys.WebForms)||document.write('
364<script type="text/javascript" src="/ScriptResource.axd?d=dwY9oWetJoJoVpgL6Zq8OD0U5mUkqMO8C1rKJavZtjUNmyiUn5yn5Q5faVPjJjfK5g40WTCxLeZxWbrkdd5QwCtfh1f5-qqjMpEsCSjGTZF0ygktRjoYsDEZlkO91nN0JfonM1IFsswLnVxGcfk9jAVQXU01&t=ffffffffbec1863d"><\/script>');//]]> 365</script>
365 366
367<script src="/ScriptResource.axd?d=eE6V8nDbUVn0gtG6hKNX_LLQqoZQWKjprCuJ2vwzd_-xhZFvzpdYN1HvhwR0-7B3Hqr_wnpR4EvHv5NJ4jwU11WO1U1O0nVEyirHrhhlLQEDlf9H0&t=ffffffffcfeeeb28" type="text/javascript"></script>
vendor: 2 bytes, line 367
367
368<script src="/ScriptResource.axd?d=jwf4VSQi7LeShc44FJ-gARjDXdRKLJ0JZikbIjkiK3K0aaxYQSMJL1hDW9iIpz4d1WFWDCbAiD9B3VHwW6tqUwNGdV3kp_AG2p5kOIY6k_rxaK250&t=ffffffffcfeeeb28" type="text/javascript"></script>
vendor: 2 bytes, line 368
368
369<script src="/ScriptResource.axd?d=mcAASOSteirJeuV-3by3UZOJtNruZsYIpTl8r1JpV4Mxsm3aAcpK9oHAucdyYL5zoo7lY1z6v9MO3LGygzXs3875Vgs1&t=ffffffffcfeeeb28" type="text/javascript"></script>
vendor: 2 bytes, line 369
369
370<script src="/ScriptResource.axd?d=nai7mGcYyE2dix_TwveLDYL6zE7N0iFboor6G0PzwTNYoKCmRJp7G6GsgADFLQe-TvHvRgQwfryZvMJEhVPvVEiPTySXSzn0vv3Ll-2aQIKMdOQ_0&t=ffffffffcfeeeb28" type="text/javascript"></script>
vendor: 2 bytes, line 370
370
371<script src="/ScriptResource.axd?d=LQ1q2RBSthBAZhliMjtG__vRwJ93k2eD19a_JJXGKRDTHvOAAW2wwecea6fS5HwAepeCVI-bbRe5xVREnwYqnWFMXAEENJ0RMsvTKAZr0JylFOVo0&t=ffffffffcfeeeb28" type="text/javascript"></script>
vendor: 2 bytes, line 371
371
372<script src="/ScriptResource.axd?d=HEFpVKbnoeQjkjHkFKu3ML8tJgN5292M-pV6h8xUVIQRVKlVNhb9ibhumY7Kf2uWy45yIaQZvMq7ZeDVyrRrFi5BZy-QEFaO24SiZgnPYRGIetFV0&t=ffffffffcfeeeb28" type="text/javascript"></script>
vendor: 2 bytes, line 372
372
373<script src="/ScriptResource.axd?d=VOYD8Xe7kQA0lniBYXVpAu4G4933rItAj8eY7-OBKXe4e9lgtw3xbaeszqXwGVNyr8kL0POPWBOe-oqih73IXmtyNEbLZa4IbtJ4eD7To6boIW8b0&t=ffffffffcfeeeb28" type="text/javascript"></script>
vendor: 2 bytes, line 373
373
374<script src="/ScriptResource.axd?d=GhMTAxdxy2a-Wl-WY5EfmRJNDAJcq3V-qsyRRGkeDIYm2HxZX9jD67pk_5L2kxRRmr9s-ixs_crdjcJrh0vf7BShBEOdQK_ooMIH6hRMeFQsXz_Q0&t=ffffffffcfeeeb28" type="text/javascript"></script>
374 375<div class="aspNetHidden"> 376 377 <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="F856B7D8" /> 378 <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="fkhSf1NhSvjEurIehEfVq2RaePfqx+l8AAvK2g9NubZ7wLtwrUXih717APOo5vl9+RzfWSWwz9DAJgrrRYH9+DdlpOkMJscDs+UALWK5PjXqvoM7i+OfCy0HkJdTxGjrAzEJoYSpUBBrSxwZc1PhoBxTqkU=" /> 379</div> 380 381 382 383 384 385 386 387 388 <div id="ctl00_pnlCatchEnter" class="CatchEnter" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'ctl00_btnCatchEnter')"> 389 390 <input type="submit" name="ctl00$btnCatchEnter" value="" onclick="javascript:return false;" id="ctl00_btnCatchEnter" style="display:none;" /> 391 392</div> 393 394
394<script type="text/javascript"> 395//<![CDATA[ 396Sys.WebForms.PageRequestManager._initialize('ctl00$ctl04', 'aspnetForm', ['tctl00$Main$RatingCtl1$upRating',''], [], [], 90, 'ctl00'); 397//]]> 398</script>
398 399 400 401 <div id="skin_novus" class="page_news page_article"> 402 403<!-- start of novus-header-redesign snippet --> 404<header class="slim no-padding"> 405 <div class="container"> 406 <div class="row"> 407 <div class="col-sm-4 hidden-sm-down branding no-padding "> 408 <a href="/"><img src="https://keelesu.com/stylesheet/Brand/navbar-logo.png" alt="KeeleSU Logo" URL='/' width="120" height="85"></a> 409 <a class="toggle-left dsk-navigation-toggle" id="navMenu" href="https://keelesu.com/" aria-expanded="false" aria-label="Open menu"> 410 <i class="nav-menu-icon fa-solid fa-bars" aria-hidden="true"></i> 411 <span class="nav-menu-label">Menu</span> 412 </a> 413 414 </div> 415 <div class="controls col-12 col-md-8 no-padding"> 416 <div id="search-form" class="search-form d-none"> 417 418<div id="search"> 419 <div role="search" id="site-search" class="mslwidget"> 420 <div id="ctl00_search_pnlSearch" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'ctl00_search_btnSubmit')"> 421 422 <label for="ctl00_search_txtSearchStr" id="ctl00_search_lblSearch" class="msl-visually-hidden">Search</label> 423 <input name="ctl00$search$txtSearchStr" type="text" id="ctl00_search_txtSearchStr" class="textbox" placeholder="Search text..." /> 424 425 <input type="submit" name="ctl00$search$btnSubmit" value="Search" id="ctl00_search_btnSubmit" class="button" /> 426 427</div> 428 </div> 429</div> 430</MSL:search> 431 </div> 432 <div id="login-controls"> 433 <a id="ctl00_ctl31_lnkLogin" class="msl-loginbutton msl-loggedout " href="/login/">Log in</a> 434</MSL:Loginbutton> 435 </div> 436 <div class="admin-links desktop-admin-links"> 437 <ul class="nav-icons icons"> 438 <li> 439 440 441<div id="msl-basket-summary"> 442 <a title="Review Basket" class="msl-basket-link" href="/shop/basket/">Basket</a> 443 <div class="msl-basket-summary-items"> 444 445 <div class="msl-basket-itemcount-container"> 446 447 <span class="msl-basket-noitems-text"></span> 448 449 <div class="msl-basket-itemcount">0</div> 450 451 </div> 452 453 454 455 456 457 </div> 458</div></MSL:BasketLink> 459 <div class="hidden-xl-down"> 460 </div> 461 </li> 462 <!-- CHANGED: was class="fa-solid fa-user"aria-hidden="true" - missing space 463 meant the class and aria-hidden attributes ran together. Harmless in 464 most browsers' lenient parsing, but invalid HTML; fixed the spacing. --> 465 <li class="profile"><a href="https://keelesu.com/profile/"><i class="fa-solid fa-user" aria-hidden="true"></i><span class="hidden-xl-down">My Account</span></a></li> 466 <li class="admin-container"> 467 <a href="https://keelesu.com/admin/" class="notext" id="admin-trigger"><i class="fas fa-cog" aria-hidden="true"></i><span class="hidden-xl-down">Admin Panel</span></a> 468 469 </li> 470 <li> <a class="searchbar" role="button" aria-label="Site Search" href="https://keelesu.com/search/"> <i class="fas fa-search fa-inverse" aria-hidden="true"></i><span class="hidden-xl-down">Site Search</span> </a> </li> 471 </ul> 472 <div class="dropdown-menu"> 473 </MSL:ControlPanel> 474 </MSL:Admin> 475 </div> 476 </div> 477 </div> 478 </div> 479 </div> 480 <div class="container mainnav dsk-nav-c"> 481 <div class="row"> 482 <div class="col-xl-12"> 483 </div> 484 <div class="mobile-admin-links"> 485 <div id="login-controls"> 486 <a id="ctl00_ctl37_lnkLogin" class="msl-loginbutton msl-loggedout " href="/login/">Log in</a> 487</MSL:Loginbutton>
487 488 </div> 489</div> 490 <div class="admin-links mobile-admin-links"> 491 <ul class="nav-icons icons"> 492 <li> 493 494 495<div id="msl-basket-summary"> 496 <a title="Review Basket" class="msl-basket-link" href="/shop/basket/">Basket</a> 497 <div class="msl-basket-summary-items"> 498 499 <div class="msl-basket-itemcount-container"> 500 501 <span class="msl-basket-noitems-text"></span> 502 503 <div class="msl-basket-itemcount">0</div> 504 505 </div> 506 507 508 509 510 511 </div> 512</div></MSL:BasketLink> 513 <div class="hidden-xl-down"> 514 </div> 515 </li> 516 <!-- CHANGED: was class="fa-solid fa-user"aria-hidden="true" - missing space 517 meant the class and aria-hidden attributes ran together. Harmless in 518 most browsers' lenient parsing, but invalid HTML; fixed the spacing. --> 519 <li class="profile"><a href="https://keelesu.com/profile/"><i class="fa-solid fa-user" aria-hidden="true"></i><span class="hidden-xl-down">My Account</span></a></li> 520 <li class="admin-container"> 521 <a href="https://keelesu.com/admin/" class="notext" id="admin-trigger"><i class="fas fa-cog" aria-hidden="true"></i><span class="hidden-xl-down">Admin Panel</span></a> 522 523 </li> 524 <li> <a class="searchbar" role="button" aria-label="Site Search" href="https://keelesu.com/search/"> <i class="fas fa-search fa-inverse" aria-hidden="true"></i><span class="hidden-xl-down">Site Search</span> </a> </li> 525 </ul> 526 <div class="dropdown-menu"> 527 </MSL:ControlPanel> 528 </MSL:Admin> 529 </div> 530 </div> 531 <div aria-label="Main Navigation" id="topnav" class="mslwidget dsk-nav"> 532<ul class="msl_navbar"> <li><a href="/whatson/" class="msl-itemhassubnav"><span class="nav-text">Events and Gigs</span></a> 533<ul class="level_1 subnav_nav_whatson_"> <li><a href="https://keelesu.com/gigs/" class="nav_whatson_gigs_">Public Events & Gigs - Open to Everyone</a></li> 534 <li><a href="/whatson/venueinfo/" class="nav_whatson_venueinfo_">Venue Info</a></li> 535</ul> 536</li> 537 <li><a href="/yourunion/" class="msl-itemhassubnav"><span class="nav-text">Student Voice</span></a> 538<ul class="level_1 subnav_nav_yourunion_"> <li><a href="/yourunion/campaigns/" class="nav_yourunion_campaigns_">Campaigns</a></li> 539 <li><a href="/yourunion/elections/" class="nav_yourunion_elections_">Elections</a></li> 540 <li><a href="/yourunion/ideas/" class="nav_yourunion_ideas_">Have Your Say - Your Ideas</a></li> 541 <li><a href="/yourunion/networks/" class="nav_yourunion_networks_">Student Networks</a></li> 542 <li><a href="/yourunion/uniondelegates/" class="nav_yourunion_uniondelegates_">Union Delegates</a></li> 543 <li><a href="/yourunion/voicereps/" class="nav_yourunion_voicereps_">Voice Reps</a></li> 544 <li><a href="/yourunion/electedofficers/" class="nav_yourunion_electedofficers_">Your Current Elected Officers</a></li> 545</ul> 546</li> 547 <li><a href="/advice/" class="msl-itemhassubnav"><span class="nav-text">Advice and Support</span></a> 548<ul class="level_1 subnav_nav_advice_"> <li><a href="/advice/aboutask/" class="nav_advice_aboutask_">About ASK</a></li> 549 <li><a href="/advice/academic/" class="nav_advice_academic_">Academic</a></li> 550 <li><a href="/advice/complaints/" class="nav_advice_complaints_">Complaints</a></li> 551 <li><a href="/advice/discipline/" class="nav_advice_discipline_">Discipline</a></li> 552 <li><a href="/advice/employment/" class="nav_advice_employment_">Employment</a></li> 553 <li><a href="/advice/family/" class="nav_advice_family_">Family</a></li> 554 <li><a href="/advice/graduating/" class="nav_advice_graduating_">Graduate Guide</a></li> 555 <li><a href="/advice/accommodation/" class="nav_advice_accommodation_">Housing</a></li> 556 <li><a href="/advice/international/" class="nav_advice_international_">International Students</a></li> 557 <li><a href="/advice/legal/" class="nav_advice_legal_">Legal</a></li> 558 <li><a href="/advice/finance/" class="nav_advice_finance_">Money</a></li> 559 <li><a href="/advice/wellbeing/" class="nav_advice_wellbeing_">Wellbeing</a></li> 560</ul> 561</li> 562 <li><a href="/activities/" class="msl-itemhassubnav"><span class="nav-text">Get Involved</span></a> 563<ul class="level_1 subnav_nav_activities_"> <li><a href="/activities/clubs-societies/" class="nav_activities_clubs-societies_">Societies</a></li> 564 <li><a href="/activities/au/" class="nav_activities_au_">Sport Clubs</a></li> 565 <li><a href="/activities/volunteering/" class="nav_activities_volunteering_">Volunteering</a></li> 566</ul> 567</li> 568 <li><a href="/shopsandservices/" class="msl-itemhassubnav"><span class="nav-text">Shops and Services</span></a> 569<ul class="level_1 subnav_nav_shopsandservices_"> <li><a href="/shopsandservices/bookinghub/" class="nav_shopsandservices_bookinghub_">Booking Hub</a></li> 570 <li><a href="/shopsandservices/printshop/" class="nav_shopsandservices_printshop_">Keele Print House</a></li> 571 <li><a href="/shopsandservices/vehiclehire/" class="nav_shopsandservices_vehiclehire_">Minibus Bookings</a></li> 572 <li><a href="/shopsandservices/shop/" class="nav_shopsandservices_shop_">Online Shop</a></li> 573 <li><a href="/shopsandservices/student-discounts/" class="nav_shopsandservices_student-discounts_">Student Discounts</a></li> 574 <li><a href="/shopsandservices/venues/" class="nav_shopsandservices_venues_">Venues & Outlets</a></li> 575</ul> 576</li> 577 <li><a href="/yoursu/" class="msl-itemhassubnav"><span class="nav-text">Your Union</span></a> 578<ul class="level_1 subnav_nav_yoursu_"> <li><a href="/yoursu/aboutus/" class="nav_yoursu_aboutus_">About your SU</a></li> 579 <li><a href="/yoursu/contact/" class="nav_yoursu_contact_">Contact Us</a></li> 580 <li><a href="/yoursu/feedback/" class="nav_yoursu_feedback_">Feedback & Complaints</a></li> 581 <li><a href="/yoursu/sustainability/" class="nav_yoursu_sustainability_">Sustainability & Environmental Responsibility</a></li> 582 <li><a href="https://jobs.keelesu.com" class="nav_yoursu_workwithus_">Work with Us</a></li> 583 <li><a href="/yoursu/advertise/" class="nav_yoursu_advertise_">Advertise with us!</a></li> 584</ul> 585</li> 586 <li><a href="/freshers/" class="fresherstab"><span class="nav-text">
586Freshers 2026 🎉</span></a></li> 587</ul> 588 589</div></MSL:Navigation> 590 </div> 591 <!--end 12--> 592 </div> 593 <!--end row--> 594 </div> 595</header> 596<div class="adminmenu"> 597 <div class="dropdown-menu"> 598 </MSL:ControlPanel> 599 </MSL:Admin> 600 <!-- Mobile copy of admin links so MSL links appear inside the nav pop-up --> 601 <div class="admin-links mobile-admin-links"> 602 <ul class="nav-icons icons"> 603 <li> 604 605 606<div id="msl-basket-summary"> 607 <a title="Review Basket" class="msl-basket-link" href="/shop/basket/">Basket</a> 608 <div class="msl-basket-summary-items"> 609 610 <div class="msl-basket-itemcount-container"> 611 612 <span class="msl-basket-noitems-text"></span> 613 614 <div class="msl-basket-itemcount">0</div> 615 616 </div> 617 618 619 620 621 622 </div> 623</div></MSL:BasketLink> 624 </li> 625 <li class="profile"><a href="https://keelesu.com/profile/"><i class="fa-solid fa-user" aria-hidden="true"></i><span>My Account</span></a></li> 626 <li class="admin-container"><a href="https://keelesu.com/admin/" class="notext" id="admin-trigger-mobile"><i class="fas fa-cog" aria-hidden="true"></i><span>Admin Panel</span></a></li> 627 <li><a class="searchbar" role="button" aria-label="Site Search" href="https://keelesu.com/search/"><i class="fas fa-search fa-inverse" aria-hidden="true"></i><span>Site Search</span></a></li> 628 </ul> 629 </div> 630 </div> 631</div> 632<!-- feedback form and button --> 633<!-- 634<iframe id="feedbackForm" width="640px" height="480px" src="https://forms.office.com/Pages/ResponsePage.aspx?id=7vO7K2i2-U2wY1mJRcPUZnsNe7WejyZOv7GKwMl3GbdUMVVKMDNHNVpPSVJIQVVFT0Q5NjZHRjRLSS4u&embed=true" frameborder="0" marginwidth="0" marginheight="0" style="border: none; max-width:100%; max-height:100vh" allowfullscreen=""> </iframe> 635<div id="FBBS" class="row"> 636<div id="fbButton" onclick="formToggle()">How did we do?<br />Give your Feedback here!</div> 637<div id="closeFB" onclick="hideButton()">✖</div> 638</div>-->
639<script defer> 640 document.addEventListener("DOMContentLoaded", function () { 641 let searchVisible = false; 642 const searchForm = document.getElementById("search-form"); 643 const searchBars = document.querySelectorAll("a.searchbar"); 644 const navMenu = document.getElementById("navMenu"); 645 646 function toggleSearch() { 647 if (!searchForm) return; 648 if (!searchVisible) { 649 searchForm.classList.remove("d-none"); 650 searchForm.scrollIntoView({ behavior: "smooth" }); 651 searchVisible = true; 652 } else { 653 searchForm.classList.add("d-none"); 654 searchVisible = false; 655 } 656 } 657 658 function hideSearch() { 659 if (searchVisible && searchForm) { 660 searchForm.classList.add("d-none"); 661 searchVisible = false; 662 } 663 } 664 665 // Keep the mobile search links as real navigation to the search page. 666 // Desktop still opens the inline search form. 667 if (searchBars && searchBars.length) { 668 searchBars.forEach(function (searchBar) { 669 searchBar.addEventListener("click", function (e) { 670 if (window.innerWidth <= 767) return; 671 e.preventDefault(); 672 toggleSearch(); 673 }); 674 }); 675 } 676 677 if (navMenu) { 678 const navMenuIcon = navMenu.querySelector(".nav-menu-icon"); 679 const navMenuLabel = navMenu.querySelector(".nav-menu-label"); 680 const mainNav = document.querySelector(".mainnav"); 681 682 function setNavMenuState(isOpen) { 683 navMenu.classList.toggle("is-open", isOpen); 684 navMenu.setAttribute("aria-expanded", String(isOpen)); 685 navMenu.setAttribute("aria-label", isOpen ? "Close menu" : "Open menu"); 686 687 if (navMenuIcon) { 688 navMenuIcon.classList.remove("fa-bars", "fa-xmark"); 689 navMenuIcon.classList.add(isOpen ? "fa-xmark" : "fa-bars"); 690 } 691 692 if (navMenuLabel) { 693 navMenuLabel.textContent = isOpen ? "Close" : "Menu"; 694 } 695 696 if (mainNav) { 697 mainNav.classList.toggle("open", isOpen); 698 mainNav.style.display = isOpen ? "block" : "none"; 699 } 700 } 701 702 setNavMenuState(false); 703 704 navMenu.addEventListener("click", function (e) { 705 e.preventDefault(); 706 const isOpen = navMenu.classList.toggle("is-open"); 707 setNavMenuState(isOpen); 708 hideSearch(); 709 // also close admin menus when opening nav 710 closeAllAdmin(); 711 }); 712 } 713 714 // Admin menu handling (desktop and mobile) 715 function toggleAdminMenu(trigger) { 716 const container = trigger.closest(".admin-links") || document.querySelector('.adminmenu'); 717 if (!container) return; 718 const dropdown = container.querySelector(".dropdown-menu"); 719 if (!dropdown) return; 720 const isOpen = dropdown.classList.contains("show"); 721 closeAllAdmin(); 722 if (!isOpen) { 723 dropdown.classList.add("show"); 724 } 725 } 726 727 function closeAllAdmin() { 728 document.querySelectorAll(".dropdown-menu").forEach(function (d) { 729 d.classList.remove("show"); 730 }); 731 } 732 733 // Attach handlers to admin triggers (covers #admin-trigger, #admin-trigger-mobile and any .admin-container anchors) 734 const adminTriggers = Array.from(document.querySelectorAll("a#admin-trigger, a#admin-trigger-mobile, .admin-container > a")); 735 adminTriggers.forEach(function (t) { 736 t.addEventListener("click", function (e) { 737 e.preventDefault(); 738 hideSearch(); 739 toggleAdminMenu(t); 740 }); 741 }); 742 743 // Close menus/search when clicking outside 744 document.addEventListener("click", function (e) { 745 const clickedInsideAdmin = e.target.closest(".admin-links, .adminmenu, a#admin-trigger, a#admin-trigger-mobile"); 746 const clickedSearch = e.target.closest("#search-form, a.searchbar"); 747 if (!clickedInsideAdmin) { 748 closeAllAdmin(); 749 } 750 if (!clickedSearch) { 751 hideSearch(); 752 } 753 }); 754 755 // Close on Escape key 756 document.addEventListener("keydown", function (e) { 757 if (e.key === "Escape") { 758 hideSearch(); 759 closeAllAdmin(); 760 } 761 });
762 }); 763</script>
763 764
765<script> 766document.addEventListener("DOMContentLoaded", function () { 767 const triggers = document.querySelectorAll( 768 "#admin-trigger, #admin-trigger-mobile" 769 ); 770 771 const adminMenu = document.querySelector(".adminmenu"); 772 const dropdown = adminMenu?.querySelector(".dropdown-menu"); 773 774 if (!adminMenu || !dropdown) return; 775 776 triggers.forEach(trigger => { 777 trigger.addEventListener("click", function (e) { 778 if (window.innerWidth > 767) return; 779 780 e.preventDefault(); 781 782 const isHidden = 783 adminMenu.style.display === "none" || 784 adminMenu.style.display === ""; 785 786 if (isHidden) { 787 adminMenu.style.display = "block"; 788 dropdown.style.display = "contents"; 789 } else { 790 adminMenu.style.display = "none"; 791 dropdown.style.display = "none"; 792 } 793 }); 794 }); 795}); 796</script>
796 797<!-- end of novus-header-redesign snippet --> 798 799<div class="container-fluid" role="main"> 800 <div class="row"> 801 <div class="col-xl-12 no-padding"> 802 <section class="main"> 803 <div class="container no-padding"> 804 <div class="wht-container"> 805 <div class="row"> 806 <div class="col-xl-12"> 807 <div id="title-section"> 808 <div class="mslwidget"> 809Moving Into Rented Accommodation 810</div> 811 </div> 812 <div class="row breadcrumbs"><div class="span12"> 813<nav id="breadcrumb" class="msl-breadcrumb" aria-label="Breadcrumb"> 814 815 <ul class="breadcrumb"><li><a href="/news/7171/">Advice & Support</a><span class="msl-breadcrumb-separator" aria-hidden="true">></span></li><li class="current-page" aria-current="page"><span>Moving Into Rented Accommodation</span></li></ul> 816 817</nav></div></div> 818 <div class="row"> 819 <div class="col-xl-12"> 820 821 <p> 822 823 824<div id="news"> 825 826 <h1>Moving Into Rented Accommodation</h1> 827 828 829 <p class="byline">Charlotte Jones</p> 830 831 832 833 <p class="msl-article-leader">Following these steps could save you from future problems!</p> 834 835 836 <div class="msl-tags"><span class="msl-tag">homeslider</span></div> 837 838 839 840 <div class="news_rating"> 841 842 843<div class="msl-rating"> 844 845 <div id="ctl00_Main_RatingCtl1_upRating"> 846 847 848 <div dir="ltr"> 849 <a id="ctl00_Main_RatingCtl1_rptRating_ctl01_lb1" title="1" class="aspNetDisabled msl-icon msl_star" style="float:left;"> </a> 850 851 <a id="ctl00_Main_RatingCtl1_rptRating_ctl02_lb1" title="2" class="aspNetDisabled msl-icon msl_star" style="float:left;"> </a> 852 853 <a id="ctl00_Main_RatingCtl1_rptRating_ctl03_lb1" title="3" class="aspNetDisabled msl-icon msl_star" style="float:left;"> </a> 854 855 <a id="ctl00_Main_RatingCtl1_rptRating_ctl04_lb1" title="4" class="aspNetDisabled msl-icon msl_star" style="float:left;"> </a> 856 857 <a id="ctl00_Main_RatingCtl1_rptRating_ctl05_lb1" title="5" class="aspNetDisabled msl-icon msl_star" style="float:left;"> </a> 858 </div> 859 860 <span id="img" style="display:none;" class="msl-icon msl_updating msl-icon-16"></span> 861 <span id="txt" class="msl-rating-text">No ratings yet. Log in to rate.</span> 862 863 864</div> 865 866 867 868</div> 869 870 </div> 871 872 <div class="news_image"> 873 <img id="ctl00_Main_imgImage" class="main_image" src="../../../../asset/News/7171/Moving-in.png?thumbnail_width=200&thumbnail_height=160&resize_type=ResizeFitAllFill" alt="Students unpacking boxes" /> 874 <span class="news_caption"></span> 875 876 </div> 877 878 <div class="news_body"> 879 <div style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;" data-pasted="true"><p><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">Moving into a new home is exciting, but there are a few important things to do when you first move in. Taking the time to follow these steps can help you avoid problems with your landlord, bills, and your deposit later on.</span></p><table style="width: 50%; margin: auto; border-width: 0px; border-style: inset; height: 100px;"><colgroup><col></colgroup><tbody><tr><td style="background-color: rgb(238, 232, 247); text-align: left;"><h2 data-pasted="true"><span style="font-size: 24px;">Moving-In Checklist</span></h2><p><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">â Check your deposit is protected<br />â Take photos and complete an inventory<br />â Confirm your council tax exemption<br />â Record meter readings<br />â Arrange contents insurance</span></p><br /></td></tr></tbody></table><h2 data-pasted="true"><br /></h2><h2><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;"><br /></span></h2><h2><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif; font-size: 24px;">Make Sure Your Deposit Is Protected</span></h2><p><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">Most private landlords must protect your deposit in a government-approved tenancy deposit protection scheme and provide you with information about the scheme within 30 days.</span></p><p><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">These schemes exist to make sure landlords cannot unfairly keep your deposit at the end of your tenancy.</span></p><p><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">If you're unsure whether your deposit has been protected, you can check with the deposit protection schemes directly:</span></p><ul><li style="box-sizing: inherit; scrollbar-color: oklab(0.21013 0.0460792 -0.0731735) oklab(0.924716 0.0054621 -0.00859057); scrollbar-width: thin; animation: auto ease 0s 1 normal none running none !important; transition: none !important; scroll-behavior: auto !important; color: rgb(41, 105, 176); font-family: Verdana, Geneva, sans-serif;" data-pasted="true"><p style="box-sizing: inherit; animation: auto ease 0s 1 normal none running none !important; transition: none !important; scroll-behavior: auto !important; scrollbar-color: oklab(0.21013 0.0460792 -0.0731735) oklab(0.924716 0.0054621 -0.00859057); scrollbar-width: thin; margin: 0px;"><a href="http://www.depositprotection.com/" rel="external noopener" target="_blank" style="box-sizing: inherit; scrollbar-color: oklab(0.21013 0.0460792 -0.0731735) oklab(0.924716 0.0054621 -0.00859057); scrollbar-width: thin; color: rgb(41, 105, 176); text-decoration: none; background-color: transparent; touch-action: manipulation; animation: auto ease 0s 1 normal none running none !important; transition: none !important; scroll-behavior: auto !important; font-family: Verdana, Geneva, sans-serif;">Deposit Protection Service</a></p></li><li style="box-sizing: inherit; scrollbar-color: oklab(0.21013 0.0460792 -0.0731735) oklab(0.924716 0.0054621 -0.00859057); scrollbar-width: thin; animation: auto ease 0s 1 normal none running none !important; transition: none !important; scroll-behavior: auto !important; color: rgb(41, 105, 176); font-family: Verdana, Geneva, sans-serif;"><p style="box-sizing: inherit; animation: auto ease 0s 1 normal none running none !important; transition: none !important; scroll-behavior: auto !important; scrollbar-color: oklab(0.21013 0.0460792 -0.0731735) oklab(0.924716 0.0054621 -0.00859057); scrollbar-width: thin; margin: 0px;"><a href="https://www.mydeposits.co.uk/" rel="external noopener" target="_blank" style="box-sizing: inherit; scrollbar-color: oklab(0.21013 0.0460792 -0.0731735) oklab(0.924716 0.0054621 -0.00859057); scrollbar-width: thin; color: rgb(41, 105, 176); text-decoration: none; background-color: transparent; touch-action: manipulation; font-family: Verdana, Geneva, sans-serif; animation: auto ease 0s 1 normal none running none !important; transition: none !important; scroll-behavior: auto !important;">MyDeposits</a></p></li><li style="box-sizing: inherit; scrollbar-color: oklab(0.21013 0.0460792 -0.0731735) oklab(0.924716 0.0054621 -0.00859057); scrollbar-width: thin; animation: auto ease 0s 1 normal none running none !important; transition: none !important; scroll-behavior: auto !important; color: rgb(41, 105, 176); font-family: Verdana, Geneva, sans-serif;"><p style="box-sizing: inherit; animation: auto ease 0s 1 normal none running none !important; transition: none !important; scroll-behavior: auto !important; scrollbar-color: oklab(0.21013 0.0460792 -0.0731735) oklab(0.924716 0.0054621 -0.00859057); scrollbar-width: thin; margin: 0px;"><a href="https://www.tenancydepositscheme.com/" target="_blank" rel="noopener" style="box-sizing: inherit; scrollbar-color: oklab(0.21013 0.0460792 -0.0731735) oklab(0.924716 0.0054621 -0.00859057); scrollbar-width: thin; color: rgb(41, 105, 176); text-decoration: none; background-color: transparent; touch-action: manipulation; font-family: Verdana, Geneva, sans-serif; animation: auto ease 0s 1 normal none running none !important; transition: none !important; scroll-behavior: auto !important;">Tenancy Deposit Scheme</a></p></li></ul><p><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">You can also use </span><span style="color: rgb(41, 105, 176); font-family: Arial, Helvetica, sans-serif;"><a href="https://england.shelter.org.uk/housing_advice/tenancy_deposits/check_your_tenancy_deposit_is_protected" style="color: rgb(41, 105, 176);">Shelter's deposit checke</a><a href="https://england.shelter.org.uk/housing_advice/tenancy_deposits/check_your_tenancy_deposit_is_protected" style="color: rgb(41, 105, 176);">r</a></span><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;"> for guidance.</span></p><p><br /></p><div style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;" data-pasted="true"><h2 data-pasted="true"><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif; font-size: 24px;">Get Proof of the Property's Condition</span></h2><p><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">This is one of the most important things you can do when moving in.</span></p><p><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">Make sure an inventory is completed and take clear photos of every room as soon as you move in. Pay particular attention to any existing damage, marks, stains, or broken items. This evidence can help protect you if there is a dispute about your deposit when you move out. Shelter has </span><span style="color: rgb(41, 105, 176); font-family: Arial, Helvetica, sans-serif;"><a href="https://england.shelter.org.uk/housing_advice/private_renting/how_to_check_and_agree_an_inventory" style="color: rgb(41, 105, 176);">more information about inventories</a></span><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;"> on their website.</span></p><p><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">If your landlord does not provide an inventory, create your own and ask your landlord and all tenants to sign it. If your landlord is unwilling to sign, consider asking an independent witness to do so.</span></p><p><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">If you discover any damage or disrepair, report it to your landlord in writing straight away. This creates a record of the issue and helps ensure you are not held responsible for it later.</span></p></div><div style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><h2><br /></h2><h2 data-pasted="true"><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif; font-size: 24px;">
879Check Your Council Tax Status</span></h2><p><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">If everyone living in the property is a full-time student, the household should be exempt from council tax.</span></p><p><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">The University provides information about enrolled students to the local councils covering:</span></p><ul><li style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">Newcastle-under-Lyme</li><li style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">Stoke-on-Trent</li><li style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">Cheshire East</li></ul><p><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">Even so, it's a good idea to contact your local council and confirm that your exemption has been applied correctly.</span></p><p><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">If you're living outside these areas, or if there is a problem with your exemption, you can download a student status letter through eVision by selecting:</span></p><p><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;"><strong>Common Actions → My Status Letter</strong></span></p><p><br /></p></div><table style="width: 50%; margin: auto; text-align: left; border-width: 3px; border-style: inset; height: 120px;" data-pasted="true"><tbody><tr><td style="background-color: rgb(238, 232, 247); vertical-align: middle; text-align: left;"><div style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;" data-pasted="true"><span style="font-size: 30px;">â ï¸</span><strong data-pasted="true"><span style="font-size: 24px;">Don't Ignore Council Letters</span></strong><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif; font-size: 18px;"><br /><br /></span></div><div style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">Even if you're exempt from council tax, don't ignore letters, emails, or bills from the council. Responding quickly can help you avoid unnecessary charges, enforcement action, or additional costs.</div></td></tr></tbody></table><div style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><br /><h2><br /></h2><h2 data-pasted="true"><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif; font-size: 24px;">Read the Meters</span></h2><p><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">If you are responsible for paying utility bills, take gas, electricity, and water meter readings as soon as you move in.</span></p><p><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">Providing opening readings to suppliers helps ensure that you are only charged for the energy and water you use, rather than the previous tenants' usage.</span></p><p><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">It's also worth agreeing with your housemates:</span></p><ul><li style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">How bills will be shared</li><li style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">Who will manage the accounts</li><li style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">How payments will be collected</li></ul><p><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">Having these conversations early can prevent disagreements later.</span></p><p><br /></p><h2><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif; font-size: 24px;">Protect Your Belongings</span></h2><p><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">Your landlord's insurance usually covers the building, not your personal belongings.
879If your possessions are stolen, damaged, or destroyed, you may not be covered unless you have your own contents insurance.</span></p><p><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">Consider whether contents insurance is right for you, particularly if you own expensive items such as laptops, tablets, bicycles, or other valuable equipment.</span></p><p><br /></p><h2 data-pasted="true"><span style="font-size: 24px; font-family: Arial, Helvetica, sans-serif; color: rgb(40, 50, 78);">Need Advice?</span></h2><p><span style="color: rgb(40, 50, 78); font-family: Arial, Helvetica, sans-serif;">If you're unsure about your tenancy, deposit protection, council tax, or any housing-related issue, <span style="font-family: Arial, Helvetica, sans-serif; color: rgb(40, 50, 78);" data-pasted="true"><span style="color: rgb(41, 105, 176); font-size: 14px;" data-pasted="true"><a href="https://keelesu.com/advice/contact/" style="font-size: 14px;">contact ASK</a></span></span>. We're here to help you understand your rights and resolve problems before they become bigger issues.</span></p></div></div></div></div><h2><br /></h2> 880 </div> 881 882 <div id="news_comments"> 883 884 885 886 887 888 889 </div> 890 891 <div class="news_footer"> 892 <span class="article-published">Published: 27 Jul 2021 11:52</span> 893 894 <span class="article-updated">Last updated: 17 Sep 2026 10:45</span> 895 896 <span class="article-viewcount">6795 views</span> 897 </div> 898 899 900</div> 901 902 903 904 </p> 905 906<section class="no-padding newslist"> 907<div class="container-fluid"> 908<div class="row newslist-box"></div> 909</div> 910</section> 911 912 </div> 913 </div> 914 </div> 915 </div> 916 </section> 917 </div> 918 </div> 919</div> 920 921 922<!-- start of novus-footer snippet --> 923<footer> 924 <div class="container"> 925 <!-- Advertisement Section --> 926 <!-- NOTE: this MSL:Advert control is the "Perks" banner I found on the live homepage 927 (asset/Advert/34/1.png) - it's the one image on the whole page NOT going through 928 MSL's resize pipeline (?thumbnail_width=...&resize_type=CropToFit) that every news/ 929 event/officer image uses. That's set by whatever image is uploaded in Adverts Admin 930 for this advert slot, not by this template - re-uploading it there through the same 931 resize pipeline is the actual fix, this file has no control over it. --> 932 <div class="row" style="padding-top: 15px;"> 933 <div class="col-12" style="text-align: center;"> 934 <div class="mslwidget"> 935<a href="/advertclick/33/" target="_blank"><img src="/asset/Advert/33/banner-Blue2-CitizenCard.png" alt="Apply for your Citizen card Today" /></a> 936</div> 937 </div> 938 </div> 939 940 <!-- Footer Links --> 941 <div class="row f-links"> 942 <!-- Useful Links --> 943 <div class="col-sm-4 col-xs-12 f-links-col"> 944 <div class="f-links-cont"> 945 <div class="f-head">Useful Links</div> 946 <div class="mslwidget footer-nav"> 947<ul class="msl_navbar"> <li><a href="/yoursu/workwithus/" target="_blank"><span class="nav-text">Jobs at Keele SU</span></a></li> 948 <li><a href="/yoursu/advertise/"><span class="nav-text">Advertise</span></a></li> 949 <li><a href="/yoursu/feedback/"><span class="nav-text">Make a Complaint</span></a></li> 950 <li><a href="/tac/"><span class="nav-text">Terms & Conditions</span></a></li> 951 <li><a href="/yoursu/aboutus/governance/"><span class="nav-text">Our Policies</span></a></li> 952 <li><a href="/accessibility/"><span class="nav-text">Accessibility</span></a></li> 953 <li><a href="/cookies/"><span class="nav-text">Cookies Policy</span></a></li> 954 <li><a href="/it/"><span class="nav-text">IT Support Links</span></a></li> 955 <li><a href="/accessable/" target="_blank"><span class="nav-text">Accessibility at Keele SU</span></a></li> 956 <li><a href="/system-status/"><span class="nav-text">System Status</span></a></li> 957 <li><a href="/activities/clubs-societies/committeeresources/"><span class="nav-text">Committee Resources</span></a></li> 958 <li><a href="/lostproperty/"><span class="nav-text">Lost Property</span></a></li> 959</ul> 960 961</div> 962 </div> 963 </div> 964 965 <!-- Vision, Mission, and Values --> 966 <div class="col-sm-5 col-xs-12 f-links-col"> 967 <div class="f-links-cont"> 968 <div class="f-head">Our Vision</div> 969 <p>Empower every student to be who they want to be and make a difference to the world.</p> 970 971 <div class="f-head">Our Mission</div> 972 <p>Through the delivery of our quality support, activity, representation, entertainment, and value-for-money services, we will ensure that our students feel part of a community which is inclusive, where they can grow in confidence and simply be students.</p> 973 974 <div class="f-head">Our Values</div> 975 <p>We are Global Citizens, We Challenge & Collaborate, We Unlock Potential.</p> 976 </div> 977 </div> 978 979 <!-- Contact Information and Social Media --> 980 <div class="col-sm-3 col-xs-12 f-links-col"> 981 <div class="f-links-cont"> 982 <div class="f-head">Contact Us</div> 983 <p> 984 Keele University Students' Union<br> 985 Keele University<br> 986 Newcastle-Under-Lyme<br> 987 Staffordshire<br> 988 ST5 5BJ<br> 989 United Kingdom 990 </p> 991 <p><i class="fas fa-phone"></i> 01782 733700</p> 992 <p><i class="fas fa-envelope"></i> <a href="mailto:[email protected]">[email protected]</a></p> 993 <p><i class="fas fa-map-marker-alt"></i> <a href="https://maps.app.goo.gl/U8Mw4fiQVAKoC1iNA/">Maps & Directions</a></p> 994 </div> 995 996 <!-- Social Media Links --> 997 <br> 998 <div class="f-head">Follow Us!</div> 999 <div id="socialsFooter" class="clearfix"> 1000 <ul> 1001 <!-- Facebook --> 1002 <li> 1003 <a target="_blank" href="https://www.facebook.com/keelestudentsunion/" aria-label="Facebook" tabindex="0" role="button" aria-pressed="false"> 1004 <i class="fa-brands fa-facebook"></i>
1005 <span class="social-description">Facebook</span> 1006 </a> 1007 </li> 1008 <!-- Instagram --> 1009 <li> 1010 <a target="_blank" href="https://www.instagram.com/keelesu/" aria-label="Instagram" tabindex="0" role="button" aria-pressed="false"> 1011 <i class="fa-brands fa-instagram"></i> 1012 <span class="social-description">Instagram</span> 1013 </a> 1014 </li> 1015 <!-- YouTube --> 1016 <li> 1017 <a target="_blank" href="https://www.youtube.com/user/keelesu/" aria-label="YouTube" tabindex="0" role="button" aria-pressed="false"> 1018 <i class="fa-brands fa-youtube"></i> 1019 <span class="social-description">YouTube</span> 1020 </a> 1021 </li> 1022 <!-- LinkedIn --> 1023 <li> 1024 <a target="_blank" href="https://www.linkedin.com/company/keelesu/" aria-label="LinkedIn" tabindex="0" role="button" aria-pressed="false"> 1025 <i class="fa-brands fa-linkedin"></i> 1026 <span class="social-description">LinkedIn</span> 1027 </a> 1028 </li> 1029 <!-- TikTok --> 1030 <li> 1031 <a target="_blank" href="https://www.tiktok.com/@keele_su/" aria-label="TikTok" tabindex="0" role="button" aria-pressed="false"> 1032 <i class="fa-brands fa-tiktok"></i> 1033 <span class="social-description">TikTok</span> 1034 </a> 1035 </li> 1036 <!-- LinkTree --> 1037 <li> 1038 <a target="_blank" href="https://linktr.ee/keelesu/" aria-label="LinkTree" tabindex="0" role="button" aria-pressed="false"> 1039 <!-- CHANGED: added loading="lazy" - this was the one footer image without it --> 1040 <img width="32" height="32" src="https://keelesu.com/stylesheet/Brand/linktree-icon.png" alt="LinkTree" loading="lazy"/> 1041 <span class="social-description">LinkTree</span> 1042 </a> 1043 </li> 1044 </ul> 1045 </div> 1046 </div> 1047 </div> 1048 1049 <!-- Download App Section --> 1050 <div class="row"> 1051 <div class="col-12"> 1052 <div class="f-head text-center">Download Our App</div> 1053 <p class="text-center"> 1054 <a href="https://apps.apple.com/gb/app/studentlink/id1579307063/" rel="noopener noreferrer" target="_blank" aria-label="Keele SU App on the Appstore"> 1055 <i class="fa-brands fa-apple fa-2xl"></i> 1056 <span class="social-description">Keele SU iOS App</span> 1057 </a> 1058 <a href="https://play.google.com/store/apps/details?id=com.ukmsl.studentlinkplus.keele" rel="noopener noreferrer" target="_blank" aria-label="Keele SU App on the Playstore"> 1059 <i class="fa-brands fa-android fa-2xl"></i> 1060 <span class="social-description">Keele SU Android App</span> 1061 </a> 1062 </p> 1063 </div> 1064 </div> 1065 1066 <!-- Footer Credits --> 1067 <div class="row"> 1068 <div class="col-12"> 1069 <p class="msl-footer">Keele SU is a Charitable Incorporated Organisation No.1173328</p> 1070 <p class="msl-footer"> 1071 <a href="https://www.ukmsl.com/" id="poweredmsl">Powered by MSL</a> 1072 </p> 1073 <p class="msl-footer"> 1074 Last Updated: Thu, 18 Jul 2024 14:17:46 GMT 1075 </p> 1076 </div> 1077 </div> 1078 </div> 1079</footer> 1080 1081<!-- Popup for Voting --> 1082<!--class="hide"--> 1083<div id="popup"> 1084<MSL:VoterPopup 1085 ContainerTag="" 1086 ContainerID="" 1087 ContainerCssClass="" 1088 SuppressContainer="" 1089 ElectionId="1293" 1090 VotingPeriodNotStartedText="" 1091 VotingNotStartedText="<img src='https://keelesu.com/stylesheet/novus/electionsheaderfs.jpg' alt='Elections Banner' width='100%'> 1092 <br>You haven't voted in the current Elections 😭 1093 <br><a href='https://keelesu.com/elections/vote/1293/'>Vote Now!</a> 1094 <br>" 1095 VotingInProgressText="" 1096 VotingCompleteText="" 1097 VotingClosedText="" 1098 HideButtonText="Close" 1099/> 1100 1101 <div id="fbmllike"> 1102 <div style="clear:both"></div> 1103 </div> 1104</div> 1105 1106<!-- Microsoft Clarity Analytics -->
1107<script> 1108 (function(c, l, a, r, i, t, y) { 1109 c[a] = c[a] || function() { 1110 (c[a].q = c[a].q || []).push(arguments); 1111 }; 1112 t = l.createElement(r); 1113 t.async = true; 1114 t.src = "https://www.clarity.ms/tag/" + i; 1115 y = l.getElementsByTagName(r)[0]; 1116 y.parentNode.insertBefore(t, y); 1117 })(window, document, "clarity", "script", "lqptr9hbv4"); 1118</script>
1118 1119 1120<!-- Chatbot Styles --> 1121<!-- NOTE: no change needed here. Earlier I flagged this chatbot as a likely big contributor 1122 to page weight, going only off the fact that it existed. Having now seen the actual 1123 implementation: the iframe ships with loading="lazy" AND starts display:none, and the 1124 script below only flips it to display:block after a 60s timer or a manual click. A 1125 hidden, lazy iframe like this is very unlikely to be fetched during a single automated 1126 page-load measurement (the kind carbon calculators run), so this was probably already a 1127 non-issue - correcting my earlier read rather than "fixing" something that isn't broken. --> 1128<style> 1129 :root { 1130 --chat-width: 320px; 1131 --chat-height: 600px; 1132 --chat-margin: 20px; 1133 --chat-button-size: 60px; 1134 } 1135 1136 #chat-popup { 1137 position: fixed; 1138 bottom: var(--chat-margin); 1139 right: calc(var(--chat-margin) * 2); 1140 width: var(--chat-width); 1141 height: var(--chat-height); 1142 display: none; 1143 border: none; 1144 z-index: 1000; 1145 } 1146 1147 #chat-button { 1148 position: fixed; 1149 bottom: var(--chat-margin); 1150 right: var(--chat-margin); 1151 width: var(--chat-button-size); 1152 height: var(--chat-button-size); 1153 border: none; 1154 border-radius: 50%; 1155 background-color: var(--secondary-color, #65b22e); 1156 color: #fff; 1157 cursor: pointer; 1158 z-index: 1001; 1159 font-size: 1rem; 1160 } 1161 1162 .popup-container { 1163 display: none; 1164 position: fixed; 1165 top: 50%; 1166 left: 50%; 1167 transform: translate(-50%, -50%); 1168 background-color: #fff3cd; 1169 color: #856404; 1170 border: 1px solid #ffeeba; 1171 padding: 30px; 1172 border-radius: 10px; 1173 box-shadow: 0 6px 12px rgba(0,0,0,0.15); 1174 max-width: 500px; 1175 width: 90%; 1176 font-family: Arial, sans-serif; 1177 z-index: 1000; 1178 text-align: center; 1179 } 1180 1181 .popup-container h2 { 1182 margin-top: 0; 1183 } 1184 1185 .app-links a { 1186 color: #856404; 1187 text-decoration: underline; 1188 font-weight: bold; 1189 } 1190 1191 .popup-close { 1192 background-color: #856404; 1193 color: white; 1194 border: none; 1195 padding: 10px 16px; 1196 border-radius: 5px; 1197 cursor: pointer; 1198 margin-top: 15px; 1199 font-size: 1em; 1200 } 1201 1202 .popup-close:hover { 1203 background-color: #6c4f03; 1204 } 1205</style> 1206 1207<!-- Chatbot Iframe --> 1208<iframe 1209 id="chat-popup" 1210 src="https://www.chatbase.co/chatbot-iframe/KUL--w-zDPlx88ZgZl8Xh" 1211 title="Live Chat" 1212 loading="lazy" 1213></iframe> 1214 1215<!-- Chat Toggle Button --> 1216<button id="chat-button" type="button" aria-label="Open Chat">Chat</button> 1217 1218<!-- Chat Toggle Script (Vanilla JS) -->
1219<script> 1220 (function() { 1221 'use strict'; 1222 1223 function initChatToggle() { 1224 const chatButton = document.getElementById('chat-button'); 1225 const chatPopup = document.getElementById('chat-popup'); 1226 1227 if (!chatButton || !chatPopup) return; 1228 1229 chatButton.addEventListener('click', function(e) { 1230 e.preventDefault(); 1231 const isVisible = chatPopup.style.display === 'block'; 1232 chatPopup.style.display = isVisible ? 'none' : 'block'; 1233 }); 1234 } 1235 1236 // Initialize when DOM is ready 1237 if (document.readyState === 'loading') { 1238 document.addEventListener('DOMContentLoaded', initChatToggle); 1239 } else { 1240 initChatToggle(); 1241 } 1242 })(); 1243</script>
1243 1244
1245<script> 1246window.addEventListener("load", () => { 1247 const path = window.location.pathname; 1248 const isBackend = path.includes("/admin/") || path.includes("/edit/"); 1249 1250 const STORAGE_KEY = "chatPopupLastShown"; 1251 const COOLDOWN_DAYS = 3; 1252 1253 // Check if popup should show 1254 function canShowPopup() { 1255 const lastShown = localStorage.getItem(STORAGE_KEY); 1256 if (!lastShown) return true; 1257 1258 const now = Date.now(); 1259 const diff = now - parseInt(lastShown, 10); 1260 const cooldown = COOLDOWN_DAYS * 24 * 60 * 60 * 1000; 1261 1262 return diff > cooldown; 1263 } 1264 1265 // Save timestamp 1266 function markShown() { 1267 localStorage.setItem(STORAGE_KEY, Date.now().toString()); 1268 } 1269 1270 // If admin/edit page â stop 1271 if (isBackend) { 1272 const iframe = document.getElementById("chat-popup"); 1273 if (iframe) iframe.style.display = "none"; 1274 return; 1275 } 1276 1277 // ð´ If within 3 days â don't show 1278 if (!canShowPopup()) return; 1279 1280 // â Show popup after 60s 1281 setTimeout(() => { 1282 const interval = setInterval(() => { 1283 const iframe = document.getElementById("chat-popup"); 1284 if (iframe) { 1285 iframe.style.display = "block"; 1286 iframe.click(); 1287 1288 // Save that it has been shown 1289 markShown(); 1290 1291 clearInterval(interval); 1292 } 1293 }, 300); 1294 }, 60000); 1295}); 1296</script>
1296 1297 1298<!-- Changes Colour/Text on Chatbot Button --> 1299
1300<script> 1301document.addEventListener("DOMContentLoaded", function () { 1302 const chatPopup = document.getElementById("chat-popup"); 1303 const chatButton = document.getElementById("chat-button"); 1304 1305 if (!chatPopup || !chatButton) return; 1306 1307 // Store original button styles/text so we can restore them 1308 const originalText = chatButton.textContent; 1309 const originalBg = getComputedStyle(chatButton).backgroundColor; 1310 const originalColor = getComputedStyle(chatButton).color; 1311 1312 function updateChatButton() { 1313 const isVisible = getComputedStyle(chatPopup).display === "block"; 1314 1315 if (isVisible) { 1316 chatButton.textContent = "Close"; 1317 chatButton.style.backgroundColor = "red"; 1318 chatButton.style.color = "black"; 1319 chatButton.setAttribute("aria-label", "Close Chat"); 1320 } else { 1321 chatButton.textContent = originalText || "Chat"; 1322 chatButton.style.backgroundColor = originalBg; 1323 chatButton.style.color = originalColor; 1324 chatButton.setAttribute("aria-label", "Open Chat"); 1325 } 1326 } 1327 1328 // Watch for changes to the iframe's style attribute 1329 const observer = new MutationObserver(updateChatButton); 1330 observer.observe(chatPopup, { 1331 attributes: true, 1332 attributeFilter: ["style", "class"] 1333 }); 1334 1335 // Run once on load 1336 updateChatButton(); 1337}); 1338 1339</script>
1339 1340
1341<script> 1342// Removes empty location box from events 1343document.querySelectorAll('.location').forEach(location => { 1344 const text = location.textContent.trim(); 1345 1346 if (!text) { 1347 location.style.display = 'none'; 1348 } 1349}); 1350</script>
1350 1351 1352<!-- Cookie Popup --> 1353<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/cookieconsent/3.1.1/cookieconsent.min.css" integrity="sha512-LQ97camar/lOliT/MqjcQs5kWgy6Qz/cCRzzRzUCfv0fotsCTC9ZHXaPQmJV8Xu/PVALfJZ7BDezl5lW3/qBxg==" crossorigin="anonymous" referrerpolicy="no-referrer" />
1354<script defer src="https://cdnjs.cloudflare.com/ajax/libs/cookieconsent/3.1.1/cookieconsent.min.js" integrity="sha512-yXXqOFjdjHNH1GND+1EO0jbvvebABpzGKD66djnUfiKlYME5HGMUJHoCaeE4D5PTG2YsSJf6dwqyUUvQvS0vaA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
vendor: 2 bytes, line 1354
1354
1355<script> 1356 (function() { 1357 'use strict'; 1358 1359 function initCookieConsent() { 1360 if (typeof window.cookieconsent === 'undefined') return; 1361 1362 window.cookieconsent.initialise({ 1363 palette: { 1364 popup: { 1365 background: "#575952" 1366 }, 1367 button: { 1368 background: "#22004d" 1369 } 1370 }, 1371 theme: "edgeless", 1372 content: { 1373 message: "This site uses cookies", 1374 dismiss: "Dismiss", 1375 link: "More info", 1376 href: "https://keelesu.com/cookies/" 1377 }, 1378 position: "bottom-left" 1379 }); 1380 } 1381 1382 window.addEventListener("load", initCookieConsent); 1383 })(); 1384</script>
1384 1385 1386<!-- Accessibility Widget -->
1387<script> 1388 window.interdeal = { 1389 sitekey: "6771fa1a11958d581b731f95e0c44d43", 1390 Position: "right", 1391 domains: { 1392 js: "https://cdn.equalweb.com/", 1393 acc: "https://access.equalweb.com/" 1394 }, 1395 showTooltip: true, 1396 btnStyle: { 1397 vPosition: ["92%", "20%"], 1398 scale: ["0.5", "0.5"], 1399 color: { 1400 main: "#2b0e48", 1401 second: "#ffffff" 1402 }, 1403 icon: { 1404 type: 11, 1405 shape: "rounded" 1406 } 1407 } 1408 }; 1409 1410 (function(doc, head, body) { 1411 'use strict'; 1412 1413 const coreCall = doc.createElement('script'); 1414 coreCall.src = window.interdeal.domains.js + 'core/4.6.14/accessibility.js'; 1415 coreCall.defer = true; 1416 coreCall.integrity = 'sha512-DeZBWLOEHK1CkmU3vQTNSXeENfZmhTHFmn7zzhvZCPERahpp/DTouMc1ZHOu+RAo1FTKnuKEf1NQyB76z8mU1Q=='; 1417 coreCall.crossOrigin = 'anonymous'; 1418 coreCall.setAttribute('data-cfasync', true); 1419 1420 (body || head).appendChild(coreCall); 1421 })(document, document.head, document.body); 1422</script>
1422 1423 1424<!-- System Issue Popup (Vanilla JS) -->
1425<script> 1426 (function() { 1427 'use strict'; 1428 1429 function initPopup() { 1430 const popup = document.getElementById('system-issue-popup'); 1431 const closeBtn = document.querySelector('.popup-close'); 1432 1433 if (!popup) return; 1434 1435 // Check if popup was already dismissed in this session 1436 const dismissed = sessionStorage.getItem('popupDismissed'); 1437 1438 if (!dismissed) { 1439 setTimeout(function() { 1440 popup.style.display = 'block'; 1441 }, 1000); 1442 } 1443 1444 // Close button handler 1445 if (closeBtn) { 1446 closeBtn.addEventListener('click', function() { 1447 popup.style.display = 'none'; 1448 sessionStorage.setItem('popupDismissed', 'true'); 1449 }); 1450 } 1451 } 1452 1453 // Initialize when DOM is ready 1454 if (document.readyState === 'loading') { 1455 document.addEventListener('DOMContentLoaded', initPopup); 1456 } else { 1457 initPopup(); 1458 } 1459 })(); 1460</script>
1460 1461<!-- end of novus-footer snippet --> 1462
1463<script type="text/javascript"> 1464 $(document).ready(function () { 1465 1466<!-- start of novus-scripts snippet --> 1467// Enhanced Site Script - Optimized Vanilla JavaScript 1468// Performance optimized with caching and efficient DOM operations 1469// 1470// Fixes applied in this version: 1471// 1. Moved the "accessibility cleanup / admin controls / basket buttons / 1472// event location / referendum" block OUT of the newsItems.forEach loop. 1473// It previously only ran once per news-scroller item (and not at all 1474// when there were no news items) instead of once per page load. 1475// 2. Removed no-op `return false` inside a native addEventListener handler 1476// (that only works with jQuery); replaced with explicit preventDefault. 1477// 3. Added aria-expanded updates to the nav toggle and admin trigger buttons 1478// so assistive tech can announce expanded/collapsed state. 1479// 4. Added aria-hidden="true" to the accordion chevron icon, and aria-controls 1480// linking the accordion title to its content panel, for consistency with 1481// the slider's icons and proper ARIA relationships. 1482// 5. Guarded the popup auto-focus so it only steals focus when the popup is 1483// actually visible, instead of unconditionally on every page load. 1484// 6. Removed dead/commented-out code (legacy UA sniffing comment left as-is 1485// where still functionally relevant, but the disabled bxSlider/doubleTap 1486// leftovers were removed). 1487 1488(function() { 1489 'use strict'; 1490 1491 const $ = (selector, context = document) => context.querySelector(selector); 1492 1493 const $$ = (selector, context = document) => { 1494 return Array.from(context.querySelectorAll(selector)); 1495 }; 1496 1497 // Batch DOM operations 1498 const domBatch = { 1499 operations: [], 1500 add(fn) { 1501 this.operations.push(fn); 1502 }, 1503 execute() { 1504 requestAnimationFrame(() => { 1505 this.operations.forEach(fn => fn()); 1506 this.operations = []; 1507 }); 1508 } 1509 }; 1510 1511 // Double Tap To Go (optimized with event delegation where possible) 1512 function doubleTapToGo(selector) { 1513 if (!('ontouchstart' in window) && 1514 !navigator.msMaxTouchPoints && 1515 !navigator.userAgent.toLowerCase().match(/windows phone os 7/i)) { 1516 return; 1517 } 1518 1519 let lastTapped = null; 1520 const container = document.getElementById('topnav'); 1521 if (!container) return; 1522 1523 container.addEventListener('click', function(e) { 1524 const element = e.target.closest(selector); 1525 if (element && element !== lastTapped) { 1526 e.preventDefault(); 1527 lastTapped = element; 1528 } 1529 }); 1530 1531 document.addEventListener('click', function(e) { 1532 if (lastTapped && !lastTapped.contains(e.target)) { 1533 lastTapped = null; 1534 } 1535 }); 1536 1537 document.addEventListener('touchstart', function(e) { 1538 if (lastTapped && !lastTapped.contains(e.target)) { 1539 lastTapped = null; 1540 } 1541 }, { passive: true }); 1542 } 1543 1544 // Relative time formatting (cached results) 1545 const timeCache = new Map(); 1546 function relTime(dateString) { 1547 if (timeCache.has(dateString)) { 1548 return timeCache.get(dateString); 1549 } 1550 1551 const date = new Date(dateString); 1552 const now = new Date(); 1553 const diff = now - date; 1554 const seconds = Math.floor(diff / 1000); 1555 const minutes = Math.floor(seconds / 60); 1556 const hours = Math.floor(minutes / 60); 1557 const days = Math.floor(hours / 24); 1558 1559 let result; 1560 if (days > 7) result = date.toLocaleDateString(); 1561 else if (days > 0) result = `${days} day${days > 1 ? 's' : ''} ago`; 1562 else if (hours > 0) result = `${hours} hour${hours > 1 ? 's' : ''} ago`; 1563 else if (minutes > 0) result = `${minutes} minute${minutes > 1 ? 's' : ''} ago`; 1564 else result = 'Just now'; 1565 1566 timeCache.set(dateString, result); 1567 return result; 1568 } 1569 1570 // Main initialization (optimized with fewer DOM queries) 1571 function init() { 1572 const body = document.body; 1573 const mainNav = document.querySelector('.mainnav'); 1574 1575 // Remove admin elements for logged out users (single pass) 1576 if (document.querySelector('.msl-loggedout')) { 1577 const adminSelectors = '.admin-links ul li.admin-container, #admin-trigger, .admin-links ul li.profile';
1578 $$(adminSelectors).forEach(el => el.remove()); 1579 } 1580 1581 // Event delegation for navigation toggle 1582 body.addEventListener('click', function(e) { 1583 const toggle = e.target.closest('a[class*="toggle-left"]'); 1584 if (toggle) { 1585 if (!mainNav.classList.contains('show-nav')) { 1586 body.classList.remove('show-admin'); 1587 } 1588 mainNav.classList.toggle('show-nav'); 1589 toggle.setAttribute('aria-expanded', mainNav.classList.contains('show-nav')); 1590 return; 1591 } 1592 1593 // Admin trigger 1594 const adminTrigger = e.target.closest('#admin-trigger'); 1595 if (adminTrigger) { 1596 e.preventDefault(); 1597 if (!body.classList.contains('show-admin')) { 1598 mainNav.classList.remove('show-nav'); 1599 } 1600 body.classList.toggle('show-admin'); 1601 adminTrigger.setAttribute('aria-expanded', body.classList.contains('show-admin')); 1602 return; 1603 } 1604 1605 // Shop tile clicks 1606 const shopTile = e.target.closest('.shop-cat li'); 1607 if (shopTile) { 1608 const link = shopTile.querySelector('a'); 1609 if (link) { 1610 e.preventDefault(); 1611 window.location = link.href; 1612 return; 1613 } 1614 } 1615 1616 // Accordion clicks 1617 const accordionTitle = e.target.closest('.accordion-title'); 1618 if (accordionTitle) { 1619 handleAccordion(accordionTitle); 1620 } 1621 1622 // Submenu clicks 1623 const submenuLink = e.target.closest('#topnav ul.msl_navbar li:has(ul) a'); 1624 if (submenuLink) { 1625 const parent = submenuLink.parentElement; 1626 const siblings = Array.from(parent.parentElement.children).filter(el => el !== parent); 1627 1628 siblings.forEach(sib => { 1629 const openUl = sib.querySelector('ul.open'); 1630 if (openUl) openUl.classList.remove('open'); 1631 }); 1632 1633 const firstUl = parent.querySelector('ul'); 1634 if (firstUl) firstUl.classList.toggle('open'); 1635 } 1636 }); 1637 1638 // Enable double-tap navigation 1639 doubleTapToGo('#topnav ul.msl_navbar > li:has(ul) > a'); 1640 1641 // Batch DOM manipulations 1642 const exploreTiles = $$('.explore-tiles ul li'); 1643 const shopTiles = $$('.shop-cat li'); 1644 const tables = $$('#main table:not([class])'); 1645 const newsItems = $$('#scroller .news_item'); 1646 const mslNewsItems = $$('.msl-news .msl-item'); 1647 const bannerItems = $$('#banner .msl-news .msl-item'); 1648 1649 // Process explore tiles 1650 exploreTiles.forEach(tile => { 1651 const link = tile.querySelector('a'); 1652 if (!link) return; 1653 1654 if (!link.querySelector('.msl-imagenav-image')) { 1655 const img = document.createElement('img'); 1656 img.src = 'https://keelesu.com/stylesheet/Brand/image_nav_default.png'; 1657 img.alt = 'KeeleSU Branded Image Placeholder'; 1658 img.width = 570; 1659 img.height = 285; 1660 img.className = 'msl-imagenav-image'; 1661 link.appendChild(img); 1662 } 1663 1664 const desc = tile.querySelectorAll('.msl-imagenav-description, .msl-imagenav-title'); 1665 if (desc.length > 0) { 1666 const wrapper = document.createElement('div'); 1667 wrapper.className = 'explore_description'; 1668 desc[0].parentNode.insertBefore(wrapper, desc[0]); 1669 desc.forEach(el => wrapper.appendChild(el)); 1670 1671 const title = wrapper.querySelector('.msl-imagenav-title'); 1672 const description = wrapper.querySelector('.msl-imagenav-description'); 1673 if (title && description) { 1674 description.parentNode.insertBefore(title, description.nextSibling); 1675 } 1676 1677 const image = tile.querySelector('.msl-imagenav-image'); 1678 if (image && wrapper) { 1679 image.parentNode.insertBefore(wrapper, image.nextSibling); 1680 } 1681 } 1682 }); 1683 1684 // Process shop tiles 1685 shopTiles.forEach(tile => { 1686 const name = tile.querySelector('.msl-product-name'); 1687 const price = tile.querySelector('.msl-product-price'); 1688 1689 if (name && price && !name.parentElement.classList.contains('details')) { 1690 const wrapper = document.createElement('div'); 1691 wrapper.className = 'details'; 1692 name.parentNode.insertBefore(wrapper, name); 1693 wrapper.appendChild(name); 1694 wrapper.appendChild(price); 1695 } 1696 });
1697 1698 // Wrap tables 1699 tables.forEach(table => { 1700 table.className = 'table table-light table-bordered table-striped'; 1701 const wrapper = document.createElement('div'); 1702 wrapper.className = 'table-responsive'; 1703 table.parentNode.insertBefore(wrapper, table); 1704 wrapper.appendChild(table); 1705 }); 1706 1707 // Basket handling 1708 $$('.product_box > .btn').forEach(btn => btn.value = 'Add to Basket'); 1709 1710 const basket = document.getElementById('basket'); 1711 if (basket) { 1712 const basketItems = basket.querySelectorAll('dt'); 1713 const itemCount = basketItems.length; 1714 const basketContainer = document.querySelector('.basket-container'); 1715 1716 if (itemCount > 0 && basketContainer) { 1717 const basketCount = document.createElement('span'); 1718 basketCount.className = 'basket-count'; 1719 basketCount.textContent = itemCount; 1720 basketCount.setAttribute('aria-label', `${itemCount} item${itemCount > 1 ? 's' : ''} in basket`); 1721 basketContainer.style.display = ''; 1722 basketContainer.classList.add('bagged'); 1723 const link = basketContainer.querySelector('a'); 1724 if (link) link.appendChild(basketCount); 1725 } else if (basketContainer) { 1726 basketContainer.style.display = 'none'; 1727 } 1728 1729 let totalQty = 0; 1730 basket.querySelectorAll('.qty').forEach(qty => { 1731 const match = qty.textContent.match(/\d+/); 1732 if (match) { 1733 const num = parseInt(match[0], 10); 1734 if (!isNaN(num)) totalQty += num; 1735 } 1736 }); 1737 1738 if (totalQty > 0) { 1739 const basketIcon = document.querySelector('.basket-icon'); 1740 if (basketIcon) { 1741 const quantitySpan = document.createElement('span'); 1742 quantitySpan.className = 'basket-quantity'; 1743 quantitySpan.setAttribute('aria-label', `${totalQty} item${totalQty > 1 ? 's' : ''} in basket`); 1744 quantitySpan.innerHTML = `<div class="quantity-inner" aria-hidden="true">${totalQty}</div>`; 1745 basketIcon.appendChild(quantitySpan); 1746 } 1747 } 1748 1749 basketItems.forEach(dt => { 1750 const dd = dt.nextElementSibling?.nextElementSibling; 1751 if (dd) { 1752 const wrapper = document.createElement('div'); 1753 wrapper.className = 'basket-item'; 1754 dt.parentNode.insertBefore(wrapper, dt); 1755 wrapper.appendChild(dt); 1756 wrapper.appendChild(dd); 1757 } 1758 }); 1759 } 1760 1761 // Add rel="noopener" to target="_blank" links 1762 $$('a[target="_blank"]').forEach(link => { 1763 const rel = link.getAttribute('rel') || ''; 1764 if (!rel.includes('noopener')) { 1765 link.setAttribute('rel', (rel + ' noopener').trim()); 1766 } 1767 }); 1768 1769 // News scroller formatting 1770 newsItems.forEach(item => { 1771 const title = item.querySelector('h5'); 1772 if (title) { 1773 const newTitle = document.createElement('h2'); 1774 newTitle.innerHTML = title.innerHTML; 1775 title.replaceWith(newTitle); 1776 1777 const leader = item.querySelector('p.leader'); 1778 const newsDetail = document.createElement('div'); 1779 newsDetail.className = 'news-detail'; 1780 newsDetail.innerHTML = `<div class="news-detail-cell">${newTitle.outerHTML}</div>`; 1781 item.appendChild(newsDetail); 1782 1783 if (leader) { 1784 newsDetail.querySelector('.news-detail-cell').appendChild(leader); 1785 } 1786 } 1787 }); 1788 1789 // --- The block below previously lived (incorrectly) inside the 1790 // newsItems.forEach loop above, so it only ran once per news item 1791 // and not at all when #scroller had no news items. It now runs 1792 // exactly once per page load, as intended. --- 1793 1794 // Accessibility cleanup 1795 const popup = document.querySelector('.popup.vp_form'); 1796 if (popup) { 1797 popup.setAttribute('tabindex', '0'); 1798 popup.setAttribute('title', 'Modal form popup'); 1799 // Only steal focus if the popup is actually visible/open, so we don't 1800 // yank focus away from the page on every load when it's hidden. 1801 const isVisible = popup.offsetParent !== null && 1802 window.getComputedStyle(popup).display !== 'none'; 1803 if (isVisible) popup.focus(); 1804 } 1805 1806 if (typeof mslUserInfo === 'undefined') { 1807 $$('#skip-to-user, #skip-to-admin, #skip-to-basket').forEach(el => el.remove()); 1808 } else { 1809 const skipLogin = document.getElementById('skip-to-login');
1810 if (skipLogin) skipLogin.remove(); 1811 } 1812 1813 $$('[aria-label="Site navigation"] > ul > li > a > span').forEach(span => { 1814 const h2 = document.createElement('h2'); 1815 span.parentNode.insertBefore(h2, span); 1816 h2.appendChild(span); 1817 }); 1818 1819 const adminControls = document.querySelector('.controls-container'); 1820 if (adminControls) { 1821 if (adminControls.querySelectorAll('li').length > 0) { 1822 adminControls.style.display = 'block'; 1823 } else { 1824 const skipAdmin = document.getElementById('skip-to-admin'); 1825 if (skipAdmin) skipAdmin.remove(); 1826 } 1827 } 1828 1829 const eventLocation = document.querySelector('.event-location'); 1830 if (eventLocation && eventLocation.textContent.length === 1) { 1831 eventLocation.style.display = 'none'; 1832 } 1833 1834 $$('.qty > .remove').forEach(btn => btn.textContent = ''); 1835 1836 const reviewBtn = document.getElementById('ctl00_basket_lnkReviewBasket'); 1837 if (reviewBtn) { 1838 reviewBtn.classList.add('btn', 'btn-primary'); 1839 } 1840 1841 const checkoutBtn = document.getElementById('ctl00_basket_lnkCheckout'); 1842 if (checkoutBtn) { 1843 checkoutBtn.classList.add('btn', 'btn-secondary'); 1844 } 1845 1846 // Format publication metadata for news items 1847 mslNewsItems.forEach(item => { 1848 const title = item.querySelector('.msl-title'); 1849 const org = item.querySelector('.msl-organisation'); 1850 const byline = item.querySelector('.msl-byline'); 1851 const pubDateEl = item.querySelector('.msl-pubdate'); 1852 1853 if (pubDateEl) { 1854 const pubDate = pubDateEl.textContent; 1855 const isBanner = item.closest('.mslwidget')?.classList.contains('banner'); 1856 pubDateEl.textContent = isBanner ? 'Posted ' + relTime(pubDate) : relTime(pubDate); 1857 } 1858 1859 if (org && byline && title) { 1860 org.textContent += ' | ' + byline.textContent; 1861 title.parentNode.insertBefore(org, title); 1862 byline.remove(); 1863 } else if (org && title) { 1864 title.parentNode.insertBefore(org, title); 1865 } else if (byline && title) { 1866 byline.classList.add('msl-organisation'); 1867 title.parentNode.insertBefore(byline, title); 1868 } 1869 }); 1870 1871 // Banner formatting 1872 bannerItems.forEach(item => { 1873 const h = item.querySelector('h3'); 1874 const d = item.querySelector('.msl-pubdate'); 1875 const o = item.querySelector('.msl-organisation'); 1876 1877 if (h) { 1878 h.classList.remove('msl-title'); 1879 const wrapper = document.createElement('div'); 1880 wrapper.className = 'msl-title'; 1881 h.parentNode.insertBefore(wrapper, h); 1882 wrapper.appendChild(h); 1883 1884 if (d) h.parentNode.insertBefore(d, h.nextSibling); 1885 if (o) h.parentNode.insertBefore(o, h); 1886 } 1887 }); 1888 1889 // Hide "More" buttons if no content 1890 const latestEventP = document.querySelector('.banner-latest .latest-event .msl_eventlist > p'); 1891 if (latestEventP && latestEventP.textContent.length > 0) { 1892 const btnGroup = document.querySelector('.banner-latest .latest-event .btn-group'); 1893 if (btnGroup) btnGroup.style.display = 'none'; 1894 } 1895 1896 const noNewsMsg = document.querySelector('.banner-latest .latest-news .msl-no-news-message'); 1897 if (noNewsMsg && noNewsMsg.textContent.length > 0) { 1898 const btnGroup = document.querySelector('.banner-latest .latest-news .btn-group'); 1899 if (btnGroup) btnGroup.style.display = 'none'; 1900 } 1901 1902 // Referendum styling 1903 if (document.querySelector('.referendum')) { 1904 $$('.referendum .vote').forEach(el => el.classList.toggle('btn-group')); 1905 $$('.referendum .votenow').forEach(el => { 1906 el.classList.add('btn', 'btn-primary'); 1907 }); 1908 } 1909 } 1910 1911 function handleAccordion(title) { 1912 const tabId = title.dataset.tab; 1913 const content = document.getElementById(tabId); 1914 if (!content) return; 1915 1916 // Ensure the ARIA relationship between title and content is present. 1917 if (!title.hasAttribute('aria-controls')) { 1918 title.setAttribute('aria-controls', tabId); 1919 } 1920 1921 const parent = content.parentElement; 1922 const siblings = Array.from(parent.parentElement.children).filter(el => el !== parent); 1923 1924 const isVisible = window.getComputedStyle(content).display !== 'none'; 1925 content.style.display = isVisible ? 'none' : 'block'; 1926
1927 siblings.forEach(sib => { 1928 const sibContent = sib.querySelector('.accordion-content'); 1929 if (sibContent) sibContent.style.display = 'none'; 1930 }); 1931 1932 title.classList.toggle('active-title'); 1933 siblings.forEach(sib => { 1934 const sibTitle = sib.querySelector('.accordion-title'); 1935 if (sibTitle) sibTitle.classList.remove('active-title'); 1936 }); 1937 1938 title.setAttribute('aria-expanded', title.classList.contains('active-title')); 1939 1940 const icon = title.querySelector('i.fa-chevron-down'); 1941 if (icon) { 1942 icon.classList.toggle('chevron-top'); 1943 icon.setAttribute('aria-hidden', 'true'); 1944 } 1945 1946 siblings.forEach(sib => { 1947 const sibIcon = sib.querySelector('.accordion-title i.fa-chevron-down'); 1948 if (sibIcon) { 1949 sibIcon.classList.remove('chevron-top'); 1950 sibIcon.setAttribute('aria-hidden', 'true'); 1951 } 1952 }); 1953 } 1954 1955 // Initialize when DOM is ready 1956 if (document.readyState === 'loading') { 1957 document.addEventListener('DOMContentLoaded', init); 1958 } else { 1959 init(); 1960 } 1961})(); 1962 1963 1964(function() { 1965 function ready(fn) { 1966 if (document.readyState !== 'loading') fn(); 1967 else document.addEventListener('DOMContentLoaded', fn); 1968 } 1969 1970 ready(function initAllSliders() { 1971 // Support multiple instances: ID (hero/mini hook) and class (mini) 1972 var containers = Array.prototype.slice.call( 1973 document.querySelectorAll('#sliderControl, .sliderControls-mini') 1974 ); 1975 1976 // Remove duplicates if the same element is returned twice 1977 containers = containers.filter(function(el, i, arr){
1978 return arr.indexOf(el) === i; 1979 }); 1980 1981 containers.forEach(function(container){ 1982 initSliderContainer(container); 1983 }); 1984 }); 1985 1986 function initSliderContainer(container) { 1987 // Prevent double init 1988 if (container.dataset.sliderInit === '1') return; 1989 1990 // --- STEP 1: Collect slides (news first; else adapt events) --- 1991 var slides = Array.prototype.slice.call(container.querySelectorAll('.news_item')); 1992 1993 if (!slides.length) { 1994 // Try events markup and adapt to news structure 1995 var eventSlides = Array.prototype.slice.call(container.querySelectorAll('.event_item')); 1996 if (eventSlides.length) { 1997 slides = adaptEventsToNews(container, eventSlides); 1998 } 1999 } 2000 2001 if (!slides.length) return; // nothing to do 2002 2003 // --- STEP 2: Track setup --- 2004 var track = container.querySelector('.slider-track'); 2005 var createdTrack = false; 2006 2007 if (!track) { 2008 track = document.createElement('div'); 2009 track.className = 'slider-track'; 2010 createdTrack = true; 2011 } 2012 2013 // Ensure each slide has the expected inner structure 2014 slides.forEach(function(slide, i) { 2015 // If not already structured, build .slide-grid with .slide-image & .slide-text 2016 var hasGrid = slide.querySelector('.slide-grid'); 2017 if (!hasGrid) { 2018 var titleBlock = slide.querySelector('h2, h3, h4, h5'); 2019 var leader = slide.querySelector('.leader'); 2020 var imageWrap = slide.querySelector('.news_image'); 2021 2022 var grid = document.createElement('div'); 2023 grid.className = 'slide-grid'; 2024 2025 var textCol = document.createElement('div'); 2026 textCol.className = 'slide-text'; 2027 2028 var imageCol = document.createElement('div'); 2029 imageCol.className = 'slide-image'; 2030 2031 if (imageWrap) { 2032 var img = imageWrap.querySelector('img'); 2033 if (img) { 2034 img.removeAttribute('width'); 2035 img.removeAttribute('height'); 2036 img.loading = 'lazy'; 2037 } 2038 imageCol.appendChild(imageWrap); 2039 } 2040 2041 if (titleBlock) textCol.appendChild(titleBlock); 2042 if (leader) textCol.appendChild(leader); 2043 2044 while (slide.firstChild) slide.removeChild(slide.firstChild); 2045 slide.appendChild(grid); 2046 grid.appendChild(imageCol); 2047 grid.appendChild(textCol); 2048 } 2049 2050 // A11y 2051 slide.setAttribute('role', 'group'); 2052 slide.setAttribute('aria-roledescription', 'slide'); 2053 slide.setAttribute('aria-label', (i + 1) + ' of ' + slides.length); 2054 2055 // Move into track if we just created it 2056 if (createdTrack) track.appendChild(slide); 2057 }); 2058 2059 // Insert track if we created it 2060 if (createdTrack) { 2061 container.insertBefore(track, container.firstChild); 2062 } 2063 2064 // --- STEP 3: Controls & dots (create only if not present) --- 2065 var prevBtn = container.querySelector('.slider-edge.left'); 2066 var nextBtn = container.querySelector('.slider-edge.right'); 2067 2068 if (!prevBtn) { 2069 prevBtn = document.createElement('button'); 2070 prevBtn.type = 'button'; 2071 prevBtn.className = 'slider-edge left'; 2072 prevBtn.setAttribute('aria-label', 'Previous slide'); 2073 prevBtn.innerHTML = '<i class="fa-solid fa-chevron-left" aria-hidden="true"></i>'; 2074 container.appendChild(prevBtn); 2075 } 2076 2077 if (!nextBtn) { 2078 nextBtn = document.createElement('button'); 2079 nextBtn.type = 'button'; 2080 nextBtn.className = 'slider-edge right'; 2081 nextBtn.setAttribute('aria-label', 'Next slide'); 2082 nextBtn.innerHTML = '<i class="fa-solid fa-chevron-right" aria-hidden="true"></i>'; 2083 container.appendChild(nextBtn); 2084 } 2085 2086 var dotsWrap = container.querySelector('.slider-dots'); 2087 if (!dotsWrap) { 2088 dotsWrap = document.createElement('div'); 2089 dotsWrap.className = 'slider-dots'; 2090 dotsWrap.setAttribute('role', 'tablist'); 2091 dotsWrap.setAttribute('aria-label', 'Slide navigation'); 2092 container.appendChild(dotsWrap); 2093 } 2094 2095 // Pause/Play control so autoplay can be stopped by keyboard/AT users, 2096 // not just via mouseenter. 2097 var pauseBtn = container.querySelector('.slider-pause'); 2098 if (!pauseBtn) { 2099 pauseBtn = document.createElement('button'); 2100 pauseBtn.type = 'button'; 2101 pauseBtn.className = 'slider-pause'; 2102 container.appendChild(pauseBtn); 2103 } 2104 2105 container.classList.add('slider-initialized'); 2106 container.dataset.sliderInit = '1'; 2107 2108 // --- STEP 4: State & behavior --- 2109 var index = 0; 2110 var autoTimer = null; 2111 var AUTO_MS = 6000; 2112 var PAUSE_ON_HOVER = true; 2113 var prefersReducedMotion = window.matchMedia && 2114 window.matchMedia('(prefers-reduced-motion: reduce)').matches; 2115 var userPaused = prefersReducedMotion; // start paused if user prefers reduced motion 2116 2117 // Dots 2118 var dots = []; 2119 function buildDots() { 2120 while (dotsWrap.firstChild) dotsWrap.removeChild(dotsWrap.firstChild); 2121 dots = slides.map(function(_, i) { 2122 var b = document.createElement('button'); 2123 b.type = 'button'; 2124 b.setAttribute('role', 'tab'); 2125 b.setAttribute('aria-label', 'Go to slide ' + (i + 1)); 2126 b.addEventListener('click', function() { goTo(i); });
2127 dotsWrap.appendChild(b); 2128 return b; 2129 }); 2130 } 2131 2132 function updatePauseButton() { 2133 var isPaused = !autoTimer; 2134 pauseBtn.setAttribute('aria-label', isPaused ? 'Play slideshow' : 'Pause slideshow'); 2135 pauseBtn.setAttribute('aria-pressed', String(isPaused)); 2136 pauseBtn.innerHTML = isPaused 2137 ? '<i class="fa-solid fa-play" aria-hidden="true"></i>' 2138 : '<i class="fa-solid fa-pause" aria-hidden="true"></i>'; 2139 } 2140 2141 function updateUI() { 2142 var slideWidth = slides[0].getBoundingClientRect().width || container.getBoundingClientRect().width; 2143 if (!slideWidth) return; // container hidden? wait for next tick 2144 2145 var offset = index * slideWidth * -1; 2146 track.style.transform = 'translateX(' + offset + 'px)'; 2147 2148 dots.forEach(function(d, i) { 2149 d.setAttribute('aria-current', i === index ? 'true' : 'false'); 2150 }); 2151 } 2152 2153 function goTo(i) { 2154 index = (i + slides.length) % slides.length; 2155 updateUI(); 2156 resetAuto(); 2157 } 2158 function next() { goTo(index + 1); } 2159 function prev() { goTo(index - 1); } 2160 2161 // Autoplay 2162 function startAuto() { 2163 stopAuto(); 2164 if (userPaused) { updatePauseButton(); return; } 2165 autoTimer = setInterval(next, AUTO_MS); 2166 updatePauseButton(); 2167 } 2168 function stopAuto() { 2169 if (autoTimer) { clearInterval(autoTimer); autoTimer = null; } 2170 updatePauseButton(); 2171 } 2172 function resetAuto() { if (!userPaused) startAuto(); } 2173 2174 pauseBtn.addEventListener('click', function() { 2175 userPaused = !userPaused; 2176 if (userPaused) stopAuto(); else startAuto(); 2177 }); 2178 2179 // Keyboard 2180 container.setAttribute('tabindex', '0'); 2181 container.addEventListener('keydown', function(e) { 2182 var k = e.key; 2183 if (k === 'ArrowRight' || k === 'PageDown') { e.preventDefault(); next(); } 2184 else if (k === 'ArrowLeft' || k === 'PageUp') { e.preventDefault(); prev(); } 2185 else if (k === 'Home') { e.preventDefault(); goTo(0); } 2186 else if (k === 'End') { e.preventDefault(); goTo(slides.length - 1); } 2187 }); 2188 2189 // Buttons 2190 prevBtn.addEventListener('click', prev); 2191 nextBtn.addEventListener('click', next); 2192 2193 // Pause on hover (does not permanently set userPaused, just suspends the timer) 2194 if (PAUSE_ON_HOVER) { 2195 container.addEventListener('mouseenter', function() { 2196 if (autoTimer) { clearInterval(autoTimer); autoTimer = null; } 2197 }); 2198 container.addEventListener('mouseleave', function() { 2199 if (!userPaused) startAuto(); 2200 }); 2201 } 2202 2203 // Touch swipe 2204 var startX = null, startY = null, dragging = false; 2205 var SWIPE_THRESHOLD = 40; // px 2206 container.addEventListener('touchstart', function(e) { 2207 var t = e.touches ? e.touches[0] : e; 2208 startX = t.clientX; startY = t.clientY; dragging = true; 2209 if (autoTimer) { clearInterval(autoTimer); autoTimer = null; } 2210 }, { passive: true }); 2211 container.addEventListener('touchmove', function(e) { 2212 if (!dragging) return; 2213 var t = e.touches ? e.touches[0] : e; 2214 var dx = t.clientX - startX, dy = t.clientY - startY; 2215 if (Math.abs(dx) > Math.abs(dy) && Math.abs(dx) > SWIPE_THRESHOLD) { 2216 dragging = false; (dx < 0 ? next() : prev()); 2217 } 2218 }, { passive: true }); 2219 container.addEventListener('touchend', function() { 2220 dragging = false; 2221 if (!userPaused) startAuto(); 2222 }); 2223 2224 // Resize & late image load sync 2225 var resizeTimer = null; 2226 window.addEventListener('resize', function() { 2227 if (resizeTimer) clearTimeout(resizeTimer); 2228 resizeTimer = setTimeout(updateUI, 150); 2229 }); 2230 window.addEventListener('load', updateUI); 2231 2232 // On hidden container at init (e.g., tabs), re-check. 2233 // Also re-check via ResizeObserver where available, so sliders revealed 2234 // later (e.g. inside a tab panel opened after page load) still sync. 2235 setTimeout(updateUI, 200); 2236 setTimeout(updateUI, 500); 2237 2238 if (typeof ResizeObserver !== 'undefined') { 2239 var ro = new ResizeObserver(function() { updateUI(); }); 2240 ro.observe(container); 2241 } 2242 2243 // Init 2244 buildDots(); 2245 goTo(0); 2246 if (!userPaused) startAuto(); 2247 updatePauseButton(); 2248 } 2249 2250 /** 2251 * Adapt events markup (.event_item) to the news structure the slider expects.
2252 * Returns the new slides NodeList (now with .news_item). 2253 */ 2254 function adaptEventsToNews(container, eventSlides) { 2255 eventSlides.forEach(function(slide) { 2256 // 1) Mark as news_item so existing logic sees it 2257 slide.classList.add('news_item'); 2258 2259 // 2) Extract typical events markup 2260 var dl = slide.querySelector('dl'); 2261 var dt = dl ? dl.querySelector('dt') : null; 2262 var nameLink = dt ? dt.querySelector('.msl_event_name') : null; 2263 var imgWrap = dt ? dt.querySelector('.msl_event_image') : null; 2264 var desc = slide.querySelector('.msl_event_description'); 2265 2266 // 3) Build grid columns 2267 var grid = document.createElement('div'); 2268 grid.className = 'slide-grid'; 2269 2270 var imgCol = document.createElement('div'); 2271 imgCol.className = 'slide-image'; 2272 2273 var textCol = document.createElement('div'); 2274 textCol.className = 'slide-text'; 2275 2276 // Image column: convert to .news_image for CSS compatibility 2277 if (imgWrap) { 2278 imgWrap.classList.add('news_image'); 2279 var img = imgWrap.querySelector('img'); 2280 if (img) { 2281 img.removeAttribute('width'); 2282 img.removeAttribute('height'); 2283 img.loading = 'lazy'; 2284 } 2285 imgCol.appendChild(imgWrap); 2286 } 2287 2288 // Text column: wrap name in h5, convert description to .leader 2289 if (nameLink) { 2290 var h2 = document.createElement('h2'); 2291 h2.appendChild(nameLink); 2292 textCol.appendChild(h2); 2293 } 2294 if (desc) { 2295 desc.classList.add('leader'); 2296 textCol.appendChild(desc); 2297 } 2298 2299 // Replace slide content 2300 while (slide.firstChild) slide.removeChild(slide.firstChild); 2301 slide.appendChild(grid); 2302 grid.appendChild(imgCol); 2303 grid.appendChild(textCol); 2304 }); 2305 2306 // Return as slides for the rest of the flow 2307 return Array.prototype.slice.call(container.querySelectorAll('.news_item')); 2308 } 2309})(); 2310<!-- end of novus-scripts snippet --> 2311 2312 }); 2313</script>
2313 2314 </div> 2315 2316 2317
2317<script type="text/javascript" src="/stylesheet/novus/chnageh1.js?v=10" defer="defer"></script>
2317 2318 2319 2320
2320<script id="ctl00_commonjs" type="text/javascript" src="//static-uk.ukmsl.net/8.90/scripts/common.js"></script>
2320 2321
2321<script type="text/javascript" src="/pagestylesheet/news/article/advice/moving-into-rented-accommodation/scripts.js?v=32"></script>
2321 2322 2323 2324 2325 2326 2327
2328<script type="text/javascript"> 2329//<![CDATA[ 2330Sys.Application.add_init(function() { 2331 $create(Sys.Extended.UI.Animation.UpdatePanelAnimationBehavior, {"id":"ctl00_Main_RatingCtl1_upAe1","onUpdated":"{\"AnimationName\":\"Parallel\",\"duration\":\"1\",\"AnimationChildren\":[{\"AnimationName\":\"HideAction\",\"TargetScript\":\"$get(\\u0027img\\u0027)\",\"AnimationChildren\":[]},{\"AnimationName\":\"HideAction\",\"TargetScript\":\"$get(\\u0027txt\\u0027)\",\"visible\":\"true\",\"AnimationChildren\":[]}]}","onUpdating":"{\"AnimationName\":\"Parallel\",\"duration\":\"0\",\"AnimationChildren\":[{\"AnimationName\":\"HideAction\",\"TargetScript\":\"$get(\\u0027img\\u0027)\",\"visible\":\"true\",\"AnimationChildren\":[]},{\"AnimationName\":\"HideAction\",\"TargetScript\":\"$get(\\u0027txt\\u0027)\",\"AnimationChildren\":[]}]}","triggerControlsClientID":[]}, null, null, $get("ctl00_Main_RatingCtl1_upRating")); 2332}); 2333//]]> 2334</script>
2334 2335</form> 2336 2337</body> 2338</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.