# HG changeset patch # User rougeronj # Date 1442417806 -7200 # Node ID 904effa4b6d75f5a4f99a2dc12960f93db4e84ae # Parent dc04aa440c1191d2ba9fe1d550d87ac66bb6596b improve view management: - we can pass a negative view index, in this case we count from the end of the list of view - before creating/changing the view representation, we remove the previous one and reinitialize the node visibility - each time we save a view, it creates a new one at the end of the list - "restore" view loads the last view of the list diff -r dc04aa440c11 -r 904effa4b6d7 client/js/defaults.js --- a/client/js/defaults.js Tue Sep 15 17:09:42 2015 +0200 +++ b/client/js/defaults.js Wed Sep 16 17:36:46 2015 +0200 @@ -49,7 +49,8 @@ /* show buttons to save view */ default_view: false, /* Allows to load default view (zoom+offset) at start on read_only mode, instead of autoScale. the default_view will be the last */ - + default_index_view: -1, + /* URL parsing */ update_url:true, /* update the url each time the paper shift or on zoom in/out, with the serialized view (offset and scale) */ diff -r dc04aa440c11 -r 904effa4b6d7 client/js/renderer/scene.js --- a/client/js/renderer/scene.js Tue Sep 15 17:09:42 2015 +0200 +++ b/client/js/renderer/scene.js Wed Sep 16 17:36:46 2015 +0200 @@ -1201,13 +1201,19 @@ }, parameters: function(_params){ + this.removeRepresentationsOfType("View"); if ($.isEmptyObject(_params)){ - this.view = this.addRepresentation("View", this.renkan.project.get("views").first()); - this.view.autoScale(); + this.view = this.addRepresentation("View", this.renkan.project.get("views").at(this.validViewIndex(this.renkan.options.default_index_view))); + if (!this.renkan.options.default_view){ + this.view.autoScale(); + } return; } - if (typeof _params.idView !== 'undefined' && typeof this.renkan.project.get("views").at(_params.idView) !== 'undefined'){ - this.view = this.addRepresentation("View", this.renkan.project.get("views").at(_params.idView)); + if (typeof _params.idView !== 'undefined'){ + this.view = this.addRepresentation("View", this.renkan.project.get("views").at(this.validViewIndex(_params.idView))); + if (!this.renkan.options.default_view){ + this.view.autoScale(); + } } if (typeof _params.view !== 'undefined' && _params.view.split(",").length >= 3){ var viewParams = _params.view.split(","); @@ -1227,8 +1233,8 @@ this.view.init(); } } - if(!this.view){ - this.view = this.addRepresentation("View", this.renkan.project.get("views").first()); + if (!this.view){ + this.view = this.addRepresentation("View", this.renkan.project.get("views").at(this.validViewIndex(this.renkan.options.default_index_view))); this.view.autoScale(); } //other parameters must go after because most of them depends on a view that must be initialize before @@ -1237,6 +1243,20 @@ this.highlightModel(this.renkan.project.get("nodes").get(_params.idNode)); } }, + validViewIndex: function(index){ + //check if the view index exist (negative index is from the end) and return the correct index or false if doesn't exist + var _index = parseInt(index); + var validIndex = 0; + if (_index < 0){ + validIndex = this.renkan.project.get("views").length + _index; + } else { + validIndex = _index; + } + if (typeof this.renkan.project.get("views").at(_index) === 'undefined'){ + validIndex = 0; + } + return validIndex; + }, foldBins: function() { var foldBinsButton = this.$.find(".Rk-Fold-Bins"), bins = this.renkan.$.find(".Rk-Bins"); diff -r dc04aa440c11 -r 904effa4b6d7 client/js/renderer/viewrepr.js --- a/client/js/renderer/viewrepr.js Tue Sep 15 17:09:42 2015 +0200 +++ b/client/js/renderer/viewrepr.js Wed Sep 16 17:36:46 2015 +0200 @@ -46,12 +46,7 @@ "x": _this.offset.x, "y": _this.offset.y }; - //TODO: make the if else the same function - if (_this.model && _this.renkan.project.get("views").indexOf(_this.model) > 0){ - _this.model.set( { zoom_level:_this.scale, offset:offset, hidden_nodes: _this.hiddenNodes.concat() } ); - }else{ - _this.model = _this.renkan.project.addView( { zoom_level:_this.scale, offset:offset, hidden_nodes: _this.hiddenNodes.concat() } ); - } + _this.model = _this.renkan.project.addView( { zoom_level:_this.scale, offset:offset, hidden_nodes: _this.hiddenNodes.concat() } ); _this.params = { "zoom_level": _this.model.get("zoom_level"), "offset": _this.model.get("offset"), @@ -61,12 +56,19 @@ }); this.$.find(".Rk-ZoomSetSaved").click( function() { + _this.model = _this.renkan.project.get("views").at(_this.renkan.project.get("views").length -1); + _this.params = { + "zoom_level": _this.model.get("zoom_level"), + "offset": _this.model.get("offset"), + "hidden_nodes": _this.model.get("hidden_nodes") + }; _this.setScale(_this.params.zoom_level, new paper.Point(_this.params.offset)); _this.showNodes(false); if (_this.options.hide_nodes){ _this.hiddenNodes = (_this.params.hidden_nodes || []).concat(); _this.hideNodes(); } + _this.updateUrl(); }); this.$.find(".Rk-ShowHiddenNodes").mouseenter( function() { @@ -89,7 +91,7 @@ init: function(){ var _this = this; _this.setScale(_this.params.zoom_level, new paper.Point(_this.params.offset)); - _this.showNodes(false); + if (_this.options.hide_nodes){ _this.hiddenNodes = (_this.params.hidden_nodes || []).concat(); _this.hideNodes(); @@ -202,6 +204,9 @@ if (this.renkan.project.get("views").indexOf(this.model) > -1){ result.idView = this.renkan.project.get("views").indexOf(this.model); + if (result.idView === this.renkan.project.get("views").length - 1){ + result.idView = -1; + } } else { if (result.idView){ delete result.idView; @@ -210,6 +215,10 @@ this.renkan.router.navigate("?" + decodeURIComponent($.param(result)), {trigger: false, replace: true}); } }, + destroy: function(_event) { + this._super("destroy"); + this.showNodes(false); + } }).value(); return ViewRepr;