AngularJS Example

by Urigo

HTML

<div ng-app>
    <div ng-controller="Ctrl">
        <ul id="calendar">
            <li ng-repeat="year in years" class="years">
                <h1>{{year.name}}</h1>
                <ul class="months">
                    <li ng-repeat="month in year.months">
                        <h1>{{month.name}}{{month.number}}</h1>
                        <ul class="days">
                            <li ng-repeat="day in month.days">
                                <h2>{{day.date}}</h2>
                                <h4>{{day.name}}</h4>
                            </li>
                        </ul>
                    </li>
                </ul>
            </li>
        </ul>
    </div>
</div>

CSS

</style> <!-- Ugly Hack due to jsFiddle issue: http://goo.gl/BUfGZ --> 
<script src="http://docs.angularjs.org/angular-1.0.1.min.js"></script>
<style>
.ng-invalid { border: 1px solid red; }

JavaScript

Date.prototype.getMonthName = function() {
        var m = ['ינואר','פברואר','מרץ','אפריל','מאי','יוני','יולי',
            'אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'];
        return m[this.getMonth()];
    };

    Date.prototype.getDayName = function() {
        var m = ['יום א','יום ב','יום ג','יום ד','יום ה','יום ו','יום ש'];
        return m[this.getDay()];
    };



    function Ctrl($scope) {

        Date.prototype.addDays = function(days) {
            var dat = new Date(this.valueOf());
            dat.setDate(dat.getDate() + days);
            return dat;
        }
            
    function toObject(arr) {
        var rv = {};
        for (var i = 0; i < arr.length; ++i)
            if (arr[i] !== undefined) rv[String.fromCharCode(94 + i)] = arr[i];
        return rv;
    }            

        $scope.getDates = function(startDate, stopDate) {
            var years = {};
            var currentDate = startDate;
            var currentYear = {};
            currentYear.name = currentDate.getFullYear();
            years[currentYear.name] = currentYear;

            var months = [];
            var currentMonth = {};
            currentMonth.number = Number(currentDate.getMonth()+1);
            currentMonth.name = currentDate.getMonthName();
            months.push(currentMonth);
            years[currentYear.name]['months'] = toObject(months);

            var days = [];

            while (currentDate <= stopDate) {
                if (currentDate.getFullYear() != currentYear.name)
                {
                    months = [];
                    currentYear = {};
                    currentYear.name = currentDate.getFullYear();
                    years[currentYear.name] = currentYear;

                }

                if ((currentDate.getMonth()+1) != currentMonth.number)
                {
                    currentMonth = {};
                    days = [];
                    currentMonth.number = Number(currentDate.getMonth()+1);
       ...