var ReaderView = View.extend({ el: "#readerView", projectAction: "/api/project/", events: { }, initialize: function(){ this.mediaPlayer = new MediaPlayer ({ parent: this }) this.shareView = new ShareView ({ parent: this }) }, load: function(name){ var opt = this.getQS() var mode = "default" var name = sanitize(name) if (opt.noui) { $(".logo, .topLinks, #editorView, #keyhint").hide() mode = "noui" } if (opt.embed) { $(".topLinks, .share, #edit-room-link, #keyhint").hide() mode = "embed" } if (opt.mute) { app.muted = true } this.tracker = new Tracker ({ mode: mode }) $.get(this.projectAction + name, this.ready.bind(this)) }, getQS: function(){ var qs = {} window.location.search.replace(/^\?/,"").split("&").forEach(function(s){ var pair = s.split("=") if (pair.length < 2) { qs[pair[0]] = true } else { qs[pair[0]] = pair[1] } }) return qs }, ready: function(data){ $("#map").hide() this.data = data var is_landscape = window.innerWidth > window.innerHeight if (is_desktop || (is_mobile && is_landscape)) { this.build(data) return } // don't build anything until we're in landscape mode, otherwise ios might crash!! var orientationFn = orientationchange.bind(this) window.addEventListener('orientationchange', orientationFn) function orientationchange (e) { var is_landscape = window.innerWidth > window.innerHeight if (is_landscape) { window.removeEventListener('orientationchange', orientationFn) this.build(data) } } }, build: function(data){ data.rooms && Rooms.deserialize(data.rooms) data.walls && Walls.deserialize(data.walls) data.media && Scenery.deserialize(data.media) data.startPosition && scene.camera.move(data.startPosition) cam.y = window.viewHeight = data.viewHeight || app.defaults.viewHeight var colors = data.colors || app.defaults.colors var modes = [ "wall", "outline", "floor", "ceiling" ] modes.forEach(function(mode){ Walls.setColor[mode](colors[mode]) }) editor.permissions.clear() this.listen() }, listen: function(){ var base = this $(window).on('message', function(event){ if (event.originalEvent.origin !== window.location.origin) { return } var message = event.originalEvent.data switch (message) { case "spin-on": base.spinning = true break case "spin-off": base.spinning = false break } }) requestAnimationFrame(this.spin.bind(this)) }, spinning: false, spin: function(){ requestAnimationFrame(this.spin.bind(this)) if (this.spinning) { scene.camera.rotationY -= 1/180 } }, pick: function(scenery){ var has_info = this.mediaPlayer.pick(scenery) $("#minimap").toggleClass('active', ! has_info) app.tube("pick-scenery", { scenery: scenery }) }, pickWall: function(wall, pos){ this.hideExtras() }, hideExtras: function(){ $("#minimap").addClass('active') this.mediaPlayer.hide() app.tube("close-scenery") } })