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 =...