summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--Gruntfile.js130
-rw-r--r--public/assets/javascripts/ui/reader/MediaPlayer.js2
-rw-r--r--public/assets/javascripts/ui/reader/ReaderView.js12
-rw-r--r--public/assets/javascripts/ui/reader/_router.js16
-rw-r--r--public/assets/test/static.html196
-rw-r--r--server/index.js4
7 files changed, 354 insertions, 9 deletions
diff --git a/.gitignore b/.gitignore
index 50f54f1..14d6d0f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -34,3 +34,6 @@ config.json
app.concat.js
app.min.js
+reader.concat.js
+reader.min.js
+
diff --git a/Gruntfile.js b/Gruntfile.js
index 93f13fe..a3ef359 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -147,7 +147,110 @@ module.exports = function(grunt) {
"public/assets/javascripts/defaults.js",
],
dest: 'public/assets/javascripts/app.concat.js',
+ },
+
+ // this builds a static version of the vvalls code, suitable for embedding
+ // in another website. see assets/test/static.html
+ 'static': {
+ src: [
+ "public/assets/javascripts/vendor/bower_components/jquery/dist/jquery.min.js",
+ "public/assets/javascripts/vendor/bower_components/lodash/lodash.min.js",
+ "public/assets/javascripts/vendor/bower_components/momentjs/min/moment.min.js",
+ "public/assets/javascripts/vendor/bower_components/fiber/src/fiber.min.js",
+ "public/assets/javascripts/vendor/bower_components/marked/lib/marked.js",
+ "public/assets/javascripts/vendor/bower_components/hidpi-canvas/dist/hidpi-canvas.js",
+ "public/assets/javascripts/vendor/tube.js",
+ "public/assets/javascripts/vendor/loader.js",
+ "public/assets/javascripts/vendor/polyfill.js",
+ "public/assets/javascripts/vendor/froogaloop.js",
+ "public/assets/javascripts/util.js",
+
+ "public/assets/javascripts/mx/mx.js",
+ "public/assets/javascripts/mx/extensions/mx.scene.js",
+ "public/assets/javascripts/mx/extensions/mx.movements.js",
+ "public/assets/javascripts/mx/extensions/mx.movementsMobile.js",
+ "public/assets/javascripts/mx/primitives/mx.image.js",
+ "public/assets/javascripts/mx/primitives/mx.text.js",
+ "public/assets/javascripts/mx/primitives/mx.video.js",
+ "public/assets/javascripts/mx/primitives/mx.youtube.js",
+ "public/assets/javascripts/mx/primitives/mx.vimeo.js",
+ "public/assets/javascripts/mx/primitives/mx.soundcloud.js",
+ "public/assets/javascripts/mx/primitives/mx.grid.js",
+
+ "public/assets/javascripts/rectangles/_env.js",
+
+ "public/assets/javascripts/rectangles/util/constants.js",
+ "public/assets/javascripts/rectangles/util/colors.js",
+ "public/assets/javascripts/rectangles/util/coords.js",
+ "public/assets/javascripts/rectangles/util/debug.js",
+ "public/assets/javascripts/rectangles/util/keys.js",
+ "public/assets/javascripts/rectangles/util/measurement.js",
+ "public/assets/javascripts/rectangles/util/minotaur.js",
+ "public/assets/javascripts/rectangles/util/mouse.js",
+ "public/assets/javascripts/rectangles/util/permissions.js",
+ "public/assets/javascripts/rectangles/util/sort.js",
+ "public/assets/javascripts/rectangles/util/uid.js",
+ "public/assets/javascripts/rectangles/util/undostack.js",
+ "public/assets/javascripts/rectangles/util/wheel.js",
+
+ "public/assets/javascripts/rectangles/models/vec2.js",
+ "public/assets/javascripts/rectangles/models/vec3.js",
+ "public/assets/javascripts/rectangles/models/rect.js",
+ "public/assets/javascripts/rectangles/models/surface.js",
+ "public/assets/javascripts/rectangles/models/tree.js",
+ "public/assets/javascripts/rectangles/models/room.js",
+ "public/assets/javascripts/rectangles/models/wall.js",
+ "public/assets/javascripts/rectangles/models/floor.js",
+
+ "public/assets/javascripts/rectangles/engine/rooms/_rooms.js",
+ "public/assets/javascripts/rectangles/engine/rooms/_walls.js",
+ "public/assets/javascripts/rectangles/engine/rooms/builder.js",
+ "public/assets/javascripts/rectangles/engine/rooms/clipper.js",
+ "public/assets/javascripts/rectangles/engine/rooms/grouper.js",
+ "public/assets/javascripts/rectangles/engine/rooms/mover.js",
+
+ "public/assets/javascripts/rectangles/engine/scenery/_scenery.js",
+ "public/assets/javascripts/rectangles/engine/scenery/move.js",
+ "public/assets/javascripts/rectangles/engine/scenery/resize.js",
+ "public/assets/javascripts/rectangles/engine/scenery/randomize.js",
+ "public/assets/javascripts/rectangles/engine/scenery/sound.js",
+ "public/assets/javascripts/rectangles/engine/scenery/undo.js",
+ "public/assets/javascripts/rectangles/engine/scenery/types/_object.js",
+ "public/assets/javascripts/rectangles/engine/scenery/types/image.js",
+ "public/assets/javascripts/rectangles/engine/scenery/types/text.js",
+ "public/assets/javascripts/rectangles/engine/scenery/types/video.js",
+ "public/assets/javascripts/rectangles/engine/scenery/types/audio.js",
+
+ "public/assets/javascripts/rectangles/engine/sculpture/_sculpture.js",
+ "public/assets/javascripts/rectangles/engine/sculpture/move.js",
+ "public/assets/javascripts/rectangles/engine/sculpture/resize.js",
+ "public/assets/javascripts/rectangles/engine/sculpture/types/_object.js",
+ "public/assets/javascripts/rectangles/engine/sculpture/types/image.js",
+
+ "public/assets/javascripts/rectangles/engine/map/_map.js",
+ "public/assets/javascripts/rectangles/engine/map/ui_editor.js",
+ "public/assets/javascripts/rectangles/engine/map/ui_minimap.js",
+ "public/assets/javascripts/rectangles/engine/map/draw.js",
+
+ "public/assets/javascripts/ui/lib/View.js",
+ "public/assets/javascripts/ui/lib/Router.js",
+ "public/assets/javascripts/ui/lib/ModalView.js",
+
+ "public/assets/javascripts/ui/reader/ReaderView.js",
+ "public/assets/javascripts/ui/reader/ShareView.js",
+ "public/assets/javascripts/ui/reader/EmbedView.js",
+ "public/assets/javascripts/ui/reader/MediaPlayer.js",
+ "public/assets/javascripts/ui/reader/Tracker.js",
+
+ "public/assets/javascripts/ui/reader/_router.js",
+
+ "public/assets/javascripts/app.js",
+ "public/assets/javascripts/defaults.js",
+ ],
+ dest: 'public/assets/javascripts/reader.concat.js',
}
+
+
},
copy: {
concat: {
@@ -158,7 +261,15 @@ module.exports = function(grunt) {
},
]
},
- },
+ 'static': {
+ files: [
+ {
+ src: 'public/assets/javascripts/static.concat.js',
+ dest: 'public/assets/javascripts/static.min.js',
+ },
+ ]
+ },
+ },
uglify: {
options: {
banner: '/* vvalls by okfocus 2015 */\n'
@@ -166,10 +277,17 @@ module.exports = function(grunt) {
js: {
src: 'public/assets/javascripts/app.concat.js',
dest: 'public/assets/javascripts/app.min.js',
+ },
+ 'static': {
+ src: 'public/assets/javascripts/static.concat.js',
+ dest: 'public/assets/javascripts/static.min.js',
}
},
clean: {
- release: ["public/assets/javascripts/app.concat.js"],
+ release: [
+ "public/assets/javascripts/static.concat.js",
+ "public/assets/javascripts/app.concat.js",
+ ],
}
});
@@ -180,8 +298,10 @@ module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-contrib-clean');
// Default task(s).
- grunt.registerTask('js', ['concat:js', 'uglify:js', 'clean:release']);
- grunt.registerTask('merge', ['concat:js', 'copy:concat']);
- grunt.registerTask('default', ['js']);
+ grunt.registerTask('js', ['concat:js', 'uglify:js', 'clean:release']);
+ grunt.registerTask('js-test', ['concat:js', 'copy:concat']);
+ grunt.registerTask('static', ['concat:static', 'uglify:static', 'clean:release']);
+ grunt.registerTask('static-test', ['concat:static', 'copy:static']);
+ grunt.registerTask('default', ['js']);
};
diff --git a/public/assets/javascripts/ui/reader/MediaPlayer.js b/public/assets/javascripts/ui/reader/MediaPlayer.js
index 8424d9c..8e65976 100644
--- a/public/assets/javascripts/ui/reader/MediaPlayer.js
+++ b/public/assets/javascripts/ui/reader/MediaPlayer.js
@@ -1,5 +1,5 @@
-var MediaPlayer = FormView.extend({
+var MediaPlayer = View.extend({
el: "#mediaPlayer",
events: {
diff --git a/public/assets/javascripts/ui/reader/ReaderView.js b/public/assets/javascripts/ui/reader/ReaderView.js
index e3e27c3..55d2520 100644
--- a/public/assets/javascripts/ui/reader/ReaderView.js
+++ b/public/assets/javascripts/ui/reader/ReaderView.js
@@ -31,7 +31,12 @@ var ReaderView = View.extend({
this.tracker = new Tracker ({ mode: mode })
- $.get(this.projectAction + name, this.ready.bind(this))
+ if ('vvalls_data' in window) {
+ this.ready(window.vvalls_data)
+ }
+ else {
+ $.get(this.projectAction + name, this.ready.bind(this))
+ }
},
getQS: function(){
@@ -85,9 +90,10 @@ var ReaderView = View.extend({
Walls.setColor[mode](colors[mode])
})
- editor.permissions.clear()
+ window.editor && editor.permissions.clear()
- this.listen()
+ // disable until we start using spinning again
+ // this.listen()
},
listen: function(){
diff --git a/public/assets/javascripts/ui/reader/_router.js b/public/assets/javascripts/ui/reader/_router.js
new file mode 100644
index 0000000..a0e346a
--- /dev/null
+++ b/public/assets/javascripts/ui/reader/_router.js
@@ -0,0 +1,16 @@
+
+var SiteRouter = Router.extend({
+ el: "body",
+
+ initialize: function(){
+ app.launch()
+ if (app.unsupported) return
+
+ this.readerView = app.controller = new ReaderView()
+ this.readerView.load()
+
+ $("body").removeClass("loading")
+ }
+
+})
+
diff --git a/public/assets/test/static.html b/public/assets/test/static.html
new file mode 100644
index 0000000..90871a5
--- /dev/null
+++ b/public/assets/test/static.html
@@ -0,0 +1,196 @@
+<!doctype html>
+<html>
+<head>
+ <title>VValls</title>
+
+<!-----+ +------+ +------+ +------+ +------+
+|`. `. |\ \ | | / /| .' .'|
+| `+------+ | +------+ +------+ +------+ | +------+' |
+| | | | | | | | | | | | | |
++ | | + | | | | | | + | | +
+ `. | | \| | | | | |/ | | .'
+ `+------+ +------+ +------+ +------+ +------+'
+ VVALLS - developed by okfoc.us
+ .+------+ +------+ +------+ +------+ +------+.
+ .' .'| / /| | | |\ \ |`. `.
++------+' | +------+ | +------+ | +------+ | `+------+
+| | | | | | | | | | | | | |
+| | + | | + | | + | | + | |
+| | .' | |/ | | \| | `. | |
++------+' +------+ +------+ +------+ `+------>
+
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable = no">
+ <meta name="apple-mobile-web-app-capable" content="yes">
+ <meta name="description" content="3D gallery space, fully customizable" />
+ <meta name="author" content="VValls" />
+ <link rel="shortcut icon" href="/favicon.ico" />
+ <meta property="og:title" content="Leaves and such" />
+ <meta property="og:type" content="website" />
+ <meta property="og:image" content="http://www.sport-fitness-advisor.com/images/plyometric_drills_overhead_throws.gif" />
+ <meta property="og:url" content="http://vvalls.com/project/leaves-and-such-1429563199123/" />
+ <meta property="og:site_name" content="vvalls" />
+ <link rel="icon" href="/favicon.ico" type="image/x-icon">
+ <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
+ <link href='http://fonts.googleapis.com/css?family=Lato:100,300,400,700,900,100italic,300italic,400italic,700italic,900italic' rel='stylesheet' type='text/css'>
+ <link href='/assets/stylesheets/ionicons.css' rel='stylesheet' type='text/css'>
+ <link href='/assets/stylesheets/app.css' rel='stylesheet' type='text/css'>
+ <!--[if lt IE 9]>
+ <style>
+
+ </style>
+ <![endif]-->
+</head>
+<body class="loading reader">
+
+ <div id="scene"></div>
+
+
+ <div class="rapper">
+ <div id="header">
+<a href="/" class="logo">
+ <svg version="1.1"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ x="0px" y="0px" width="117px" height="44px" viewBox="-0.896 -0.441 117 44"
+ overflow="visible" enable-background="new -0.896 -0.441 117 44" xml:space="preserve">
+ <defs>
+ </defs>
+ <path d="M0.54,38.759c0-1.44,0.66-3.72,1.56-6.18c1.38-3.84,3.42-8.22,4.5-11.16c0.48-1.32,0.78-2.34,0.78-2.88
+ c0-0.72-0.24-1.02-0.72-1.02c-1.38,0-4.74,5.16-5.4,6.24c-0.36,0.6-0.48,0.78-0.78,0.78c-0.3,0-0.48-0.06-0.48-0.36
+ c0-0.18,0.18-0.84,0.66-1.62c0.9-1.44,2.22-3.6,3.9-5.28c1.44-1.5,3.12-2.64,4.74-2.64c1.38,0,1.92,1.32,1.92,2.7
+ c0,1.02-0.42,2.58-1.02,4.32c-1.26,3.72-3.359,8.521-4.68,12.18c-0.66,1.92-1.14,3.54-1.14,4.62c0,1.38,0.48,2.459,1.979,2.459
+ c6.48,0,13.56-14.639,13.56-17.759c0-1.2-0.3-1.92-0.6-2.58c-0.42-0.9-0.9-1.62-0.9-3.18c0-1.86,0.84-2.76,1.8-2.76
+ c0.9,0,1.98,1.08,1.98,3.66c0,9.179-9.6,24.66-17.58,24.66c-2.82,0-4.08-1.561-4.08-4.141V38.759z"/>
+ <path d="M23.879,38.759c0-1.44,0.66-3.72,1.56-6.18c1.38-3.84,3.42-8.22,4.5-11.16c0.48-1.32,0.78-2.34,0.78-2.88
+ c0-0.72-0.24-1.02-0.72-1.02c-1.38,0-4.74,5.16-5.4,6.24c-0.36,0.6-0.48,0.78-0.78,0.78c-0.3,0-0.48-0.06-0.48-0.36
+ c0-0.18,0.18-0.84,0.66-1.62c0.9-1.44,2.22-3.6,3.9-5.28c1.44-1.5,3.12-2.64,4.74-2.64c1.38,0,1.92,1.32,1.92,2.7
+ c0,1.02-0.42,2.58-1.02,4.32c-1.26,3.72-3.36,8.521-4.68,12.18c-0.66,1.92-1.14,3.54-1.14,4.62c0,1.38,0.48,2.459,1.98,2.459
+ c6.479,0,13.559-14.639,13.559-17.759c0-1.2-0.3-1.92-0.6-2.58c-0.42-0.9-0.9-1.62-0.9-3.18c0-1.86,0.84-2.76,1.8-2.76
+ c0.9,0,1.979,1.08,1.979,3.66c0,9.179-9.6,24.66-17.579,24.66c-2.82,0-4.08-1.561-4.08-4.141V38.759z"/>
+ <path d="M44.339,37.799c0-5.22,2.76-10.92,6.36-15.299c3.66-4.44,8.159-7.5,11.759-7.5c2.7,0,3.78,1.44,3.9,1.44
+ s0.48-0.96,0.66-1.44c0.18-0.48,0.3-0.6,1.02-0.6h1.74c0.359,0,0.6,0.06,0.6,0.42c0,0.18-0.119,0.6-0.24,0.9
+ c-1.919,5.82-3.839,11.64-5.819,17.519c-1.14,3.48-1.26,4.381-1.26,5.041c0,0.659,0.3,0.84,0.66,0.84c0.54,0,1.68-1.141,3.72-4.26
+ c1.5-2.28,1.26-2.94,1.86-2.94c0.3,0,0.42,0.181,0.42,0.479c0,0.84-1.38,3.541-3.24,6c-1.8,2.52-4.14,4.8-6.12,4.8
+ c-1.38,0-1.62-0.96-1.62-2.159c0-0.961,0.24-2.101,0.72-3.66c0.54-1.98,1.5-4.62,2.82-8.52l-0.12-0.12
+ c-2.16,3.3-9.36,14.459-14.1,14.459c-2.76,0-3.72-2.159-3.72-5.339V37.799z M65.338,18.839c0-1.8-1.08-2.76-2.76-2.76
+ c-3,0-6.6,3.72-9.48,8.22c-2.82,4.5-4.919,9.839-4.919,13.019c0,1.561,0.54,2.641,1.86,2.641c2.22,0,6.06-4.26,9.3-9
+ c3.3-4.74,6-10.02,6-12.06V18.839z"/>
+ <path d="M72.178,39.839c0-1.08,0.479-3.479,1.2-6.479c1.74-7.02,4.979-17.52,6.6-23.64c0.66-2.46,1.08-4.2,1.08-4.8
+ c0-0.78-0.24-1.32-1.62-1.44c-1.14-0.12-1.38-0.3-1.38-0.78c0.061-0.42,0.779-0.66,1.8-0.66c2.58,0,4.2-0.78,5.16-1.38
+ c0.6-0.36,0.96-0.66,1.14-0.66c0.3,0,0.42,0.12,0.42,0.48c0,0.3-0.6,1.56-1.14,3.479c-5.04,17.759-7.38,25.799-8.46,29.698
+ c-0.84,3.061-0.96,3.84-0.96,4.681c0,0.6,0.3,1.02,0.78,1.02c0.84,0,1.619-0.659,3.479-3.72c1.08-1.74,1.92-4.199,2.46-4.199
+ c0.301,0,0.42,0.239,0.42,0.539c0,0.42-0.84,2.521-2.16,4.74c-1.739,3-4.319,6.24-6.719,6.24c-1.681,0-2.101-1.32-2.101-3.061
+ V39.839z"/>
+ <path d="M85.497,39.839c0-1.08,0.48-3.479,1.2-6.479c1.739-7.02,4.979-17.52,6.6-23.64c0.66-2.46,1.08-4.2,1.08-4.8
+ c0-0.78-0.24-1.32-1.62-1.44c-1.14-0.12-1.38-0.3-1.38-0.78c0.06-0.42,0.78-0.66,1.8-0.66c2.58,0,4.2-0.78,5.16-1.38
+ c0.6-0.36,0.96-0.66,1.14-0.66c0.3,0,0.42,0.12,0.42,0.48c0,0.3-0.6,1.56-1.14,3.479c-5.04,17.759-7.38,25.799-8.46,29.698
+ c-0.84,3.061-0.96,3.84-0.96,4.681c0,0.6,0.301,1.02,0.78,1.02c0.84,0,1.62-0.659,3.479-3.72c1.08-1.74,1.92-4.199,2.46-4.199
+ c0.3,0,0.42,0.239,0.42,0.539c0,0.42-0.84,2.521-2.159,4.74c-1.74,3-4.32,6.24-6.721,6.24c-1.68,0-2.1-1.32-2.1-3.061V39.839z"/>
+ <path d="M111.416,34.619c0,2.34-0.96,4.439-2.46,5.939c-1.68,1.68-4.02,2.64-6.479,2.64c-1.86,0-3.84-0.78-5.04-1.56
+ c-0.6-0.42-1.02-0.84-1.02-1.2c0-0.96,0.359-3.12,0.959-5.819c0.42-1.98,0.48-2.34,1.08-2.34c0.541,0,0.601,0.359,0.601,2.16
+ c0,3.84,1.2,7.319,4.92,7.319c2.34,0,4.2-2.46,4.2-4.74c0-2.819-1.561-4.979-3.24-6.96c-1.68-1.979-3.24-4.08-3.24-6.899
+ c0-4.38,3.24-8.76,7.859-8.76c3,0,5.82,1.38,5.82,2.1c0,1.14-0.301,2.4-0.66,3.9c-0.72,2.76-0.779,3.06-1.38,3.06
+ c-0.899,0-0.78-1.92-1.08-3.84c-0.3-1.86-1.08-3.78-3.6-3.78c-2.34,0-4.08,2.04-4.08,4.439s1.62,4.44,3.24,6.6
+ c1.8,2.34,3.6,4.68,3.6,7.68V34.619z"/>
+ </svg>
+
+</a>
+
+<div id="minotaur">
+ <span class="label"></span>
+</div>
+
+<span class="topLinks">
+</span>
+</div>
+
+ <div id="editorView">
+ <div class="aboutRoom vvbox">
+ <h1>
+ <span class="roomName">Leaves and such</span>
+ <br>
+
+ <a href="/profile/asdf" class="authorName"><div class="profilePic" style="background-image:url(https://vvalls.s3.amazonaws.com/images/avatars/20141010/1412971714922-Screen-Shot-2014-10-09-at-12.png)"></div></a>
+
+ <a href="/profile/asdf" class="authorName">asdf</a>
+ </h1>
+
+
+ <span class="txt">Last modified 4/20/2015</span>
+
+ <div class="share">
+ <h2>Share on–</h2>
+ <a id="share_facebook">Facebook</a>
+ <a id="share_twitter">Twitter</a>
+ <a id="share_embed">Embed</a>
+ </div>
+
+
+ <a href="/project/leaves-and-such-1429563199123/edit" class="btn warn marg" id="edit-room-link">Edit Room</a>
+
+</div>
+
+ <div class="vvbox settings" id="mediaPlayer">
+
+ <span class="playButton video audio" data-role="play-media">
+ <span class="on ion-play"></span>
+ <span class="off ion-pause"></span>
+ </span>
+
+ <span class="muteButton video" data-role="mute-media">
+ <span class="on ion-volume-high"></span>
+ <span class="off ion-volume-mute"></span>
+ </span>
+
+ <span class="name"></span>
+
+ <div class="author"></div>
+ <div class="txt description"></div>
+ <div class="dimensions"></div>
+
+</div>
+
+ <div class="embedView fixed mediaDrawer animate">
+ <span class="close">X</span>
+
+ <div class="rap">
+ <div class="holder">
+ <div class="inner vvbox">
+ <h2>Embed VValls</h2>
+
+ <p>
+ This code generates an iframe which will embed this room in your website or blog.
+ </p>
+ <textarea id="embedCode"></textarea>
+
+ dimensions: <input type="text" name="width">x<input type="text" name="height">
+ <input type="checkbox" name="mute" id="mute" checked><label for="mute">mute</label>
+ <input type="checkbox" name="interactive" id="interactive" checked><label for="interactive">interactive</label>
+<!--
+ <input type="checkbox" id=""> <label for=""></label>
+ <input type="checkbox" id=""> <label for=""></label>
+ <input type="checkbox" id=""> <label for=""></label>
+ -->
+ <span id="testEmbed">test</span>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ <div id="minimap" class="vvbox" data-intro="Mini-map shows your position and orientation in a room. Navigate with WASD keys or drag here." data-position="top">
+ <span class="el"></span>
+ </div>
+ </div>
+
+ <img src="/assets/img/keys.png" id="keyhint">
+ <img src="/assets/img/360.png" id="threesixty">
+</body>
+
+<script type="text/javascript" src="/assets/javascripts/static.min.js"></script>
+<script type="text/javascript" src="http://www.youtube.com/player_api"></script>
+<script type="text/javascript" src="https://w.soundcloud.com/player/api.js"></script>
+
+</html>
diff --git a/server/index.js b/server/index.js
index 7bc3f7f..391385c 100644
--- a/server/index.js
+++ b/server/index.js
@@ -66,6 +66,10 @@ site.setup = function(){
app.set('env', config.env.production ? "production" : "development")
app.get('env') === 'development' && app.use(express.errorHandler());
+ if (config.env.production) {
+ app.set('json spaces', 0)
+ }
+
// Essential middleware
// app.all('*', middleware.enableCORS);
app.all('*', middleware.ensureLocals);