Skip to content

Instantly share code, notes, and snippets.

@lucastorri
Created June 3, 2013 19:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lucastorri/5700876 to your computer and use it in GitHub Desktop.
Save lucastorri/5700876 to your computer and use it in GitHub Desktop.
<style>
tbody tr:hover {
background-color: rgb(236, 235, 225);
}
#map {
height: 700px;
width: 1200px;
margin-top: 20px
}
.full-width {
width: 1200px;
}
#controls {
width: 1200px;
}
#all-info {
margin-top: 30px;
}
.to-center {
margin: auto;
}
.highlighted {
background-color: rgb(255, 165, 0);
}
.highlighted a {
color: #fff;
font-weight: bold;
}
.highlighted a:hover {
color: #fff;
}
.sold {
background-color: #777;
}
#places-json {
width: 530px;
}
</style>
<link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.0/css/bootstrap-combined.min.css" rel="stylesheet">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.min.js"></script>
<script type="text/javascript" src="http://api.maps.nokia.com/2.2.1/jsl.js?with=all" charset="utf-8"></script>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.0/js/bootstrap.min.js"></script>
<script type="text/javascript">
nokia.Settings.set("appId", "L3N2QeDgpNS-FzGtQbJg");
nokia.Settings.set("authenticationToken", "YMLTqiLU83nBNQneCmTeqg");
resp = function() {
console.log(arguments);
}
var map;
var container;
var click = nokia.maps.dom.Page.browser.touch ? "tap" : "click";
var infoBubbles = new nokia.maps.map.component.InfoBubbles();
function addressToPosition(address, callback) {
nokia.places.search.manager.geoCode({
searchTerm: address,
onComplete: function(data) {
var pos = data.location.position;
callback({lat: pos.latitude, lon: pos.longitude, adr: data.name});
}
});
}
function Ctrl($scope, $timeout) {
var markers = [];
$scope.highlighted;
$scope.autoscroll = true;
$scope.start = function() {
(function(places) {
$scope.places = places;
$scope.original = angular.copy(places);
$scope.placeIds = Object.keys(places);
var processed = 0;
$scope.placeIds.forEach(function(k, i) {
var place = places[k];
place.id = k;
place.index = i+1;
place.extra.area = parseFloat(place.extra.area.replace(/\s*m²/, '').replace(',', '.'));
place.extra.rooms = parseFloat(place.extra.rooms.replace(',', '.'));
place.extra.rentCost = parseFloat(place.extra.rentCost.replace(/ EUR.*/, ''));
place.extra.totalCost = parseFloat(place.extra.totalCost.replace(/ EUR.*/, '').replace('=', ''));
addressToPosition(place.extra.address, function(pos) {
place.position = pos;
var marker = new nokia.maps.map.StandardMarker(
[pos.lat, pos.lon],
{ text: i+1 }
);
marker.addListener(click, function(evt) {
infoBubbles.openBubble(pos.adr +
'<div>' +
'<a target="_blank" href="'+$scope.url(k)+'"/>Site</a><p>'+
'Rent: ' + place.extra.rentCost + ', ' +
'Total: ' + place.extra.totalCost + ', ' +
'Rooms: ' + place.extra.rooms + ', ' +
'Area: ' + place.extra.area +
'</p></div>',
marker.coordinate);
$scope.highlight(place, true);
$scope.$apply()
});
place.marker = marker;
container.objects.add(marker);
$scope.center();
});
});
})({"61345026":{"attachments":{},"note":"","numberOfAttachments":0,"realEstate":{"id":61345026,"realEstateType":0,"title":"Großzügige helle Wohnugn mit Balkon"},"realEstateVisited":"false","realtorContacted":"false","extra":{"address":"Martin-Opitz-Str. 413357 Berlin, Wedding (Wedding)","area":"76,63 m²","floor":"6","floors":"6","rentCost":"452,12 EUR","rooms":"3,00","totalCost":"=747,35 EUR"}},"67151154":{"attachments":{},"note":"","numberOfAttachments":0,"realEstate":{"id":67151154,"realEstateType":0,"title":"++Nahe Alex++ Helle Neubauwohnung 4. OG++Moll-/Ecke Keibelstrasse++"},"realEstateVisited":"false","realtorContacted":"false","extra":{"address":"Mollstrasse 1a10178 Berlin, Mitte (Mitte)","area":"74,00 m²","floor":"4","floors":"11","rentCost":"619,00 EUR","rooms":"3,00","totalCost":"=799,00 EUR"}},"67981226":{"attachments":{},"note":"","numberOfAttachments":0,"realEstate":{"id":67981226,"realEstateType":0,"title":"2 Zimmer - Laminat - EBK - mod. Fenster - Top-to-Bottom-Fenster - ca. 93 m² - 799 € warm - PROVISION"},"realEstateVisited":"false","realtorContacted":"false","extra":{"address":"Gethsemanestraße 610437 Berlin, Prenzlauer Berg (Prenzlauer Berg)","area":"93,00 m²","floor":"","floors":"","rentCost":"649,00 EUR","rooms":"2,00","totalCost":"=799,00 EUR (weitere Kosten möglich)"}},"67981236":{"attachments":{},"note":"","numberOfAttachments":0,"realEstate":{"id":67981236,"realEstateType":0,"title":"2 Zimmer - Dachgeschoss - Laminat - EBK - mod. gefl. W-Bad - mod.Fenster - ca. 76 m² - 779 € warm -"},"realEstateVisited":"false","realtorContacted":"false","extra":{"address":"Gethsemanestraße 610437 Berlin, Prenzlauer Berg (Prenzlauer Berg)","area":"75,00 m²","floor":"","floors":"","rentCost":"650,00 EUR","rooms":"2,00","totalCost":"=779,00 EUR (weitere Kosten möglich)"}},"68006170":{"attachments":{},"note":"","numberOfAttachments":0,"realEstate":{"id":68006170,"realEstateType":0,"title":"! Wohnung zu vermieten !"},"realEstateVisited":"false","realtorContacted":"false","extra":{"address":"Danziger Straße 1410435 Berlin, Prenzlauer Berg (Prenzlauer Berg)","area":"72,00 m²","floor":"","floors":"","rentCost":"800,00 EUR","rooms":"3,00","totalCost":"=800,00 EUR (weitere Kosten möglich)"}},"68057861":{"attachments":{},"note":"","numberOfAttachments":0,"realEstate":{"id":68057861,"realEstateType":0,"title":"*Sehr schöne, sanierte 2,5 Zimmer Wohnung, nur an WG zu vermieten!* "},"realEstateVisited":"false","realtorContacted":"false","extra":{"address":"Rügener Strasse 113355 Berlin, Wedding (Wedding)","area":"85,75 m²","floor":"1","floors":"6","rentCost":"492,21 EUR","rooms":"2,50","totalCost":"=782,21 EUR"}},"68061502":{"attachments":{},"note":"","numberOfAttachments":0,"realEstate":{"id":68061502,"realEstateType":0,"title":"Top 2 Zi. in Prenzl' Berg - mod. gefl. Wannenbad - EBK - Laminat - Balkon - 675 € warm - Provision!"},"realEstateVisited":"false","realtorContacted":"false","extra":{"address":"10439BerlinDie vollständige Adresse der Immobilie erhalten Sie vom Anbieter.","area":"73,79 m²","floor":"2","floors":"5","rentCost":"562,00 EUR","rooms":"2,00","totalCost":"=675,00 EUR"}},"68114881":{"attachments":{},"note":"","numberOfAttachments":0,"realEstate":{"id":68114881,"realEstateType":0,"title":"Erstbezug nach Sanierung: 2 Zimmer Altbau Wohnung in der Eulerstraße. Dielen, Wannenbad, EBK."},"realEstateVisited":"false","realtorContacted":"false","extra":{"address":"Eulerstr. 1013357 Berlin, Wedding (Wedding)","area":"71,00 m²","floor":"1","floors":"4","rentCost":"640,00 EUR","rooms":"2,00","totalCost":"=785,00 EUR"}},"68125882":{"attachments":{},"note":"","numberOfAttachments":0,"realEstate":{"id":68125882,"realEstateType":0,"title":"2 Zimmer zwischen Prenzlberg und Pankow"},"realEstateVisited":"false","realtorContacted":"false","extra":{"address":"Hallandstraße 1213189 Berlin, Pankow (Pankow)","area":"66,58 m²","floor":"1","floors":"4","rentCost":"565,00 EUR","rooms":"2,00","totalCost":"=707,00 EUR"}},"68141296":{"attachments":{},"note":"","numberOfAttachments":0,"realEstate":{"id":68141296,"realEstateType":0,"title":"Erstbezug nach Sanierung am beliebten Helmholtzplatz"},"realEstateVisited":"false","realtorContacted":"false","extra":{"address":"Raumerstr. 3210437 Berlin, Prenzlauer Berg (Prenzlauer Berg)","area":"57,60 m²","floor":"3","floors":"5","rentCost":"690,00 EUR","rooms":"2,00","totalCost":"=799,00 EUR"}},"68167033":{"attachments":{},"note":"","numberOfAttachments":0,"realEstate":{"id":68167033,"realEstateType":0,"title":"Mitten im Kiez: Traumhaft, hell und ruhig"},"realEstateVisited":"false","realtorContacted":"false","extra":{"address":"Danziger Straße10407 Berlin, Prenzlauer Berg (Prenzlauer Berg)","area":"55,00 m²","floor":"4","floors":"5","rentCost":"400,00 EUR","rooms":"2,00","totalCost":"=537,00 EUR"}},"68190664":{"attachments":{},"note":"","numberOfAttachments":0,"realEstate":{"id":68190664,"realEstateType":0,"title":"Voll sanierte 2-Zimmer Wohnung mitten im Prenzlauer Berg zu vermieten"},"realEstateVisited":"false","realtorContacted":"false","extra":{"address":"Danziger Str. 610435 Berlin, Prenzlauer Berg (Prenzlauer Berg)","area":"70,28 m²","floor":"3","floors":"","rentCost":"598,00 EUR","rooms":"2,00","totalCost":"=789,00 EUR"}},"68192578":{"attachments":{},"note":"","numberOfAttachments":0,"realEstate":{"id":68192578,"realEstateType":0,"title":"BESICHTIGUNGEN SONNTAG 10.02.2013 13-16 UHR!!! Schöne helle Dachgeschosswohnung in Berlin-Wedding!"},"realEstateVisited":"false","realtorContacted":"false","extra":{"address":"Osloer Str. 1313359 Berlin, Wedding (Wedding)","area":"67,35 m²","floor":"5","floors":"5","rentCost":"539,00 EUR","rooms":"2,00","totalCost":"=686,82 EUR"}},"68250634":{"attachments":{},"note":"","numberOfAttachments":0,"realEstate":{"id":68250634,"realEstateType":0,"title":"Topsanierte, ruhige Altbau-Wohnung mit Balkon in begehrter Lage nahe Ringbahn!"},"realEstateVisited":"false","realtorContacted":"false","extra":{"address":"Meyerheimstrasse 210439 Berlin, Prenzlauer Berg (Prenzlauer Berg)","area":"63,00 m²","floor":"2","floors":"4","rentCost":"690,00 EUR","rooms":"3,00","totalCost":"=820,00 EUR"}},"68282542":{"attachments":{},"note":"","numberOfAttachments":0,"realEstate":{"id":68282542,"realEstateType":0,"title":"Grüne Stadt Nachmietersuche 2 Zimmer"},"realEstateVisited":"false","realtorContacted":"false","extra":{"address":"Margarete-Walter-Straße 1010407 Berlin, Prenzlauer Berg (Prenzlauer Berg)","area":"52,31 m²","floor":"1","floors":"","rentCost":"525,00 EUR","rooms":"2,00","totalCost":"=650,00 EUR"}},"68328932":{"attachments":{},"note":"","numberOfAttachments":0,"realEstate":{"id":68328932,"realEstateType":0,"title":"3 Zimmer im obersten Geschoss im Winskiez"},"realEstateVisited":"false","realtorContacted":"false","extra":{"address":"Marienburger Str. 3-410405 Berlin, Prenzlauer Berg (Prenzlauer Berg)","area":"75,03 m²","floor":"6","floors":"6","rentCost":"633,25 EUR","rooms":"3,00","totalCost":"=848,25 EUR"}},"68333084":{"attachments":{},"note":"","numberOfAttachments":0,"realEstate":{"id":68333084,"realEstateType":0,"title":"Nachmietersuche Maisonette 2 Zimmer"},"realEstateVisited":"false","realtorContacted":"false","extra":{"address":"Marienburger Straße 3010405 Berlin, Prenzlauer Berg (Prenzlauer Berg)","area":"66,39 m²","floor":"3","floors":"","rentCost":"625,00 EUR","rooms":"2,00","totalCost":"=785,00 EUR"}},"68346336":{"attachments":{},"note":"","numberOfAttachments":0,"realEstate":{"id":68346336,"realEstateType":0,"title":"Ecke Kollwitzstraße - mit Südbalkon!"},"realEstateVisited":"false","realtorContacted":"false","extra":{"address":"Metzer Straße10405 Berlin, Prenzlauer Berg (Prenzlauer Berg)","area":"61,00 m²","floor":"1","floors":"","rentCost":"598,00 EUR","rooms":"3,00","totalCost":"=798,00 EUR"}},"68353816":{"attachments":{},"note":"","numberOfAttachments":0,"realEstate":{"id":68353816,"realEstateType":0,"title":"2 ruhige Zimmer in der Marienburger Str."},"realEstateVisited":"false","realtorContacted":"false","extra":{"address":"Marienburger Str. 3-410405 Berlin, Prenzlauer Berg (Prenzlauer Berg)","area":"53,58 m²","floor":"1","floors":"6","rentCost":"452,21 EUR","rooms":"2,00","totalCost":"=617,21 EUR"}}});
}
$scope.url = function(pid) {
return 'http://www.immobilienscout24.de/expose/' + pid;
}
$scope.center = function() {
map.zoomTo(container.getBoundingBox());
}
$scope.clear = function(dontCenter) {
if ($scope.highlighted) {
container.objects.remove($scope.highlighted);
container.objects.add($scope.highlighted.original);
$scope.highlighted = undefined;
}
dontCenter || $scope.center();
}
$scope.highlight = function(place, dontCenter) {
$scope.clear(dontCenter);
container.objects.remove(place.marker);
var highlighted = new nokia.maps.map.StandardMarker(
[place.marker.coordinate.latitude, place.marker.coordinate.longitude],
{ text: place.marker.text, brush: { color: 'orange' } }
);
highlighted.index = place.index;
highlighted.original = place.marker;
container.objects.add(highlighted);
$scope.autoscroll && $("html, body").animate({ scrollTop: 0 }, "slow");
$scope.highlighted = highlighted;
}
$scope.remove = function(pid) {
var place = $scope.places[pid];
for (var i = 0; i < $scope.placeIds.length; i++) {
var p = $scope.places[$scope.placeIds[i]];
if (p.index == place.index) {
$scope.placeIds.splice(i, 1);
break;
}
}
container.objects.remove(place.marker);
delete $scope.places[pid];
delete $scope.original[pid];
}
}
$(function() {
map = new nokia.maps.map.Display(document.getElementById('map'), {
components:[
new nokia.maps.map.component.ViewControl(),
new nokia.maps.map.component.PublicTransport(),
new nokia.maps.map.component.TypeSelector(),
new nokia.maps.map.component.Behavior(),
new nokia.maps.map.component.ZoomBar(),
new nokia.maps.map.component.Overview(),
new nokia.maps.map.component.ScaleBar(),
new nokia.maps.map.component.ContextMenu(),
new nokia.maps.map.component.DistanceMeasurement(),
new nokia.maps.map.component.Traffic(),
infoBubbles]
});
container = new nokia.maps.map.Container();
map.objects.add(container);
});
</script>
<body ng-app ng-controller="Ctrl" ng-init="start()">
<div class="to-center row">
<div>
<div id="map" class="to-center full-width"></div>
<div id="controls" class="to-center text-right">
[&nbsp;
<a ng-click="autoscroll = !autoscroll">autoscroll {{ autoscroll && 'on' || 'off' }}</a>
&nbsp;|&nbsp;
<a ng-click="center()">center</a>
&nbsp;|&nbsp;
<a ng-click="clear()">clear</a>
&nbsp;]
</div>
</div>
<div id="all-info" class="to-center full-width text-center">
<table class="sortable table-condensed table-bordered to-center full-width">
<caption>Places</caption>
<thead>
<tr>
<th class="sorttable_numeric">#</th>
<th class="sorttable_nosort">Title</th>
<th class="sorttable_numeric">Rent(€)</th>
<th class="sorttable_numeric">Total(€)</th>
<th class="sorttable_numeric">Area(m²)</th>
<th class="sorttable_numeric">Rooms</th>
<th class="sorttable_nosort">Floors</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="pid in placeIds">
<td class="text-right" ng-class="{true:'highlighted', false:''}[highlighted.index == places[pid].index]">
<a ng-click="highlight(places[pid])">{{places[pid].index}}</a>
</td>
<td><a ng-href="{{url(pid)}}" ng-click="highlight(places[pid])" target="_blank">{{places[pid].realEstate.title}}</a></td>
<td>{{places[pid].extra.rentCost | currency}}</td>
<td>{{places[pid].extra.totalCost | currency}}</td>
<td>{{places[pid].extra.area | number:2}}</td>
<td>{{places[pid].extra.rooms | number:1}}</td>
<td>{{places[pid].extra.floor || '?'}} / {{places[pid].extra.floors || '?'}}</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="text-right">
<a href="#serialized-places" role="button" class="btn" data-toggle="modal">+</a>
</div>
<!-- Modal -->
<div id="serialized-places" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="modalTitle" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="modalTitle">Serialized places</h3>
</div>
<div class="modal-body">
<textarea id="places-json" rows="30">{{original}}</textarea>
</div>
<div class="modal-footer">
</div>
</div>
<body>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment