source: trunk/gpx.npemap.org.uk/favourite_postcode.xml @ 663

Last change on this file since 663 was 663, checked in by Nick Burch, 11 years ago

Orkut errors

  • Property svn:eol-style set to native
File size: 4.7 KB
Line 
1<?xml version="1.0" encoding="UTF-8" ?> 
2<Module>
3  <ModulePrefs title="Favourite Postcodes" > 
4    <Require feature="opensocial-0.7"/>
5  </ModulePrefs>
6<Content type="html">
7<![CDATA[
8<style>
9        div#content_div {
10                overflow: auto;
11                height: 100%;
12                width: 95%;
13        }
14        div#yourmap {
15                display:inline;
16        }
17        div#pickpc {
18                display:inline;
19        }
20        input#text {
21                width: 8em;
22        }
23
24        ul {
25                vertical-align: middle;
26        }
27        li {
28                vertical-align: middle;
29        }
30
31        img {
32                vertical-align: middle;
33        }
34</style>
35
36<script type="text/javascript" src="http://www.mattkruse.com/javascript/datadumper/datadumper.js"></script>
37<script type="text/javascript"> 
38  gadgets.util.registerOnLoadHandler(startApp);
39  var geocoder = "http://www.npemap.org.uk/cgi/geocoder.fcgi?format=js&postcode=";
40  var persistentTag = "favourite_postcode";
41
42  function startApp() {
43        findPC();
44        findFriends();
45  }
46
47  function findFriends() {
48        var req = opensocial.newDataRequest();
49        req.add(req.newFetchPeopleRequest(opensocial.DataRequest.Group.VIEWER_FRIENDS), 'viewerFriends');
50        req.add(req.newFetchPersonAppDataRequest("VIEWER_FRIENDS", [persistentTag]), "pc");
51        req.send(loadedFriends);
52  }
53  function loadedFriends(data) {
54        var html = "<ul>";
55
56        var fd = data.get("pc").getData();
57        var postcodes = {};
58
59        var friends = data.get("viewerFriends").getData();
60        friends.each(function(person) {
61                var postcode = "(not set)";
62                var mapDiv = " <span id='" + person.getId() + "'></span>";
63
64                var theirData = fd[person.getId()]
65                if(theirData && theirData[persistentTag]) {
66                        postcode = theirData[persistentTag];
67                        postcodes[person.getId()] = postcode;
68                }
69                html += "<li>" +
70                        person.getDisplayName() + " " + postcode + mapDiv +
71                        "</li>";
72        });
73        html += "</ul>";
74
75        // Put the HTML live
76        document.getElementById("friends").innerHTML = html;
77
78        // Find their maps
79        for(var user in postcodes) {
80                fetchMapForPostcode(user, postcodes[user], false);
81        }
82  }
83
84  function findPC() {
85        var req = opensocial.newDataRequest();
86        req.add(req.newFetchPersonAppDataRequest("VIEWER", [persistentTag]), "pc");
87        req.send(gotPC);
88  }
89  function gotPC(data) {
90        if(data.hadError()) {
91                alert(data.getError());
92        } else {
93                var pc = data.get("pc").getData();
94                for (var k in pc) {
95                        var postcode = pc[k][persistentTag];
96                        if(postcode) {
97                                startShowMap(postcode);
98                        }
99                }
100        }
101  }
102
103  function pickPC() {
104        var pc = document.getElementById("pc").value;
105
106        var req = opensocial.newDataRequest();
107        req.add(req.newUpdatePersonAppDataRequest("VIEWER",persistentTag, pc));
108        req.send(checkOK);
109  }
110  function checkOK(data) {
111        if(data.hadError()) {
112                if(data.getError != null) {
113                        alert("Error - " + data.getError());
114                } else if(data.getErrorMessage != null) {
115                        alert("Error - " + data.getErrorMessage());
116                } else {
117                        alert("Unknown error!");
118                        DumperAlert(data);
119                }
120        } else {
121                alert("Updated your favourite postcode!");
122                findPC();
123        }
124  }
125
126  function startShowMap(postcode) {
127        document.getElementById("pc").value = postcode;
128
129        fetchMapForPostcode("yourmap", postcode, true);
130  }
131  function fetchMapForPostcode(parentId, postcode, fullsize) {
132        // Ditch any spaces
133        postcode = postcode.replace(" ","");
134
135        // Find the details
136        var url = geocoder + postcode;
137        var params = {};
138        params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.JSON;
139        gadgets.io.makeRequest(url,
140                function(obj) {
141                        doShowMap(parentId, postcode, fullsize, obj);
142                }, params
143        );
144  }
145
146  function doShowMap(parentId, searchPC, fullsize, obj) {
147        // Zap old
148        var map = document.getElementById(parentId);
149        while(map.hasChildNodes()) {
150                map.removeChild(map.firstChild);
151        }
152
153        var json = obj.data;
154//      if(obj.errors) {
155//              alert(obj.errors);
156//              alert(obj.text);
157//      }
158        if(json) {
159                var tile_e = '000' + Math.floor(json["e"]/1000);
160                var tile_n = '000' + Math.floor(json["n"]/1000);
161                tile_e = tile_e.substring(tile_e.length-3);
162                tile_n = tile_n.substring(tile_n.length-3);
163                var tile = "http://tile.npemap.org.uk/osgb/scaled1/" + tile_e + "/" + tile_n + ".jpg";
164
165                var js = "";
166                if(! fullsize) {
167                        js = " width='62' height='62' onmouseover='makeBig(this)' onmouseout='makeNormal(this)' ";
168                }
169
170                map.innerHTML = "<img src='" + tile + "' alt='Map of " +
171                        json["pc"] + "' " + js + " />";
172        } else {
173                map.innerHTML = "No map found for postcode " + searchPC + ", sorry";
174        }
175  }
176  function makeBig(obj) {
177        obj.width = 125;
178        obj.height = 125;
179  }
180  function makeNormal(obj) {
181        obj.width = 62;
182        obj.height = 62;
183  }
184</script>
185<div id="content_div">
186 <div id="you">
187        <div id="yourmap"></div>
188        <div id="pickpc">
189                <label for="pc">Favourite Postcode:</label>
190                <input type="text" id="pc" />
191                <input type="button" value="Change" onclick="pickPC()" />
192        </div>
193 </div>
194 <br />
195 <div>Your friends:</div>
196 <div id="friends"></div>
197</div>
198]]> 
199</Content>
200</Module>
Note: See TracBrowser for help on using the repository browser.