source: subversion/applications/editors/potlatch/error.as @ 17889

Last change on this file since 17889 was 17889, checked in by richard, 10 years ago

Potlatch 1.2c. Not checking in SWF until I've spoken to avar and am reasonably confident about the i18n stuff

  • Property svn:executable set to *
File size: 8.8 KB
Line 
1
2        // =====================================================================
3        // Error handling
4
5        function handleError(code,msg,result) {
6                if (code==-2 && msg.indexOf('allocate memory')>-1) { code=-1; }
7                if (msg.indexOf('changeset')>-1) { _root.changeset=null; msg+=iText('newchangeset'); }  // we really need a dedicated error code for this
8                if (msg.indexOf('logged')>-1) { loginDialogue(); return; }
9                switch (code) {
10                        case -1:        errorDialogue(msg,150); break;
11                        case -2:        errorDialogue(msg+iText('emailauthor'),200); break;
12                        case -3:        resolveConflict(msg,result); break;             // version conflict
13                        case -4:        deleteObject(msg,result[0]); break;             // object not found
14                        case -5:        break;                                                                  // not executed due to previous error
15                }
16        }
17
18        function errorDialogue(t,h) {
19                abortUpload();
20                _root.windows.attachMovie("modal","error",++windowdepth);
21                _root.windows.error.init(350,h,new Array(iText('ok')),null);
22                _root.windows.error.box.createTextField("prompt",2,7,9,325,h-40);
23                writeText(_root.windows.error.box.prompt,t);
24                _root.windows.error.box.prompt.selectable=true;
25        }
26
27        function handleWarning() {
28                abortUpload();
29                _root.windows.attachMovie("modal","error",++windowdepth);
30                _root.windows.error.init(275,130,new Array(iText('cancel'),iText('retry')),handleWarningAction);
31                _root.windows.error.box.createTextField("prompt",2,7,9,250,100);
32        _root.uploading=false;
33                if (writeError) {
34                        writeText(_root.windows.error.box.prompt,iText('error_connectionfailed'));
35                } else {
36                        writeText(_root.windows.error.box.prompt,iText('error_readfailed'));
37                }
38        };
39
40        function handleWarningAction(choice) {
41                _root.panel.i_warning._visible=false;
42                _root.writesrequested=0;
43                _root.waysrequested=_root.waysreceived=_root.whichrequested=_root.whichreceived=0;
44        var retry=(choice==iText('retry'));
45                if (writeError) {
46                        // loop through all ways which are uploading, and reupload
47                        if (retry) { establishConnections(); }
48                        for (var q in _root.nodes) {
49                                if (_root.nodes[q].uploading) {
50                                        _root.nodes[q].uploading=false;
51                                        _root.nodes[q].clean=false;
52                                }
53                        }
54                        for (var q in _root.map.ways) {
55                                if (_root.map.ways[q].uploading) {
56                                        _root.map.ways[q].uploading=false;
57                                        _root.map.ways[q].clean=false;
58                                        if (!_root.sandbox && retry) { _root.map.ways[q].upload(); }
59                                }
60                        }
61                        for (var q in _root.map.relations) {
62                                if (_root.map.relations[q].uploading) {
63                                        _root.map.relations[q].uploading=false;
64                                        _root.map.relations[q].clean=false;
65                                        if (!_root.sandbox && retry) { _root.map.relations[q].upload(); }
66                                }
67                        }
68                        for (var q in _root.map.pois) {
69                                if (_root.map.pois[q].uploading) {
70                                        _root.map.pois[q].uploading=false;
71                                        _root.map.pois[q].clean=false;
72                                        if (!_root.sandbox && retry) { _root.map.pois[q].upload(); }
73                                }
74                        }
75                        if (_root.sandbox && retry) { prepareUpload(); }
76                }
77                if (readError) { 
78                        bigedge_l=bigedge_b= 999999;
79                        bigedge_r=bigedge_t=-999999;
80                        whichWays();
81                }
82                writeError=false; readError=false;
83        };
84
85        // Delete object from Potlatch if server reports it doesn't exist
86
87        function deleteObject(type,id) {
88                switch (type) {
89                        case 'way':
90                                if (_root.map.ways[id]) {
91                                        var w=_root.map.ways[id];
92                                        w.removeNodeIndex();
93                                        memberDeleted('Way', id);
94                                        if (id==wayselected) { stopDrawing(); deselectAll(); }
95                                        removeMovieClip(_root.map.areas[id]);
96                                        removeMovieClip(w);
97                                }
98                                break;
99                        case 'relation':
100                                if (_root.map.relations[id]) {
101                                        var mems=_root.map.relations[id].members;
102                                        for (var i in mems) { var r=findLinkedHash(mems[i][0],mems[i][1]); delete r[id]; }
103                                        removeMovieClip(_root.map.relations[id]);
104                                }
105                                break;
106                        case 'node':
107                                if (_root.map.pois[id]) {
108                                        if (id==_poiselected) { deselectAll(); }
109                                        removeMovieClip(_root.map.pois[id]);
110                                }
111                                break;
112                }
113        }
114
115        // =====================================================================
116        // Login management
117       
118        function loginDialogue() {
119                _root.windows.attachMovie("modal","login",++windowdepth);
120                _root.windows.login.init(300,140,new Array(iText('cancel'),iText('retry')),retryLogin); 
121                var box=_root.windows.login.box;
122               
123                box.createTextField("title",10,7,7,280,20);
124                box.title.text = iText("login_title");
125                with (box.title) { setTextFormat(boldText); selectable=false; type='dynamic'; }
126                adjustTextField(box.title);
127
128                box.createTextField('prompt',11, 8,33,280,40);
129                with (box.prompt) { text=iText('login_retry'); setTextFormat(plainSmall); selectable=false; }
130                adjustTextField(box.prompt);
131
132                box.createTextField('uidt',12, 8,63,160,20);
133                with (box.uidt) { text=iText('login_uid'); setTextFormat(plainSmall); selectable=false; }
134                adjustTextField(box.uidt); var r=box.uidt.textWidth+25;
135                box.createTextField('uidi',13,r,63,120,17);
136                box.uidi.setNewTextFormat(plainSmall); box.uidi.type='input';
137                box.uidi.text='';
138                box.uidi.background=true; box.uidi.backgroundColor=0xDDDDDD;
139                box.uidi.border=true; box.uidi.borderColor=0xFFFFFF;
140
141                box.createTextField('pwdt',14, 8,83,160,20);
142                with (box.pwdt) { text=iText('login_pwd'); setTextFormat(plainSmall); selectable=false; }
143                adjustTextField(box.pwdt);
144                box.createTextField('pwdi',15,r,83,120,17);
145                box.pwdi.setNewTextFormat(plainSmall); box.pwdi.type='input';
146                box.pwdi.text='';
147                box.pwdi.background=true; box.pwdi.backgroundColor=0xDDDDDD;
148                box.pwdi.border=true; box.pwdi.borderColor=0xFFFFFF;
149                box.pwdi.password=true;
150        }
151       
152        function retryLogin(choice) {
153                if (choice==iText('retry')) {
154                        _root.usertoken=_root.windows.login.box.uidi.text+":"+_root.windows.login.box.pwdi.text;
155                }
156                _root.changeset=null;
157        _root.uploading=false;
158                removeMovieClip(_root.windows.login);
159                removeMovieClip(_root.windows.upload);
160                removeMovieClip(_root.windows.pleasewait);
161                if (!_root.sandbox) { _root.changecomment=''; startChangeset(true); }
162                writeError=true; handleWarningAction(choice);
163        }
164
165        // =====================================================================
166        // Conflict management
167
168        function resolveConflict(rootobj,conflictobj) {
169                //  rootobj is     [root object, id]
170                //  conflictobj is [conflicting object, id, version]
171                _root.croot=rootobj; _root.cconflict=conflictobj;               // _root. so we can access them from the "Ok" function
172                var t1,t2; var id=rootobj[1];
173
174                abortUpload();
175                switch (rootobj[0]) {
176                        case 'way':             var n=getName(_root.map.ways[id].attr,waynames); if (n) { n=" ("+n+")"; }
177                                                        t1=iText("conflict_waychanged",id,n);
178                                                        t2=iText("conflict_visitway"); break;
179                        case 'node':    var n=getName(_root.map.pois[id].attr,nodenames); if (n) { n=" ("+n+")"; }
180                                                        t1=iText("conflict_poichanged",id,n);
181                                                        t2=iText("conflict_visitpoi"); break;
182                        case 'relation':var n=_root.map.relations[id].verboseText(); if (n) { n=" ("+n+")"; }
183                                                        t1=iText("conflict_relchanged",id,n);
184                                                        t2=""; break;
185                }
186                _root.windows.attachMovie("modal","resolve",++windowdepth);
187                _root.windows.resolve.init(300,150,new Array('Ok'),function() { handleConflictAction(_root.windows.resolve.box.fixoption.selected); });
188                var box=_root.windows.resolve.box;
189
190                box.createTextField("prompt1",2,7,9,282,200);
191                writeText(box.prompt1,t1); var t=box.prompt1.textHeight;
192
193                box.attachMovie("radio","fixoption",3);
194                box.fixoption.addButton(10,t+22,iText('conflict_download'));
195                box.fixoption.addButton(10,t+40,iText('conflict_overwrite'));
196                box.fixoption.select(1);
197
198                if (t2) {
199                        box.createTextField("prompt2",4,7,t+60,282,20);
200                        writeText(box.prompt2,t2);
201                }
202        }
203       
204        function handleConflictAction(choice) {
205                var tx,ty;
206                var ctype=_root.croot[0]; var cid=_root.croot[1];
207                if              (ctype=='way'  && _root.map.ways[cid]) { preway=cid;  tx=_root.map.ways[cid].path[0].x; ty=_root.map.ways[cid].path[0].y; }
208                else if (ctype=='node' && _root.map.pois[cid]) { prenode=cid; tx=_root.nodes[cid].x; ty=_root.nodes[cid].y; }
209
210                if (choice==1) { deselectAll(); deleteObject(ctype,cid); }      // downloading new version, so delete old one from Potlatch
211                if (tx && ty && (tx<long2coord(_root.edge_l) || tx>long2coord(_root.edge_r) || ty<lat2coord(_root.edge_t) || ty>lat2coord(_root.edge_b))) {
212                        updateCoords(tx,ty);
213                        redrawBackground();
214                }
215
216                if (choice==1) {
217                        // download new (more up-to-date) version and select it
218                        whichWays(true);
219                } else {
220                        // select problem object
221                        if              (ctype=='way' ) { _root.map.ways[cid].select(); }
222                        else if (ctype=='node') { _root.map.pois[cid].select(); }
223                        // change version number
224                        var rtype=_root.cconflict[0];
225                        var rid  =_root.cconflict[1];
226                        var v    =_root.cconflict[2];
227                        switch (ctype+","+_root.cconflict[0]) {
228                                case 'way,way':                         _root.map.ways[cid].version=v; _root.map.ways[cid].clean=false; break;
229                                case 'way,node':                        _root.nodes[rid].version=v; _root.nodes[rid].markDirty(); _root.map.ways[cid].clean=false; break;
230                                case 'node,node':                       _root.nodes[cid].version=v; _root.nodes[cid].markDirty(); _root.map.pois[cid].clean=false; break;
231                                case 'relation,relation':       _root.map.relations[cid].version=v; _root.map.relations[cid].clean=false; break;
232                        }
233                }
234        }
Note: See TracBrowser for help on using the repository browser.