source: subversion/applications/editors/potlatch/offline.as @ 31070

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

#2351: Make strings in offline.as translatable

  • Property svn:executable set to *
File size: 7.7 KB
Line 
1
2        // =====================================================================================
3        // Offline upload
4
5        // uploadtasks is an array of: [function,hash of IDs]
6        // (each function returns a text comment)
7
8        // -------------------------------------------------------------------------------------
9        // prepareUpload
10        // creates upload task list
11
12        function prepareUpload() {
13                var todo;
14                if (!_root.sandbox) { return; }
15                if (_root.uploading) { return; }
16                deselectAll();
17
18                _root.uploadtasks=new Array();
19
20                // Assemble POIs
21                var poi=new Object(); todo=0;
22                for (var id in _root.map.pois) {
23                        if (!_root.map.pois[id].clean && !_root.map.pois[id].locked) {
24                                poi[id]=true; todo++;
25                                if (todo==5) { uploadtasks.push([uploadPOIs,poi]); poi=new Object(); todo=0; }
26                        }
27                }
28                if (todo>0) { uploadtasks.push([uploadPOIs,poi]); }
29               
30                // Assemble ways
31                var way=new Object(); todo=0;
32                for (var id in _root.map.ways) {
33                        if (!_root.map.ways[id].clean && !_root.map.ways[id].locked) {
34                                way[id]=true; todo++;
35                                if (todo==5 || _root.map.ways[id].path.length>200) { uploadtasks.push([uploadWays,way]); way=new Object(); todo=0; }
36                        }
37                }
38                if (todo>0) { uploadtasks.push([uploadWays,way]); }
39               
40                // Assemble relations
41                var rel=new Object(); todo=0;
42                for (var id in _root.map.relations) {
43                        if (!_root.map.relations[id].clean && !_root.map.relations[id].locked) {
44                                rel[id]=true; todo++;
45                                if (todo==5 || _root.map.relations[id].members.length>200) { uploadtasks.push([uploadRelations,rel]); rel=new Object(); todo=0; }
46                        }
47                }
48                if (todo>0) { uploadtasks.push([uploadRelations,rel]); }
49
50                // Assemble ways to delete
51                var z=_root.waystodelete; todo=false;
52                for (var id in z) { todo=true; }
53                if (todo) { uploadtasks.push([uploadDeletedWays,deepCopy(_root.waystodelete)]); }
54
55                // Assemble POIs to delete
56                var z=_root.poistodelete; todo=false;
57                for (var id in z) { todo=true; }
58                if (todo) { uploadtasks.push([uploadDeletedPOIs,deepCopy(_root.poistodelete)]); }
59
60                // Check there's something to do
61                if (uploadtasks.length==0) { 
62                    setAdvice(true,iText('advice_uploadempty'));
63                        return;
64                }
65               
66                // Ask for changeset comment if not already created
67                if (_root.changeset) { if (!renewChangeset()) { startUpload(); } } 
68                                else { changesetRequest(iText('prompt_savechanges'),completeClose,''); }
69        }
70
71        // -------------------------------------------------------------------------------------
72        // startUpload
73        // 'Save' button pressed, so set up screen progress display and begin upload
74
75        function startUpload() {
76            _root.uploading=true;
77
78                _root.windows.attachMovie("modal","upload",++windowdepth);
79                _root.windows.upload.init(300,250,[iText('cancel')],abortUpload);
80
81        box=_root.windows.upload.box;
82                box.createTextField("title",10,7,7,280,20);
83                box.title.text = iText("uploading");
84                with (box.title) { setTextFormat(boldText); selectable=false; type='dynamic'; }
85                adjustTextField(box.title);
86
87        box.createTextField("progress",11,10,40,280,170);
88        with (box.progress) {
89            background=true; backgroundColor=0xF3F3F3;
90            border=true; borderColor=0xFFFFFF;
91            type='dynamic'; wordWrap=true; multiline=true;
92            setNewTextFormat(plainSmall); text='';
93        }
94        box.progress.onScroller=function() { _root.windows.upload.box.progress.scroll=_root.windows.upload.box.progress.maxscroll; };
95
96            operationDone('first');
97    }
98
99        // -------------------------------------------------------------------------------------
100        // abortUpload
101        // Stop upload in case of failure
102
103        function abortUpload() {
104                var i,z;
105                if (!_root.uploading) { return; }
106                _root.uploading=false;
107                setAdvice(false,iText('advice_uploadfail'));
108                _root.windows.upload.remove();
109                z=_root.map.pois; for (i in z) { z[i].uploading=false; }
110                z=_root.map.ways; for (i in z) { z[i].uploading=false; }
111                z=_root.nodes; for (i in z) { z[i].uploading=false; }
112                z=_root.map.relations; for (i in z) { z[i].uploading=false; }
113        }
114
115        // ----------------------------------------------------------------------------------------
116        // operationDone( id | all | first )
117        // removes element from current task from list, and does next if task complete
118        // ('all' takes the entire first task; 'first' doesn't take anything, just fires the first)
119
120        function operationDone(id) {
121                if (!_root.uploading) { return; }
122
123                var doNext=false;
124                if (id=='all') {
125                        // Entire first event done (e.g. startChangeset)
126                        _root.uploadtasks.shift(); doNext=true;
127                } else if (id=='first') {
128                        // First task, so we want to fire it
129                        doNext=true;
130                } else {
131                        // Remove task from list, do next if none left
132                        var a=_root.uploadtasks[0][1]; delete a[id];
133                        var c=0; for (i in a) { c++; }
134                        doNext=(c==0); if (doNext) { 
135                                _root.uploadtasks.shift();
136                        }
137                }
138
139                if (!doNext) { return; }
140                if (_root.uploadtasks.length>0) { 
141                        _root.uploadtasks[0][0].call(null,_root.uploadtasks[0][1]); 
142                return;
143        }
144               
145                // Hooray, we're complete
146                _root.uploading=false;
147                _root.waystodelete=new Object();
148                _root.poistodelete=new Object();
149//        _root.windows.upload.box.progress.text+="Upload complete";
150//              var box=_root.windows.upload.box;
151//              box.createEmptyMovieClip(1,1);
152//              drawButton(box[1],140,220,iText("ok"),"");
153//              box[1].onPress=function() { _root.windows.upload.remove(); };
154        _root.windows.upload.remove(); 
155                setAdvice(false,iText('advice_uploadsuccess'));
156        markClean(true);
157        }
158
159        // -------------------------------------------------------------------------------------
160        // individual upload tasks
161
162        function uploadPOIs(list) {
163                for (var id in list) {
164                        var n=getName(_root.map.pois[id].attr,nodenames);
165            if (n!='') {
166                _root.windows.upload.box.progress.text += iText('uploading_poi_name', id, n) + "\n";
167            } else {
168                _root.windows.upload.box.progress.text += iText('uploading_poi', id) + "\n";
169            }
170                        _root.map.pois[id].upload();
171                }
172        }
173
174        function uploadWays(list) {
175                for (var id in list) {
176                        var n=getName(_root.map.ways[id].attr,waynames);
177            if (n!='') {
178                _root.windows.upload.box.progress.text += iText('uploading_way_name', id, n) + "\n";
179            } else {
180                _root.windows.upload.box.progress.text += iText('uploading_way', id) + "\n";
181            }
182                        _root.map.ways[id].upload();
183                }
184        }
185       
186        function uploadRelations(list) {
187                for (var id in list) {
188                        var n=getName(_root.map.relations[id].attr,[]);
189            if (n!='') {
190                _root.windows.upload.box.progress.text += iText('uploading_relation_name', id, n) + "\n";
191            } else {
192                _root.windows.upload.box.progress.text += iText('uploading_relation', id) + "\n";
193            }
194                        _root.map.relations[id].upload();
195                }
196        }
197       
198        function uploadDeletedWays(list) {
199        _root.windows.upload.box.progress.text+=iText('uploading_deleting_ways');
200                for (var id in list) {
201            _root.windows.upload.box.progress.text+=".";
202                        deleteresponder = function() { };
203                        deleteresponder.onResult = function(result) { deletewayRespond(result); };
204                        _root.writesrequested++;
205                        remote_write.call('deleteway',deleteresponder,_root.usertoken,_root.changeset,Number(id),waystodelete[id][0],waystodelete[id][1]);
206                }
207        _root.windows.upload.box.progress.text+="\n";
208        }
209
210        function uploadDeletedPOIs(list) {
211        _root.windows.upload.box.progress.text+=iText('uploading_deleting_pois');
212                for (var id in list) {
213            _root.windows.upload.box.progress.text+=".";
214                        poidelresponder = function() { };
215                        poidelresponder.onResult = function(result) { deletepoiRespond(result); };
216                        _root.writesrequested++;
217                        remote_write.call('putpoi',poidelresponder,_root.usertoken,_root.changeset,Number(poistodelete[id][0]),Number(id),poistodelete[id][1],poistodelete[id][2],poistodelete[id][3],0);
218                }
219        _root.windows.upload.box.progress.text+="\n";
220        }
221
222
Note: See TracBrowser for help on using the repository browser.