source: subversion/applications/editors/potlatch/node.as @ 18174

Last change on this file since 18174 was 18174, checked in by avar, 10 years ago

#2351: Make inspector and (and Yahoo) strings in Potlatch translatable.

  • Property svn:executable set to *
File size: 4.3 KB
Line 
1
2        // Originally 0=x, 1=y, 2=id, 4=tags;
3        // now .x, .y, .id, .attr
4
5        function Node(id,x,y,attr,version) {
6                this.id=id;
7                this.x=x;
8                this.y=y;
9                this.attr=attr;
10                this.tagged=hasTags(attr);
11                this.ways=new Object();
12                this.version=version;
13                this.clean=false;               // set to true if just loaded from server
14                this.uploading=false;
15        };
16
17        Node.prototype.markDirty=function() {
18                // doesn't really need to be a discrete function,
19                // but keeping it in for now
20                this.clean=false;
21        };
22
23        Node.prototype.removeFromAllWays=function() {
24                var qway,qs,x,y,attr;
25                var waylist=new Array(); var poslist=new Array();
26                var undopoint=false;
27                var z=this.ways; for (qway in z) {      // was in _root.map.ways
28                        for (qs=0; qs<_root.map.ways[qway].path.length; qs+=1) {
29                                if (_root.map.ways[qway].path[qs]==this) {
30                                        waylist.push(qway); poslist.push(qs);
31                                        _root.map.ways[qway].path.splice(qs,1);
32                                        if (this.id>0) { _root.map.ways[qway].deletednodes[this.id]=this.version; }
33                                        // needs to be in every way's .deletednodes - if it's just one, the API will refuse
34                                        // to delete it, because it's still in the other (not yet rewritten) way
35                                }
36                        }
37                        _root.map.ways[qway].clean=false;
38                        _root.map.ways[qway].removeDuplicates();
39                        if (_root.map.ways[qway].path.length<2) {
40                                _root.map.ways[qway].saveDeleteUndo(iText('deleting'));
41                                _root.map.ways[qway].remove();
42                        } else {
43                                _root.map.ways[qway].redraw();
44                                undopoint=true;
45                        }
46                }
47                if (_root.wayselected) { _root.ws.select(); }
48                if (undopoint) { _root.undo.append(UndoStack.prototype.undo_deletepoint,
49                                                                                   new Array(deepCopy(this),waylist,poslist),
50                                                                                   iText('action_deletepoint')); }
51        };
52
53        Node.prototype.moveTo=function(newx,newy,ignoreway,ignore_oneway) {
54                this.x=newx; this.y=newy; this.markDirty();
55                var qchanged;
56                var z=this.ways; for (var qway in z) {
57                        if (qway!=ignoreway) { _root.map.ways[qway].redraw(false,ignore_oneway); qchanged=qway; }
58                }
59                return qchanged;        // return ID of last changed way
60        };
61
62        Node.prototype.renumberTo=function(id) {
63                var old=this.id;
64                noderels[id]=noderels[old]; delete noderels[old];
65                nodes[id]=new Node(id,this.x,this.y,this.attr,this.version);
66                nodes[id].clean=this.clean;
67                var z=this.ways; for (var qway in z) {
68                        nodes[id].addWay(qway);
69                        for (var qs=0; qs<_root.map.ways[qway].path.length; qs+=1) {
70                                if (_root.map.ways[qway].path[qs].id==old) {
71                                        _root.map.ways[qway].path[qs]=nodes[id];
72                                }
73                        }
74                }
75                var z=_root.map.anchors; for (var a in z) {
76                        if (_root.map.anchors[a].node==old) { _root.map.anchors[a].node=id; }
77                }
78                var z=_root.map.anchorhints; for (var a in z) {
79                        if (_root.map.anchorhints[a].node==old) { _root.map.anchorhints[a].node=id; }
80                }
81        };
82
83        Node.prototype.inspect=function() {
84                var str = iText('inspector_latlon', Math.floor(coord2lat (this.y)*10000)/10000, Math.floor(coord2long(this.x)*10000)/10000);
85
86                // Status
87                if (!this.clean) { str+=iText('inspector_unsaved'); }
88                if (this.uploading) { str+=' ' + iText('inspector_uploading'); }
89                if (!this.clean) { str+="\n"; }
90
91                // Which ways is this in?
92                if (this.numberOfWays()==0) { 
93                        str+=iText('inspector_not_in_any_ways') + "\n";
94                } else {
95                        str+=iText('inspector_in_ways') + ' ';
96                        var w=this.ways; for (var i in w) {
97                                var n=getName(_root.map.ways[i].attr,waynames);
98                if (n) {
99                    str += iText('inspector_way_name', i, n);
100                } else {
101                    str += iText('inspector_way', i);
102                }
103                                str += ", ";
104                        }
105                        str=str.substr(0,str.length-2);
106                }
107
108                return "<p>"+str+"</p>";
109        };
110
111        // ------------------------------------------------------------------------
112        // Node->way mapping
113       
114        Node.prototype.addWay=function(id) { this.ways[id]=true; };
115        Node.prototype.removeWay=function(id) { delete this.ways[id]; };
116        Node.prototype.numberOfWays=function() { var z=this.ways; var c=0; for (var i in z) { c++; } return c; };
117        Node.prototype.redrawWays=function() { var z=this.ways; for (var i in z) { _root.map.ways[i].redraw(); } };
118
119        // ------------------------------------------------------------------------
120        // Support functions
121       
122        // hasTags - does a tag hash contain any significant tags?
123
124        function hasTags(a) {
125                var c=false;
126                for (var j in a) {
127                        if (a[j] != '' && j != 'attribution' && 
128                                j != 'created_by' && j!='source' &&     
129                                j.indexOf('tiger:')!=0) { c=true; }
130                }
131                return c;
132        }
Note: See TracBrowser for help on using the repository browser.