diff options
| author | Jules Laplace <jules@okfoc.us> | 2014-06-20 16:57:36 -0400 |
|---|---|---|
| committer | Jules Laplace <jules@okfoc.us> | 2014-06-20 16:57:44 -0400 |
| commit | 850c4202885867350ecccc88a4f315d6196a7326 (patch) | |
| tree | cd5d09042b00596c95c2787e6fab29309a8b522c | |
| parent | 1668d6e2e20c9bd53f3f6a299541c582da9742b4 (diff) | |
delete/resize media
18 files changed, 126 insertions, 53 deletions
diff --git a/public/assets/javascripts/app.js b/public/assets/javascripts/app.js index 2d7961b..3d0d3c4 100644 --- a/public/assets/javascripts/app.js +++ b/public/assets/javascripts/app.js @@ -68,8 +68,8 @@ app.launch = function () { var loader = new Loader(function(){ $("#loader").hide() window.environment && window.environment.init() - window.editor && window.editor.init() - window.path && window.path.init() + // window.editor && window.editor.init() + // window.path && window.path.init() animate() }) @@ -93,7 +93,6 @@ app.position = function(obj){ rotationX: obj.rotationX, rotationY: obj.rotationY } - console.log(obj.scale) if (obj.scale !== 1) { pos.scale = obj.scale } diff --git a/public/assets/javascripts/rectangles/engine/rooms/_rooms.js b/public/assets/javascripts/rectangles/engine/rooms/_rooms.js index 0d6c267..0186e9a 100644 --- a/public/assets/javascripts/rectangles/engine/rooms/_rooms.js +++ b/public/assets/javascripts/rectangles/engine/rooms/_rooms.js @@ -82,19 +82,7 @@ var Rooms = new function(){ return [] } - base.uid = (function(){ - var id = 0 - return function(s){ - s = s || "" - var ss - while (1) { - ss = s + (id++) - if (! (ss in base.list)) { - return ss - } - } - } - })() + base.uid = UidGenerator(base.list) base.sorted_by_position = function(){ return sort_rooms_by_position( base.values() ) diff --git a/public/assets/javascripts/rectangles/engine/scenery/_scenery.js b/public/assets/javascripts/rectangles/engine/scenery/_scenery.js index 3fe6b66..143a4d9 100644 --- a/public/assets/javascripts/rectangles/engine/scenery/_scenery.js +++ b/public/assets/javascripts/rectangles/engine/scenery/_scenery.js @@ -3,7 +3,7 @@ var Scenery = new function(){ var base = this; - base.media = [] + base.list = {} base.nextMedia = null base.mouse = new mouse ({ use_offset: false }) @@ -25,7 +25,7 @@ var Scenery = new function(){ break } - base.media.push(scene_media) + base.list[scene_media.id] = scene_media return scene_media } @@ -35,14 +35,27 @@ var Scenery = new function(){ } base.remove = function(id){ - var removed = _.remove(base.media, function(media){ return media.id == id }) - removed.forEach(function(media){ - // cleanup - }) + var media = base.list[id] + delete base.list[id] + media && media.destroy() + } + + base.uid = UidGenerator(base.list) + + base.forEach = function(f){ + return base.values().forEach(f) + } + + base.map = function(f){ + return base.values().map(f) + } + + base.values = function(){ + return _.values(base.list) } base.serialize = function(){ - var scenery = base.media.map(function(media){ + var scenery = base.map(function(media){ return media.serialize() }) return scenery diff --git a/public/assets/javascripts/rectangles/engine/scenery/move.js b/public/assets/javascripts/rectangles/engine/scenery/move.js index 8acc1c2..f38a740 100644 --- a/public/assets/javascripts/rectangles/engine/scenery/move.js +++ b/public/assets/javascripts/rectangles/engine/scenery/move.js @@ -22,6 +22,10 @@ Scenery.move = function(base){ function down (e, cursor){ if (e.target != base.mx.el) return; + if (editor.permissions.destroy) { + Scenery.remove(base.id) + return + } dragging = true x = base.mx.x y = base.mx.y @@ -45,7 +49,9 @@ Scenery.move = function(base){ break } - Scenery.resize.move_dots() + if (editor.permissions.resize) { + Scenery.resize.move_dots() + } } function up (e, cursor){ @@ -92,8 +98,10 @@ Scenery.move = function(base){ rotationY: wall_rotation[ new_wall.side ] }) - Scenery.resize.rotate_dots() - Scenery.resize.move_dots() + if (editor.permissions.resize) { + Scenery.resize.rotate_dots() + Scenery.resize.move_dots() + } } return this diff --git a/public/assets/javascripts/rectangles/engine/scenery/resize.js b/public/assets/javascripts/rectangles/engine/scenery/resize.js index ac13326..df058bb 100644 --- a/public/assets/javascripts/rectangles/engine/scenery/resize.js +++ b/public/assets/javascripts/rectangles/engine/scenery/resize.js @@ -106,6 +106,7 @@ Scenery.resize = new function(){ Scenery.resize.hide() }, dot_hide_delay) } + base.hide = function () { obj = null dots.forEach(function(dot){ @@ -187,6 +188,7 @@ Scenery.resize = new function(){ function up (e, cursor){ dragging = false selected_dot = null + if (! editor.permissions.resize) { return } obj.scale = obj.mx.ops.scale = obj.mx.scale obj.set_wall() document.body.classList.remove("dragging") diff --git a/public/assets/javascripts/rectangles/engine/scenery/types/_object.js b/public/assets/javascripts/rectangles/engine/scenery/types/_object.js index 1aa037c..4367efc 100644 --- a/public/assets/javascripts/rectangles/engine/scenery/types/_object.js +++ b/public/assets/javascripts/rectangles/engine/scenery/types/_object.js @@ -5,6 +5,7 @@ Scenery.types.base = Fiber.extend(function(base){ init: function(opt){ _.bindAll(this, 'enter', 'leave') + this.id = Scenery.uid("scenery") this.move = new Scenery.move (this) this.media = opt.media this.dimensions = new vec2(this.media.width, this.media.height) @@ -30,15 +31,30 @@ Scenery.types.base = Fiber.extend(function(base){ mouseleave: this.leave, }) }, + + destroy: function(){ + this.unbind() + scene.remove(this.mx) + this.move = null + this.media = null + this.dimensions = null + this.wall = null + this.bounds = null + this.center = null + }, enter: function(e){ - Scenery.resize.show(this) - Scenery.hovering = true + if (editor.permissions.resize) { + Scenery.resize.show(this) + Scenery.hovering = true + } }, leave: function(e){ - Scenery.resize.defer_hide(this) - Scenery.hovering = false + if (editor.permissions.resize) { + Scenery.resize.defer_hide(this) + Scenery.hovering = false + } }, set_wall: function(wall){ @@ -46,7 +62,7 @@ Scenery.types.base = Fiber.extend(function(base){ this.bounds = this.wall.bounds_for(this.media, this.scale) this.center = this.wall.center() }, - + recenter: function(){ this.mx.move({ x: this.center.a, @@ -59,6 +75,7 @@ Scenery.types.base = Fiber.extend(function(base){ serialize: function(){ var data = { + id: this.id, room_id: this.wall.room_id, wall_id: this.wall.id, side: this.wall.side, diff --git a/public/assets/javascripts/rectangles/util/permissions.js b/public/assets/javascripts/rectangles/util/permissions.js new file mode 100644 index 0000000..22a6079 --- /dev/null +++ b/public/assets/javascripts/rectangles/util/permissions.js @@ -0,0 +1,17 @@ + +var Permissions = function(ops){ + var base = this + base.keys = _.keys(ops) + base.keys.forEach(function(op){ + base[op] = ops[op] + }) +} + +Permissions.prototype.toggle = function (key) { + var base = this + var state = ! base[key] + base.keys.forEach(function(op){ + base[op] = op == key ? state : false + }) + return state +} diff --git a/public/assets/javascripts/rectangles/util/uid.js b/public/assets/javascripts/rectangles/util/uid.js new file mode 100644 index 0000000..ca22fb3 --- /dev/null +++ b/public/assets/javascripts/rectangles/util/uid.js @@ -0,0 +1,14 @@ + +var UidGenerator = function(list){ + var id = 0 + return function(s){ + s = s || "" + var ss + while (1) { + ss = s + (id++) + if (! (ss in list)) { + return ss + } + } + } +}
\ No newline at end of file diff --git a/public/assets/javascripts/ui/SiteRouter.js b/public/assets/javascripts/ui/SiteRouter.js index dae2131..3a6b589 100644 --- a/public/assets/javascripts/ui/SiteRouter.js +++ b/public/assets/javascripts/ui/SiteRouter.js @@ -10,7 +10,7 @@ var SiteRouter = Router.extend({ "click [data-role='edit-profile-modal']": 'editProfile', "click [data-role='new-document-modal']": 'newDocument', "click [data-role='edit-document-modal']": 'editDocument', - "click [data-role='delete-document-modal']": 'destroyDocument', + "click [data-role='destroy-document-modal']": 'destroyDocument', "click [data-role='show-layouts-modal']": 'layoutPicker', "click [data-role='show-projects-modal']": 'projectPicker', }, diff --git a/public/assets/javascripts/ui/builder/BuilderToolbar.js b/public/assets/javascripts/ui/builder/BuilderToolbar.js index 42d4306..4ca2e6c 100644 --- a/public/assets/javascripts/ui/builder/BuilderToolbar.js +++ b/public/assets/javascripts/ui/builder/BuilderToolbar.js @@ -6,10 +6,10 @@ var BuilderToolbar = View.extend({ "click [data-role='toggle-map-view']": 'toggleMap', "click [data-role='toggle-layout-settings']": 'toggleSettings', "click [data-role='undo']": 'undo', - "click [data-role='draw']": 'draw', - "click [data-role='resize']": 'resize', - "click [data-role='move']": 'move', - "click [data-role='delete']": 'delete', + "click [data-role='draw-mode']": 'draw', + "click [data-role='resize-mode']": 'resize', + "click [data-role='move-mode']": 'move', + "click [data-role='destroy-mode']": 'destroy', }, initialize: function(opt){ @@ -36,7 +36,7 @@ var BuilderToolbar = View.extend({ move: function(){ }, - delete: function(){ + destroy: function(){ }, }) diff --git a/public/assets/javascripts/ui/editor/EditorSettings.js b/public/assets/javascripts/ui/editor/EditorSettings.js index 58a37b8..b9f4560 100644 --- a/public/assets/javascripts/ui/editor/EditorSettings.js +++ b/public/assets/javascripts/ui/editor/EditorSettings.js @@ -30,7 +30,7 @@ var EditorSettings = FormView.extend({ data.rooms && Rooms.deserialize(data.rooms) data.startPosition && scene.camera.move(data.startPosition) - + if (! data.isNew) { console.log(data) @@ -39,7 +39,6 @@ var EditorSettings = FormView.extend({ 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) } }, diff --git a/public/assets/javascripts/ui/editor/EditorToolbar.js b/public/assets/javascripts/ui/editor/EditorToolbar.js index f966ab6..5382187 100644 --- a/public/assets/javascripts/ui/editor/EditorToolbar.js +++ b/public/assets/javascripts/ui/editor/EditorToolbar.js @@ -6,8 +6,8 @@ var EditorToolbar = View.extend({ "click [data-role='toggle-map-view']": 'toggleMap', "click [data-role='toggle-project-settings']": 'toggleSettings', "click [data-role='open-media-viewer']": 'openMediaViewer', - "click [data-role='resize-media']": 'resize', - "click [data-role='delete-media']": 'deleteMedia', + "click [data-role='resize-media']": 'resizeMedia', + "click [data-role='destroy-media']": 'destroyMedia', "click [data-role='toggle-wallpaper-panel']": 'toggleWallpaper', "click [data-role='toggle-light-control']": 'toggleLightControl', "click [data-role='edit-wall-text']": 'editWallText', @@ -32,10 +32,19 @@ var EditorToolbar = View.extend({ }, resizeMedia: function(){ + var state = editor.permissions.toggle("resize") + $(".inuse").removeClass("inuse") + $("[data-role='resize-media']").toggleClass("inuse", state) + if (state) { + Scenery.resize.hide() + } }, - deleteMedia: function(){ - $("body").toggleClass("deleteActive", isActive); + destroyMedia: function(){ + var state = editor.permissions.toggle("destroy") + $(".inuse").removeClass("inuse") + $("[data-role='destroy-media']").toggleClass("inuse", state) + $("body").toggleClass("destroyActive", state) }, toggleWallpaper: function(){ @@ -51,4 +60,9 @@ var EditorToolbar = View.extend({ }) -// $(".icon-close").removeClass("icon-close") +var editor = new function(){ + this.permissions = new Permissions({ + 'resize': false, + 'destroy': false, + }) +}
\ No newline at end of file diff --git a/public/assets/stylesheets/app.css b/public/assets/stylesheets/app.css index 4152a1e..77b1d04 100755 --- a/public/assets/stylesheets/app.css +++ b/public/assets/stylesheets/app.css @@ -659,7 +659,7 @@ h5 { background: rgba(255,255,255,0.9); margin-left: -180px; display: inline-block; - width: 90px; + width: 120px; text-align: right; padding: 17px 13px; margin-top: -16px; diff --git a/server/lib/api/projects.js b/server/lib/api/projects.js index ff8bcbb..32be88c 100644 --- a/server/lib/api/projects.js +++ b/server/lib/api/projects.js @@ -8,7 +8,7 @@ var _ = require('lodash'), var projects = { index: function(req, res){ - Project.find({}, function(err, docs){ + Project.find({ user_id: req.user._id }, function(err, docs){ res.json(docs) }) }, @@ -67,7 +67,7 @@ var projects = { var data = util.cleanQuery(req.body) - data.user_id = req.user._id + // data.user_id = req.user._id data.name = util.sanitize(data.name) data.slug = util.slugify(data.name) data.description = util.sanitize(data.description) diff --git a/views/controls/builder/toolbar.ejs b/views/controls/builder/toolbar.ejs index b05f314..b55911b 100644 --- a/views/controls/builder/toolbar.ejs +++ b/views/controls/builder/toolbar.ejs @@ -16,7 +16,7 @@ data-info="resize" class="icon-arrow-resize"></span> <span - data-role='delete-mode' + data-role='destroy-mode' data-info="delete" class="icon-close"></span> <!-- diff --git a/views/controls/editor/toolbar.ejs b/views/controls/editor/toolbar.ejs index f380cc8..e073df4 100644 --- a/views/controls/editor/toolbar.ejs +++ b/views/controls/editor/toolbar.ejs @@ -8,6 +8,10 @@ data-info="resize media" class="icon-arrow-resize"></span> <span + data-role='destroy-media' + data-info="delete media" + class="icon-ios7-trash-outline"></span> + <span data-role='toggle-wallpaper-panel' data-info="add wallpaper" class="icon-ios7-keypad-outline"></span> @@ -16,10 +20,6 @@ data-info="light control" class="icon-ios7-sunny-outline"></span> <span - data-role='delete-media' - data-info="delete media" - class="icon-ios7-trash-outline"></span> - <span data-role='edit-wall-text' data-info="edit wall text" class="icon-ios7-compose-outline"></span> diff --git a/views/docs.ejs b/views/docs.ejs index e3f0823..5662133 100644 --- a/views/docs.ejs +++ b/views/docs.ejs @@ -21,7 +21,7 @@ <div class="options"> <a href="#" data-role="new-document-modal">New Document</a> | <a href="#" data-role="edit-document-modal" data-name="[[- doc.name ]]">Edit</a> | - <a href="#" data-role="delete-document-modal" data-name="[[- doc.name ]]">Delete</a> + <a href="#" data-role="destroy-document-modal" data-name="[[- doc.name ]]">Delete</a> [[ include partials/edit-documentation ]] </div> [[ } ]] diff --git a/views/partials/scripts.ejs b/views/partials/scripts.ejs index abc9623..fa75efa 100644 --- a/views/partials/scripts.ejs +++ b/views/partials/scripts.ejs @@ -13,7 +13,9 @@ <script type="text/javascript" src="/assets/javascripts/rectangles/util/constants.js"></script> <script type="text/javascript" src="/assets/javascripts/rectangles/util/colors.js"></script> <script type="text/javascript" src="/assets/javascripts/rectangles/util/debug.js"></script> +<script type="text/javascript" src="/assets/javascripts/rectangles/util/permissions.js"></script> <script type="text/javascript" src="/assets/javascripts/rectangles/util/sort.js"></script> +<script type="text/javascript" src="/assets/javascripts/rectangles/util/uid.js"></script> <script type="text/javascript" src="/assets/javascripts/rectangles/util/wheel.js"></script> <script type="text/javascript" src="/assets/javascripts/rectangles/util/mouse.js"></script> <script type="text/javascript" src="/assets/javascripts/rectangles/util/keys.js"></script> |
