summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJules Laplace <jules@okfoc.us>2014-06-19 18:12:12 -0400
committerJules Laplace <jules@okfoc.us>2014-06-19 18:12:12 -0400
commit3adb2d4dcb071579b97182bb3ee65c2610619ce9 (patch)
treede02f1382ba8d83ddd9b7269161aa819bb43fd3c
parent615e285aba96554d0e29063d7491645810cb08b8 (diff)
saving projects
-rw-r--r--public/assets/javascripts/rectangles/engine/rooms/_rooms.js8
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/types/image.js1
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/types/video.js36
-rw-r--r--public/assets/javascripts/ui/SiteRouter.js4
-rw-r--r--public/assets/javascripts/ui/editor/EditorSettings.js20
-rw-r--r--public/assets/javascripts/ui/editor/EditorView.js14
-rw-r--r--server/lib/api/projects.js10
-rw-r--r--server/lib/schemas/Project.js4
-rw-r--r--views/controls/editor/settings.ejs2
9 files changed, 86 insertions, 13 deletions
diff --git a/public/assets/javascripts/rectangles/engine/rooms/_rooms.js b/public/assets/javascripts/rectangles/engine/rooms/_rooms.js
index 8fea9b5..0d6c267 100644
--- a/public/assets/javascripts/rectangles/engine/rooms/_rooms.js
+++ b/public/assets/javascripts/rectangles/engine/rooms/_rooms.js
@@ -74,6 +74,14 @@ var Rooms = new function(){
Rooms.clipper.update()
}
+ base.serializeWalls = function(){
+ return []
+ }
+
+ base.deserializeWalls = function(walls_data){
+ return []
+ }
+
base.uid = (function(){
var id = 0
return function(s){
diff --git a/public/assets/javascripts/rectangles/engine/scenery/types/image.js b/public/assets/javascripts/rectangles/engine/scenery/types/image.js
index d9bc1e5..98b26f4 100644
--- a/public/assets/javascripts/rectangles/engine/scenery/types/image.js
+++ b/public/assets/javascripts/rectangles/engine/scenery/types/image.js
@@ -1,6 +1,5 @@
Scenery.types.image = Scenery.types.base.extend(function(base){
-console.log("IM", base.serialize)
var exports = {
diff --git a/public/assets/javascripts/rectangles/engine/scenery/types/video.js b/public/assets/javascripts/rectangles/engine/scenery/types/video.js
index e69de29..b34e55c 100644
--- a/public/assets/javascripts/rectangles/engine/scenery/types/video.js
+++ b/public/assets/javascripts/rectangles/engine/scenery/types/video.js
@@ -0,0 +1,36 @@
+
+Scenery.types.video = Scenery.types.base.extend(function(base){
+
+ var exports = {
+
+ init: function(opt){
+ base.init.call(this, opt)
+ this.scale = this.media.scale = 300 / max(300, this.media.width)
+
+ this.build()
+ this.bind()
+ this.set_wall()
+ this.recenter()
+ },
+
+ build: function(){
+ this.mx = new MX.Image({
+ src: this.media.url,
+ y: this.scale * this.media.height/2,
+ backface: false,
+ })
+ scene.add( this.mx )
+ },
+
+ serialize: function(){
+ var data = base.serialize.call(this)
+ return data
+ },
+
+ deserialize: function(data){
+ this.mx.move(data.position)
+ },
+ }
+
+ return exports
+})
diff --git a/public/assets/javascripts/ui/SiteRouter.js b/public/assets/javascripts/ui/SiteRouter.js
index 3bd783b..f0c5530 100644
--- a/public/assets/javascripts/ui/SiteRouter.js
+++ b/public/assets/javascripts/ui/SiteRouter.js
@@ -87,12 +87,12 @@ var SiteRouter = Router.extend({
this.editorView.loadLayout(layout)
},
- projectEditor: function(e, layout){
+ projectEditor: function(e, name){
app.mode.editor = true
app.launch()
this.editorView = new EditorView()
- this.editorView.loadLayout(name)
+ this.editorView.load(name)
},
diff --git a/public/assets/javascripts/ui/editor/EditorSettings.js b/public/assets/javascripts/ui/editor/EditorSettings.js
index 1e70dbb..58a37b8 100644
--- a/public/assets/javascripts/ui/editor/EditorSettings.js
+++ b/public/assets/javascripts/ui/editor/EditorSettings.js
@@ -21,16 +21,27 @@ var EditorSettings = FormView.extend({
this.$id = this.$("[name=_id]")
this.$csrf = this.$("[name=_csrf]")
this.$name = this.$("[name=name]")
+ this.$description = this.$("[name=description]")
this.$privacy = this.$("[name=privacy]")
},
load: function(data){
this.action = data.isNew ? this.createAction : this.updateAction
- },
-
- loadLayout: function(data){
+
data.rooms && Rooms.deserialize(data.rooms)
data.startPosition && scene.camera.move(data.startPosition)
+
+ if (! data.isNew) {
+ console.log(data)
+
+ this.$id.val( data._id )
+ this.$name.val( data.name )
+ this.$description.val( data.description )
+ data.privacy && this.$privacy.find("[value=" + data.privacy + "]").prop('checked', "checked")
+
+ console.log(data.media)
+ data.media && Scenery.deserialize(data.media)
+ }
},
clone: function(){
@@ -104,9 +115,10 @@ var EditorSettings = FormView.extend({
fd.append( "_csrf", this.$csrf.val() )
fd.append( "_id", this.$id.val() )
fd.append( "name", this.$name.val() )
+ fd.append( "description", this.$description.val() )
fd.append( "privacy", this.$privacy.filter(":checked").val() == "private" )
fd.append( "rooms", JSON.stringify( Rooms.serialize() ) )
-// fd.append( "walls", JSON.stringify( Rooms.serialize() ) )
+ fd.append( "walls", JSON.stringify( Rooms.serializeWalls() ) )
fd.append( "media", JSON.stringify( Scenery.serialize() ) )
fd.append( "startPosition", JSON.stringify( app.position(scene.camera) ) )
fd.append( "thumbnail", dataUriToBlob(map.canvas.toDataURL()) )
diff --git a/public/assets/javascripts/ui/editor/EditorView.js b/public/assets/javascripts/ui/editor/EditorView.js
index 8422619..d4969c1 100644
--- a/public/assets/javascripts/ui/editor/EditorView.js
+++ b/public/assets/javascripts/ui/editor/EditorView.js
@@ -2,7 +2,7 @@
var EditorView = View.extend({
el: "#editorView",
- projecttAction: "/api/projects/",
+ projectAction: "/api/projects/",
layoutAction: "/api/layouts/",
events: {
@@ -18,17 +18,25 @@ var EditorView = View.extend({
},
load: function(name){
+ name = sanitize(name)
+ $.get(this.projectAction + name, $.proxy(this.ready, this))
},
loadLayout: function(layout){
layout = sanitize(layout)
- $.get(this.layoutAction + layout, $.proxy(this.ready, this))
+ $.get(this.layoutAction + layout, $.proxy(this.readyLayout, this))
},
ready: function(data){
$("#map").hide()
- this.settings.loadLayout(data)
+ this.settings.load(data)
},
+
+ readyLayout: function(data){
+ data.isNew = true
+ this.ready(data)
+ }
+
})
diff --git a/server/lib/api/projects.js b/server/lib/api/projects.js
index e8f80db..ff8bcbb 100644
--- a/server/lib/api/projects.js
+++ b/server/lib/api/projects.js
@@ -31,9 +31,11 @@ var projects = {
create: function(req, res){
var data = util.cleanQuery(req.body)
+
+ data.user_id = req.user._id
data.name = util.sanitize(data.name)
data.slug = util.slugify(data.name)
- data.user_id = req.user._id
+ data.description = util.sanitize(data.description)
data.rooms = JSON.parse(data.rooms)
data.walls = JSON.parse(data.walls)
data.media = JSON.parse(data.media)
@@ -64,9 +66,11 @@ var projects = {
}
var data = util.cleanQuery(req.body)
+
+ data.user_id = req.user._id
data.name = util.sanitize(data.name)
data.slug = util.slugify(data.name)
- data.user_id = req.user._id
+ data.description = util.sanitize(data.description)
upload.put("projects", req.files.thumbnail, {
unacceptable: function(err){
@@ -83,6 +87,8 @@ var projects = {
if (err || ! doc) { return res.json({ error: err }) }
_.extend(doc, data)
doc.rooms = JSON.parse(data.rooms)
+ doc.walls = JSON.parse(data.walls)
+ doc.media = JSON.parse(data.media)
doc.startPosition = JSON.parse(data.startPosition)
doc.save(function(err, doc){
diff --git a/server/lib/schemas/Project.js b/server/lib/schemas/Project.js
index edfc3d6..75cefc5 100644
--- a/server/lib/schemas/Project.js
+++ b/server/lib/schemas/Project.js
@@ -16,6 +16,10 @@ var ProjectSchema = new mongoose.Schema({
return true
},"{PATH} name is required"]
},
+ description: {
+ type: String,
+ default: "",
+ },
privacy: {
type: Boolean,
default: false,
diff --git a/views/controls/editor/settings.ejs b/views/controls/editor/settings.ejs
index 27d24fc..a7d6213 100644
--- a/views/controls/editor/settings.ejs
+++ b/views/controls/editor/settings.ejs
@@ -14,7 +14,7 @@
</div>
<div class="setting">
- <textarea placeholder="short description"></textarea>
+ <textarea name="description" placeholder="short description"></textarea>
</div>
<div class="setting">
<input type="text" placeholder="http://vvalls.com/t987" />