source: subversion/applications/editors/potlatch/changeset.as @ 34460

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

couple of little fixes

File size: 8.1 KB
Line 
1
2        // Changeset management code
3       
4        // -----------------------------------------------------------------------
5        // closeChangeset
6        // prompts for a comment, then closes current changeset
7        // and starts a new one
8
9        function closeChangeset() {
10                if (!_root.changeset) { return; }
11        if (_root.sandbox) {
12                        _root.panel.advanced.disableOption(5);
13            pleaseWait(iText('closechangeset'));
14                    startChangeset(false);
15        } else {
16                    changesetRequest(iText('prompt_closechangeset',_root.changeset),completeClose,'');
17                }
18        }
19
20        // -----------------------------------------------------------------------
21        // renewChangeset
22        // renew a right changeset within us (if it's over an hour since the last)
23        // returns:
24        //              false - no changeset needed, continue
25        //              true  - new changeset needed
26       
27        function renewChangeset() {
28                if (!_root.changeset) { return false; }
29                var t=new Date(); if (t.getTime()-_root.csopened<3400000) { return false; }
30                pleaseWait(iText('openchangeset'),abortOpen);
31                _root.changeset=null; startChangeset(true);
32                return true;
33        }
34       
35        function abortOpen() { _root.changeset=null; }
36        function freshenChangeset() { var t=new Date(); _root.csopened=t.getTime(); }
37       
38        // changesetRequest(text,exit routine,comment)
39
40        function changesetRequest(prompt,doOnClose,comment) {
41                _root.panel.properties.enableTabs(false);
42                _root.windows.attachMovie("modal","cs",++windowdepth);
43                _root.windows.cs.init(300, 160, [iText('cancel'), iText('ok')], completeClose);
44
45                var z = 5;
46                var box = _root.windows.cs.box;
47               
48                box.createTextField("title",z++,7,7,280,20);
49                box.title.text = prompt;
50                with (box.title) { wordWrap=true; setTextFormat(boldText); selectable=false; type='dynamic'; }
51                adjustTextField(box.title);
52
53                box.createTextField("prompt",z++,7,27,280,20);
54                box.prompt.text = iText('prompt_changesetcomment');
55                with (box.prompt) { wordWrap=true; setTextFormat(plainSmall); selectable=false; type='dynamic'; }
56                adjustTextField(box.prompt);
57
58                var tc;
59                if (preferences.data.twitterclient==2) { tc=iText('microblog_name_identica'); }
60                                                                                  else { tc=iText('microblog_name_twitter'); }
61                box.attachMovie("checkbox","twitter",z++);
62                box.twitter.init(10,110,iText('prompt_microblog',tc,100),
63                        preferences.data.twitter,
64                        function(n) { preferences.data.twitter=n; } , (preferences.data.twitterid!='' && preferences.data.twitterpwd!=''));
65               
66                box.createTextField("cscomment",z++,10,50,280,50);
67                with (box.cscomment) {
68                        setNewTextFormat(plainSmall);
69                        type='input';
70                        backgroundColor=0xDDDDDD;
71                        background=true;
72                        border=true;
73                        borderColor=0xFFFFFF;
74                        wordWrap=true;
75                        text=comment;
76                }
77                Selection.setFocus(box.cscomment);
78                box.cscomment.onChanged=function() {                            // swallow 'C'
79                        fixUTF8();
80                        if (box.cscomment.text.toUpperCase()==_root.csswallow ) {
81                                box.cscomment.text='';
82                        }
83                        _root.windows.cs.box.twitter.prompt.text=iText('prompt_microblog',iText(preferences.data.twitterclient==2?'microblog_name_identica':'microblog_name_twitter'),100-box.cscomment.text.length);
84                        delete _root.csswallow;
85                };
86        }
87       
88        function completeClose(button) {
89                if (button!=iText('ok')) { return false; }
90        _root.changecomment=_root.windows.cs.box.cscomment.text;
91                if (_root.windows.cs.box.twitter.state) { twitterPost(); }
92                startChangeset(true);
93        }
94       
95
96        // -----------------------------------------------------------------------
97        // startChangeset
98        // Closes current changeset if it exists (with optional comment)
99        // then starts a new one
100       
101        function startChangeset(open_new) {
102                csresponder=function() {};
103                csresponder.onResult = function(result) {
104                        var code=result.shift(); var msg=result.shift(); if (code) { handleError(code,msg,result); return; }
105                        // ** probably needs to fail really catastrophically here...
106                        _root.changeset=result[0];
107                        freshenChangeset();
108                        if (_root.windows.pleasewait) { _root.windows.pleasewait.remove(); }
109            if (_root.sandbox && !_root.uploading && _root.changeset) {
110                                startUpload();
111                        } else if (!_root.sandbox) { 
112                                uploadDirtyWays();
113                                uploadDirtyPOIs();
114                                uploadDirtyRelations();
115                        }
116                };
117
118                var cstags=new Object();                                                                                                                // Changeset tags
119                cstags['created_by']="Potlatch "+_root.signature + ' (' + (_root.sandbox ? 'save' : 'live') + ' ' + iText('__potlatch_locale') + ')';
120
121                remote_write.call('startchangeset',csresponder,_root.usertoken,cstags,_root.changeset,_root.changecomment,open_new);
122                if (open_new) { _root.panel.advanced.enableOption(5); }
123        }
124
125        // -----------------------------------------------------------------------
126        // shortLink (from site.js)
127
128        function shortLink(lat, lon, zoom) {
129            var char_array="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_@";
130                var i;
131            var x=Math.round((lon+180.0) * ((1 << 30) /90.0));
132            var y=Math.round((lat+ 90.0) * ((1 << 30) /45.0));
133            var c1=0, c2=0;
134            for (i=31; i>16; --i) {
135                        c1=(c1 << 1) | ((x >> i) & 1);
136                        c1=(c1 << 1) | ((y >> i) & 1);
137            }
138            for (i=16; i>1; --i) {
139                        c2=(c2 << 1) | ((x >> i) & 1);
140                        c2=(c2 << 1) | ((y >> i) & 1);
141            }
142            var str="";
143            for (i=0; i<Math.ceil((zoom+8) / 3.0) && i<5; ++i) {
144                        digit=(c1 >> (24 - 6 * i)) & 0x3f;
145                        str += char_array.charAt(digit);
146            }
147            for (i=5; i<Math.ceil((zoom+8) / 3.0); ++i) {
148                        digit=(c2 >> (24 - 6 * (i - 5))) & 0x3f;
149                        str += char_array.charAt(digit);
150            }
151            for (i=0; i<((zoom+8) % 3); ++i) {
152                        str += "-";
153            }
154            return str;
155        }
156
157        function twitterPost() {
158                if (preferences.data.twitterid=='' || preferences.data.twitterpwd=='' || _root.changecomment=='') { return; }
159                var rv=new LoadVars();
160                var lv=new LoadVars();
161        rv.onLoad = function(success) {
162            if (rv.success == 0) {
163                errorDialogue(iText("error_microblog_long", iText(preferences.data.twitterclient==2?'microblog_name_identica':'microblog_name_twitter'), rv.errcode, rv.errmsg, rv.errerr),130);
164            } else {
165                setAdvice(false, iText('advice_microblogged', iText(preferences.data.twitterclient==2?'microblog_name_identica':'microblog_name_twitter')), true);
166            }
167        };
168                lv.twitter_id =preferences.data.twitterid;
169                lv.twitter_pwd=preferences.data.twitterpwd;
170                if (preferences.data.twitterclient==2) { lv.identica='1'; }
171                lv.clientver = _root.signature;
172                lv.tweet      ="#osmedit "+_root.changecomment+" http://osm.org/go/"+shortLink(centrelat(0),centrelong(0),Math.min(_root.scale,18));
173                lv.lat        =centrelat(0);
174                lv.long       =centrelong(0);
175                lv.sendAndLoad("http://richard.dev.openstreetmap.org/cgi-bin/potlatchtweet.cgi",rv,"POST");
176
177/*
178        The following code will be used when Twitter relax crossdomain restrictions on api.twitter.com (as promised).
179        Until then we have to go via a proxy.
180                _root.twitterresponse=new Object();
181                var lv=new LoadVars();
182                lv.addRequestHeader("Authorization","BASIC "+base64(preferences.data.twitterid+":"+preferences.data.twitterpwd));
183                lv.addRequestHeader("X-Twitter-Client","Potlatch");
184                lv.onLoad=function(success) { _root.chat.text+="onLoad "+success+"\n"; twitterUpdate(); };
185                resp=lv.sendAndLoad("http://twitter.com/account/verify_credentials.json",_root.twitterresponse,"POST");
186
187        ...and then in the twitterUpdate function, the same lv stuff plus:
188                lv['status']="#osmedit "+_root.changecomment+" http://osm.org/go/"+shortLink(centrelat(0),centrelong(0),Math.min(_root.scale,18));
189                lv['lat']=centrelat(0);
190                lv['long']=centrelong(0);
191                lv.sendAndLoad("http://twitter.com/account/update.json",_root.twitterresponse,"POST");
192
193        And for the Base64 function:
194
195                // base64 - public domain from http://rumkin.com/tools/compression/base64.php (thanks!)
196                function base64(input) {
197                        var char_array="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
198                        var output='';
199                        var i=0;
200
201                        while (i < input.length) {
202                                var chr1 = input.charCodeAt(i++);
203                                var chr2 = input.charCodeAt(i++);
204                                var chr3 = input.charCodeAt(i++);
205
206                                var enc1 = chr1 >> 2;
207                                var enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
208                                var enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
209                                var enc4 = chr3 & 63;
210
211                                if (isNaN(chr2)) { enc3 = enc4 = 64; }
212                                else if (isNaN(chr3)) { enc4 = 64; }
213
214                                output+=char_array.charAt(enc1) + char_array.charAt(enc2) + char_array.charAt(enc3) + char_array.charAt(enc4);
215                   }
216                   return output;
217                }
218
219*/
220
221        }
222
223       
Note: See TracBrowser for help on using the repository browser.