1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <title>Kensho Residence Virtual Tour | SCP Property</title> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 6 <meta name="viewport" id="metaViewport" content="user-scalable=no, initial-scale=1, width=device-width, viewport-fit=cover" data-tdv-general-scale="0.53"/> 7 <meta name="apple-mobile-web-app-capable" content="yes"/> 8 <meta name="apple-mobile-web-app-status-bar-style" content="default"> 9
9<script src="lib/tdvplayer.js?v=1658478401353"></script>
9 10 <link rel="preload" href="locale/en.txt?v=1658478401353" as="fetch" crossorigin="anonymous"/> 11 <link rel="preload" href="script.js?v=1658478401353" as="script"/> 12 <meta name="description" content="Virtual Tour"/> 13 <meta name="theme-color" content="#FFFFFF"/> 14
14<script src="script.js?v=1658478401353"></script>
14 15
15<script type="text/javascript"> 16 var tour; 17 var devicesUrl = {"general":"script_general.js?v=1658478401353","mobile":"script_mobile.js?v=1658478401353","ipad":"script_general.js?v=1658478401353"}; 18 19 (function() 20 { 21 var deviceType = ['general']; 22 if(TDV.PlayerAPI.mobile) 23 deviceType.unshift('mobile'); 24 if(TDV.PlayerAPI.device == TDV.PlayerAPI.DEVICE_IPAD) 25 deviceType.unshift('ipad'); 26 var url; 27 for(var i=0; i<deviceType.length; ++i) { 28 var d = deviceType[i]; 29 if(d in devicesUrl) { 30 url = devicesUrl[d]; 31 break; 32 } 33 } 34 if(typeof url == "object") { 35 var orient = TDV.PlayerAPI.getOrientation(); 36 if(orient in url) { 37 url = url[orient]; 38 } 39 } 40 var link = document.createElement('link'); 41 link.rel = 'preload'; 42 link.href = url; 43 link.as = 'script'; 44 var el = document.getElementsByTagName('script')[0]; 45 el.parentNode.insertBefore(link, el); 46 })(); 47 48 function loadTour() 49 { 50 if(tour) return; 51 52 if (/AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent)) { 53 var preloadContainer = document.getElementById('preloadContainer'); 54 if(preloadContainer) 55 document.body.style.backgroundColor = window.getComputedStyle(preloadContainer).backgroundColor; 56 } 57 58 var settings = new TDV.PlayerSettings(); 59 settings.set(TDV.PlayerSettings.CONTAINER, document.getElementById('viewer')); 60 settings.set(TDV.PlayerSettings.WEBVR_POLYFILL_URL, 'lib/WebVRPolyfill.js?v=1658478401353'); 61 settings.set(TDV.PlayerSettings.HLS_URL, 'lib/Hls.js?v=1658478401353'); 62 settings.set(TDV.PlayerSettings.QUERY_STRING_PARAMETERS, 'v=1658478401353'); 63 64 tour = new TDV.Tour(settings, devicesUrl); 65 tour.bind(TDV.Tour.EVENT_TOUR_INITIALIZED, onVirtualTourInit); 66 tour.bind(TDV.Tour.EVENT_TOUR_LOADED, onVirtualTourLoaded); 67 tour.bind(TDV.Tour.EVENT_TOUR_ENDED, onVirtualTourEnded); 68 tour.load(); 69 } 70 71 function pauseTour() 72 { 73 if(!tour) 74 return; 75 76 tour.pause(); 77 } 78 79 function resumeTour() 80 { 81 if(!tour) 82 return; 83 84 tour.resume(); 85 } 86 87 function onVirtualTourInit() 88 { 89 var updateTexts = function() { 90 document.title = this.trans("tour.name") 91 }; 92 93 tour.locManager.bind(TDV.Tour.LocaleManager.EVENT_LOCALE_CHANGED, updateTexts.bind(tour.locManager)); 94 95 if (tour.player.cookiesEnabled) 96 enableCookies(); 97 else 98 tour.player.bind('enableCookies', enableCookies); 99 } 100 101 function onVirtualTourLoaded() 102 { 103 disposePreloader(); 104 } 105 106 function onVirtualTourEnded() 107 { 108 109 } 110 111 function enableCookies() 112 { 113 114 } 115 116 function setMediaByIndex(index) { 117 if(!tour) 118 return; 119 120 tour.setMediaByIndex(index); 121 } 122 123 function setMediaByName(name) 124 { 125 if(!tour) 126 return; 127 128 tour.setMediaByName(name); 129 } 130 131 function showPreloader() 132 { 133 var preloadContainer = document.getElementById('preloadContainer'); 134 if(preloadContainer != undefined) 135 preloadContainer.style.opacity = 1; 136 } 137 138 function disposePreloader() 139 { 140 var preloadContainer = document.getElementById('preloadContainer'); 141 if(preloadContainer == undefined) 142 return; 143 144 var transitionEndName = transitionEndEventName(); 145 if(transitionEndName) 146 { 147 preloadContainer.addEventListener(transitionEndName, hide, false); 148 preloadContainer.style.opacity = 0; 149 setTimeout(hide, 500); //Force hide. Some cases the transitionend event isn't dispatched with an iFrame. 150 } 151 else 152 { 153 hide(); 154 } 155 156 function hide() 157 { 158 159 document.body.style.backgroundColor = window.getComputedStyle(preloadContainer).backgroundColor; 160 preloadContainer.style.visibility = 'hidden'; 161 preloadContainer.style.display = 'none'; 162 var videoList = preloadContainer.getElementsByTagName("video"); 163 for(var i=0; i<videoList.length; ++i) 164 { 165 var video = videoList[i]; 166 video.pause(); 167 while (video.children.length) 168 video.removeChild(video.children[0]); 169 } 170 } 171 172 function transitionEndEventName () { 173 var el = document.createElement('div'); 174 var transitions = { 175 'transition':'transitionend', 176 'OTransition':'otransitionend', 177 'MozTransition':'transitionend', 178 'WebkitTransition':'webkitTransitionEnd' 179 }; 180 181 var t; 182 for (t in transitions) { 183 if (el.style[t] !== undefined) { 184 return transitions[t]; 185 } 186 } 187 188 return undefined; 189 } 190 } 191 192 function onBodyClick(){ 193 document.body.removeEventListener("click", onBodyClick); 194 document.body.removeEventListener("touchend", onBodyClick); 195 196 } 197 198 function onLoad() {
199 if (/AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent)) 200 { 201 var onOrientationChange = function() 202 { 203 document.documentElement.style.height = 'initial'; 204 Array.from(document.querySelectorAll('.fill-viewport')).forEach(function(element) 205 { 206 element.classList.toggle('landscape-right', window.orientation == -90); 207 element.classList.toggle('landscape-left', window.orientation == 90); 208 }); 209 setTimeout(function() 210 { 211 document.documentElement.style.height = '100%'; 212 }, 500); 213 }; 214 window.addEventListener('orientationchange', onOrientationChange); 215 onOrientationChange(); 216 } 217 218 var params = getParams(location.search.substr(1)); 219 if(params.hasOwnProperty("skip-loading")) 220 { 221 loadTour(); 222 disposePreloader(); 223 return; 224 } 225 226 if (isOVRWeb()){ 227 showPreloader(); 228 loadTour(); 229 return; 230 } 231 232 showPreloader(); 233 loadTour(); 234 } 235 236 237 238 function playVideo(video, autoplayMuted, clickComponent) { 239 function isSafariDesktopV11orGreater() { 240 return /^((?!chrome|android|crios|ipad|iphone).)*safari/i.test(navigator.userAgent) && parseFloat(/Version\/([0-9]+\.[0-9]+)/i.exec(navigator.userAgent)[1]) >= 11; 241 } 242 243 function hasAudio (video) { 244 return video.mozHasAudio || 245 Boolean(video.webkitAudioDecodedByteCount) || 246 Boolean(video.audioTracks && video.audioTracks.length); 247 } 248 249 function detectUserAction() { 250 var component = clickComponent || document.getElementById('preloadContainer'); 251 var onVideoClick = function(e) { 252 if(video.paused) { 253 video.play(); 254 } 255 video.muted = false; 256 if(hasAudio(video)) 257 { 258 e.stopPropagation(); 259 e.stopImmediatePropagation(); 260 e.preventDefault(); 261 } 262 263 component.removeEventListener('click', onVideoClick); 264 component.removeEventListener('touchend', onVideoClick); 265 266 if(component == clickComponent) { 267 setComponentVisibility(false); 268 } 269 }; 270 component.addEventListener("click", onVideoClick); 271 component.addEventListener("touchend", onVideoClick); 272 } 273 274 function setComponentVisibility(visible) { 275 clickComponent.style.visibility = visible ? 'visible' : 'hidden'; 276 } 277 278 if (isSafariDesktopV11orGreater()) { 279 if(autoplayMuted) { 280 video.muted = true; 281 video.play(); 282 } 283 } else { 284 var canPlay = true; 285 var promise = video.play(); 286 if (promise) { 287 promise.catch(function() { 288 if(clickComponent) 289 setComponentVisibility(true); 290 canPlay = false; 291 if(autoplayMuted) { 292 video.muted = true; 293 video.play(); 294 } 295 detectUserAction(); 296 }); 297 } else { 298 canPlay = false; 299 } 300 301 if (!canPlay || video.muted) { 302 detectUserAction(); 303 } else if(clickComponent) { 304 setComponentVisibility(false); 305 } 306 } 307 } 308 309 function isOVRWeb(){ 310 return window.location.hash.substring(1).split('&').indexOf('ovrweb') > -1; 311 } 312 313 function getParams(params) { 314 var queryDict = {}; params.split("&").forEach(function(item) {var k = item.split("=")[0], v = decodeURIComponent(item.split("=")[1]);queryDict[k.toLowerCase()] = v}); 315 return queryDict; 316 } 317 318 document.addEventListener('DOMContentLoaded', onLoad); 319 </script>
319 320 <style type="text/css"> 321 html, body { height:100%; width:100%; height:100vh; width:100vw; margin:0; padding:0; overflow:hidden; } 322 .fill-viewport { position:fixed; top:0; left:0; right:0; bottom:0; padding:0; margin:0; overflow: hidden; } 323 .fill-viewport.landscape-left { left: env(safe-area-inset-left); } 324 .fill-viewport.landscape-right { right: env(safe-area-inset-right); } 325 #viewer { z-index:1; } 326 #preloadContainer { z-index:2; opacity:0; background-color:rgba(255,255,255,1); transition: opacity 0.5s; -webkit-transition: opacity 0.5s; -moz-transition: opacity 0.5s; -o-transition: opacity 0.5s;} 327 </style> 328 <link rel="stylesheet" href="fonts.css?v=1658478401353"> 329</head> 330<body> 331 <div id="preloadContainer" class="fill-viewport"><div style="z-index: 4; position: absolute; left: 0%; top: 50%; width: 100.00%; height: 10.00%" ><div style="text-align:left; color:#000; "><DIV STYLE="text-align:center;font-size:1.6666666666666663vmin;"><SPAN STYLE="display:inline-block; letter-spacing:0vmin; white-space:pre-wrap;color:#777777;font-size:1.67vmin;font-family:Arial, Helvetica, sans-serif;">Loading virtual tour. Please wait...</SPAN></DIV></div></div></div> 332 <div id="viewer" class="fill-viewport"></div> 333</body> 334</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.