Bus Driving
by Avi Algaly
HTML
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.17/angular.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/moment.js/2.6.0/moment.min.js"></script>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
<link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/bootstrap-rtl/3.1.1/css/bootstrap-rtl.min.css">
<script src="http://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.min.js"></script>
<div class="container">
<!-- <div class="input-prepend" style="text-align:left">
<div class="btn-group">
<button class="btn dropdown-toggle" data-toggle="dropdown">הצג מצב עבור <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li>אלעד אלגאלי</li>
<li>עדן אלגאלי</li>
</ul>
</div> -->
<div class="panel panel-default" ng-controller="timerController">
<div class="panel-heading">טיימר גלובלי</div>
<div class="panel-body">
<div class="btn-group">
<button type="button" class="btn btn-default" ng-click="minus(10)">-10</button>
<button type="button" class="btn btn-default" ng-click="minus(1)">-1</button>
<button type="button" class="btn btn-default" ng-click="reset()">איפוס</button>
<button type="button" class="btn btn-default" ng-click="plus(1)">+1</button>
<button type="button" class="btn btn-default" ng-click="plus(10)">+10</button>
</div>
<h3>זמן נוכחי: <span class="label label-default">{{model.currentTime | date:"HH:mm:ss"}}</span></h3>
</div>
</div>
<div ng-controller="driveController">
<button type="button" ng-click="drive()" ng-disabled="!bus.canDrive()" class="btn btn-warning">התחל</button>
<!-- <button type="button" ng-click="addvanceTime()" class="btn btn-warning">הרץ זמן</button> -->
...
JavaScript
var app = angular.module('driveApp', []);
app.constant("State", {
DRIVING: "בדרך",
STOP: "עצר",
LEFT: "עזב",
WAIT: "בהמתנה"
});
app.service("GlobalTimer", function () {
var currentTime = moment();
function reset() {
currentTime.hour(0)
.minute(0)
.second(0)
.millisecond(0);
}
function add(minutes) {
if (currentTime !== null) {
currentTime.add(minutes, "minutes");
}
}
function sub(minutes) {
if (currentTime !== null) {
currentTime.subtract(minutes, "minutes");
}
}
reset();
return {
reset: reset,
add: add,
sub: sub,
getCurrentTime: function () {
return moment(currentTime).toDate();
}
};
});
app.service("StationService", function () {
var stations = [{
name: "ישעיהו הנביא 22",
timeFromPrevStop: 0
}, {
name: "שמואל הנביא 3",
timeFromPrevStop: 10
}, {
name: "הנביאים 11",
timeFromPrevStop: 15
}, {
name: "עמק האלה 1",
timeFromPrevStop: 5
}, {
name: "ישיבת אור התורה",
timeFromPrevStop: 5
}];
return {
getStations: function () {
return stations;
}
}
});
app.service("BusService", function (GlobalTimer, State) {
var Bus = (function () {
function Bus(path, timeService, State) {
// path -- array of stations
this.stations = _.map(path, function (pathElement) {
return {
name: pathElement.name,
timeFromPrevStop: pathElement.timeFromPrevStop,
timeArrived: null,
timeLeft: null,
eta: null,
pta: null,
delay: null,
state: null
};
});
this.state = State.STOP;
this.timeService =...