client/js/renderer/edge.js
author ymh <ymh.work@gmail.com>
Wed, 27 Jul 2016 13:55:18 +0200
changeset 633 fdff56da097d
parent 532 030f2e4c0664
permissions -rw-r--r--
allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
     1
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
     2
define(['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {
293
fba23fde14ba Correct jshint errors and force it on build
ymh <ymh.work@gmail.com>
parents: 284
diff changeset
     3
    'use strict';
fba23fde14ba Correct jshint errors and force it on build
ymh <ymh.work@gmail.com>
parents: 284
diff changeset
     4
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
     5
    var Utils = requtils.getUtils();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
     6
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
     7
    /* Edge Class Begin */
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
     8
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
     9
    //var Edge = Renderer.Edge = Utils.inherit(Renderer._BaseRepresentation);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    10
    var Edge = Utils.inherit(BaseRepresentation);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    11
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    12
    _(Edge.prototype).extend({
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    13
        _init: function() {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    14
            this.renderer.edge_layer.activate();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    15
            this.type = "Edge";
450
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
    16
            this.hidden = false;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
    17
            this.ghost = false;
633
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
    18
            this.highlighted = false;
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    19
            this.from_representation = this.renderer.getRepresentationByModel(this.model.get("from"));
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    20
            this.to_representation = this.renderer.getRepresentationByModel(this.model.get("to"));
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    21
            this.bundle = this.renderer.addToBundles(this);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    22
            this.line = new paper.Path();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    23
            this.line.add([0,0],[0,0],[0,0]);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    24
            this.line.__representation = this;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    25
            this.line.strokeWidth = this.options.edge_stroke_width;
459
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    26
            this.arrow_scale = 1;
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    27
            this.arrow = new paper.Path();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    28
            this.arrow.add(
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    29
                    [ 0, 0 ],
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    30
                    [ this.options.edge_arrow_length, this.options.edge_arrow_width / 2 ],
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    31
                    [ 0, this.options.edge_arrow_width ]
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    32
            );
459
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    33
            this.arrow.pivot = new paper.Point([ this.options.edge_arrow_length / 2, this.options.edge_arrow_width / 2 ]);
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    34
            this.arrow.__representation = this;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    35
            this.text = $('<div class="Rk-Label Rk-Edge-Label">').appendTo(this.renderer.labels_$);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    36
            this.arrow_angle = 0;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    37
            if (this.options.editor_mode) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    38
                var Renderer = requtils.getRenderer();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    39
                this.normal_buttons = [
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    40
                                       new Renderer.EdgeEditButton(this.renderer, null),
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    41
                                       new Renderer.EdgeRemoveButton(this.renderer, null)
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    42
                                       ];
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    43
                this.pending_delete_buttons = [
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    44
                                               new Renderer.EdgeRevertButton(this.renderer, null)
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    45
                                               ];
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    46
                this.all_buttons = this.normal_buttons.concat(this.pending_delete_buttons);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    47
                for (var i = 0; i < this.all_buttons.length; i++) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    48
                    this.all_buttons[i].source_representation = this;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    49
                }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    50
                this.active_buttons = [];
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    51
            } else {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    52
                this.active_buttons = this.all_buttons = [];
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    53
            }
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.edge_layer.activate();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    57
                this.minimap_line = new paper.Path();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    58
                this.minimap_line.add([0,0],[0,0]);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    59
                this.minimap_line.__representation = this.renderer.minimap.miniframe.__representation;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    60
                this.minimap_line.strokeWidth = 1;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    61
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    62
        },
459
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    63
        _getStrokeWidth: function() {
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    64
            var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    65
            return this.options.edge_stroke_width + (thickness-1) * (this.options.edge_stroke_max_width - this.options.edge_stroke_width) / (this.options.edge_stroke_witdh_scale-1);
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    66
        },
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    67
        _getSelectedStrokeWidth: function() {
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    68
            var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    69
            return this.options.selected_edge_stroke_width + (thickness-1) * (this.options.selected_edge_stroke_max_width - this.options.selected_edge_stroke_width) / (this.options.edge_stroke_witdh_scale-1);
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    70
        },
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    71
        _getArrowScale: function() {
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    72
            var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    73
            return 1 + (thickness-1) * ((this.options.edge_arrow_max_width / this.options.edge_arrow_width) - 1) / (this.options.edge_stroke_witdh_scale-1);
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    74
        },
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    75
        redraw: function() {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    76
            var from = this.model.get("from"),
633
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
    77
                to = this.model.get("to");
450
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
    78
            if (!from || !to || (this.hidden && !this.ghost)) {
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    79
                return;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    80
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    81
            this.from_representation = this.renderer.getRepresentationByModel(from);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    82
            this.to_representation = this.renderer.getRepresentationByModel(to);
450
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
    83
            if (typeof this.from_representation === "undefined" || typeof this.to_representation === "undefined" ||
453
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
    84
                    (this.from_representation.hidden && !this.from_representation.ghost) ||
461
48235ed6b07d Merge with a3bf10beb710d1cfdda455ab98705f9e7a631739
ymh <ymh.work@gmail.com>
parents: 459 453
diff changeset
    85
                    (this.to_representation.hidden && !this.to_representation.ghost)) {
453
04b7d46e9d67 new node's button to show the hidden neighbors
rougeronj
parents: 450
diff changeset
    86
                this.hide();
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    87
                return;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
    88
            }
459
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    89
            var _strokeWidth = this._getStrokeWidth(),
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    90
                _arrow_scale = this._getArrowScale(),
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    91
                _p0a = this.from_representation.paper_coords,
458
423bdf56d103 migrated to style, added dash style to client + small refactoring for shapes + triangle
ymh <ymh.work@gmail.com>
parents: 434
diff changeset
    92
                _p1a = this.to_representation.paper_coords,
423bdf56d103 migrated to style, added dash style to client + small refactoring for shapes + triangle
ymh <ymh.work@gmail.com>
parents: 434
diff changeset
    93
                _v = _p1a.subtract(_p0a),
423bdf56d103 migrated to style, added dash style to client + small refactoring for shapes + triangle
ymh <ymh.work@gmail.com>
parents: 434
diff changeset
    94
                _r = _v.length,
423bdf56d103 migrated to style, added dash style to client + small refactoring for shapes + triangle
ymh <ymh.work@gmail.com>
parents: 434
diff changeset
    95
                _u = _v.divide(_r),
423bdf56d103 migrated to style, added dash style to client + small refactoring for shapes + triangle
ymh <ymh.work@gmail.com>
parents: 434
diff changeset
    96
                _ortho = new paper.Point([- _u.y, _u.x]),
423bdf56d103 migrated to style, added dash style to client + small refactoring for shapes + triangle
ymh <ymh.work@gmail.com>
parents: 434
diff changeset
    97
                _group_pos = this.bundle.getPosition(this),
423bdf56d103 migrated to style, added dash style to client + small refactoring for shapes + triangle
ymh <ymh.work@gmail.com>
parents: 434
diff changeset
    98
                _delta = _ortho.multiply( this.options.edge_gap_in_bundles * _group_pos ),
423bdf56d103 migrated to style, added dash style to client + small refactoring for shapes + triangle
ymh <ymh.work@gmail.com>
parents: 434
diff changeset
    99
                _p0b = _p0a.add(_delta), /* Adding a 4 px difference */
423bdf56d103 migrated to style, added dash style to client + small refactoring for shapes + triangle
ymh <ymh.work@gmail.com>
parents: 434
diff changeset
   100
                _p1b = _p1a.add(_delta), /* to differentiate bundled links */
423bdf56d103 migrated to style, added dash style to client + small refactoring for shapes + triangle
ymh <ymh.work@gmail.com>
parents: 434
diff changeset
   101
                _a = _v.angle,
459
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
   102
                _textdelta = _ortho.multiply(this.options.edge_label_distance + 0.5 * _arrow_scale * this.options.edge_arrow_width),
458
423bdf56d103 migrated to style, added dash style to client + small refactoring for shapes + triangle
ymh <ymh.work@gmail.com>
parents: 434
diff changeset
   103
                _handle = _v.divide(3),
633
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   104
                _color = (this.highlighted && this.options.highlighted_edge_color) ||
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   105
                    (this.model.has("style") && this.model.get("style").color) ||
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   106
                    (this.model.get("created_by") || Utils._USER_PLACEHOLDER(this.renkan)).get("color"),
458
423bdf56d103 migrated to style, added dash style to client + small refactoring for shapes + triangle
ymh <ymh.work@gmail.com>
parents: 434
diff changeset
   107
                _dash = (this.model.has("style") && this.model.get("style").dash) ? this.options.default_dash_array : null,
462
255b66d1ce78 remove magical constant, put ghost opacity in the defaults.
ymh <ymh.work@gmail.com>
parents: 461
diff changeset
   108
                _opacity;
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   109
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   110
            if (this.model.get("delete_scheduled") || this.from_representation.model.get("delete_scheduled") || this.to_representation.model.get("delete_scheduled")) {
462
255b66d1ce78 remove magical constant, put ghost opacity in the defaults.
ymh <ymh.work@gmail.com>
parents: 461
diff changeset
   111
                _opacity = 0.5;
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   112
                this.line.dashArray = [2, 2];
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   113
            } else {
462
255b66d1ce78 remove magical constant, put ghost opacity in the defaults.
ymh <ymh.work@gmail.com>
parents: 461
diff changeset
   114
                _opacity = this.ghost ? this.options.ghost_opacity : 1;
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   115
                this.line.dashArray = null;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   116
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   117
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   118
            var old_act_btn = this.active_buttons;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   119
462
255b66d1ce78 remove magical constant, put ghost opacity in the defaults.
ymh <ymh.work@gmail.com>
parents: 461
diff changeset
   120
            this.arrow.visible =
255b66d1ce78 remove magical constant, put ghost opacity in the defaults.
ymh <ymh.work@gmail.com>
parents: 461
diff changeset
   121
                (this.model.has("style") && this.model.get("style").arrow) ||
255b66d1ce78 remove magical constant, put ghost opacity in the defaults.
ymh <ymh.work@gmail.com>
parents: 461
diff changeset
   122
                !this.model.has("style") ||
255b66d1ce78 remove magical constant, put ghost opacity in the defaults.
ymh <ymh.work@gmail.com>
parents: 461
diff changeset
   123
                typeof this.model.get("style").arrow === 'undefined';
459
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
   124
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   125
            this.active_buttons = this.model.get("delete_scheduled") ? this.pending_delete_buttons : this.normal_buttons;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   126
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   127
            if (this.selected && this.renderer.isEditable() && old_act_btn !== this.active_buttons) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   128
                old_act_btn.forEach(function(b) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   129
                    b.hide();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   130
                });
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   131
                this.active_buttons.forEach(function(b) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   132
                    b.show();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   133
                });
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   134
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   135
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   136
            this.paper_coords = _p0b.add(_p1b).divide(2);
459
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
   137
            this.line.strokeWidth = _strokeWidth;
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   138
            this.line.strokeColor = _color;
458
423bdf56d103 migrated to style, added dash style to client + small refactoring for shapes + triangle
ymh <ymh.work@gmail.com>
parents: 434
diff changeset
   139
            this.line.dashArray = _dash;
462
255b66d1ce78 remove magical constant, put ghost opacity in the defaults.
ymh <ymh.work@gmail.com>
parents: 461
diff changeset
   140
            this.line.opacity = _opacity;
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   141
            this.line.segments[0].point = _p0a;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   142
            this.line.segments[1].point = this.paper_coords;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   143
            this.line.segments[1].handleIn = _handle.multiply(-1);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   144
            this.line.segments[1].handleOut = _handle;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   145
            this.line.segments[2].point = _p1a;
459
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
   146
            this.arrow.scale(_arrow_scale / this.arrow_scale);
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
   147
            this.arrow_scale = _arrow_scale;
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   148
            this.arrow.fillColor = _color;
462
255b66d1ce78 remove magical constant, put ghost opacity in the defaults.
ymh <ymh.work@gmail.com>
parents: 461
diff changeset
   149
            this.arrow.opacity = _opacity;
459
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
   150
            this.arrow.rotate(_a - this.arrow_angle, this.arrow.bounds.center);
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   151
            this.arrow.position = this.paper_coords;
459
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
   152
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   153
            this.arrow_angle = _a;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   154
            if (_a > 90) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   155
                _a -= 180;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   156
                _textdelta = _textdelta.multiply(-1);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   157
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   158
            if (_a < -90) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   159
                _a += 180;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   160
                _textdelta = _textdelta.multiply(-1);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   161
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   162
            var _text = this.model.get("title") || this.renkan.translate(this.options.label_untitled_edges) || "";
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   163
            _text = Utils.shortenText(_text, this.options.node_label_max_length);
633
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   164
            if (typeof this.highlighted === "object") {
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   165
                this.text.html(this.highlighted.replace(_(_text).escape(),'<span class="Rk-Highlighted">$1</span>'));
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   166
            } else {
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   167
                this.text.text(_text);
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   168
            }
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   169
            var _textpos = this.paper_coords.add(_textdelta);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   170
            this.text.css({
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   171
                left: _textpos.x,
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   172
                top: _textpos.y,
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   173
                transform: "rotate(" + _a + "deg)",
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   174
                "-moz-transform": "rotate(" + _a + "deg)",
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   175
                "-webkit-transform": "rotate(" + _a + "deg)",
462
255b66d1ce78 remove magical constant, put ghost opacity in the defaults.
ymh <ymh.work@gmail.com>
parents: 461
diff changeset
   176
                opacity: _opacity
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   177
            });
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   178
            this.text_angle = _a;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   179
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   180
            var _pc = this.paper_coords;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   181
            this.all_buttons.forEach(function(b) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   182
                b.moveTo(_pc);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   183
            });
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   184
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   185
            if (this.renderer.minimap) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   186
                this.minimap_line.strokeColor = _color;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   187
                this.minimap_line.segments[0].point = this.renderer.toMinimapCoords(new paper.Point(this.from_representation.model.get("position")));
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   188
                this.minimap_line.segments[1].point = this.renderer.toMinimapCoords(new paper.Point(this.to_representation.model.get("position")));
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: 434
diff changeset
   191
        hide: function(){
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   192
            this.hidden = true;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   193
            this.ghost = false;
462
255b66d1ce78 remove magical constant, put ghost opacity in the defaults.
ymh <ymh.work@gmail.com>
parents: 461
diff changeset
   194
450
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   195
            this.text.hide();
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   196
            this.line.visible = false;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   197
            this.arrow.visible = false;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   198
            this.minimap_line.visible = false;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   199
        },
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   200
        show: function(ghost){
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   201
            this.ghost = ghost;
461
48235ed6b07d Merge with a3bf10beb710d1cfdda455ab98705f9e7a631739
ymh <ymh.work@gmail.com>
parents: 459 453
diff changeset
   202
            if (this.ghost) {
450
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   203
                this.text.css('opacity', 0.3);
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   204
                this.line.opacity = 0.3;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   205
                this.arrow.opacity = 0.3;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   206
                this.minimap_line.opacity = 0.3;
461
48235ed6b07d Merge with a3bf10beb710d1cfdda455ab98705f9e7a631739
ymh <ymh.work@gmail.com>
parents: 459 453
diff changeset
   207
            } else {
450
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   208
                this.hidden = false;
462
255b66d1ce78 remove magical constant, put ghost opacity in the defaults.
ymh <ymh.work@gmail.com>
parents: 461
diff changeset
   209
450
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   210
                this.text.css('opacity', 1);
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   211
                this.line.opacity = 1;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   212
                this.arrow.opacity = 1;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   213
                this.minimap_line.opacity = 1;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   214
            }
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   215
            this.text.show();
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   216
            this.line.visible = true;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   217
            this.arrow.visible = true;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   218
            this.minimap_line.visible = true;
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   219
            this.redraw();
88e8673aaeeb add the hidden/ghost behaviour:
rougeronj
parents: 434
diff changeset
   220
        },
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   221
        openEditor: function() {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   222
            this.renderer.removeRepresentationsOfType("editor");
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   223
            var _editor = this.renderer.addRepresentation("EdgeEditor",null);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   224
            _editor.source_representation = this;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   225
            _editor.draw();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   226
        },
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   227
        select: function() {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   228
            this.selected = true;
459
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
   229
            this.line.strokeWidth = this._getSelectedStrokeWidth();
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   230
            if (this.renderer.isEditable()) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   231
                this.active_buttons.forEach(function(b) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   232
                    b.show();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   233
                });
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   234
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   235
            if (!this.options.editor_mode) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   236
                this.openEditor();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   237
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   238
            this._super("select");
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   239
        },
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   240
        unselect: function(_newTarget) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   241
            if (!_newTarget || _newTarget.source_representation !== this) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   242
                this.selected = false;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   243
                if (this.options.editor_mode) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   244
                    this.all_buttons.forEach(function(b) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   245
                        b.hide();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   246
                    });
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   247
                }
532
030f2e4c0664 close the edge popup editor as soon as the edge get hidden again
rougeronj
parents: 462
diff changeset
   248
                if (this.hidden){
030f2e4c0664 close the edge popup editor as soon as the edge get hidden again
rougeronj
parents: 462
diff changeset
   249
                    this.renderer.removeRepresentationsOfType("editor");
030f2e4c0664 close the edge popup editor as soon as the edge get hidden again
rougeronj
parents: 462
diff changeset
   250
                }
459
98cae534083d add node and edge stroke width + adjust text + arrow placement + conrol arrow visibility
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
   251
                this.line.strokeWidth = this._getStrokeWidth();
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   252
                this._super("unselect");
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   253
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   254
        },
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   255
        mousedown: function(_event, _isTouch) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   256
            if (_isTouch) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   257
                this.renderer.unselectAll();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   258
                this.select();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   259
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   260
        },
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   261
        mouseup: function(_event, _isTouch) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   262
            if (!this.renkan.read_only && this.renderer.is_dragging) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   263
                this.from_representation.saveCoords();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   264
                this.to_representation.saveCoords();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   265
                this.from_representation.is_dragging = false;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   266
                this.to_representation.is_dragging = false;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   267
            } else {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   268
                if (!_isTouch) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   269
                    this.openEditor();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   270
                }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   271
                this.model.trigger("clicked");
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   272
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   273
            this.renderer.click_target = null;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   274
            this.renderer.is_dragging = false;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   275
        },
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   276
        paperShift: function(_delta) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   277
            if (this.options.editor_mode) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   278
                if (!this.options.read_only) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   279
                    this.from_representation.paperShift(_delta);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   280
                    this.to_representation.paperShift(_delta);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   281
                }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   282
            } else {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   283
                this.renderer.paperShift(_delta);
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   284
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   285
        },
633
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   286
        highlight: function(textToReplace) {
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   287
            var hlvalue = textToReplace || true;
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   288
            if (this.highlighted === hlvalue) {
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   289
                return;
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   290
            }
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   291
            this.highlighted = hlvalue;
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   292
            this.redraw();
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   293
            this.renderer.throttledPaperDraw();
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   294
        },
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   295
        unhighlight: function() {
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   296
            if (!this.highlighted) {
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   297
                return;
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   298
            }
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   299
            this.highlighted = false;
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   300
            this.redraw();
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   301
            this.renderer.throttledPaperDraw();
fdff56da097d allow to highlight edges. Add a url selector for edge + seach edges in edge box. remove max width of title
ymh <ymh.work@gmail.com>
parents: 532
diff changeset
   302
        },
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   303
        destroy: function() {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   304
            this._super("destroy");
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   305
            this.line.remove();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   306
            this.arrow.remove();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   307
            this.text.remove();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   308
            if (this.renderer.minimap) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   309
                this.minimap_line.remove();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   310
            }
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   311
            this.all_buttons.forEach(function(b) {
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   312
                b.destroy();
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   313
            });
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   314
            var _this = this;
433
e457ec945e50 replace underscore par lodash
ymh <ymh.work@gmail.com>
parents: 293
diff changeset
   315
            this.bundle.edges = _.reject(this.bundle.edges, function(_edge) {
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   316
                return _this === _edge;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   317
            });
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   318
        }
433
e457ec945e50 replace underscore par lodash
ymh <ymh.work@gmail.com>
parents: 293
diff changeset
   319
    }).value();
284
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   320
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   321
    return Edge;
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   322
fa8035885814 build renderer with require js
cavaliet
parents:
diff changeset
   323
});