Changeset 172

Show
Ignore:
Timestamp:
08/21/08 12:44:28 (3 months ago)
Author:
johnbywater
Message:

Fixed geochrono page to be good.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/microfacts/public/behaviour/app/controllers/geochronopage_controller.js

    r169 r172  
    66        console.log(factlet); 
    77        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); 
    814    }, 
    915     
     
    4450        console.log(controller); 
    4551        this.controllers.push(controller); 
     52        this.addEvent('threadStart', controller.onThreadStart.bind(controller)); 
    4653        controller.addEvent('factletSelect', this.onFactletSelect.bind(this)); 
    4754        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)); 
    4957    } 
    5058}); 
  • trunk/microfacts/public/behaviour/lib/mapcontroller.js

    r169 r172  
    6969        this.map.setCenter(new OpenLayers.LonLat(lon, lat), zoom); 
    7070    }, 
    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; 
    74101        var featureCollection = { 
    75102          "type": "FeatureCollection",  
    76103          "features": [] 
    77104        }; 
    78         factlets.each( function(factlet, index) { 
     105        this.factletsData.each( function(factletData, index) { 
    79106            var featureGeoJson = { 
    80107                "type": "Feature", 
    81                 "geometry": factlet.location, 
    82                 "properties": {"factlet": factlet
     108                "geometry": factletData.location, 
     109                "properties": {"factlet": factletData
    83110            }; 
    84111            featureCollection.features.push(featureGeoJson); 
     
    92119    }, 
    93120  
    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); 
    97167    }, 
    98168 
     
    102172 
    103173    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; 
    105186    }, 
    106187 
    107188    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        } 
    114205    }, 
    115206 
    116207    onFactletUnselect: function(factlet) { 
    117         this.removeFactletSummary(); 
     208        console.log("MapController saw factletUnselect event:"); 
     209        if (this.selectedFeature) { 
     210            this.removeFactletSummary(); 
     211        } 
    118212        this.selectedFeature = null; 
    119213    }, 
    120214 
    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; 
    131238    }, 
    132239 
     
    149256        this.selectedFeature.popup.destroy(); 
    150257        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); 
    170258    } 
    171259}); 
  • trunk/microfacts/public/behaviour/lib/timelinecontroller.js

    r169 r172  
    4343        eventPainter._showBubble = this.onEventSelect.bind(this); 
    4444    }, 
     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); 
    4554 
    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); 
    4887        this.layout();  // Rename? 
    4988    }, 
    5089 
    51     addFactlets: function(factlets) { 
     90    addFactlets: function(factletsData) { 
    5291        var factletsJson = { 
    5392          'dateTimeFormat': 'iso8601', 
    54           'events' : factlets 
     93          'events' : factletsData 
    5594        }; 
    5695        this.eventSource.loadJSON(factletsJson, ''); 
     
    62101    }, 
    63102 
     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 
    64143    scrollEarliestLeft: function() { 
    65144        var d = this.eventSource.getEarliestDate(); 
     145        console.warn("Earliest date:"); 
     146        console.warn(d); 
    66147        this.band.setMinVisibleDate(d); 
    67148    }, 
    68149 
    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); 
    72156    }, 
    73157 
    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) { 
    94159        this.selectedFeature = null; 
    95160//    }, 
     
    97162//    onFeatureUnselect: function(feature) { 
    98163//        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); 
    118164    } 
    119165 
  • trunk/microfacts/templates/thread/read_geochrono.html

    r169 r172  
    1616 
    1717  <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> 
    2020    <div id="timeline" style="height:200px; width: 100%"></div> 
    2121