client/js/renderer/noderepr.js
author rougeronj
Wed, 03 Jun 2015 17:27:46 +0200
changeset 471 e0c7be5dc02c
parent 453 04b7d46e9d67
child 461 48235ed6b07d
permissions -rw-r--r--
Add a router to handle fragment identifier Set up a listener of the router in the scene to update it Start Backbone.history (eventlistener of the router) when all the project is loaded Include router.js to all the test file
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
326
e4afd8643576 shape builder for node
cavaliet
parents: 293
diff changeset
     1
define(['jquery', 'underscore', 'requtils', 'renderer/baserepresentation', 'renderer/shapebuilder'], function ($, _, requtils, BaseRepresentation, ShapeBuilder) {
293
fba23fde14ba Correct jshint errors and force it on build
ymh <ymh.work@gmail.com>
parents: 284
diff changeset
     2
    'use strict';
fba23fde14ba Correct jshint errors and force it on build
ymh <ymh.work@gmail.com>
parents: 284
diff changeset
     3
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
     4
    var Utils = requtils.getUtils();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
     5
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
     6
    /* Rkns.Renderer.Node Class */
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
     7
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
     8
    /* The representation for the node : A circle, with an image inside and a text label underneath.
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
     9
     * The circle and the image are drawn on canvas and managed by Paper.js.
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    10
     * The text label is an HTML node, managed by jQuery. */
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    11
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    12
    //var NodeRepr = Renderer.Node = Utils.inherit(Renderer._BaseRepresentation);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    13
    var NodeRepr = Utils.inherit(BaseRepresentation);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    14
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    15
    _(NodeRepr.prototype).extend({
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    16
        _init: function() {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    17
            this.renderer.node_layer.activate();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    18
            this.type = "Node";
330
4f92e61f87ba change shape in node editor
cavaliet
parents: 327
diff changeset
    19
            this.buildShape();
450
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
    20
            this.hidden = false;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
    21
            this.ghost= false;
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    22
            if (this.options.show_node_circles) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    23
                this.circle.strokeWidth = this.options.node_stroke_width;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    24
                this.h_ratio = 1;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    25
            } else {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    26
                this.h_ratio = 0;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    27
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    28
            this.title = $('<div class="Rk-Label">').appendTo(this.renderer.labels_$);
396
b51c25ef4292 add timeout to buttons
ymh <ymh.work@gmail.com>
parents: 331
diff changeset
    29
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    30
            if (this.options.editor_mode) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    31
                var Renderer = requtils.getRenderer();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    32
                this.normal_buttons = [
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    33
                                       new Renderer.NodeEditButton(this.renderer, null),
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    34
                                       new Renderer.NodeRemoveButton(this.renderer, null),
450
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
    35
                                       new Renderer.NodeHideButton(this.renderer, null),
453
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
    36
                                       new Renderer.NodeShowButton(this.renderer, null),
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    37
                                       new Renderer.NodeLinkButton(this.renderer, null),
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    38
                                       new Renderer.NodeEnlargeButton(this.renderer, null),
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    39
                                       new Renderer.NodeShrinkButton(this.renderer, null)
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    40
                                       ];
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    41
                this.pending_delete_buttons = [
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    42
                                               new Renderer.NodeRevertButton(this.renderer, null)
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    43
                                               ];
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    44
                this.all_buttons = this.normal_buttons.concat(this.pending_delete_buttons);
396
b51c25ef4292 add timeout to buttons
ymh <ymh.work@gmail.com>
parents: 331
diff changeset
    45
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    46
                for (var i = 0; i < this.all_buttons.length; i++) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    47
                    this.all_buttons[i].source_representation = this;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    48
                }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    49
                this.active_buttons = [];
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    50
            } else {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    51
                this.active_buttons = this.all_buttons = [];
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    52
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    53
            this.last_circle_radius = 1;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    54
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    55
            if (this.renderer.minimap) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    56
                this.renderer.minimap.node_layer.activate();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    57
                this.minimap_circle = new paper.Path.Circle([0, 0], 1);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    58
                this.minimap_circle.__representation = this.renderer.minimap.miniframe.__representation;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    59
                this.renderer.minimap.node_group.addChild(this.minimap_circle);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    60
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    61
        },
330
4f92e61f87ba change shape in node editor
cavaliet
parents: 327
diff changeset
    62
        buildShape: function(){
435
e529b633c339 Add shape management, correction on shape manip[ulation on the client, correct 404 error on space creation, increment version
ymh <ymh.work@gmail.com>
parents: 434
diff changeset
    63
            if( 'shape' in this.model.changed ) {
331
0628ed75e8d3 select shape in node editor
cavaliet
parents: 330
diff changeset
    64
                delete this.img;
330
4f92e61f87ba change shape in node editor
cavaliet
parents: 327
diff changeset
    65
            }
4f92e61f87ba change shape in node editor
cavaliet
parents: 327
diff changeset
    66
            if(this.circle){
4f92e61f87ba change shape in node editor
cavaliet
parents: 327
diff changeset
    67
                this.circle.remove();
4f92e61f87ba change shape in node editor
cavaliet
parents: 327
diff changeset
    68
                delete this.circle;
4f92e61f87ba change shape in node editor
cavaliet
parents: 327
diff changeset
    69
            }
4f92e61f87ba change shape in node editor
cavaliet
parents: 327
diff changeset
    70
            // "circle" "rectangle" "ellipse" "polygon" "star" "diamond"
4f92e61f87ba change shape in node editor
cavaliet
parents: 327
diff changeset
    71
            this.shapeBuilder = new ShapeBuilder(this.model.get("shape"));
4f92e61f87ba change shape in node editor
cavaliet
parents: 327
diff changeset
    72
            this.circle = this.shapeBuilder.getShape();
4f92e61f87ba change shape in node editor
cavaliet
parents: 327
diff changeset
    73
            this.circle.__representation = this;
435
e529b633c339 Add shape management, correction on shape manip[ulation on the client, correct 404 error on space creation, increment version
ymh <ymh.work@gmail.com>
parents: 434
diff changeset
    74
            this.circle.sendToBack();
330
4f92e61f87ba change shape in node editor
cavaliet
parents: 327
diff changeset
    75
            this.last_circle_radius = 1;
4f92e61f87ba change shape in node editor
cavaliet
parents: 327
diff changeset
    76
        },
435
e529b633c339 Add shape management, correction on shape manip[ulation on the client, correct 404 error on space creation, increment version
ymh <ymh.work@gmail.com>
parents: 434
diff changeset
    77
        redraw: function(options) {
e529b633c339 Add shape management, correction on shape manip[ulation on the client, correct 404 error on space creation, increment version
ymh <ymh.work@gmail.com>
parents: 434
diff changeset
    78
            if( 'shape' in this.model.changed && 'change' in options && options.change ) {
e529b633c339 Add shape management, correction on shape manip[ulation on the client, correct 404 error on space creation, increment version
ymh <ymh.work@gmail.com>
parents: 434
diff changeset
    79
            //if( 'shape' in this.model.changed ) {
330
4f92e61f87ba change shape in node editor
cavaliet
parents: 327
diff changeset
    80
                this.buildShape();
4f92e61f87ba change shape in node editor
cavaliet
parents: 327
diff changeset
    81
            }
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    82
            var _model_coords = new paper.Point(this.model.get("position")),
435
e529b633c339 Add shape management, correction on shape manip[ulation on the client, correct 404 error on space creation, increment version
ymh <ymh.work@gmail.com>
parents: 434
diff changeset
    83
                _baseRadius = this.options.node_size_base * Math.exp((this.model.get("size") || 0) * Utils._NODE_SIZE_STEP);
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    84
            if (!this.is_dragging || !this.paper_coords) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    85
                this.paper_coords = this.renderer.toPaperCoords(_model_coords);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    86
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    87
            this.circle_radius = _baseRadius * this.renderer.scale;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    88
            if (this.last_circle_radius !== this.circle_radius) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    89
                this.all_buttons.forEach(function(b) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    90
                    b.setSectorSize();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    91
                });
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    92
                this.circle.scale(this.circle_radius / this.last_circle_radius);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    93
                if (this.node_image) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    94
                    this.node_image.scale(this.circle_radius / this.last_circle_radius);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    95
                }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    96
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    97
            this.circle.position = this.paper_coords;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    98
            if (this.node_image) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    99
                this.node_image.position = this.paper_coords.subtract(this.image_delta.multiply(this.circle_radius));
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   100
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   101
            this.last_circle_radius = this.circle_radius;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   102
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   103
            var old_act_btn = this.active_buttons;
450
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   104
            
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   105
            var opacity = 1;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   106
            if (this.model.get("delete_scheduled")) {
293
fba23fde14ba Correct jshint errors and force it on build
ymh <ymh.work@gmail.com>
parents: 284
diff changeset
   107
                opacity = 0.5;
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   108
                this.active_buttons = this.pending_delete_buttons;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   109
                this.circle.dashArray = [2,2];
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   110
            } else {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   111
                opacity = 1;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   112
                this.active_buttons = this.normal_buttons;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   113
                this.circle.dashArray = null;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   114
            }
450
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   115
            if (this.selected && this.renderer.isEditable() && !this.ghost) {
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   116
                if (old_act_btn !== this.active_buttons) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   117
                    old_act_btn.forEach(function(b) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   118
                        b.hide();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   119
                    });
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   120
                }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   121
                this.active_buttons.forEach(function(b) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   122
                    b.show();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   123
                });
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   124
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   125
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   126
            if (this.node_image) {
293
fba23fde14ba Correct jshint errors and force it on build
ymh <ymh.work@gmail.com>
parents: 284
diff changeset
   127
                this.node_image.opacity = this.highlighted ? opacity * 0.5 : (opacity - 0.01);
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   128
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   129
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   130
            this.circle.fillColor = this.highlighted ? this.options.highlighted_node_fill_color : this.options.node_fill_color;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   131
293
fba23fde14ba Correct jshint errors and force it on build
ymh <ymh.work@gmail.com>
parents: 284
diff changeset
   132
            this.circle.opacity = this.options.show_node_circles ? opacity : 0.01;
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   133
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   134
            var _text = this.model.get("title") || this.renkan.translate(this.options.label_untitled_nodes) || "";
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   135
            _text = Utils.shortenText(_text, this.options.node_label_max_length);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   136
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   137
            if (typeof this.highlighted === "object") {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   138
                this.title.html(this.highlighted.replace(_(_text).escape(),'<span class="Rk-Highlighted">$1</span>'));
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   139
            } else {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   140
                this.title.text(_text);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   141
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   142
            this.title.css({
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   143
                left: this.paper_coords.x,
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   144
                top: this.paper_coords.y + this.circle_radius * this.h_ratio + this.options.node_label_distance,
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   145
                opacity: opacity
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   146
            });
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   147
            var _color = this.model.get("color") || (this.model.get("created_by") || Utils._USER_PLACEHOLDER(this.renkan)).get("color");
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   148
            this.circle.strokeColor = _color;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   149
            var _pc = this.paper_coords;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   150
            this.all_buttons.forEach(function(b) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   151
                b.moveTo(_pc);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   152
            });
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   153
            var lastImage = this.img;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   154
            this.img = this.model.get("image");
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   155
            if (this.img && this.img !== lastImage) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   156
                this.showImage();
435
e529b633c339 Add shape management, correction on shape manip[ulation on the client, correct 404 error on space creation, increment version
ymh <ymh.work@gmail.com>
parents: 434
diff changeset
   157
                if(this.circle) {
e529b633c339 Add shape management, correction on shape manip[ulation on the client, correct 404 error on space creation, increment version
ymh <ymh.work@gmail.com>
parents: 434
diff changeset
   158
                    this.circle.sendToBack();
e529b633c339 Add shape management, correction on shape manip[ulation on the client, correct 404 error on space creation, increment version
ymh <ymh.work@gmail.com>
parents: 434
diff changeset
   159
                }
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   160
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   161
            if (this.node_image && !this.img) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   162
                this.node_image.remove();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   163
                delete this.node_image;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   164
            }
450
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   165
            
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   166
            
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   167
            if (this.renderer.minimap) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   168
                this.minimap_circle.fillColor = _color;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   169
                var minipos = this.renderer.toMinimapCoords(_model_coords),
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   170
                miniradius = this.renderer.minimap.scale * _baseRadius,
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   171
                minisize = new paper.Size([miniradius, miniradius]);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   172
                this.minimap_circle.fitBounds(minipos.subtract(minisize), minisize.multiply(2));
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   173
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   174
435
e529b633c339 Add shape management, correction on shape manip[ulation on the client, correct 404 error on space creation, increment version
ymh <ymh.work@gmail.com>
parents: 434
diff changeset
   175
            if (typeof options === 'undefined' || !('dontRedrawEdges' in options) || !options.dontRedrawEdges) {
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   176
                var _this = this;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   177
                _.each(
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   178
                        this.project.get("edges").filter(
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   179
                                function (ed) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   180
                                    return ((ed.get("to") === _this.model) || (ed.get("from") === _this.model));
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   181
                                }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   182
                        ),
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   183
                        function(edge, index, list) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   184
                            var repr = _this.renderer.getRepresentationByModel(edge);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   185
                            if (repr && typeof repr.from_representation !== "undefined" && typeof repr.from_representation.paper_coords !== "undefined" && typeof repr.to_representation !== "undefined" && typeof repr.to_representation.paper_coords !== "undefined") {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   186
                                repr.redraw();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   187
                            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   188
                        }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   189
                );
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   190
            }
450
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   191
            if (this.ghost){
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   192
                this.show(true);
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   193
            } else {
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   194
                if (this.hidden) { this.hide(); }
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   195
            }
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   196
        },
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   197
        showImage: function() {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   198
            var _image = null;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   199
            if (typeof this.renderer.image_cache[this.img] === "undefined") {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   200
                _image = new Image();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   201
                this.renderer.image_cache[this.img] = _image;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   202
                _image.src = this.img;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   203
            } else {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   204
                _image = this.renderer.image_cache[this.img];
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   205
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   206
            if (_image.width) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   207
                if (this.node_image) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   208
                    this.node_image.remove();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   209
                }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   210
                this.renderer.node_layer.activate();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   211
                var width = _image.width,
403
96781c1a8bbe correct resizing problems especially in next firefox
ymh <ymh.work@gmail.com>
parents: 396
diff changeset
   212
                    height = _image.height,
96781c1a8bbe correct resizing problems especially in next firefox
ymh <ymh.work@gmail.com>
parents: 396
diff changeset
   213
                    clipPath = this.model.get("clip_path"),
96781c1a8bbe correct resizing problems especially in next firefox
ymh <ymh.work@gmail.com>
parents: 396
diff changeset
   214
                    hasClipPath = (typeof clipPath !== "undefined" && clipPath),
96781c1a8bbe correct resizing problems especially in next firefox
ymh <ymh.work@gmail.com>
parents: 396
diff changeset
   215
                    _clip = null,
96781c1a8bbe correct resizing problems especially in next firefox
ymh <ymh.work@gmail.com>
parents: 396
diff changeset
   216
                    baseRadius = null,
96781c1a8bbe correct resizing problems especially in next firefox
ymh <ymh.work@gmail.com>
parents: 396
diff changeset
   217
                    centerPoint = null;
396
b51c25ef4292 add timeout to buttons
ymh <ymh.work@gmail.com>
parents: 331
diff changeset
   218
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   219
                if (hasClipPath) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   220
                    _clip = new paper.Path();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   221
                    var instructions = clipPath.match(/[a-z][^a-z]+/gi) || [],
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   222
                    lastCoords = [0,0],
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   223
                    minX = Infinity,
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   224
                    minY = Infinity,
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   225
                    maxX = -Infinity,
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   226
                    maxY = -Infinity;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   227
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   228
                    var transformCoords = function(tabc, relative) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   229
                        var newCoords = tabc.slice(1).map(function(v, k) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   230
                            var res = parseFloat(v),
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   231
                            isY = k % 2;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   232
                            if (isY) {
293
fba23fde14ba Correct jshint errors and force it on build
ymh <ymh.work@gmail.com>
parents: 284
diff changeset
   233
                                res = ( res - 0.5 ) * height;
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   234
                            } else {
293
fba23fde14ba Correct jshint errors and force it on build
ymh <ymh.work@gmail.com>
parents: 284
diff changeset
   235
                                res = ( res - 0.5 ) * width;
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   236
                            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   237
                            if (relative) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   238
                                res += lastCoords[isY];
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   239
                            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   240
                            if (isY) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   241
                                minY = Math.min(minY, res);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   242
                                maxY = Math.max(maxY, res);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   243
                            } else {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   244
                                minX = Math.min(minX, res);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   245
                                maxX = Math.max(maxX, res);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   246
                            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   247
                            return res;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   248
                        });
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   249
                        lastCoords = newCoords.slice(-2);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   250
                        return newCoords;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   251
                    };
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   252
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   253
                    instructions.forEach(function(instr) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   254
                        var coords = instr.match(/([a-z]|[0-9.-]+)/ig) || [""];
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   255
                        switch(coords[0]) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   256
                        case "M":
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   257
                            _clip.moveTo(transformCoords(coords));
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   258
                            break;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   259
                        case "m":
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   260
                            _clip.moveTo(transformCoords(coords, true));
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   261
                            break;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   262
                        case "L":
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   263
                            _clip.lineTo(transformCoords(coords));
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   264
                            break;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   265
                        case "l":
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   266
                            _clip.lineTo(transformCoords(coords, true));
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   267
                            break;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   268
                        case "C":
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   269
                            _clip.cubicCurveTo(transformCoords(coords));
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   270
                            break;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   271
                        case "c":
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   272
                            _clip.cubicCurveTo(transformCoords(coords, true));
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   273
                            break;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   274
                        case "Q":
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   275
                            _clip.quadraticCurveTo(transformCoords(coords));
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   276
                            break;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   277
                        case "q":
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   278
                            _clip.quadraticCurveTo(transformCoords(coords, true));
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   279
                            break;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   280
                        }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   281
                    });
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   282
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   283
                    baseRadius = Math[this.options.node_images_fill_mode ? "min" : "max"](maxX - minX, maxY - minY) / 2;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   284
                    centerPoint = new paper.Point((maxX + minX) / 2, (maxY + minY) / 2);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   285
                    if (!this.options.show_node_circles) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   286
                        this.h_ratio = (maxY - minY) / (2 * baseRadius);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   287
                    }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   288
                } else {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   289
                    baseRadius = Math[this.options.node_images_fill_mode ? "min" : "max"](width, height) / 2;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   290
                    centerPoint = new paper.Point(0,0);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   291
                    if (!this.options.show_node_circles) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   292
                        this.h_ratio = height / (2 * baseRadius);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   293
                    }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   294
                }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   295
                var _raster = new paper.Raster(_image);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   296
                _raster.locked = true; // Disable mouse events on icon
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   297
                if (hasClipPath) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   298
                    _raster = new paper.Group(_clip, _raster);
293
fba23fde14ba Correct jshint errors and force it on build
ymh <ymh.work@gmail.com>
parents: 284
diff changeset
   299
                    _raster.opacity = 0.99;
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   300
                    /* This is a workaround to allow clipping at group level
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   301
                     * If opacity was set to 1, paper.js would merge all clipping groups in one (known bug).
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   302
                     */
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   303
                    _raster.clipped = true;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   304
                    _clip.__representation = this;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   305
                }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   306
                if (this.options.clip_node_images) {
326
e4afd8643576 shape builder for node
cavaliet
parents: 293
diff changeset
   307
                    var _circleClip = this.shapeBuilder.getImageShape(centerPoint, baseRadius);
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   308
                    _raster = new paper.Group(_circleClip, _raster);
293
fba23fde14ba Correct jshint errors and force it on build
ymh <ymh.work@gmail.com>
parents: 284
diff changeset
   309
                    _raster.opacity = 0.99;
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   310
                    _raster.clipped = true;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   311
                    _circleClip.__representation = this;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   312
                }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   313
                this.image_delta = centerPoint.divide(baseRadius);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   314
                this.node_image = _raster;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   315
                this.node_image.__representation = _this;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   316
                this.node_image.scale(this.circle_radius / baseRadius);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   317
                this.node_image.position = this.paper_coords.subtract(this.image_delta.multiply(this.circle_radius));
435
e529b633c339 Add shape management, correction on shape manip[ulation on the client, correct 404 error on space creation, increment version
ymh <ymh.work@gmail.com>
parents: 434
diff changeset
   318
                this.node_image.insertAbove(this.circle);
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   319
            } else {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   320
                var _this = this;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   321
                $(_image).on("load", function() {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   322
                    _this.showImage();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   323
                });
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   324
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   325
        },
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   326
        paperShift: function(_delta) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   327
            if (this.options.editor_mode) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   328
                if (!this.renkan.read_only) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   329
                    this.is_dragging = true;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   330
                    this.paper_coords = this.paper_coords.add(_delta);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   331
                    this.redraw();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   332
                }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   333
            } else {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   334
                this.renderer.paperShift(_delta);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   335
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   336
        },
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   337
        openEditor: function() {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   338
            this.renderer.removeRepresentationsOfType("editor");
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   339
            var _editor = this.renderer.addRepresentation("NodeEditor",null);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   340
            _editor.source_representation = this;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   341
            _editor.draw();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   342
        },
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   343
        select: function() {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   344
            this.selected = true;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   345
            this.circle.strokeWidth = this.options.selected_node_stroke_width;
450
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   346
            if (this.renderer.isEditable() && !this.hidden) {
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   347
                this.active_buttons.forEach(function(b) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   348
                    b.show();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   349
                });
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   350
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   351
            var _uri = this.model.get("uri");
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   352
            if (_uri) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   353
                $('.Rk-Bin-Item').each(function() {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   354
                    var _el = $(this);
293
fba23fde14ba Correct jshint errors and force it on build
ymh <ymh.work@gmail.com>
parents: 284
diff changeset
   355
                    if (_el.attr("data-uri") === _uri) {
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   356
                        _el.addClass("selected");
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   357
                    }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   358
                });
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   359
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   360
            if (!this.options.editor_mode) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   361
                this.openEditor();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   362
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   363
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   364
            if (this.renderer.minimap) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   365
                this.minimap_circle.strokeWidth = this.options.minimap_highlight_weight;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   366
                this.minimap_circle.strokeColor = this.options.minimap_highlight_color;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   367
            }
450
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   368
            //if the node is hidden and the mouse hover it, it appears as a ghost
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   369
            if (this.hidden){
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   370
                this.show(true);
453
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   371
            }else{
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   372
                this.showNeighbors(true);
450
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   373
            }
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   374
            this._super("select");
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   375
        },
396
b51c25ef4292 add timeout to buttons
ymh <ymh.work@gmail.com>
parents: 331
diff changeset
   376
        hideButtons: function() {
b51c25ef4292 add timeout to buttons
ymh <ymh.work@gmail.com>
parents: 331
diff changeset
   377
            this.all_buttons.forEach(function(b) {
b51c25ef4292 add timeout to buttons
ymh <ymh.work@gmail.com>
parents: 331
diff changeset
   378
                b.hide();
b51c25ef4292 add timeout to buttons
ymh <ymh.work@gmail.com>
parents: 331
diff changeset
   379
            });
b51c25ef4292 add timeout to buttons
ymh <ymh.work@gmail.com>
parents: 331
diff changeset
   380
            delete(this.buttonTimeout);
b51c25ef4292 add timeout to buttons
ymh <ymh.work@gmail.com>
parents: 331
diff changeset
   381
        },
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   382
        unselect: function(_newTarget) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   383
            if (!_newTarget || _newTarget.source_representation !== this) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   384
                this.selected = false;
396
b51c25ef4292 add timeout to buttons
ymh <ymh.work@gmail.com>
parents: 331
diff changeset
   385
                var _this = this;
b51c25ef4292 add timeout to buttons
ymh <ymh.work@gmail.com>
parents: 331
diff changeset
   386
                this.buttons_timeout = setTimeout(function() { _this.hideButtons(); }, 200);
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   387
                this.circle.strokeWidth = this.options.node_stroke_width;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   388
                $('.Rk-Bin-Item').removeClass("selected");
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   389
                if (this.renderer.minimap) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   390
                    this.minimap_circle.strokeColor = undefined;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   391
                }
450
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   392
                //when the mouse don't hover the node anymore, we hide it
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   393
                if (this.hidden){
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   394
                    this.hide();
453
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   395
                }else{
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   396
                    this.hideNeighbors();
450
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   397
                }
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   398
                this._super("unselect");
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   399
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   400
        },
450
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   401
        hide: function(){
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   402
            var _this = this;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   403
            this.ghost = false;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   404
            this.hidden = true;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   405
            if (typeof this.node_image !== 'undefined'){
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   406
                this.node_image.opacity = 0;                
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   407
            }
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   408
            this.hideButtons();
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   409
            this.circle.opacity = 0;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   410
            this.title.css('opacity', 0);
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   411
            this.minimap_circle.opacity = 0;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   412
            
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   413
            
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   414
            _.each(
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   415
                    this.project.get("edges").filter(
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   416
                            function (ed) {
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   417
                                return ((ed.get("to") === _this.model) || (ed.get("from") === _this.model));
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   418
                            }
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   419
                    ),
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   420
                    function(edge, index, list) {
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   421
                        var repr = _this.renderer.getRepresentationByModel(edge);
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   422
                        if (repr && typeof repr.from_representation !== "undefined" && typeof repr.from_representation.paper_coords !== "undefined" && typeof repr.to_representation !== "undefined" && typeof repr.to_representation.paper_coords !== "undefined") {
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   423
                            repr.hide();
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   424
                        }
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   425
                    }
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   426
            );
453
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   427
            this.hideNeighbors();
450
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   428
        },
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   429
        show: function(ghost){
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   430
            var _this = this;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   431
            this.ghost = ghost;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   432
            if (this.ghost){
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   433
                if (typeof this.node_image !== 'undefined'){
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   434
                    this.node_image.opacity = 0.3;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   435
                }
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   436
                this.circle.opacity = 0.3;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   437
                this.title.css('opacity', 0.3);
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   438
                this.minimap_circle.opacity = 0.3;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   439
            } else {
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   440
                this.hidden = false;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   441
                this.redraw();
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   442
            }
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   443
            
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   444
            _.each(
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   445
                    this.project.get("edges").filter(
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   446
                            function (ed) {
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   447
                                return ((ed.get("to") === _this.model) || (ed.get("from") === _this.model));
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   448
                            }
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   449
                    ),
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   450
                    function(edge, index, list) {
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   451
                        var repr = _this.renderer.getRepresentationByModel(edge);
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   452
                        if (repr && typeof repr.from_representation !== "undefined" && typeof repr.from_representation.paper_coords !== "undefined" && typeof repr.to_representation !== "undefined" && typeof repr.to_representation.paper_coords !== "undefined") {
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   453
                            repr.show(_this.ghost);
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   454
                        }
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   455
                    }
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   456
            );            
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   457
        },
453
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   458
        hideNeighbors: function(){
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   459
            var _this = this;
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   460
            _.each(
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   461
                    this.project.get("edges").filter(
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   462
                            function (ed) {
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   463
                                return (ed.get("from") === _this.model);
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   464
                            }
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   465
                    ),
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   466
                    function(edge, index, list) {
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   467
                        var repr = _this.renderer.getRepresentationByModel(edge.get("to"));
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   468
                        if (repr && repr.ghost) {
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   469
                            repr.hide();
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   470
                        }
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   471
                    }
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   472
            );
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   473
        },
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   474
        showNeighbors: function(ghost){
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   475
            var _this = this;
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   476
            _.each(
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   477
                    this.project.get("edges").filter(
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   478
                            function (ed) {
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   479
                                return (ed.get("from") === _this.model);
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   480
                            }
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   481
                    ),
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   482
                    function(edge, index, list) {
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   483
                        var repr = _this.renderer.getRepresentationByModel(edge.get("to"));
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   484
                        if (repr && repr.hidden) {
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   485
                            repr.show(ghost);
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   486
                            if (!ghost){
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   487
                                var indexNode = _this.renderer.hiddenNodes.indexOf(repr.model.id);
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   488
                                if (indexNode !== -1){
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   489
                                    _this.renderer.hiddenNodes.splice(indexNode, 1);
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   490
                                }
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   491
                            }
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   492
                        }
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   493
                    }
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   494
            );
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
   495
        },
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   496
        highlight: function(textToReplace) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   497
            var hlvalue = textToReplace || true;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   498
            if (this.highlighted === hlvalue) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   499
                return;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   500
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   501
            this.highlighted = hlvalue;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   502
            this.redraw();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   503
            this.renderer.throttledPaperDraw();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   504
        },
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   505
        unhighlight: function() {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   506
            if (!this.highlighted) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   507
                return;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   508
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   509
            this.highlighted = false;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   510
            this.redraw();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   511
            this.renderer.throttledPaperDraw();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   512
        },
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   513
        saveCoords: function() {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   514
            var _coords = this.renderer.toModelCoords(this.paper_coords),
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   515
            _data = {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   516
                position: {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   517
                    x: _coords.x,
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   518
                    y: _coords.y
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   519
                }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   520
            };
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   521
            if (this.renderer.isEditable()) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   522
                this.model.set(_data);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   523
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   524
        },
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   525
        mousedown: function(_event, _isTouch) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   526
            if (_isTouch) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   527
                this.renderer.unselectAll();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   528
                this.select();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   529
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   530
        },
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   531
        mouseup: function(_event, _isTouch) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   532
            if (this.renderer.is_dragging && this.renderer.isEditable()) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   533
                this.saveCoords();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   534
            } else {
450
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   535
                if (this.hidden){
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   536
                    var index = this.renderer.hiddenNodes.indexOf(this.model.id);
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   537
                    if (index !== -1){
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   538
                        this.renderer.hiddenNodes.splice(index, 1);
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   539
                    }
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   540
                    this.show(false);
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   541
                    this.select();
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   542
                }else{
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   543
                    if (!_isTouch && !this.model.get("delete_scheduled")) {
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   544
                        this.openEditor();
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   545
                    }
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 435
diff changeset
   546
                    this.model.trigger("clicked");                    
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   547
                }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   548
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   549
            this.renderer.click_target = null;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   550
            this.renderer.is_dragging = false;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   551
            this.is_dragging = false;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   552
        },
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   553
        destroy: function(_event) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   554
            this._super("destroy");
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   555
            this.all_buttons.forEach(function(b) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   556
                b.destroy();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   557
            });
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   558
            this.circle.remove();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   559
            this.title.remove();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   560
            if (this.renderer.minimap) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   561
                this.minimap_circle.remove();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   562
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   563
            if (this.node_image) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   564
                this.node_image.remove();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   565
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   566
        }
433
e457ec945e50 replace underscore par lodash
ymh <ymh.work@gmail.com>
parents: 403
diff changeset
   567
    }).value();
293
fba23fde14ba Correct jshint errors and force it on build
ymh <ymh.work@gmail.com>
parents: 284
diff changeset
   568
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   569
    return NodeRepr;
293
fba23fde14ba Correct jshint errors and force it on build
ymh <ymh.work@gmail.com>
parents: 284
diff changeset
   570
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   571
});