diff options
| -rw-r--r-- | public/assets/javascripts/rectangles/engine/shapes/polyline.js | 12 | ||||
| -rw-r--r-- | public/assets/javascripts/rectangles/engine/shapes/shapelist.js | 7 | ||||
| -rw-r--r-- | public/assets/javascripts/ui/blueprint/BlueprintSettings.js | 7 | ||||
| -rw-r--r-- | public/assets/javascripts/ui/blueprint/BlueprintToolbar.js | 5 | ||||
| -rw-r--r-- | public/assets/javascripts/ui/blueprint/BlueprintUploader.js | 16 | ||||
| -rw-r--r-- | public/assets/javascripts/ui/blueprint/BlueprintView.js | 14 | ||||
| -rw-r--r-- | server/index.js | 1 | ||||
| -rw-r--r-- | server/lib/api/blueprint.js | 20 | ||||
| -rw-r--r-- | server/lib/schemas/Blueprint.js | 11 |
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 }, |
