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 remote-control" 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> -->
    <button type="button" ng-click="arrive()" ng-disabled="!bus.canArrive()"...

CSS

.remote-control {
  border: double 3px blue;
}

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 = timeService;
      this.currentStationIndex = 0;
      this.prevStation = null;
      this.nextStation = null;
      this.currentStation = this.stations[this.currentStationIndex];
      this.currentStation.state = this.state;
      this.leftTime = null;

      function initStations(stations, startTime) {
       ...