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

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

couple of little fixes

File size: 8.1 KB
RevLine 
[11859]1
2        // Changeset management code
3       
4        // -----------------------------------------------------------------------
5        // closeChangeset
6        // prompts for a comment, then closes current changeset
7        // and starts a new one
[11943]8
9        function closeChangeset() {
[16882]10                if (!_root.changeset) { return; }
[15136]11        if (_root.sandbox) {
[16865]12                        _root.panel.advanced.disableOption(5);
[17776]13            pleaseWait(iText('closechangeset'));
[15136]14                    startChangeset(false);
15        } else {
[17776]16                    changesetRequest(iText('prompt_closechangeset',_root.changeset),completeClose,'');
[15136]17                }
18        }
19
[16388]20        // -----------------------------------------------------------------------
21        // renewChangeset
22        // renew a right changeset within us (if it's over an hour since the last)
[18431]23        // returns:
24        //              false - no changeset needed, continue
25        //              true  - new changeset needed
[16388]26       
27        function renewChangeset() {
[16525]28                if (!_root.changeset) { return false; }
29                var t=new Date(); if (t.getTime()-_root.csopened<3400000) { return false; }
[18431]30                pleaseWait(iText('openchangeset'),abortOpen);
[16388]31                _root.changeset=null; startChangeset(true);
[16525]32                return true;
[16388]33        }
[18431]34       
35        function abortOpen() { _root.changeset=null; }
36        function freshenChangeset() { var t=new Date(); _root.csopened=t.getTime(); }
37       
[15136]38        // changesetRequest(text,exit routine,comment)
39
40        function changesetRequest(prompt,doOnClose,comment) {
[11943]41                _root.panel.properties.enableTabs(false);
42                _root.windows.attachMovie("modal","cs",++windowdepth);
[18526]43                _root.windows.cs.init(300, 160, [iText('cancel'), iText('ok')], completeClose);
[11943]44
45                var z = 5;
46                var box = _root.windows.cs.box;
47               
48                box.createTextField("title",z++,7,7,280,20);
[15136]49                box.title.text = prompt;
[11943]50                with (box.title) { wordWrap=true; setTextFormat(boldText); selectable=false; type='dynamic'; }
[19922]51                adjustTextField(box.title);
[11943]52
53                box.createTextField("prompt",z++,7,27,280,20);
[17776]54                box.prompt.text = iText('prompt_changesetcomment');
[11943]55                with (box.prompt) { wordWrap=true; setTextFormat(plainSmall); selectable=false; type='dynamic'; }
[19922]56                adjustTextField(box.prompt);
[18526]57
[19555]58                var tc;
59                if (preferences.data.twitterclient==2) { tc=iText('microblog_name_identica'); }
60                                                                                  else { tc=iText('microblog_name_twitter'); }
[18526]61                box.attachMovie("checkbox","twitter",z++);
[19555]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!=''));
[11943]65               
[15136]66                box.createTextField("cscomment",z++,10,50,280,50);
67                with (box.cscomment) {
[11943]68                        setNewTextFormat(plainSmall);
69                        type='input';
70                        backgroundColor=0xDDDDDD;
71                        background=true;
72                        border=true;
73                        borderColor=0xFFFFFF;
[14706]74                        wordWrap=true;
[15136]75                        text=comment;
[11943]76                }
[15136]77                Selection.setFocus(box.cscomment);
78                box.cscomment.onChanged=function() {                            // swallow 'C'
[16525]79                        fixUTF8();
[20362]80                        if (box.cscomment.text.toUpperCase()==_root.csswallow ) {
[16525]81                                box.cscomment.text='';
82                        }
[18895]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);
[20362]84                        delete _root.csswallow;
[16525]85                };
[11943]86        }
[11859]87       
[11943]88        function completeClose(button) {
[17776]89                if (button!=iText('ok')) { return false; }
[15136]90        _root.changecomment=_root.windows.cs.box.cscomment.text;
[18526]91                if (_root.windows.cs.box.twitter.state) { twitterPost(); }
[15136]92                startChangeset(true);
[11943]93        }
94       
[15136]95
[11859]96        // -----------------------------------------------------------------------
97        // startChangeset
98        // Closes current changeset if it exists (with optional comment)
99        // then starts a new one
100       
[15136]101        function startChangeset(open_new) {
[11859]102                csresponder=function() {};
103                csresponder.onResult = function(result) {
[15136]104                        var code=result.shift(); var msg=result.shift(); if (code) { handleError(code,msg,result); return; }
105                        // ** probably needs to fail really catastrophically here...
[11859]106                        _root.changeset=result[0];
[18431]107                        freshenChangeset();
[15136]108                        if (_root.windows.pleasewait) { _root.windows.pleasewait.remove(); }
[18431]109            if (_root.sandbox && !_root.uploading && _root.changeset) {
110                                startUpload();
111                        } else if (!_root.sandbox) { 
112                                uploadDirtyWays();
113                                uploadDirtyPOIs();
114                                uploadDirtyRelations();
115                        }
[11859]116                };
117
[17889]118                var cstags=new Object();                                                                                                                // Changeset tags
[18697]119                cstags['created_by']="Potlatch "+_root.signature + ' (' + (_root.sandbox ? 'save' : 'live') + ' ' + iText('__potlatch_locale') + ')';
[11859]120
[15136]121                remote_write.call('startchangeset',csresponder,_root.usertoken,cstags,_root.changeset,_root.changecomment,open_new);
[16865]122                if (open_new) { _root.panel.advanced.enableOption(5); }
[11859]123        }
[18526]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; }
[18704]159                var rv=new LoadVars();
[18526]160                var lv=new LoadVars();
[18704]161        rv.onLoad = function(success) {
162            if (rv.success == 0) {
[18895]163                errorDialogue(iText("error_microblog_long", iText(preferences.data.twitterclient==2?'microblog_name_identica':'microblog_name_twitter'), rv.errcode, rv.errmsg, rv.errerr),130);
[18704]164            } else {
[18895]165                setAdvice(false, iText('advice_microblogged', iText(preferences.data.twitterclient==2?'microblog_name_identica':'microblog_name_twitter')), true);
[18704]166            }
167        };
[18526]168                lv.twitter_id =preferences.data.twitterid;
169                lv.twitter_pwd=preferences.data.twitterpwd;
[18823]170                if (preferences.data.twitterclient==2) { lv.identica='1'; }
[18699]171                lv.clientver = _root.signature;
[18526]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);
[18704]175                lv.sendAndLoad("http://richard.dev.openstreetmap.org/cgi-bin/potlatchtweet.cgi",rv,"POST");
[18526]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
[18697]223       
Note: See TracBrowser for help on using the repository browser.