| author | durandn |
| Tue, 07 Jun 2016 10:46:20 +0200 | |
| changeset 612 | aa4987fede52 |
| parent 565 | 49bc7df521df |
| permissions | -rw-r--r-- |
|
506
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
1 |
define(['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) { |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
2 |
'use strict'; |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
3 |
|
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
4 |
var Utils = requtils.getUtils(); |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
5 |
|
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
6 |
/* Rkns.Renderer.View Class */ |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
7 |
|
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
8 |
/* The representation for the view. */ |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
9 |
|
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
10 |
var ViewRepr = Utils.inherit(BaseRepresentation); |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
11 |
|
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
12 |
_(ViewRepr.prototype).extend({ |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
13 |
_init: function() { |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
14 |
var _this = this; |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
15 |
this.$ = $(".Rk-Render"); |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
16 |
this.type = "View"; |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
17 |
this.hiddenNodes = []; |
| 508 | 18 |
this.scale = 1; |
19 |
this.initialScale = 1; |
|
20 |
this.offset = paper.view.center; |
|
|
510
a8f02d66bf02
adapt the viewRepr to support a temp View (a representation without a model)
rougeronj
parents:
508
diff
changeset
|
21 |
this.params = {}; |
|
a8f02d66bf02
adapt the viewRepr to support a temp View (a representation without a model)
rougeronj
parents:
508
diff
changeset
|
22 |
|
|
a8f02d66bf02
adapt the viewRepr to support a temp View (a representation without a model)
rougeronj
parents:
508
diff
changeset
|
23 |
if (this.model){ |
|
a8f02d66bf02
adapt the viewRepr to support a temp View (a representation without a model)
rougeronj
parents:
508
diff
changeset
|
24 |
this.params = { |
|
a8f02d66bf02
adapt the viewRepr to support a temp View (a representation without a model)
rougeronj
parents:
508
diff
changeset
|
25 |
"zoom_level": _this.model.get("zoom_level"), |
|
a8f02d66bf02
adapt the viewRepr to support a temp View (a representation without a model)
rougeronj
parents:
508
diff
changeset
|
26 |
"offset": _this.model.get("offset"), |
|
a8f02d66bf02
adapt the viewRepr to support a temp View (a representation without a model)
rougeronj
parents:
508
diff
changeset
|
27 |
"hidden_nodes": _this.model.get("hidden_nodes") |
|
a8f02d66bf02
adapt the viewRepr to support a temp View (a representation without a model)
rougeronj
parents:
508
diff
changeset
|
28 |
}; |
|
a8f02d66bf02
adapt the viewRepr to support a temp View (a representation without a model)
rougeronj
parents:
508
diff
changeset
|
29 |
} |
|
a8f02d66bf02
adapt the viewRepr to support a temp View (a representation without a model)
rougeronj
parents:
508
diff
changeset
|
30 |
|
| 547 | 31 |
this.initWithParams(); |
|
506
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
32 |
|
| 508 | 33 |
var bindClick = function(selector, fname) { |
34 |
_this.$.find(selector).click(function(evt) { |
|
35 |
_this[fname](evt); |
|
36 |
return false; |
|
37 |
}); |
|
38 |
}; |
|
39 |
|
|
40 |
bindClick(".Rk-ZoomOut", "zoomOut"); |
|
41 |
bindClick(".Rk-ZoomIn", "zoomIn"); |
|
42 |
bindClick(".Rk-ZoomFit", "autoScale"); |
|
| 547 | 43 |
bindClick(".Rk-ZoomSave", "saveView"); |
| 508 | 44 |
|
45 |
this.$.find(".Rk-ZoomSetSaved").click( function() { |
|
|
510
a8f02d66bf02
adapt the viewRepr to support a temp View (a representation without a model)
rougeronj
parents:
508
diff
changeset
|
46 |
_this.setScale(_this.params.zoom_level, new paper.Point(_this.params.offset)); |
|
a8f02d66bf02
adapt the viewRepr to support a temp View (a representation without a model)
rougeronj
parents:
508
diff
changeset
|
47 |
_this.showNodes(false); |
|
a8f02d66bf02
adapt the viewRepr to support a temp View (a representation without a model)
rougeronj
parents:
508
diff
changeset
|
48 |
if (_this.options.hide_nodes){ |
|
a8f02d66bf02
adapt the viewRepr to support a temp View (a representation without a model)
rougeronj
parents:
508
diff
changeset
|
49 |
_this.hiddenNodes = (_this.params.hidden_nodes || []).concat(); |
|
a8f02d66bf02
adapt the viewRepr to support a temp View (a representation without a model)
rougeronj
parents:
508
diff
changeset
|
50 |
_this.hideNodes(); |
|
506
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
51 |
} |
| 524 | 52 |
_this.updateUrl(); |
| 508 | 53 |
}); |
|
506
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
54 |
|
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
55 |
this.$.find(".Rk-ShowHiddenNodes").mouseenter( function() { |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
56 |
_this.showNodes(true); |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
57 |
_this.$.find(".Rk-ShowHiddenNodes").mouseleave( function() { |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
58 |
_this.hideNodes(); |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
59 |
}); |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
60 |
}); |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
61 |
this.$.find(".Rk-ShowHiddenNodes").click( function() { |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
62 |
_this.showNodes(false); |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
63 |
_this.$.find(".Rk-ShowHiddenNodes").off( "mouseleave" ); |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
64 |
}); |
| 565 | 65 |
|
66 |
if(this.renkan.project.get("views").length > 0 && this.renkan.options.save_view){ |
|
|
506
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
67 |
this.$.find(".Rk-ZoomSetSaved").show(); |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
68 |
} |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
69 |
}, |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
70 |
redraw: function(options) { |
|
510
a8f02d66bf02
adapt the viewRepr to support a temp View (a representation without a model)
rougeronj
parents:
508
diff
changeset
|
71 |
//console.log("view : ", this.model.toJSON()); |
|
a8f02d66bf02
adapt the viewRepr to support a temp View (a representation without a model)
rougeronj
parents:
508
diff
changeset
|
72 |
}, |
| 547 | 73 |
initWithParams: function(){ |
|
510
a8f02d66bf02
adapt the viewRepr to support a temp View (a representation without a model)
rougeronj
parents:
508
diff
changeset
|
74 |
var _this = this; |
| 524 | 75 |
|
| 560 | 76 |
if (_this.options.view_force_autoscale){ |
77 |
this.autoScale(); |
|
78 |
} else { |
|
| 554 | 79 |
_this.setScale(_this.params.zoom_level, new paper.Point(_this.params.offset)); |
80 |
} |
|
81 |
|
|
| 560 | 82 |
if (_this.options.hide_nodes && !_this.options.view_show_hiddennodes){ |
|
510
a8f02d66bf02
adapt the viewRepr to support a temp View (a representation without a model)
rougeronj
parents:
508
diff
changeset
|
83 |
_this.hiddenNodes = (_this.params.hidden_nodes || []).concat(); |
|
a8f02d66bf02
adapt the viewRepr to support a temp View (a representation without a model)
rougeronj
parents:
508
diff
changeset
|
84 |
_this.hideNodes(); |
| 554 | 85 |
} else { |
86 |
_this.showNodes(false); |
|
|
510
a8f02d66bf02
adapt the viewRepr to support a temp View (a representation without a model)
rougeronj
parents:
508
diff
changeset
|
87 |
} |
| 547 | 88 |
}, |
89 |
saveView: function(){ |
|
90 |
var _this = this; |
|
91 |
|
|
92 |
var offset = { |
|
93 |
"x": _this.offset.x, |
|
94 |
"y": _this.offset.y |
|
95 |
}; |
|
96 |
|
|
97 |
_this.model = _this.renkan.project.addView( { zoom_level:_this.scale, offset:offset, hidden_nodes: _this.hiddenNodes.concat() } ); |
|
98 |
_this.params = { |
|
99 |
"zoom_level": _this.model.get("zoom_level"), |
|
100 |
"offset": _this.model.get("offset"), |
|
101 |
"hidden_nodes": _this.model.get("hidden_nodes") |
|
102 |
}; |
|
103 |
|
|
| 565 | 104 |
this.$.find(".Rk-ZoomSetSaved").show(); |
105 |
|
|
| 547 | 106 |
_this.updateUrl(); |
|
506
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
107 |
}, |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
108 |
addHiddenNode: function(_model){ |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
109 |
this.hideNode(_model); |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
110 |
this.hiddenNodes.push(_model.id); |
| 511 | 111 |
this.updateUrl(); |
|
506
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
112 |
}, |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
113 |
hideNode: function(_model){ |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
114 |
if (typeof this.renderer.getRepresentationByModel(_model) !== 'undefined'){ |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
115 |
this.renderer.getRepresentationByModel(_model).hide(); |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
116 |
} |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
117 |
}, |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
118 |
hideNodes: function(){ |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
119 |
var _this = this; |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
120 |
this.hiddenNodes.forEach(function(_id, index){ |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
121 |
var node = _this.renkan.project.get("nodes").get(_id); |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
122 |
if (typeof node !== 'undefined'){ |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
123 |
return _this.hideNode(_this.renkan.project.get("nodes").get(_id)); |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
124 |
}else{ |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
125 |
_this.hiddenNodes.splice(index, 1); |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
126 |
} |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
127 |
}); |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
128 |
paper.view.draw(); |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
129 |
}, |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
130 |
showNodes: function(ghost){ |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
131 |
var _this = this; |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
132 |
this.hiddenNodes.forEach(function(_id){ |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
133 |
_this.renderer.getRepresentationByModel(_this.renkan.project.get("nodes").get(_id)).show(ghost); |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
134 |
}); |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
135 |
if (!ghost){ |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
136 |
this.hiddenNodes = []; |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
137 |
} |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
138 |
paper.view.draw(); |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
139 |
}, |
| 508 | 140 |
setScale: function(_newScale, _offset) { |
141 |
if ((_newScale/this.initialScale) > Utils._MIN_SCALE && (_newScale/this.initialScale) < Utils._MAX_SCALE) { |
|
142 |
this.scale = _newScale; |
|
143 |
if (_offset) { |
|
144 |
this.offset = _offset; |
|
145 |
} |
|
146 |
this.renderer.redraw(); |
|
| 511 | 147 |
this.updateUrl(); |
| 508 | 148 |
} |
149 |
}, |
|
150 |
zoomOut: function() { |
|
151 |
var _newScale = this.scale * Math.SQRT1_2, |
|
152 |
_offset = new paper.Point([ |
|
153 |
this.renderer.canvas_$.width(), |
|
154 |
this.renderer.canvas_$.height() |
|
155 |
]).multiply( 0.5 * ( 1 - Math.SQRT1_2 ) ).add(this.offset.multiply( Math.SQRT1_2 )); |
|
156 |
this.setScale( _newScale, _offset ); |
|
157 |
}, |
|
158 |
zoomIn: function() { |
|
159 |
var _newScale = this.scale * Math.SQRT2, |
|
160 |
_offset = new paper.Point([ |
|
161 |
this.renderer.canvas_$.width(), |
|
162 |
this.renderer.canvas_$.height() |
|
163 |
]).multiply( 0.5 * ( 1 - Math.SQRT2 ) ).add(this.offset.multiply( Math.SQRT2 )); |
|
164 |
this.setScale( _newScale, _offset ); |
|
165 |
}, |
|
| 557 | 166 |
resizeZoom: function(deltaW, deltaH, _ratio) { |
167 |
var _newScale = this.scale * _ratio; |
|
168 |
var _offset = new paper.Point([ |
|
169 |
(this.renderer.canvas_$.width() * 0.5 * ( 1 - _ratio) ) + (this.offset.x * _ratio + deltaW * _ratio * 0.5 ), |
|
170 |
(this.renderer.canvas_$.height() * 0.5 * ( 1 - _ratio) ) + (this.offset.y * _ratio + deltaH * _ratio * 0.5 ) |
|
| 508 | 171 |
]); |
172 |
this.setScale( _newScale, _offset ); |
|
173 |
}, |
|
174 |
autoScale: function(force_view) { |
|
175 |
var nodes = this.renkan.project.get("nodes"); |
|
176 |
if (nodes.length > 1) { |
|
177 |
var _xx = nodes.map(function(_node) { return _node.get("position").x; }), |
|
178 |
_yy = nodes.map(function(_node) { return _node.get("position").y; }), |
|
179 |
_minx = Math.min.apply(Math, _xx), |
|
180 |
_miny = Math.min.apply(Math, _yy), |
|
181 |
_maxx = Math.max.apply(Math, _xx), |
|
182 |
_maxy = Math.max.apply(Math, _yy); |
|
183 |
var _scale = Math.min( (paper.view.size.width - 2 * this.renkan.options.autoscale_padding) / (_maxx - _minx), (paper.view.size.height - 2 * this.renkan.options.autoscale_padding) / (_maxy - _miny)); |
|
184 |
this.initialScale = _scale; |
|
185 |
// Override calculated scale if asked |
|
186 |
if((typeof force_view !== "undefined") && parseFloat(force_view.zoom_level)>0 && parseFloat(force_view.offset.x)>0 && parseFloat(force_view.offset.y)>0){ |
|
187 |
this.setScale(parseFloat(force_view.zoom_level), new paper.Point(parseFloat(force_view.offset.x), parseFloat(force_view.offset.y))); |
|
188 |
} |
|
189 |
else{ |
|
190 |
this.setScale(_scale, paper.view.center.subtract(new paper.Point([(_maxx + _minx) / 2, (_maxy + _miny) / 2]).multiply(_scale))); |
|
191 |
} |
|
192 |
} |
|
193 |
if (nodes.length === 1) { |
|
194 |
this.setScale(1, paper.view.center.subtract(new paper.Point([nodes.at(0).get("position").x, nodes.at(0).get("position").y]))); |
|
195 |
} |
|
196 |
}, |
|
197 |
paperShift: function(_delta) { |
|
198 |
this.offset = this.offset.add(_delta); |
|
199 |
this.renderer.redraw(); |
|
200 |
}, |
|
| 511 | 201 |
updateUrl: function(){ |
| 554 | 202 |
if(this.options.url_parameters && this.options.update_url){ |
| 511 | 203 |
var result = {}; |
204 |
var parameters = Backbone.history.getFragment().split('?'); |
|
205 |
if (parameters.length > 1){ |
|
206 |
parameters[1].split("&").forEach(function(part) { |
|
207 |
var item = part.split("="); |
|
208 |
result[item[0]] = decodeURIComponent(item[1]); |
|
209 |
}); |
|
|
519
b94a34c139c1
update parameters function to accept idView parameter
rougeronj
parents:
517
diff
changeset
|
210 |
} |
| 511 | 211 |
result.view = Math.round(this.offset.x*1000)/1000 + ',' + Math.round(this.offset.y*1000)/1000 + ',' + Math.round(this.scale*1000)/1000; |
|
519
b94a34c139c1
update parameters function to accept idView parameter
rougeronj
parents:
517
diff
changeset
|
212 |
|
|
b94a34c139c1
update parameters function to accept idView parameter
rougeronj
parents:
517
diff
changeset
|
213 |
if (this.renkan.project.get("views").indexOf(this.model) > -1){ |
| 525 | 214 |
result.viewIndex = this.renkan.project.get("views").indexOf(this.model); |
215 |
if (result.viewIndex === this.renkan.project.get("views").length - 1){ |
|
216 |
result.viewIndex = -1; |
|
| 524 | 217 |
} |
|
519
b94a34c139c1
update parameters function to accept idView parameter
rougeronj
parents:
517
diff
changeset
|
218 |
} else { |
| 525 | 219 |
if (result.viewIndex){ |
220 |
delete result.viewIndex; |
|
|
519
b94a34c139c1
update parameters function to accept idView parameter
rougeronj
parents:
517
diff
changeset
|
221 |
} |
|
b94a34c139c1
update parameters function to accept idView parameter
rougeronj
parents:
517
diff
changeset
|
222 |
} |
|
517
15061185cf1b
prevent history to be change with the new hash parameters
rougeronj
parents:
511
diff
changeset
|
223 |
this.renkan.router.navigate("?" + decodeURIComponent($.param(result)), {trigger: false, replace: true}); |
| 511 | 224 |
} |
225 |
}, |
|
| 524 | 226 |
destroy: function(_event) { |
227 |
this._super("destroy"); |
|
228 |
this.showNodes(false); |
|
229 |
} |
|
|
506
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
230 |
}).value(); |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
231 |
|
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
232 |
return ViewRepr; |
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
233 |
|
|
460de050f800
Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff
changeset
|
234 |
}); |