summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--public/assets/javascripts/rectangles/engine/shapes/polyline.js12
-rw-r--r--public/assets/javascripts/rectangles/engine/shapes/shapelist.js7
-rw-r--r--public/assets/javascripts/ui/blueprint/BlueprintSettings.js7
-rw-r--r--public/assets/javascripts/ui/blueprint/BlueprintToolbar.js5
-rw-r--r--public/assets/javascripts/ui/blueprint/BlueprintUploader.js16
-rw-r--r--public/assets/javascripts/ui/blueprint/BlueprintView.js14
-rw-r--r--server/index.js1
-rw-r--r--server/lib/api/blueprint.js20
-rw-r--r--server/lib/schemas/Blueprint.js11
9 files changed, 70 insertions, 23 deletions
diff --git a/public/assets/javascripts/rectangles/engine/shapes/polyline.js b/public/assets/javascripts/rectangles/engine/shapes/polyline.js
index e853592..3c4e9c3 100644
--- a/public/assets/javascripts/rectangles/engine/shapes/polyline.js
+++ b/public/assets/javascripts/rectangles/engine/shapes/polyline.js
@@ -1,12 +1,9 @@
var Polyline = Fiber.extend(function(base){
var exports = {}
- exports.init = function(points){
- this.points = points
+ exports.init = function(){
+ this.points = []
this.mx_points = []
this.closed = false
- if (points) {
- this.build()
- }
}
exports.add = function(p){
this.points.push( p )
@@ -138,7 +135,10 @@ var Polyline = Fiber.extend(function(base){
this.mx.rebuild()
}
exports.serialize = function(){
- return this.points
+ return this.points.map(function(point){ return [point.a, point.b] })
+ }
+ exports.deserialize = function(points){
+ this.points = points.map(function(point){ return new vec2(point[0], point[1]) })
}
exports.reset = function(){
this.mx_points.forEach(function(mx){ scene.remove(mx) })
diff --git a/public/assets/javascripts/rectangles/engine/shapes/shapelist.js b/public/assets/javascripts/rectangles/engine/shapes/shapelist.js
index d8a03b2..1b8acfd 100644
--- a/public/assets/javascripts/rectangles/engine/shapes/shapelist.js
+++ b/public/assets/javascripts/rectangles/engine/shapes/shapelist.js
@@ -73,9 +73,10 @@ var ShapeList = Fiber.extend(function(base){
})
}
exports.deserialize = function(data){
- data.forEach(function(points){
- var line = new Polyline(points)
- this.add(line)
+ data && data.forEach(function(points){
+ var line = new Polyline()
+ line.deserialize(points)
+ line.build()
}.bind(this))
}
return exports
diff --git a/public/assets/javascripts/ui/blueprint/BlueprintSettings.js b/public/assets/javascripts/ui/blueprint/BlueprintSettings.js
index f9c9e78..acd8dcc 100644
--- a/public/assets/javascripts/ui/blueprint/BlueprintSettings.js
+++ b/public/assets/javascripts/ui/blueprint/BlueprintSettings.js
@@ -26,6 +26,10 @@ var BlueprintSettings = FormView.extend({
load: function(data){
this.$id.val(data._id)
this.$name.val(data.name)
+ if (data.shapes) {
+ shapes.destroy()
+ shapes.deserialize( data.shapes )
+ }
this.data = data
},
@@ -88,7 +92,6 @@ var BlueprintSettings = FormView.extend({
fd.append( "name", this.$name.val() )
fd.append( "shapes", JSON.stringify( shapes.serialize() ) )
fd.append( "startPosition", JSON.stringify( app.position(scene.camera) ) )
- fd.append( "thumbnail", this.data.url )
return fd
},
@@ -105,7 +108,7 @@ var BlueprintSettings = FormView.extend({
Minotaur.unwatch(this)
Minotaur.hide()
- window.history.pushState(null, document.title, "/layout/" + data.slug)
+ window.history.pushState(null, document.title, "/blueprint/" + data.slug)
},
})
diff --git a/public/assets/javascripts/ui/blueprint/BlueprintToolbar.js b/public/assets/javascripts/ui/blueprint/BlueprintToolbar.js
index 5f313fd..e22535e 100644
--- a/public/assets/javascripts/ui/blueprint/BlueprintToolbar.js
+++ b/public/assets/javascripts/ui/blueprint/BlueprintToolbar.js
@@ -9,6 +9,7 @@ var BlueprintToolbar = View.extend({
"click [data-role=polyline-mode]": 'polylineMode',
"click [data-role=ortho-polyline-mode]": 'orthoPolylineMode',
"click [data-role=eraser-mode]": 'eraserMode',
+ "click [data-role=toggle-layout-settings]": 'toggleSettings',
},
initialize: function(opt){
@@ -49,6 +50,10 @@ var BlueprintToolbar = View.extend({
}
},
+ toggleSettings: function(){
+ this.parent.settings.toggle()
+ },
+
setActiveMode: function( $el ) {
this.$modes.removeClass('active')
$el.addClass('active')
diff --git a/public/assets/javascripts/ui/blueprint/BlueprintUploader.js b/public/assets/javascripts/ui/blueprint/BlueprintUploader.js
index 6d13817..c7138e9 100644
--- a/public/assets/javascripts/ui/blueprint/BlueprintUploader.js
+++ b/public/assets/javascripts/ui/blueprint/BlueprintUploader.js
@@ -26,7 +26,9 @@ var BlueprintUploader = UploadView.extend({
},
loaded: false,
- load: function(){
+ nameToShow: null,
+ load: function(name){
+ this.nameToShow = name || ""
$.get(this.listAction, { tag: this.mediaTag }, this.populate.bind(this))
},
@@ -36,7 +38,17 @@ var BlueprintUploader = UploadView.extend({
this.$blueprints.show()
data.forEach(this.append.bind(this))
this.hide()
- this.parent.scaler.pick(data[0])
+ if (this.nameToShow) {
+ data.some(function(el){
+ if (el.slug == this.nameToShow) {
+ this.parent.scaler.pick(el)
+ return true
+ }
+ }.bind(this))
+ }
+ else {
+ this.parent.scaler.pick(data[0])
+ }
}
else {
this.parent.scaler.hideClose()
diff --git a/public/assets/javascripts/ui/blueprint/BlueprintView.js b/public/assets/javascripts/ui/blueprint/BlueprintView.js
index 8330154..e1d360f 100644
--- a/public/assets/javascripts/ui/blueprint/BlueprintView.js
+++ b/public/assets/javascripts/ui/blueprint/BlueprintView.js
@@ -2,7 +2,7 @@
var BlueprintView = View.extend({
el: "#blueprintView",
- action: "/api/blueprint/",
+ action: "/api/blueprint/show/",
events: {
},
@@ -20,14 +20,10 @@ var BlueprintView = View.extend({
},
load: function(name){
- if (! name || name == "new") {
- this.uploader.load()
- return
- }
-
- name = sanitize(name)
-
- $.get(this.action + name, this.ready.bind(this))
+ name = sanitize(name) || "new"
+ this.uploader.load(name)
+// name = sanitize(name)
+// $.get(this.action + name, this.ready.bind(this))
},
orbiting: true,
diff --git a/server/index.js b/server/index.js
index 421a6a7..7143da2 100644
--- a/server/index.js
+++ b/server/index.js
@@ -165,6 +165,7 @@ site.route = function () {
app.post('/api/blueprint/upload', middleware.ensureAuthenticated, api.blueprint.upload)
app.get('/api/blueprint/user', middleware.ensureAuthenticated, api.blueprint.user)
app.post('/api/blueprint/scale', middleware.ensureAuthenticated, api.blueprint.scale)
+ app.post('/api/blueprint/edit', middleware.ensureAuthenticated, api.blueprint.update)
app.delete('/api/blueprint/destroy', middleware.ensureAuthenticated, api.blueprint.destroy)
app.get('/api/subscription', middleware.ensureAuthenticated, api.subscription.middleware.ensurePlans, api.subscription.middleware.ensureSubscription, api.subscription.show)
diff --git a/server/lib/api/blueprint.js b/server/lib/api/blueprint.js
index 7319055..e581d8f 100644
--- a/server/lib/api/blueprint.js
+++ b/server/lib/api/blueprint.js
@@ -81,6 +81,26 @@ var blueprint = {
})
})
},
+
+ update: function(req, res){
+ var _id = req.body._id
+ var data = util.cleanQuery(req.body)
+ if (! _id) { return res.json({ error: 404 }) }
+ Blueprint.findOne({ _id: _id }, function(err, doc){
+ if (! doc) { return res.json({ error: 404 }) }
+ if (String(doc.user_id) !== String(req.user._id)) { return res.json({ error: 404 }) }
+
+ doc.name = util.sanitize(data.name)
+ doc.slug = util.slugify(data.name)
+ doc.shapes = JSON.parse(data.shapes)
+ doc.startPosition = JSON.parse(data.startPosition)
+
+ doc.save(function(err, rec){
+ if (err || ! rec) { return res.json({ error: err }) }
+ res.json(rec)
+ })
+ })
+ },
destroy: function(req, res){
var _id = util.sanitize(req.body._id)
diff --git a/server/lib/schemas/Blueprint.js b/server/lib/schemas/Blueprint.js
index 78a388f..666f0cf 100644
--- a/server/lib/schemas/Blueprint.js
+++ b/server/lib/schemas/Blueprint.js
@@ -33,6 +33,15 @@ var BlueprintSchema = new mongoose.Schema({
type: String,
default: ""
},
+ slug: {
+ type: String,
+ required: true,
+ validate: [function (val){
+ val = util.sanitize(val || this.displayName || "")
+ if (! val.length) return false
+ return true
+ },"{PATH} name is required"]
+ },
description: {
type: String,
default: ""
@@ -45,7 +54,7 @@ var BlueprintSchema = new mongoose.Schema({
units: { type: String },
line: { type: String },
- rooms: [mongoose.Schema.Types.Mixed],
+ shapes: [mongoose.Schema.Types.Mixed],
startPosition: mongoose.Schema.Types.Mixed,
user_id: { type: mongoose.Schema.ObjectId, index: true },