Changeset 172
- Timestamp:
- 08/21/08 12:44:28 (3 months ago)
- Files:
-
- trunk/microfacts/public/behaviour/app/controllers/geochronopage_controller.js (modified) (2 diffs)
- trunk/microfacts/public/behaviour/lib/mapcontroller.js (modified) (4 diffs)
- trunk/microfacts/public/behaviour/lib/timelinecontroller.js (modified) (3 diffs)
- trunk/microfacts/templates/thread/read_geochrono.html (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/microfacts/public/behaviour/app/controllers/geochronopage_controller.js
r169 r172 6 6 console.log(factlet); 7 7 this.fireEvent('factletSelect', factlet); 8 }, 9 10 onFactletUnselect: function(factlet) { 11 console.log('GeoChronoPageController: saw factletUnselect event'); 12 console.log(factlet); 13 this.fireEvent('factletUnselect', factlet); 8 14 }, 9 15 … … 44 50 console.log(controller); 45 51 this.controllers.push(controller); 52 this.addEvent('threadStart', controller.onThreadStart.bind(controller)); 46 53 controller.addEvent('factletSelect', this.onFactletSelect.bind(this)); 47 54 this.addEvent('factletSelect', controller.onFactletSelect.bind(controller)); 48 this.addEvent('threadStart', controller.onThreadStart.bind(controller)); 55 controller.addEvent('factletUnselect', this.onFactletUnselect.bind(this)); 56 this.addEvent('factletUnselect', controller.onFactletUnselect.bind(controller)); 49 57 } 50 58 }); trunk/microfacts/public/behaviour/lib/mapcontroller.js
r169 r172 69 69 this.map.setCenter(new OpenLayers.LonLat(lon, lat), zoom); 70 70 }, 71 72 factletsToGeoJson: function (factlets) { 73 this.factlets = factlets; 71 72 onThreadStart: function() { 73 this.factletObjectsById = {}; 74 console.log("MapController saw threadStart event"); 75 console.log(arguments); 76 this.thread = arguments[0]; 77 this.factlets = arguments[1]; 78 this.factlets.each(function (factletObject) { 79 this.storeFactletObjectById(factletObject); 80 }, this); 81 var factletsData = []; 82 this.factlets.each(function (factletObject) { 83 if (factletObject.data.location) { 84 factletsData.push(factletObject.data); 85 } 86 }); 87 console.log("Factlet data:"); 88 console.log(factletsData); 89 this.drawFactlets(factletsData); 90 }, 91 92 drawFactlets: function(factletsData) { 93 var featuresData = this.factletsToGeoJson(factletsData); 94 this.drawGeoJson(featuresData); 95 //this.zoomToFactletsExtent(factlets); 96 this.map.zoomToMaxExtent(); 97 }, 98 99 factletsToGeoJson: function (factletsData) { 100 this.factletsData = factletsData; 74 101 var featureCollection = { 75 102 "type": "FeatureCollection", 76 103 "features": [] 77 104 }; 78 factlets.each( function(factlet, index) {105 this.factletsData.each( function(factletData, index) { 79 106 var featureGeoJson = { 80 107 "type": "Feature", 81 "geometry": factlet .location,82 "properties": {"factlet": factlet }108 "geometry": factletData.location, 109 "properties": {"factlet": factletData} 83 110 }; 84 111 featureCollection.features.push(featureGeoJson); … … 92 119 }, 93 120 94 drawFactlets: function(factlets) { 95 var features = this.factletsToGeoJson(factlets); 96 this.drawGeoJson(features); 121 zoomToFactletsExtent: function(factletsData) { 122 var minLat = null; 123 var maxLat = null; 124 var minLon = null; 125 var maxLon = null; 126 console.log("Making bounds."); 127 factletsData.each(function (factletData) { 128 var location = factletData.location; 129 if (location) { 130 var lon = location.coordinates[0]; 131 var lat = location.coordinates[1]; 132 console.log("Location:"); 133 console.log(location); 134 if (maxLon == null) { 135 maxLon = lon; 136 } 137 if (minLon == null) { 138 minLon = lon; 139 } 140 if (maxLat == null) { 141 maxLat = lat; 142 } 143 if (minLat == null) { 144 minLat = lat; 145 } 146 if (lon > maxLon) { 147 maxLon = lon; 148 } 149 if (lon < minLon) { 150 minLon = lon; 151 } 152 if (lat > maxLat) { 153 maxLat = lat; 154 } 155 if (lat < minLat) { 156 minLat = lat; 157 } 158 } 159 }); 160 var bounds = new OpenLayers.Bounds(); 161 bounds.extend(new OpenLayers.LonLat(minLon, minLat)); 162 bounds.extend(new OpenLayers.LonLat(maxLon, maxLat)); 163 console.log("Zooming to bounds:"); 164 console.log(bounds); 165 this.map.zoomToExtent(bounds); 166 this.map.zoomToScale(0); 97 167 }, 98 168 … … 102 172 103 173 onFeatureSelect: function(feature) { 104 this.fireEvent('factletSelect', feature.data.factlet); 174 console.log("onFeatureSelect"); 175 console.log(feature); 176 var factletId = this.getIdFromFeature(feature); 177 var factletObject = this.findFactletObject(factletId); 178 this.fireEvent('factletSelect', factletObject); 179 }, 180 181 getIdFromFeature: function(feature) { 182 console.log("Getting factlet id from feature:"); 183 var id = feature.data.factlet.id; 184 console.log(id); 185 return id; 105 186 }, 106 187 107 188 onFeatureUnselect: function(feature) { 108 this.fireEvent('factletUnselect', feature.data.factlet); 109 }, 110 111 onFactletSelect: function(factlet) { 112 this.selectedFeature = this.findFeature(factlet); 113 this.popupFactletSummary(); 189 var factletId = this.getIdFromFeature(feature); 190 var factletObject = this.findFactletObject(factletId); 191 this.fireEvent('factletUnselect', factletObject); 192 }, 193 194 onFactletSelect: function(factletObject) { 195 console.log("MapController saw factletSelect event"); 196 console.log("factletObject:"); 197 console.log(factletObject); 198 if (this.selectedFeature) { 199 this.removeFactletSummary(); 200 } 201 this.selectedFeature = this.findFeature(factletObject); 202 if (this.selectedFeature) { 203 this.popupFactletSummary(); 204 } 114 205 }, 115 206 116 207 onFactletUnselect: function(factlet) { 117 this.removeFactletSummary(); 208 console.log("MapController saw factletUnselect event:"); 209 if (this.selectedFeature) { 210 this.removeFactletSummary(); 211 } 118 212 this.selectedFeature = null; 119 213 }, 120 214 121 findFeature: function(factlet) { 122 var factletFeature = null; 123 this.markerLayer.features.each( function(feature) { 124 if ($chk(feature.data)) { 125 if (feature.data.factlet.id == factlet.id) { 126 factletFeature = feature; 127 } 128 } 129 }); 130 return factletFeature; 215 findFactletObject: function(factletId) { 216 return this.factletObjectsById[factletId]; 217 }, 218 219 storeFactletObjectById: function(factletObject) { 220 this.factletObjectsById[factletObject.data.id] = factletObject; 221 }, 222 223 findFeature: function(factletObject) { 224 console.log("MapController: finding map feature for factlet"); 225 console.log("factletObject:"); 226 console.log(factletObject); 227 var mapFeature = null; 228 this.markerLayer.features.each( function(mf) { 229 if (mf.data) { 230 if (this.getIdFromFeature(mf) == factletObject.data.id) { 231 mapFeature = mf; 232 } 233 } 234 }, this); 235 console.log("mapFeature:"); 236 console.log(mapFeature); 237 return mapFeature; 131 238 }, 132 239 … … 149 256 this.selectedFeature.popup.destroy(); 150 257 this.selectedFeature.popup = null; 151 },152 153 onThreadStart: function() {154 console.log("MapController saw threadStart event");155 console.log(arguments);156 this.thread = arguments[0];157 this.factlets = arguments[1];158 console.log(this.thread);159 console.log("Map factlets:");160 console.log(this.factlets);161 var factletsData = [];162 this.factlets.each(function (factlet) {163 if (factlet.data.location) {164 factletsData.push(factlet.data);165 }166 });167 console.log("Factlet data:");168 console.log(factletsData);169 this.drawFactlets(factletsData);170 258 } 171 259 }); trunk/microfacts/public/behaviour/lib/timelinecontroller.js
r169 r172 43 43 eventPainter._showBubble = this.onEventSelect.bind(this); 44 44 }, 45 46 onThreadStart: function() { 47 console.log("TimelineController saw threadStart event"); 48 console.log(arguments); 49 this.thread = arguments[0]; 50 this.factlets = arguments[1]; // Model objects. 51 console.log(this.thread); 52 console.log("Timeline factlets:"); 53 console.log(this.factlets); 45 54 46 drawFactlets: function(factlets) { 47 this.addFactlets(factlets); 55 this.factletObjectsById = {}; 56 this.factlets.each(function (factletObject) { 57 this.storeFactletObjectById(factletObject); 58 }, this); 59 60 var factletsData = []; 61 this.factlets.each(function (factletObject) { 62 if (factletObject.data.start) { 63 factletsData.push(factletObject.data); 64 } 65 }); 66 console.log("Factlet data:"); 67 console.log(factletsData); 68 this.drawFactlets(factletsData); 69 }, 70 71 findFactletFromEvent: function(timelineEvent) { 72 var factletId = timelineEvent._obj.id; 73 return this.findFactletObject(factletId); 74 }, 75 76 findFactletObject: function(factletId) { 77 return this.factletObjectsById[factletId]; 78 }, 79 80 storeFactletObjectById: function(factletObject) { 81 var factletId = factletObject.data.id; 82 this.factletObjectsById[factletId] = factletObject; 83 }, 84 85 drawFactlets: function(factletsData) { 86 this.addFactlets(factletsData); 48 87 this.layout(); // Rename? 49 88 }, 50 89 51 addFactlets: function(factlets ) {90 addFactlets: function(factletsData) { 52 91 var factletsJson = { 53 92 'dateTimeFormat': 'iso8601', 54 'events' : factlets 93 'events' : factletsData 55 94 }; 56 95 this.eventSource.loadJSON(factletsJson, ''); … … 62 101 }, 63 102 103 onEventSelect: function(x, y, timelineEvent) { 104 var factletObject = this.findFactletFromEvent(timelineEvent); 105 console.log("TimelineController: fired factletSelect event"); 106 console.log("factlet object:"); 107 console.log(factletObject); 108 this.fireEvent('factletSelect', factletObject, x, y); 109 }, 110 111 onFactletSelect: function(factletObject, x, y) { 112 console.log("TimelineController: saw factletSelect event"); 113 console.log("factlet object:"); 114 console.log(factletObject); 115 this.selectedEvent = this.findEvent(factletObject); 116 console.log("selected event:"); 117 console.log(this.selectedEvent); 118 if (this.selectedEvent) { 119 this.scrollSelectedEvent(); 120 } 121 }, 122 123 findEvent: function(factletObject) { 124 console.log("TimelineController: Finding timeline event for factlet"); 125 console.log("factlet object:"); 126 console.log(factletObject); 127 var timelineEvent = null; 128 var iterator = this.eventSource._events.getAllIterator() 129 var te = iterator.next(); 130 while(te) { 131 if (te._obj) { 132 if (te._obj.id == factletObject.data.id) { 133 timelineEvent = te; 134 } 135 } 136 te = iterator.next(); 137 } 138 console.log("timeline event:"); 139 console.log(timelineEvent); 140 return timelineEvent; 141 }, 142 64 143 scrollEarliestLeft: function() { 65 144 var d = this.eventSource.getEarliestDate(); 145 console.warn("Earliest date:"); 146 console.warn(d); 66 147 this.band.setMinVisibleDate(d); 67 148 }, 68 149 69 onEventSelect: function(x, y, event) { 70 var factlet = event._obj; 71 this.fireEvent('factletSelect', factlet, x, y); 150 scrollSelectedEvent: function() { 151 console.log("Scrolling event left:"); 152 var start = this.selectedEvent.getStart(); 153 console.log("start:"); 154 console.log(start); 155 this.band.setCenterVisibleDate(start); 72 156 }, 73 157 74 onFactletSelect: function(factlet, x, y) { 75 this.selectedEvent = this.findEvent(factlet); 76 }, 77 78 findEvent: function(factlet) { 79 var factletEvent = null; 80 var iterator = this.simile.getBand(0).getEventSource()._events.getAllIterator() 81 var timelineEvent = iterator.next(); 82 while(timelineEvent) { 83 if ($chk(timelineEvent._obj)) { 84 if (timelineEvent._obj.id == factlet.id) { 85 factletEvent = timelineEvent; 86 } 87 } 88 timelineEvent = iterator.next(); 89 } 90 return factletEvent; 91 }, 92 93 onFactletUnselect: function(factlet) { 158 onFactletUnselect: function(factletObject) { 94 159 this.selectedFeature = null; 95 160 // }, … … 97 162 // onFeatureUnselect: function(feature) { 98 163 // this.fireEvent('factletUnselect', feature.data.factlet); 99 },100 101 onThreadStart: function() {102 console.log("TimelineController saw threadStart event");103 console.log(arguments);104 this.thread = arguments[0];105 this.factlets = arguments[1];106 console.log(this.thread);107 console.log("Timeline factlets:");108 console.log(this.factlets);109 var factletsData = [];110 this.factlets.each(function (factlet) {111 if (factlet.data.start) {112 factletsData.push(factlet.data);113 }114 });115 console.log("Factlet data:");116 console.log(factletsData);117 this.drawFactlets(factletsData);118 164 } 119 165 trunk/microfacts/templates/thread/read_geochrono.html
r169 r172 16 16 17 17 <body> 18 19 <div id="map" style="height: 200px; width:300px"></div>18 <h2>${c.thread.title}</h2> 19 <div id="map" style="height:300px; width:100%"></div> 20 20 <div id="timeline" style="height:200px; width: 100%"></div> 21 21
