client/js/renderer/viewrepr.js
author durandn
Thu, 21 Apr 2016 15:18:19 +0200
changeset 605 13d355fd09bf
parent 565 49bc7df521df
permissions -rw-r--r--
updated uri to allow optional trailing slash on single resource URIs (django automatic redirects don't carry over the Authorization header that can sometimes be needed, for instance with OAuth)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
    18
            this.scale = 1;
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
    19
            this.initialScale = 1;
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
    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
0ce3dcdf24f7 - add option to prevent url parameters behavior
rougeronj
parents: 543
diff changeset
    31
            this.initWithParams();
506
460de050f800 Create Viewrepr which handle the representation of the View.
rougeronj
parents:
diff changeset
    32
            
508
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
    33
            var bindClick = function(selector, fname) {
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
    34
                _this.$.find(selector).click(function(evt) {
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
    35
                    _this[fname](evt);
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
    36
                    return false;
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
    37
                });
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
    38
            };
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
    39
            
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
    40
            bindClick(".Rk-ZoomOut", "zoomOut");
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
    41
            bindClick(".Rk-ZoomIn", "zoomIn");
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
    42
            bindClick(".Rk-ZoomFit", "autoScale");
547
0ce3dcdf24f7 - add option to prevent url parameters behavior
rougeronj
parents: 543
diff changeset
    43
            bindClick(".Rk-ZoomSave", "saveView");
508
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
    44
            
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
    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
904effa4b6d7 improve view management:
rougeronj
parents: 521
diff changeset
    52
                _this.updateUrl();
508
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
    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
49bc7df521df show ZoomSetSaved if there is at least one view
rougeronj
parents: 560
diff changeset
    65
            
49bc7df521df show ZoomSetSaved if there is at least one view
rougeronj
parents: 560
diff changeset
    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
0ce3dcdf24f7 - add option to prevent url parameters behavior
rougeronj
parents: 543
diff changeset
    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
904effa4b6d7 improve view management:
rougeronj
parents: 521
diff changeset
    75
            
560
05a4380227f3 - Renames and changes default options
rougeronj
parents: 557
diff changeset
    76
            if (_this.options.view_force_autoscale){
05a4380227f3 - Renames and changes default options
rougeronj
parents: 557
diff changeset
    77
                this.autoScale();
05a4380227f3 - Renames and changes default options
rougeronj
parents: 557
diff changeset
    78
            } else {
554
32c7378d1c28 - Fix the behavior of views and parameters
rougeronj
parents: 547
diff changeset
    79
                _this.setScale(_this.params.zoom_level, new paper.Point(_this.params.offset));                
32c7378d1c28 - Fix the behavior of views and parameters
rougeronj
parents: 547
diff changeset
    80
            }
32c7378d1c28 - Fix the behavior of views and parameters
rougeronj
parents: 547
diff changeset
    81
            
560
05a4380227f3 - Renames and changes default options
rougeronj
parents: 557
diff changeset
    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
32c7378d1c28 - Fix the behavior of views and parameters
rougeronj
parents: 547
diff changeset
    85
            } else {
32c7378d1c28 - Fix the behavior of views and parameters
rougeronj
parents: 547
diff changeset
    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
0ce3dcdf24f7 - add option to prevent url parameters behavior
rougeronj
parents: 543
diff changeset
    88
        },
0ce3dcdf24f7 - add option to prevent url parameters behavior
rougeronj
parents: 543
diff changeset
    89
        saveView: function(){
0ce3dcdf24f7 - add option to prevent url parameters behavior
rougeronj
parents: 543
diff changeset
    90
            var _this = this;
0ce3dcdf24f7 - add option to prevent url parameters behavior
rougeronj
parents: 543
diff changeset
    91
            
0ce3dcdf24f7 - add option to prevent url parameters behavior
rougeronj
parents: 543
diff changeset
    92
            var offset = {
0ce3dcdf24f7 - add option to prevent url parameters behavior
rougeronj
parents: 543
diff changeset
    93
                "x": _this.offset.x,
0ce3dcdf24f7 - add option to prevent url parameters behavior
rougeronj
parents: 543
diff changeset
    94
                "y": _this.offset.y
0ce3dcdf24f7 - add option to prevent url parameters behavior
rougeronj
parents: 543
diff changeset
    95
            };
0ce3dcdf24f7 - add option to prevent url parameters behavior
rougeronj
parents: 543
diff changeset
    96
            
0ce3dcdf24f7 - add option to prevent url parameters behavior
rougeronj
parents: 543
diff changeset
    97
            _this.model = _this.renkan.project.addView( { zoom_level:_this.scale, offset:offset, hidden_nodes: _this.hiddenNodes.concat() } );
0ce3dcdf24f7 - add option to prevent url parameters behavior
rougeronj
parents: 543
diff changeset
    98
            _this.params = {
0ce3dcdf24f7 - add option to prevent url parameters behavior
rougeronj
parents: 543
diff changeset
    99
                    "zoom_level": _this.model.get("zoom_level"),
0ce3dcdf24f7 - add option to prevent url parameters behavior
rougeronj
parents: 543
diff changeset
   100
                    "offset": _this.model.get("offset"),
0ce3dcdf24f7 - add option to prevent url parameters behavior
rougeronj
parents: 543
diff changeset
   101
                    "hidden_nodes": _this.model.get("hidden_nodes")
0ce3dcdf24f7 - add option to prevent url parameters behavior
rougeronj
parents: 543
diff changeset
   102
            };
0ce3dcdf24f7 - add option to prevent url parameters behavior
rougeronj
parents: 543
diff changeset
   103
            
565
49bc7df521df show ZoomSetSaved if there is at least one view
rougeronj
parents: 560
diff changeset
   104
            this.$.find(".Rk-ZoomSetSaved").show();
49bc7df521df show ZoomSetSaved if there is at least one view
rougeronj
parents: 560
diff changeset
   105
            
547
0ce3dcdf24f7 - add option to prevent url parameters behavior
rougeronj
parents: 543
diff changeset
   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
4a48a1a9fd1e update the url on papershift or zoom
rougeronj
parents: 510
diff changeset
   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
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   140
        setScale: function(_newScale, _offset) {
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   141
            if ((_newScale/this.initialScale) > Utils._MIN_SCALE && (_newScale/this.initialScale) < Utils._MAX_SCALE) {
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   142
                this.scale = _newScale;
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   143
                if (_offset) {
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   144
                    this.offset = _offset;
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   145
                }
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   146
                this.renderer.redraw();
511
4a48a1a9fd1e update the url on papershift or zoom
rougeronj
parents: 510
diff changeset
   147
                this.updateUrl();
508
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   148
            }
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   149
        },
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   150
        zoomOut: function() {
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   151
            var _newScale = this.scale * Math.SQRT1_2,
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   152
            _offset = new paper.Point([
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   153
                                       this.renderer.canvas_$.width(),
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   154
                                       this.renderer.canvas_$.height()
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   155
                                       ]).multiply( 0.5 * ( 1 - Math.SQRT1_2 ) ).add(this.offset.multiply( Math.SQRT1_2 ));
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   156
            this.setScale( _newScale, _offset );
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   157
        },
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   158
        zoomIn: function() {
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   159
            var _newScale = this.scale * Math.SQRT2,
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   160
            _offset = new paper.Point([
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   161
                                       this.renderer.canvas_$.width(),
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   162
                                       this.renderer.canvas_$.height()
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   163
                                       ]).multiply( 0.5 * ( 1 - Math.SQRT2 ) ).add(this.offset.multiply( Math.SQRT2 ));
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   164
            this.setScale( _newScale, _offset );
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   165
        },
557
18c36f038e9f - fix fullscreen when renkan is a div
rougeronj
parents: 554
diff changeset
   166
        resizeZoom: function(deltaW, deltaH, _ratio) {
18c36f038e9f - fix fullscreen when renkan is a div
rougeronj
parents: 554
diff changeset
   167
            var _newScale = this.scale * _ratio;
18c36f038e9f - fix fullscreen when renkan is a div
rougeronj
parents: 554
diff changeset
   168
            var _offset = new paper.Point([
18c36f038e9f - fix fullscreen when renkan is a div
rougeronj
parents: 554
diff changeset
   169
                                       (this.renderer.canvas_$.width() * 0.5 * ( 1 - _ratio) ) + (this.offset.x * _ratio + deltaW * _ratio * 0.5 ),
18c36f038e9f - fix fullscreen when renkan is a div
rougeronj
parents: 554
diff changeset
   170
                                       (this.renderer.canvas_$.height() * 0.5 * ( 1 - _ratio) ) + (this.offset.y * _ratio + deltaH * _ratio * 0.5 )
508
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   171
                                       ]);
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   172
            this.setScale( _newScale, _offset );
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   173
        },
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   174
        autoScale: function(force_view) {
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   175
            var nodes = this.renkan.project.get("nodes");
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   176
            if (nodes.length > 1) {
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   177
                var _xx = nodes.map(function(_node) { return _node.get("position").x; }),
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   178
                _yy = nodes.map(function(_node) { return _node.get("position").y; }),
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   179
                _minx = Math.min.apply(Math, _xx),
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   180
                _miny = Math.min.apply(Math, _yy),
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   181
                _maxx = Math.max.apply(Math, _xx),
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   182
                _maxy = Math.max.apply(Math, _yy);
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   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));
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   184
                this.initialScale = _scale;
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   185
                // Override calculated scale if asked
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   186
                if((typeof force_view !== "undefined") && parseFloat(force_view.zoom_level)>0 && parseFloat(force_view.offset.x)>0 && parseFloat(force_view.offset.y)>0){
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   187
                    this.setScale(parseFloat(force_view.zoom_level), new paper.Point(parseFloat(force_view.offset.x), parseFloat(force_view.offset.y)));
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   188
                }
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   189
                else{
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   190
                    this.setScale(_scale, paper.view.center.subtract(new paper.Point([(_maxx + _minx) / 2, (_maxy + _miny) / 2]).multiply(_scale)));
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   191
                }
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   192
            }
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   193
            if (nodes.length === 1) {
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   194
                this.setScale(1, paper.view.center.subtract(new paper.Point([nodes.at(0).get("position").x, nodes.at(0).get("position").y])));
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   195
            }
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   196
        },
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   197
        paperShift: function(_delta) {
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   198
            this.offset = this.offset.add(_delta);
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   199
            this.renderer.redraw();
dd526b1b283a add shift and zoom functions to the viewRepr
rougeronj
parents: 506
diff changeset
   200
        },
511
4a48a1a9fd1e update the url on papershift or zoom
rougeronj
parents: 510
diff changeset
   201
        updateUrl: function(){
554
32c7378d1c28 - Fix the behavior of views and parameters
rougeronj
parents: 547
diff changeset
   202
            if(this.options.url_parameters && this.options.update_url){
511
4a48a1a9fd1e update the url on papershift or zoom
rougeronj
parents: 510
diff changeset
   203
                var result = {};
4a48a1a9fd1e update the url on papershift or zoom
rougeronj
parents: 510
diff changeset
   204
                var parameters = Backbone.history.getFragment().split('?');
4a48a1a9fd1e update the url on papershift or zoom
rougeronj
parents: 510
diff changeset
   205
                if (parameters.length > 1){
4a48a1a9fd1e update the url on papershift or zoom
rougeronj
parents: 510
diff changeset
   206
                    parameters[1].split("&").forEach(function(part) {
4a48a1a9fd1e update the url on papershift or zoom
rougeronj
parents: 510
diff changeset
   207
                        var item = part.split("=");
4a48a1a9fd1e update the url on papershift or zoom
rougeronj
parents: 510
diff changeset
   208
                        result[item[0]] = decodeURIComponent(item[1]);
4a48a1a9fd1e update the url on papershift or zoom
rougeronj
parents: 510
diff changeset
   209
                    });
519
b94a34c139c1 update parameters function to accept idView parameter
rougeronj
parents: 517
diff changeset
   210
                }
511
4a48a1a9fd1e update the url on papershift or zoom
rougeronj
parents: 510
diff changeset
   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
03aa989092bb rename idView to viewIndex
rougeronj
parents: 524
diff changeset
   214
                    result.viewIndex = this.renkan.project.get("views").indexOf(this.model);
03aa989092bb rename idView to viewIndex
rougeronj
parents: 524
diff changeset
   215
                    if (result.viewIndex === this.renkan.project.get("views").length - 1){
03aa989092bb rename idView to viewIndex
rougeronj
parents: 524
diff changeset
   216
                        result.viewIndex = -1;
524
904effa4b6d7 improve view management:
rougeronj
parents: 521
diff changeset
   217
                    }
519
b94a34c139c1 update parameters function to accept idView parameter
rougeronj
parents: 517
diff changeset
   218
                } else {
525
03aa989092bb rename idView to viewIndex
rougeronj
parents: 524
diff changeset
   219
                    if (result.viewIndex){
03aa989092bb rename idView to viewIndex
rougeronj
parents: 524
diff changeset
   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
4a48a1a9fd1e update the url on papershift or zoom
rougeronj
parents: 510
diff changeset
   224
            }
4a48a1a9fd1e update the url on papershift or zoom
rougeronj
parents: 510
diff changeset
   225
        },
524
904effa4b6d7 improve view management:
rougeronj
parents: 521
diff changeset
   226
        destroy: function(_event) {
904effa4b6d7 improve view management:
rougeronj
parents: 521
diff changeset
   227
            this._super("destroy");
904effa4b6d7 improve view management:
rougeronj
parents: 521
diff changeset
   228
            this.showNodes(false);
904effa4b6d7 improve view management:
rougeronj
parents: 521
diff changeset
   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
});