PageSourceSearch

https://kensho.com.my/scp/kensho-residence/vr360/index.htm

html kensho.com.my collected 2026-10-04 14:03:55 UTC 13,047 bytes, 334 lines download raw bytes

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.