diff options
| author | Jules Laplace <jules@okfoc.us> | 2014-06-19 18:12:12 -0400 |
|---|---|---|
| committer | Jules Laplace <jules@okfoc.us> | 2014-06-19 18:12:12 -0400 |
| commit | 3adb2d4dcb071579b97182bb3ee65c2610619ce9 (patch) | |
| tree | de02f1382ba8d83ddd9b7269161aa819bb43fd3c | |
| parent | 615e285aba96554d0e29063d7491645810cb08b8 (diff) | |
saving projects
| -rw-r--r-- | public/assets/javascripts/rectangles/engine/rooms/_rooms.js | 8 | ||||
| -rw-r--r-- | public/assets/javascripts/rectangles/engine/scenery/types/image.js | 1 | ||||
| -rw-r--r-- | public/assets/javascripts/rectangles/engine/scenery/types/video.js | 36 | ||||
| -rw-r--r-- | public/assets/javascripts/ui/SiteRouter.js | 4 | ||||
| -rw-r--r-- | public/assets/javascripts/ui/editor/EditorSettings.js | 20 | ||||
| -rw-r--r-- | public/assets/javascripts/ui/editor/EditorView.js | 14 | ||||
| -rw-r--r-- | server/lib/api/projects.js | 10 | ||||
| -rw-r--r-- | server/lib/schemas/Project.js | 4 | ||||
| -rw-r--r-- | views/controls/editor/settings.ejs | 2 |
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" /> |
