File: follower.js

package info (click to toggle)
modestmaps-js 3.3.6%2Bds2-1
  • links: PTS, VCS
  • area: main
  • in suites: buster, stretch
  • size: 1,184 kB
  • ctags: 1,465
  • sloc: makefile: 58
file content (60 lines) | stat: -rw-r--r-- 2,082 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
MM.Follower = function(map, location, content, dimensions) {
    this.coord = map.locationCoordinate(location);
    this.offset = new com.modestmaps.Point(0, 0);
    this.dimensions = dimensions || new com.modestmaps.Point(100, 50);
    this.padding = new com.modestmaps.Point(10, 10);
    this.offset = new com.modestmaps.Point(0, -this.dimensions.y);

    var follower = this;
    var callback = function(m, a) { return follower.draw(m); };
    map.addCallback('drawn', callback);
    this.div = document.createElement('div');
    this.div.style.position = 'absolute';
    this.div.style.width = this.dimensions.x + 'px';
    this.div.style.height = this.dimensions.y + 'px';
    //this.div.style.backgroundColor = 'white';
    //this.div.style.border = 'solid black 1px';
    this.div.innerHTML = content;
    MM.addEvent(this.div, 'mousedown', function(e) {
        if(!e) e = window.event;
        return com.modestmaps.cancelEvent(e);
    });
    map.parent.appendChild(this.div);
    this.draw(map);
};

MM.Follower.prototype = {

    div: null,
    coord: null,
    offset: null,
    dimensions: null,
    padding: null,

    draw: function(map) {
        var point;
        try {
            point = map.coordinatePoint(this.coord);
        } catch(e) {
            // too soon?
            return;
        }
        if (point.x + this.dimensions.x + this.offset.x < 0) {
            // too far left
            this.div.style.display = 'none';
        } else if(point.y + this.dimensions.y + this.offset.y < 0) {
            // too far up
            this.div.style.display = 'none';
        } else if(point.x + this.offset.x > map.dimensions.x) {
            // too far right
            this.div.style.display = 'none';
        } else if(point.y + this.offset.y > map.dimensions.y) {
            // too far down
            this.div.style.display = 'none';
        } else {
            this.div.style.display = 'block';
            this.div.style.left = point.x + this.offset.x + 'px';
            this.div.style.top = point.y + this.offset.y + 'px';
        }
    }
};