1/*! 2 * jQuery Cookie Plugin 3 * https://github.com/carhartl/jquery-cookie 4 * 5 * Copyright 2011, Klaus Hartl 6 * Dual licensed under the MIT or GPL Version 2 licenses. 7 * http://www.opensource.org/licenses/mit-license.php 8 * http://www.opensource.org/licenses/GPL-2.0 9 */ 10(function($){$.cookie=function(key,value,options){if(arguments.length>1&&(!/Object/.test(Object.prototype.toString.call(value))||value===null||value===undefined)){options=$.extend({},options);if(value===null||value===undefined){options.expires=-1;} 11if(typeof options.expires==='number'){var days=options.expires,t=options.expires=new Date();t.setDate(t.getDate()+days);} 12value=String(value);return(document.cookie=[encodeURIComponent(key),'=',options.raw?value:encodeURIComponent(value),options.expires?'; expires='+options.expires.toUTCString():'',options.path?'; path='+options.path:'',options.domain?'; domain='+options.domain:'',options.secure?'; secure':''].join(''));} 13options=value||{};var decode=options.raw?function(s){return s;}:decodeURIComponent;var pairs=document.cookie.split('; ');for(var i=0,pair;pair=pairs[i]&&pairs[i].split('=');i++){if(decode(pair[0])===key)return decode(pair[1]||'');} 14return null;};})(jQuery); 15/*! 16 * JavaScript Cookie v2.2.0 17 * https://github.com/js-cookie/js-cookie 18 * 19 * Copyright 2006, 2015 Klaus Hartl & Fagner Brack 20 * Released under the MIT license 21 */;(function(factory){var registeredInModuleLoader;if(typeof define==='function'&&define.amd){define(factory);registeredInModuleLoader=true;} 22if(typeof exports==='object'){module.exports=factory();registeredInModuleLoader=true;} 23if(!registeredInModuleLoader){var OldCookies=window.Cookies;var api=window.Cookies=factory();api.noConflict=function(){window.Cookies=OldCookies;return api;};}}(function(){function extend(){var i=0;var result={};for(;i<arguments.length;i++){var attributes=arguments[i];for(var key in attributes){result[key]=attributes[key];}} 24return result;} 25function decode(s){return s.replace(/(%[0-9A-Z]{2}
25)+/g,decodeURIComponent);} 26function init(converter){function api(){} 27function set(key,value,attributes){if(typeof document==='undefined'){return;} 28attributes=extend({path:'/'},api.defaults,attributes);if(typeof attributes.expires==='number'){attributes.expires=new Date(new Date()*1+attributes.expires*864e+5);} 29attributes.expires=attributes.expires?attributes.expires.toUTCString():'';try{var result=JSON.stringify(value);if(/^[\{\[]/.test(result)){value=result;}}catch(e){} 30value=converter.write?converter.write(value,key):encodeURIComponent(String(value)) 31.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent);key=encodeURIComponent(String(key)) 32.replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent) 33.replace(/[\(\)]/g,escape);var stringifiedAttributes='';for(var attributeName in attributes){if(!attributes[attributeName]){continue;} 34stringifiedAttributes+='; '+attributeName;if(attributes[attributeName]===true){continue;} 35stringifiedAttributes+='='+attributes[attributeName].split(';')[0];} 36return(document.cookie=key+'='+value+stringifiedAttributes);} 37function get(key,json){if(typeof document==='undefined'){return;} 38var jar={};var cookies=document.cookie?document.cookie.split('; '):[];var i=0;for(;i<cookies.length;i++){var parts=cookies[i].split('=');var cookie=parts.slice(1).join('=');if(!json&&cookie.charAt(0)==='"'){cookie=cookie.slice(1,-1);} 39try{var name=decode(parts[0]);cookie=(converter.read||converter)(cookie,name)||decode(cookie);if(json){try{cookie=JSON.parse(cookie);}catch(e){}} 40jar[name]=cookie;if(key===name){break;}}catch(e){}} 41return key?jar[key]:jar;} 42api.set=set;api.get=function(key){return get(key,false);};api.getJSON=function(key){return get(key,true);};api.remove=function(key,attributes){set(key,'',extend(attributes,{expires:-1}));};api.defaults={};api.withConverter=init;return api;} 43return init(function(){});})); 44var SR=(function($){'use strict';var entities,settings={siteId:1,locale:'en-GB',siteName:'SpareRoom',correctUrl:'www.spareroom.co.uk',staticServer:'assets.spareroom.co.uk',appSubdir:'flatshare',googleMapsApiKey:'AIzaSyC0wK04h2oqKVlxchn_DLE_YXEWU6xtRtg',loginReturnPath:'/',facebook:{appLocale:'en_GB',version:'2.12'}},init=function(options){log('Initialising SR');entities=new SR.HTMLEntities();$.extend(settings,options);dev.init();$.ajaxSetup({beforeSend:loading.start,complete:loading.stop});polyfills.init();flash.addClass();addEvents();},dev={init:function(){if('devEnv' in settings){$('<div/>',{html:$('<p/>',{html:'Dev: '+settings.devEnv}) 45.css('color','red') 46.css('font-family','monospace')}) 47.css('position','fixed') 48.css('z-index',100) 49.css('pointer-events','none') 50.prependTo('body');}}},addEvents=function(){if($('html').hasClass('js')){$('.popup_box').removeClass('popup_box_css');$(document).on('keydown',keyboardListen);$('.popup_box a').on('click',function(e){e.stopPropagation();});$('.popup_box').on('click',function(){$(this).toggleClass('popup_box_active');return false;});$(document).on('click',function(){$('.popup_box').removeClass('popup_box_active');});}},setLocalStorageItem=function(key,value){if(Modernizr.localstorage){localStorage.setItem(key,JSON.stringify(value));}else{return false;}},getLocalStorageItem=function(key,encoding){var localStorageItem=Modernizr.localstorage?localStorage.getItem(key):null;if(localStorageItem){if(encoding){switch(encoding){case"none":return getLocalStorageItemUnencoded(localStorageItem);break;case"HTML":return getLocalStorageItemEncoded(localStorageItem,"escapeHTML");break;case"URIComponent":return getLocalStorageItemEncoded(localStorageItem,"encodeURIComponent");break;default:SR.log("Incorrect encoding type. Accepted encoding types are: 'none', 'HTML','URIComponent'");}}else{SR.log("Please specify encoding type. Accepted encoding types are: 'none', 'HTML','URIComponent'");}}else{SR.log("LocalStorage is not supported or localStorage item name is invalid/unspecified");}},getLocalStorageItemUnencoded=function(key){var output=[],localStorageItem=key;try{localStorageItem=JSON.parse(localStorageItem);if(typeof localStorageItem==="number")throw"Not an array so don't loop";for(var i=0;i<numberOfItems;i++){output.push((localStorageItem[i]));}} 51catch(err){output=localStorageItem;} 52return output;},getLocalStorageItemEncoded=function(key,encodingFunction){var unencoded=getLocalStorageItemUnencoded(key),namespace=SR[encodingFunction]?"SR":"window",encoded=[];if(typeof unencoded!=="object"){return window[namespace][encodingFunction](unencoded);}else{for(var i=0;i<unencoded.length;i++){encoded.push(window[namespace][encodingFunction](unencoded[i]));} 53return encoded;}},escapeHTML=function(str){return entities.encode(str);},keyboardListen=function(event){var key;switch(event.keyCode){case 13:key='Enter';break;case 27:key='Escape';break;}
54if(key){$(SR).trigger('pressed'+key);}},loading={start:function(){$('html').addClass('loading');},stop:function(){$('html').removeClass('loading');}},log=function(){if(!window.console||!SR.settings.devEnv){return;}else if(arguments.length===1){console.log(arguments[0]);}else{console.log(Array.prototype.slice.call(arguments));}},localise=function(str){return SR.localisations[str]||str;},mailtoLinks=(function(){var linkify=function(){var $element=$(this),email=$element.text() 55.replace(/ at /,'@') 56.replace(/ dot /g,'.');$element 57.text(email) 58.wrap('<a href="mailto:'+email+'" />');};return function(selector){$(selector).each(linkify);};}()),makeClickable=(function(){var outer=function(e){var $element=$(this),modifier=e.shiftKey||e.altKey||e.ctrlKey||e.metaKey,href=$element.data('href');if(modifier){window.open(href);}else{window.location.href=href;} 59e.defaultPrevented();},inner=function(e){e.stopPropagation();};return function(selector){$(selector) 60.click(outer) 61.find('a, :input') 62.click(inner);};}()),url={site:function(path){return document.location.protocol+'//'+ 63settings.correctUrl+(path||'');},app:function(path){return url.site('/'+settings.appSubdir+'/'+path);},cdn:function(path){return document.location.protocol+'//'+ 64settings.staticServer+'/'+path;}},polyfills={init:function(){for(var f in this.fix){if(window.Modernizr){if(!window.Modernizr[f]){polyfills.fix[f]();}}}},fix:{placeholder:(function(){var selector='input[placeholder]',run=function(){$(selector) 65.on({blur:restore,focus:clear}) 66.trigger('blur') 67.parents('form') 68.on({submit:reset});},clear=function(){if($(this).val()===$(this).attr('placeholder')){$(this).val('');}},restore=function(){if(!$(this).val()){$(this).val($(this).attr('placeholder'));}},reset=function(){$(selector).each(clear);};return run;}())}},flash={addClass:function(){if(this.enabled()){$('html').addClass('flash');}else{$('html').addClass('no-flash');}},enabled:function(){var flash=false;try{var obj=new ActiveXObject('ShockwaveFlash.ShockwaveFlash');if(obj)flash=true;}catch(e){var nav=navigator.mimeTypes["application/x-shockwave-flash"];if(nav!==undefined)flash=true;} 69return flash;}},rgbToHex=function(rgbValue){if(!rgbValue){return false;} 70var rgb=rgbValue.match(/^rgb\(\s*(\d+),\s*(\d+),\s*(\d+)\)$/);if(!rgb||rgb.length!=4){return false;} 71function hex(x){return("0"+parseInt(x).toString(16)).slice(-2);} 72return"#"+hex(rgb[1])+hex(rgb[2])+hex(rgb[3]);},getQueryStringParameter=function(param){var result=null,tmp=[];location.search.substr(1).split("&").forEach(function(item){tmp=item.split("=");if(tmp[0]===param)result=decodeURIComponent(tmp[1]);});return result;},toTitleCase=function(string){try{return string.replace(/\b\w*/g,function(txt){return txt.charAt(0).toUpperCase()+txt.substr(1).toLowerCase();});} 73catch(err){SR.log("Incorrect parameter type. Only strings can be converted to title case.");}},ApiQuery=function(params){this.params=params;this.busy=false;};ApiQuery.prototype.run=function(){var me=this;this.busy=true;return $.ajax({url:SR.url.app('api.pl'),data:this.params,dataType:'json',success:function(){me.busy=false;$(me).trigger('loaded',arguments);}});};return{ApiQuery:ApiQuery,inFrame:window.top!==window.self,init:init,loading:loading,l:localise,localisations:{},log:log,mailtoLinks:mailtoLinks,makeClickable:makeClickable,polyfills:polyfills,settings:settings,url:url,user:{id:0,name:''},flash:flash,rgbToHex:rgbToHex,getQueryStringParameter:getQueryStringParameter,escapeHTML:escapeHTML,toTitleCase:toTitleCase,setLocalStorageItem:setLocalStorageItem,getLocalStorageItem:getLocalStorageItem};}(jQuery)); 74var SR=(function(module,$){'use strict';var customerID=parseInt(Date.parse(new Date())+''+Math.floor(Math.random()*(999-100)+100)),messageSeen=0;var init=function(){checkCookie();},checkCookie=function(){var cDate=new Date();cDate.setTime(cDate.getTime()-1);document.cookie='testcookie=true;path=/;';var cookie=document.cookie.replace(/(?:(?:^|.*;\s*)testcookie\s*\=\s*([^;]*).*$)|^.*$/,"$1");document.cookie='testcookie=me;expires='+cDate.toGMTString()+';path=/;';if(!cookie){getForms();}else{return;}},getForms=function(){var dataCookieCheck=document.querySelectorAll('[data-cookie-check]'),self='self';for(var i=0;i<dataCookieCheck.length;i++){var dataCookieValue=dataCookieCheck[i].getAttribute('data-cookie-check');if(self==dataCookieValue){cookieEnable(dataCookieCheck[i]);}else{var form=document.getElementById(dataCookieValue).getElementsByTagName('form')[0];dataCookieCheck[i].addEventListener("click",function(){cookieEnable(form);},false);}}},cookieEnable=function(form){if(form.hasAttribute('data-cookie-check-message'))return;form.addEventListener("submit",function(e){cookieTracking("Cookies","submit form",form.name);},false);cookieTracking("Cookies","no cookie");var p=document.createElement('p'),a=document.createElement('a'),textP=document.createTextNode('Like most websites, SpareRoom uses co
74okies. We\'ve detected your browser currently has cookies disabled and you\'ll need to enable these to use the site\'s account features. '),textA=document.createTextNode('Click here to find how to change your browser settings.'),link='https://www.google.com/search?q=how+to+enable+cookies+in+my+browser';a.href=link;p.className='enableCookies msg warning msg-large';a.appendChild(textA);a.setAttribute("target","_new");p.appendChild(textP);p.appendChild(a);form.insertBefore(p,form.firstChild);form.setAttribute("data-cookie-check-message","created");},cookieTracking=function(category,action,label){var ga_ua='UA-100499283-4',ga_ec=category,ga_ea=action,ga_el=label,ga_el_output=ga_el?'&el='+ga_el:'';var ga_path='https://www.google-analytics.com/collect?',ga_string='v=1&t=event&tid='+ga_ua+'&cid='+customerID+'&ec='+ga_ec+'&ea='+ga_ea+ga_el_output;var post={'async':true,'crossDomain':true,'url':ga_path+ga_string,"method":"POST"} 75$.ajax(post).done(function(response){return response;});};module.checkCookies={init:init};return module;}(SR||{},jQuery)); 76var SR=(function(module,$){'use strict';var Slideshow=function(options){this.activeSlide=0;this.speed=options.speed||0;this.delay=options.delay||3000;this.$slides=$(options.container).children('.slide');this.noOfSlides=this.$slides.length;this.start();},cycle=function(){this.$slides 77.filter(':eq('+this.activeSlide+')') 78.fadeOut(this.speed);this.activeSlide=(this.activeSlide+1)>=this.noOfSlides?0:this.activeSlide+1;this.$slides 79.filter(':eq('+this.activeSlide+')') 80.stop(true,true) 81.fadeIn(this.speed);};Slideshow.prototype.start=function(){this._interval=setInterval($.proxy(cycle,this),this.delay);};Slideshow.prototype.stop=function(){clearInterval(this._interval);};module.Slideshow=Slideshow;return module;}(SR||{},jQuery)); 82var SR=(function(module,$){const settings={apiUrl:'',apiKey:'87d818c3a0057420063bfaf3c47246bb',appConfig:{appId:0,status:true,cookie:true,xfbml:false,version:`v${SR.settings.facebook.version}`,},appPermissions:['email','user_birthday','user_gender'],passthrough:{custom_password_required:0,update_connections:0,iso_language:window._sr.session.language,},};const init=function(callback){if(module.facebookConnect.loaded()){return false;} 83load(function(){startApp();callback&&callback();});};let elemID='fb_login';const setSettings=function(options){$.extend(true,settings,options);return this;};var load=function(callback){if(loaded()){callback&&callback(true);return;} 84window.fbAsyncInit=callback;localise();$('body').append($('<div/>',{id:'fb-root'}));$.ajax({url:settings.apiUrl,dataType:'script',cache:true,});};var localise=function(){settings.appConfig.channelUrl=`/html/fbconnect/channel-${SR.settings.facebook.appLocale}.html`;settings.apiUrl=`${document.location.protocol}//connect.facebook.net/${SR.settings.facebook.appLocale}/sdk.js`;};var loaded=function(){return'FB' in window;};const addEvents=function(){$('[data-facebook-connect]').click(pressedLogin);};var pressedLogin=function(){elemID=$(this).attr('id');if($(this).attr('data-fb-button-disabled')!='true'){setSettings({passthrough:$(this).data('passthrough'),});FB.login(connect,{auth_type:'rerequest',scope:settings.appPermissions.join(','),});} 85return false;};var startApp=function(){FB.init(settings.appConfig);FB.getLoginStatus(autoConnect);addEvents();};var connect=function(response){if(response.authResponse){login();}};var autoConnect=function(response){if(response.authResponse&&!SR.user.id&&!$.cookie('logged_out')){json.login();}};var login=function(){$(`#${elemID}`) 86.find('i') 87.attr('class','far fa-spinner fa-spin');json.login(handleLogin);};const reload=function(redirect_url){const index=redirect_url.indexOf('#');if(index>-1){if(redirect_url.slice(0,index)==location.href.split(location.hash||'#')[0]){window.location.href=redirect_url;return window.location.reload();}} 88return(window.location.href=redirect_url);};const storeRegistration=function(response){const{affiliate}=window._sr;const user_type_new=response.session.usertype_new;const{arpu}=response;if(user_type_new&&arpu){const user_type=user_type_new=='haveashare'?'offerer':'seeker';if(user_type=='offerer'){affiliate.anticipated_revenue_per_offerer=(arpu/100).toFixed(2);}else{affiliate.anticipated_revenue_per_seeker=(arpu/100).toFixed(2);}} 89const registered={date:Date.now(),affiliate:affiliate,};if(window.localStorage){window.localStorage.setItem('registered',JSON.stringify(registered));} 90return registrationRedirect(response);};const storeReEngaged=function(response){const{redirect_url}=response;const{affiliate}=window._sr;affiliate.anticipated_revenue_per_offerer=0;affiliate.anticipated_revenue_per_seeker=0;const{uuid}=response.session;
90const user_type=response.session.usertype=='haveashare'?'offerer':'seeker';const re_engaged={date:Date.now(),affiliate:affiliate,};if(window.localStorage){window.localStorage.setItem('re-engaged',JSON.stringify(re_engaged));} 91function success(response){const{amount}=response.data.arpu;if(user_type=='offerer'){affiliate.anticipated_revenue_per_offerer=(amount/100).toFixed(2);}else{affiliate.anticipated_revenue_per_seeker=(amount/100).toFixed(2);} 92re_engaged.affiliate=affiliate;if(window.localStorage){window.localStorage.setItem('re-engaged',JSON.stringify(re_engaged));} 93return reload(redirect_url);} 94if(affiliate.id){return $.ajax({type:'POST',url:`/api/users/${uuid}/reactivate`,success:success,dataType:'json',contentType:'application/json',data:JSON.stringify({affiliate:{id:affiliate.id,},}),});} 95if(window.localStorage){window.localStorage.setItem('re-engaged',JSON.stringify(re_engaged));} 96return reload(redirect_url);};var handleLogin=function(response){if(response.success){if(response.session.user_reactivated_after_3months){return storeReEngaged(response);} 97if(response.justregistered){return storeRegistration(response);} 98return reload(response.redirect_url);} 99if(response.response_id==610||response.response_id==649){reload(response.redirect_url);}else{html.login();}};var registrationRedirect=function(response){let redirect=response.redirect_url;const searchString=redirect.split('?')[1];if(searchString){if(searchString[searchString.length-1]=='&'){redirect+='facebook_signup=1';return reload(redirect);} 100redirect+='&facebook_signup=1';return reload(redirect);} 101redirect+='?facebook_signup=1';return reload(redirect);};const getLoginfromUrl=function(){if(elemID!='fb_login-reg-promp'){return SR.settings.loginReturnPath;} 102const urlParser=document.createElement('a');urlParser.href=SR.settings.loginReturnPath;const searchString=urlParser.search;if(searchString){if(searchString[searchString.length-1]=='&'){return`${SR.settings.loginReturnPath}reg_popup=1`;} 103return`${SR.settings.loginReturnPath}®_popup=1`;} 104return`${SR.settings.loginReturnPath}?reg_popup=1`;};var json={login:function(callback){$.post(SR.url.app('facebook_connect.pl'),$.extend({format:'json',loginfrom_url:getLoginfromUrl(),},settings.passthrough,),callback,);},logout:function(callback){$.post(SR.url.app('logout.pl'),{format:'json'},callback);},};var html={login:function(){window.location.href=SR.url.app(`${'facebook_connect.pl' + '?loginfrom_url='}${ 105 SR.settings.loginReturnPath 106 }&${$.param(settings.passthrough)}`,);},logout:function(){window.location.href=SR.url.app('logout.pl');},};module.facebookConnect={init:init,load:load,loaded:loaded,html:html,json:json,setSettings:setSettings,};return module;})(SR||{},jQuery); 107var SR=(function(module,$){'use strict';if(!Number.isNaN){Number.isNaN=function(n){return n!==n;};} 108if(!String.prototype.trim){String.prototype.trim=function(){return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,'');};} 109var init=function(queue,callback){},inArray=function(needle,haystack){var result=false;for(var i in haystack){if(haystack[i]===needle){result=true;break;}} 110return result;},mergeObjects=function(options,defaults){for(var prop in options){if(options.hasOwnProperty(prop)){defaults[prop]=options[prop];}} 111return defaults;},createObject=function(props,values){var newObject={};for(var key in values){if(inArray(key,props)){newObject[key]=values[key];}} 112return newObject;},trackEvent=function(category,action,label,value,nonInteraction){if(category&&action){if(typeof label==="number"){label=String(label);}else if(typeof label!=="string"){label="";} 113if(typeof value==="string"){value=Number(value);} 114if(typeof value!=="number"||Number.isNaN(value)){value=0;} 115nonInteraction=(nonInteraction==1||nonInteraction=="true")?true:false;if(window.dataLayer){dataLayer.push({'ga_event_category':category,'ga_event_action':action,'ga_event_label':label.trim(),'ga_event_value':Math.round(value),'ga_event_non_interaction':nonInteraction,'event':'ga.event'})}else if(window.ga){var fields={hitType:'event',eventCategory:category,eventAction:action,eventLabel:label.trim(),} 116if(value){fields.eventValue=Math.round(value);} 117if(nonInteraction){fields.nonInteraction=nonInteraction;} 118ga('send',fields);}}else{SR.log('SR.tracking.trackEvent could not be executed - both "category" and "action" must be set');}},trackFormError=function(eventlabel){trackEvent("Form","Validation Error",eventlabel);},trackEcommerce=function(config){var defaults={affiliation:'SpareRoom',shipping:0,tax:0,price:0,quantity:1,revenue:0,sku:""};var numberTypes=['revenue','shipping','tax','price','quantity'];function castTypeToNumber(object,arrayOfProperties){var arrayLength=arrayOfProperties.length;for(var i=0;i<arrayLength;
118i++){if(object.hasOwnProperty(arrayOfProperties[i])){object[arrayOfProperties[i]]=parseFloat(object[arrayOfProperties[i]]);}} 119return object;};if(config.hasOwnProperty('id')&&config.hasOwnProperty('name')){config=mergeObjects(config,defaults);config=castTypeToNumber(config,numberTypes);var props={transaction:['id','affiliation','revenue','shipping','tax'],item:['name','sku','category','price','quantity']};var item=createObject(props.item,config);var transaction=createObject(props.transaction,config);dataLayer.push({'transactionId':transaction.id,'transactionAffiliation':transaction.affiliation,'transactionTotal':transaction.revenue,'transactionTax':transaction.tax,'transactionShipping':transaction.shipping,'transactionProducts':[item],'event':'ga.ecommerce.transaction'});}else SR.log('SR.tracking.trackEcommerce could not be executed - both "id" and "name" must be provided with the config object');},trackVirtualPageView=function(page){if(window.dataLayer){dataLayer.push({"ga_virtual_page":page,"event":"ga.virtual_page_viewed"});}else if(window.ga){ga('send','pageview',page);}};module.tracking={init:init,trackEvent:trackEvent,trackVirtualPageView:trackVirtualPageView,trackEcommerce:trackEcommerce,trackFormError:trackFormError,};return module;}(SR||{},jQuery)); 120var SR=(function(module,$){'use strict';var init=function(){if(SR.localeChoice?.init){SR.localeChoice.init();} 121try{new SR.Slideshow({container:'#header .slideshow',speed:350,delay:6000});}catch(e){};$(window).on('load',delayed);},delayed=function(){if(SR.liveChat){SR.liveChat.init(function(){$('[data-livechat]').after(new SR.liveChat.Button({elementId:'live_chat_button_1',labels:{online:'<div class="live_chat_online">Or use our <span class="live_chat_text">live chat</span> <i class="fas fa-comments"></i></div>',offline:''}}));});}};module.spareroom={init:init};return module;}(SR||{},jQuery)); 122var SR=(function(module,$){'use strict';var HTMLEntities=function(){},regUnsafe=/[\x00-\x2F\x3A-\x40\x5B-\x60\x7B-\xFF]/g,encodeMap={'&':'amp','>':'gt','<':'lt','"':'quot','\xA0':'nbsp','\xA1':'iexcl','\xA2':'cent','\xA3':'pound','\xA4':'curren','\xA5':'yen','\xA6':'brvbar','\xA7':'sect','\xA8':'uml','\xA9':'copy','\xAA':'ordf','\xAB':'laquo','\xAC':'not','\xAD':'shy','\xAE':'reg','\xAF':'macr','\xB0':'deg','\xB1':'plusmn','\xB2':'sup2','\xB3':'sup3','\xB4':'acute','\xB5':'micro','\xB6':'para','\xB7':'middot','\xB8':'cedil','\xB9':'sup1','\xBA':'ordm','\xBB':'raquo','\xBC':'frac14','\xBD':'frac12','\xBE':'frac34','\xBF':'iquest','\xC0':'Agrave','\xC1':'Aacute','\xC2':'Acirc','\xC3':'Atilde','\xC4':'Auml','\xC5':'Aring','\xC6':'AElig','\xC7':'Ccedil','\xC8':'Egrave','\xC9':'Eacute','\xCA':'Ecirc','\xCB':'Euml','\xCC':'Igrave','\xCD':'Iacute','\xCE':'Icirc','\xCF':'Iuml','\xD0':'ETH','\xD1':'Ntilde','\xD2':'Ograve','\xD3':'Oacute','\xD4':'Ocirc','\xD5':'Otilde','\xD6':'Ouml','\xD7':'times','\xD8':'Oslash','\xD9':'Ugrave','\xDA':'Uacute','\xDB':'Ucirc','\xDC':'Uuml','\xDD':'Yacute','\xDE':'THORN','\xDF':'szlig','\xE0':'agrave','\xE1':'aacute','\xE2':'acirc','\xE3':'atilde','\xE4':'auml','\xE5':'aring','\xE6':'aelig','\xE7':'ccedil','\xE8':'egrave','\xE9':'eacute','\xEA':'ecirc','\xEB':'euml','\xEC':'igrave','\xED':'iacute','\xEE':'icirc','\xEF':'iuml','\xF0':'eth','\xF1':'ntilde','\xF2':'ograve','\xF3':'oacute','\xF4':'ocirc','\xF5':'otilde','\xF6':'ouml','\xF7':'divide','\xF8':'oslash','\xF9':'ugrave','\xFA':'uacute','\xFB':'ucirc','\xFC':'uuml','\xFD':'yacute','\xFE':'thorn','\xFF':'yuml',};HTMLEntities.prototype.encode=function(string){return string.replace(regUnsafe,function(symbol){return encodeMap.hasOwnProperty(symbol)?'&'+encodeMap[symbol]+';':'&#'+symbol.charCodeAt(0)+';';});};module.HTMLEntities=HTMLEntities;return module;}(SR||{},jQuery)); 123var SR=(function(module,$){'use strict';var $storeSearchForm,$locationField,init=function(){$storeSearchForm=$('[data-store-search]');$locationField=$('.searchFormField');addEvents();restoreSearch();},addEvents=function(){$storeSearchForm.submit(saveSearchValueToLocalStorage);},saveSearchValueToLocalStorage=function(){var input=$('[data-store-search-text]:not([disabled]),[data-store-search-radio]:checked'),lastSearch=$(this).find(input).val(),storedSearches=[];if(Modernizr.localstorage&&lastSearch&&!/^\s*$/.test(lastSearch)){if((/^(\w{1,2}\d{1,2})(\w?\s?\d\w{2})?$/).test(lastSearch)){lastSearch=lastSearch.toUpperCase();}else{lastSearch=SR.toTitleCase(lastSearch);} 124SR.setLocalStorageItem('last_search',lastSearch);if(localStorage.last_search_list){storedSearches=SR.getLocalStorageItem('last_search_list',"none");for(var i=storedSearches.length-1;i>=0;i--){if(storedSearches[i].toLowerCase()===lastSearch.toLowerCase()){storedSearches.splice(i,1);}} 125storedSearches.unshift(lastSearch);if(storedSearches.length>15){storedSearches.pop();} 126SR.setLocalStorageItem('last_search_list',storedSearches);}else{SR.setLocalStorageItem('last_search_list',[lastSearch]);}}
126},restoreSearch=function(){if(!$locationField.val()){$locationField.val(SR.getLocalStorageItem("last_search","none"));}};module.saveSearchToLocalStorage={init:init};return module;}(SR||{},jQuery)); 127var SR=(function(module){"use strict";function setAttributes(element,attributesObject){for(var key in attributesObject){if(attributesObject.hasOwnProperty(key)){element.setAttribute(key,attributesObject[key]);}} 128return element;} 129function createLink(attributes){var link=document.createElement("a");return setAttributes(link,attributes);} 130function createDiv(attributes){var div=document.createElement("div");return setAttributes(div,attributes);} 131function createParagraph(attributes){var paragraph=document.createElement("p");return setAttributes(paragraph,attributes);} 132function createSpan(attributes){var span=document.createElement("span");return setAttributes(span,attributes);} 133function createBold(attributes){var bold=document.createElement("b");return setAttributes(bold,attributes);} 134function createFontAwesomeIcon(iconName){var icon=document.createElement("i");var attributes={"aria-hidden":"true","class":"fas fa-"+iconName};return setAttributes(icon,attributes);} 135function createImage(attributes){var img=document.createElement("img");return setAttributes(img,attributes);} 136module.htmlBuilder={createLink:createLink,createDiv:createDiv,createParagraph:createParagraph,createSpan:createSpan,createBold:createBold,createFontAwesomeIcon:createFontAwesomeIcon};return module;})(SR||{}); 137!function(e){e.fn.autoComplete=function(t){var o=e.extend({},e.fn.autoComplete.defaults,t);return"string"==typeof t?(this.each(function(){var o=e(this);"destroy"==t&&(e(window).off("resize.autocomplete",o.updateSC),o.off("blur.autocomplete focus.autocomplete keydown.autocomplete keyup.autocomplete"),o.data("autocomplete")?o.attr("autocomplete",o.data("autocomplete")):o.removeAttr("autocomplete"),e(o.data("sc")).remove(),o.removeData("sc").removeData("autocomplete"))}),this):this.each(function(){function t(e){var t=s.val();if(s.cache[t]=e,e.length&&t.length>=o.minChars){for(var a="",c=0;c<e.length;c++)a+=o.renderItem(e[c],t);s.sc.html(a),s.updateSC(0)}else s.sc.hide()}var s=e(this);s.sc=e('<div class="autocomplete-suggestions '+o.menuClass+'"></div>'),s.data("sc",s.sc).data("autocomplete",s.attr("autocomplete")),s.attr("autocomplete","off"),s.cache={},s.last_val="",s.updateSC=function(t,o){if(s.sc.css({top:s.offset().top+s.outerHeight(),left:s.offset().left,width:s.outerWidth()}),!t&&(s.sc.show(),s.sc.maxHeight||(s.sc.maxHeight=parseInt(s.sc.css("max-height"))),s.sc.suggestionHeight||(s.sc.suggestionHeight=e(".autocomplete-suggestion",s.sc).first().outerHeight()),s.sc.suggestionHeight))if(o){var a=s.sc.scrollTop(),c=o.offset().top-s.sc.offset().top;c+s.sc.suggestionHeight-s.sc.maxHeight>0?s.sc.scrollTop(c+s.sc.suggestionHeight+a-s.sc.maxHeight):0>c&&s.sc.scrollTop(c+a)}else s.sc.scrollTop(0)},e(window).on("resize.autocomplete",s.updateSC),s.sc.appendTo("body"),s.sc.on("mouseleave",".autocomplete-suggestion",function(){e(".autocomplete-suggestion.selected").removeClass("selected")}),s.sc.on("mouseenter",".autocomplete-suggestion",function(){e(".autocomplete-suggestion.selected").removeClass("selected"),e(this).addClass("selected")}),s.sc.on("mousedown",".autocomplete-suggestion",function(t){var a=e(this),c=a.data("val");return(c||a.hasClass("autocomplete-suggestion"))&&(s.val(c),o.onSelect(t,c,a),s.sc.hide()),!1}),s.on("blur.autocomplete",function(){try{over_sb=e(".autocomplete-suggestions:hover").length}catch(t){over_sb=0}over_sb?s.is(":focus")||setTimeout(function(){s.focus()},20):(s.last_val=s.val(),s.sc.hide(),setTimeout(function(){s.sc.hide()},350))}),o.minChars||s.on("focus.autocomplete",function(){s.last_val="\n",s.trigger("keyup.autocomplete")}
137),s.on("keydown.autocomplete",function(t){if((40==t.which||38==t.which)&&s.sc.html()){var a,c=e(".autocomplete-suggestion.selected",s.sc);return c.length?(a=40==t.which?c.next(".autocomplete-suggestion"):c.prev(".autocomplete-suggestion"),a.length?(c.removeClass("selected"),s.val(a.addClass("selected").data("val"))):(c.removeClass("selected"),s.val(s.last_val),a=0)):(a=40==t.which?e(".autocomplete-suggestion",s.sc).first():e(".autocomplete-suggestion",s.sc).last(),s.val(a.addClass("selected").data("val"))),s.updateSC(0,a),!1}if(27==t.which)s.val(s.last_val).sc.hide();else if(13==t.which||9==t.which){var c=e(".autocomplete-suggestion.selected",s.sc);c.length&&s.sc.is(":visible")&&(o.onSelect(t,c.data("val"),c),setTimeout(function(){s.sc.hide()},20))}}),s.on("keyup.autocomplete",function(a){if(!~e.inArray(a.which,[13,27,35,36,37,38,39,40])){var c=s.val();if(c.length>=o.minChars){if(c!=s.last_val){if(s.last_val=c,clearTimeout(s.timer),o.cache){if(c in s.cache)return void t(s.cache[c]);for(var l=1;l<c.length-o.minChars;l++){var i=c.slice(0,c.length-l);if(i in s.cache&&!s.cache[i].length)return void t([])}}s.timer=setTimeout(function(){o.source(c,t)},o.delay)}}else s.last_val=c,s.sc.hide()}})})},e.fn.autoComplete.defaults={source:0,minChars:3,delay:150,cache:1,menuClass:"",renderItem:function(e,t){t=t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&");var o=new RegExp("("+t.split(" ").join("|")+")","gi");return'<div class="autocomplete-suggestion" data-val="'+e+'">'+e.replace(o,"<b>$1</b>")+"</div>"},onSelect:function(e,t,o){}}}(jQuery); 138var SR=(function(module,$){'use strict';if(!Date.now){Date.now=function(){return new Date().getTime();};} 139var Autocompleter=function(options){if(options.hasOwnProperty("input")){configureDefaults(options);callAutocomplete(options.input);} 140else console.log('Autcompleter failed to initialise because no input field had been set');};var configureDefaults=function(options){queryString=mergeObjects(options.queryString,queryString);settings=mergeObjects(options.settings,settings);if(options.hasOwnProperty("url")){url=options.url;}};var mergeObjects=function(options,defaults){for(var prop in options){if(options.hasOwnProperty(prop)){defaults[prop]=options[prop];}} 141return defaults;};var url='/autocompleter.pl',queryString={limit:20,timestamp:Date.now(),campus:'off',format:'json'},settings={minChars:_sr.site.autocomplete_min_chars,delay:400,cache:true},onSelect=function(e,term,item){console.log("item: ",item,"event: ",e,"term",term);};var callAutocomplete=function(input){var xhr;input.autoComplete({source:function(term,response){queryString.q=term;try{xhr.abort();}catch(e){} 142xhr=$.getJSON(url,queryString,function(data){var list=getListFromData(data);response(list);});},minChars:settings.minChars,delay:settings.delay,cache:settings.cache,});};var getListFromData=function(data){var list=[];for(var index in data.list){list.push(data.list[index].search_string);} 143return list;};module.Autocompleter=Autocompleter;return module;}(SR||{},jQuery));
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.