Blue Hawaii
a js solution
by ItsLeeOwen
HTML
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.min.js"></script>
<script src="http://code.angularjs.org/1.1.5/angular-resource.min.js"></script>
<script src="http://underscorejs.org/underscore-min.js"></script>
<a href="http://www.puzzlenode.com/puzzles/7-blue-hawaii">Blue Hawaii</a>
<hr />
<puzzlenode-bluehawaii>
<div ng-repeat="rental in rentals">{{rental.name}}: {{rental.quote}}</div>
</puzzlenode-bluehawaii>
JavaScript
/// DISCLAIMER: Browser Date implementations differ greatly between browsers
/// this was written for Chrome 27.0.1453.116;
/// mileage may vary depending on the browser.
angular.module('app', ['ngResource']).directive('puzzlenodeBluehawaii', function() { return {
restrict: 'E',
controller: function($scope, $http, $resource) {
var inputUrl = 'https://dl.dropboxusercontent.com/u/7218835/codernight/bluehawaii/input.txt',
rentalsUrl = 'https://dl.dropboxusercontent.com/u/7218835/codernight/bluehawaii/vacation_rentals.json';
// get input values & set on $scope
$http.get(inputUrl).success(function(response) {
var range = response.split(' - ');
var start = new Date(Date.parse(range[0])),
end = new Date(Date.parse(range[1]));
$scope.requested = {
start: {
date: start,
time: start.getTime(),
year: start.getFullYear()
}, end: {
date: end,
time: end.getTime(),
year: end.getFullYear()
}
}
});
// when $scope.requested is set then get & parse rental data
var unregisterWatch = $scope.$watch('requested', function(value) {
if (value) {
unregisterWatch();
$scope.rentals = $resource(rentalsUrl).query(function() {
_.each($scope.rentals, function(rental) {
// cost + cleaning
var cost = _.isUndefined(rental['cleaning fee'])
? 0
: parseInt(rental['cleaning fee'].substring(1));
// add seasonal nightly rates
if (rental.seasons) {
// season model seems clumbsy,...