kea-rails 2.0.0.pre.alpha5 → 2.0.0.pre.alpha6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/javascripts/kea/bindings/date_picker.js +33 -0
- data/app/assets/javascripts/kea/extenders/date.js +10 -0
- data/app/assets/javascripts/kea/kea_dependencies.js +1 -0
- data/app/assets/stylesheets/kea/kea.css.sass +1 -1
- data/lib/kea-rails/version.rb +1 -1
- data/vendor/assets/components/pikaday/CHANGELOG.md +68 -0
- data/vendor/assets/components/pikaday/LICENSE +36 -0
- data/vendor/assets/components/pikaday/README.md +321 -0
- data/vendor/assets/components/pikaday/bower.json +29 -0
- data/vendor/assets/components/pikaday/component.json +17 -0
- data/vendor/assets/{stylesheets → components/pikaday/css}/pikaday.css +39 -7
- data/vendor/assets/components/pikaday/css/site.css +42 -0
- data/vendor/assets/components/pikaday/examples/amd.html +50 -0
- data/vendor/assets/components/pikaday/examples/bound-container.html +52 -0
- data/vendor/assets/components/pikaday/examples/calendars.html +57 -0
- data/vendor/assets/components/pikaday/examples/container.html +52 -0
- data/vendor/assets/components/pikaday/examples/jquery-amd.html +54 -0
- data/vendor/assets/components/pikaday/examples/jquery.html +46 -0
- data/vendor/assets/components/pikaday/examples/moment.html +53 -0
- data/vendor/assets/components/pikaday/examples/positions.html +106 -0
- data/vendor/assets/components/pikaday/examples/trigger.html +46 -0
- data/vendor/assets/components/pikaday/examples/weeknumbers.html +41 -0
- data/vendor/assets/components/pikaday/index.html +43 -0
- data/vendor/assets/components/pikaday/package.json +45 -0
- data/vendor/assets/{javascripts → components/pikaday}/pikaday.js +185 -52
- data/vendor/assets/components/pikaday/plugins/pikaday.jquery.js +52 -0
- data/vendor/assets/components/pikaday/scss/pikaday.scss +199 -0
- data/vendor/assets/components/pikaday/tests/methods.js +26 -0
- data/vendor/assets/components/pikaday/tests/module.js +24 -0
- metadata +27 -4
| @@ -0,0 +1,45 @@ | |
| 1 | 
            +
            {
         | 
| 2 | 
            +
              "name": "pikaday",
         | 
| 3 | 
            +
              "version": "1.3.2",
         | 
| 4 | 
            +
              "description": "A refreshing JavaScript Datepicker — lightweight, no dependencies, modular CSS",
         | 
| 5 | 
            +
              "keywords": [
         | 
| 6 | 
            +
                "datepicker",
         | 
| 7 | 
            +
                "calendar",
         | 
| 8 | 
            +
                "date"
         | 
| 9 | 
            +
              ],
         | 
| 10 | 
            +
              "homepage": "http://dbushell.github.io/Pikaday/",
         | 
| 11 | 
            +
              "bugs": "https://github.com/dbushell/Pikaday/issues",
         | 
| 12 | 
            +
              "licenses": [
         | 
| 13 | 
            +
                {
         | 
| 14 | 
            +
                  "type": "BSD",
         | 
| 15 | 
            +
                  "url": "http://opensource.org/licenses/BSD-3-Clause"
         | 
| 16 | 
            +
                },
         | 
| 17 | 
            +
                {
         | 
| 18 | 
            +
                  "type": "MIT",
         | 
| 19 | 
            +
                  "url": "http://opensource.org/licenses/MIT"
         | 
| 20 | 
            +
                }
         | 
| 21 | 
            +
              ],
         | 
| 22 | 
            +
              "main": "pikaday.js",
         | 
| 23 | 
            +
              "repository": {
         | 
| 24 | 
            +
                "type": "git",
         | 
| 25 | 
            +
                "url": "https://github.com/dbushell/Pikaday.git"
         | 
| 26 | 
            +
              },
         | 
| 27 | 
            +
              "optionalDependencies": {
         | 
| 28 | 
            +
                "moment": "2.x"
         | 
| 29 | 
            +
              },
         | 
| 30 | 
            +
              "devDependencies": {
         | 
| 31 | 
            +
                "mocha": "~1.18.2",
         | 
| 32 | 
            +
                "expect.js": "^0.3.1"
         | 
| 33 | 
            +
              },
         | 
| 34 | 
            +
              "testling": {
         | 
| 35 | 
            +
                "harness": "mocha",
         | 
| 36 | 
            +
                "files": "tests/*.js",
         | 
| 37 | 
            +
                "browsers": [
         | 
| 38 | 
            +
                  "ie/7..latest",
         | 
| 39 | 
            +
                  "chrome/latest",
         | 
| 40 | 
            +
                  "firefox/3.6", "firefox/latest",
         | 
| 41 | 
            +
                  "safari/latest",
         | 
| 42 | 
            +
                  "opera/latest"
         | 
| 43 | 
            +
                ]
         | 
| 44 | 
            +
              }
         | 
| 45 | 
            +
            }
         | 
| @@ -1,24 +1,29 @@ | |
| 1 1 | 
             
            /*!
         | 
| 2 2 | 
             
             * Pikaday
         | 
| 3 3 | 
             
             *
         | 
| 4 | 
            -
             * Copyright ©  | 
| 4 | 
            +
             * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/dbushell/Pikaday
         | 
| 5 5 | 
             
             */
         | 
| 6 6 |  | 
| 7 7 | 
             
            (function (root, factory)
         | 
| 8 8 | 
             
            {
         | 
| 9 9 | 
             
                'use strict';
         | 
| 10 10 |  | 
| 11 | 
            -
                 | 
| 11 | 
            +
                var moment;
         | 
| 12 | 
            +
                if (typeof exports === 'object') {
         | 
| 13 | 
            +
                    // CommonJS module
         | 
| 14 | 
            +
                    // Load moment.js as an optional dependency
         | 
| 15 | 
            +
                    try { moment = require('moment'); } catch (e) {}
         | 
| 16 | 
            +
                    module.exports = factory(moment);
         | 
| 17 | 
            +
                } else if (typeof define === 'function' && define.amd) {
         | 
| 12 18 | 
             
                    // AMD. Register as an anonymous module.
         | 
| 13 19 | 
             
                    define(function (req)
         | 
| 14 20 | 
             
                    {
         | 
| 15 21 | 
             
                        // Load moment.js as an optional dependency
         | 
| 16 22 | 
             
                        var id = 'moment';
         | 
| 17 | 
            -
                         | 
| 18 | 
            -
                        return factory(moment | 
| 23 | 
            +
                        try { moment = req(id); } catch (e) {}
         | 
| 24 | 
            +
                        return factory(moment);
         | 
| 19 25 | 
             
                    });
         | 
| 20 26 | 
             
                } else {
         | 
| 21 | 
            -
                    // Browser global
         | 
| 22 27 | 
             
                    root.Pikaday = factory(root.moment);
         | 
| 23 28 | 
             
                }
         | 
| 24 29 | 
             
            }(this, function (moment)
         | 
| @@ -102,6 +107,12 @@ | |
| 102 107 | 
             
                    return (/Date/).test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());
         | 
| 103 108 | 
             
                },
         | 
| 104 109 |  | 
| 110 | 
            +
                isWeekend = function(date)
         | 
| 111 | 
            +
                {
         | 
| 112 | 
            +
                    var day = date.getDay();
         | 
| 113 | 
            +
                    return day === 0 || day === 6;
         | 
| 114 | 
            +
                },
         | 
| 115 | 
            +
             | 
| 105 116 | 
             
                isLeapYear = function(year)
         | 
| 106 117 | 
             
                {
         | 
| 107 118 | 
             
                    // solution by Matti Virkkunen: http://stackoverflow.com/a/4881951
         | 
| @@ -129,7 +140,7 @@ | |
| 129 140 | 
             
                    var prop, hasProp;
         | 
| 130 141 | 
             
                    for (prop in from) {
         | 
| 131 142 | 
             
                        hasProp = to[prop] !== undefined;
         | 
| 132 | 
            -
                        if (hasProp && typeof from[prop] === 'object' && from[prop].nodeName === undefined) {
         | 
| 143 | 
            +
                        if (hasProp && typeof from[prop] === 'object' && from[prop] !== null && from[prop].nodeName === undefined) {
         | 
| 133 144 | 
             
                            if (isDate(from[prop])) {
         | 
| 134 145 | 
             
                                if (overwrite) {
         | 
| 135 146 | 
             
                                    to[prop] = new Date(from[prop].getTime());
         | 
| @@ -149,6 +160,17 @@ | |
| 149 160 | 
             
                    return to;
         | 
| 150 161 | 
             
                },
         | 
| 151 162 |  | 
| 163 | 
            +
                adjustCalendar = function(calendar) {
         | 
| 164 | 
            +
                    if (calendar.month < 0) {
         | 
| 165 | 
            +
                        calendar.year -= Math.ceil(Math.abs(calendar.month)/12);
         | 
| 166 | 
            +
                        calendar.month += 12;
         | 
| 167 | 
            +
                    }
         | 
| 168 | 
            +
                    if (calendar.month > 11) {
         | 
| 169 | 
            +
                        calendar.year += Math.floor(Math.abs(calendar.month)/12);
         | 
| 170 | 
            +
                        calendar.month -= 12;
         | 
| 171 | 
            +
                    }
         | 
| 172 | 
            +
                    return calendar;
         | 
| 173 | 
            +
                },
         | 
| 152 174 |  | 
| 153 175 | 
             
                /**
         | 
| 154 176 | 
             
                 * defaults and localisation
         | 
| @@ -161,6 +183,13 @@ | |
| 161 183 | 
             
                    // automatically show/hide the picker on `field` focus (default `true` if `field` is set)
         | 
| 162 184 | 
             
                    bound: undefined,
         | 
| 163 185 |  | 
| 186 | 
            +
                    // position of the datepicker, relative to the field (default to bottom & left)
         | 
| 187 | 
            +
                    // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position)
         | 
| 188 | 
            +
                    position: 'bottom left',
         | 
| 189 | 
            +
             | 
| 190 | 
            +
                    // automatically fit in the viewport even if it means repositioning from the position option
         | 
| 191 | 
            +
                    reposition: true,
         | 
| 192 | 
            +
             | 
| 164 193 | 
             
                    // the default output format for `.toString()` and `field` value
         | 
| 165 194 | 
             
                    format: 'YYYY-MM-DD',
         | 
| 166 195 |  | 
| @@ -181,6 +210,9 @@ | |
| 181 210 | 
             
                    // number of years either side, or array of upper/lower range
         | 
| 182 211 | 
             
                    yearRange: 10,
         | 
| 183 212 |  | 
| 213 | 
            +
                    // show week numbers at head of row
         | 
| 214 | 
            +
                    showWeekNumber: false,
         | 
| 215 | 
            +
             | 
| 184 216 | 
             
                    // used internally (don't config outside)
         | 
| 185 217 | 
             
                    minYear: 0,
         | 
| 186 218 | 
             
                    maxYear: 9999,
         | 
| @@ -195,9 +227,16 @@ | |
| 195 227 | 
             
                    // Render the month after year in the calendar title
         | 
| 196 228 | 
             
                    showMonthAfterYear: false,
         | 
| 197 229 |  | 
| 198 | 
            -
                    // how many months are visible | 
| 230 | 
            +
                    // how many months are visible
         | 
| 199 231 | 
             
                    numberOfMonths: 1,
         | 
| 200 232 |  | 
| 233 | 
            +
                    // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`)
         | 
| 234 | 
            +
                    // only used for the first display or when a selected date is not visible
         | 
| 235 | 
            +
                    mainCalendar: 'left',
         | 
| 236 | 
            +
             | 
| 237 | 
            +
                    // Specify a DOM element to render the calendar in
         | 
| 238 | 
            +
                    container: undefined,
         | 
| 239 | 
            +
             | 
| 201 240 | 
             
                    // internationalization
         | 
| 202 241 | 
             
                    i18n: {
         | 
| 203 242 | 
             
                        previousMonth : 'Previous Month',
         | 
| @@ -227,7 +266,7 @@ | |
| 227 266 | 
             
                    return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day];
         | 
| 228 267 | 
             
                },
         | 
| 229 268 |  | 
| 230 | 
            -
                renderDay = function( | 
| 269 | 
            +
                renderDay = function(d, m, y, isSelected, isToday, isDisabled, isEmpty)
         | 
| 231 270 | 
             
                {
         | 
| 232 271 | 
             
                    if (isEmpty) {
         | 
| 233 272 | 
             
                        return '<td class="is-empty"></td>';
         | 
| @@ -242,7 +281,19 @@ | |
| 242 281 | 
             
                    if (isSelected) {
         | 
| 243 282 | 
             
                        arr.push('is-selected');
         | 
| 244 283 | 
             
                    }
         | 
| 245 | 
            -
                    return '<td data-day="' +  | 
| 284 | 
            +
                    return '<td data-day="' + d + '" class="' + arr.join(' ') + '">' +
         | 
| 285 | 
            +
                             '<button class="pika-button pika-day" type="button" ' +
         | 
| 286 | 
            +
                                'data-pika-year="' + y + '" data-pika-month="' + m + '" data-pika-day="' + d + '">' +
         | 
| 287 | 
            +
                                    d +
         | 
| 288 | 
            +
                             '</button>' +
         | 
| 289 | 
            +
                           '</td>';
         | 
| 290 | 
            +
                },
         | 
| 291 | 
            +
             | 
| 292 | 
            +
                renderWeek = function (d, m, y) {
         | 
| 293 | 
            +
                    // Lifted from http://javascript.about.com/library/blweekyear.htm, lightly modified.
         | 
| 294 | 
            +
                    var onejan = new Date(y, 0, 1),
         | 
| 295 | 
            +
                        weekNum = Math.ceil((((new Date(y, m, d) - onejan) / 86400000) + onejan.getDay()+1)/7);
         | 
| 296 | 
            +
                    return '<td class="pika-week">' + weekNum + '</td>';
         | 
| 246 297 | 
             
                },
         | 
| 247 298 |  | 
| 248 299 | 
             
                renderRow = function(days, isRTL)
         | 
| @@ -258,18 +309,19 @@ | |
| 258 309 | 
             
                renderHead = function(opts)
         | 
| 259 310 | 
             
                {
         | 
| 260 311 | 
             
                    var i, arr = [];
         | 
| 312 | 
            +
                    if (opts.showWeekNumber) {
         | 
| 313 | 
            +
                        arr.push('<th></th>');
         | 
| 314 | 
            +
                    }
         | 
| 261 315 | 
             
                    for (i = 0; i < 7; i++) {
         | 
| 262 316 | 
             
                        arr.push('<th scope="col"><abbr title="' + renderDayName(opts, i) + '">' + renderDayName(opts, i, true) + '</abbr></th>');
         | 
| 263 317 | 
             
                    }
         | 
| 264 318 | 
             
                    return '<thead>' + (opts.isRTL ? arr.reverse() : arr).join('') + '</thead>';
         | 
| 265 319 | 
             
                },
         | 
| 266 320 |  | 
| 267 | 
            -
                renderTitle = function(instance)
         | 
| 321 | 
            +
                renderTitle = function(instance, c, year, month, refYear)
         | 
| 268 322 | 
             
                {
         | 
| 269 323 | 
             
                    var i, j, arr,
         | 
| 270 324 | 
             
                        opts = instance._o,
         | 
| 271 | 
            -
                        month = instance._m,
         | 
| 272 | 
            -
                        year  = instance._y,
         | 
| 273 325 | 
             
                        isMinYear = year === opts.minYear,
         | 
| 274 326 | 
             
                        isMaxYear = year === opts.maxYear,
         | 
| 275 327 | 
             
                        html = '<div class="pika-title">',
         | 
| @@ -279,7 +331,7 @@ | |
| 279 331 | 
             
                        next = true;
         | 
| 280 332 |  | 
| 281 333 | 
             
                    for (arr = [], i = 0; i < 12; i++) {
         | 
| 282 | 
            -
                        arr.push('<option value="' + i + '"' +
         | 
| 334 | 
            +
                        arr.push('<option value="' + (year === refYear ? i - c : 12 + i - c) + '"' +
         | 
| 283 335 | 
             
                            (i === month ? ' selected': '') +
         | 
| 284 336 | 
             
                            ((isMinYear && i < opts.minMonth) || (isMaxYear && i > opts.maxMonth) ? 'disabled' : '') + '>' +
         | 
| 285 337 | 
             
                            opts.i18n.months[i] + '</option>');
         | 
| @@ -315,8 +367,12 @@ | |
| 315 367 | 
             
                        next = false;
         | 
| 316 368 | 
             
                    }
         | 
| 317 369 |  | 
| 318 | 
            -
                     | 
| 319 | 
            -
             | 
| 370 | 
            +
                    if (c === 0) {
         | 
| 371 | 
            +
                        html += '<button class="pika-prev' + (prev ? '' : ' is-disabled') + '" type="button">' + opts.i18n.previousMonth + '</button>';
         | 
| 372 | 
            +
                    }
         | 
| 373 | 
            +
                    if (c === (instance._o.numberOfMonths - 1) ) {
         | 
| 374 | 
            +
                        html += '<button class="pika-next' + (next ? '' : ' is-disabled') + '" type="button">' + opts.i18n.nextMonth + '</button>';
         | 
| 375 | 
            +
                    }
         | 
| 320 376 |  | 
| 321 377 | 
             
                    return html += '</div>';
         | 
| 322 378 | 
             
                },
         | 
| @@ -348,10 +404,13 @@ | |
| 348 404 |  | 
| 349 405 | 
             
                        if (!hasClass(target, 'is-disabled')) {
         | 
| 350 406 | 
             
                            if (hasClass(target, 'pika-button') && !hasClass(target, 'is-empty')) {
         | 
| 351 | 
            -
                                self.setDate(new Date( | 
| 407 | 
            +
                                self.setDate(new Date(target.getAttribute('data-pika-year'), target.getAttribute('data-pika-month'), target.getAttribute('data-pika-day')));
         | 
| 352 408 | 
             
                                if (opts.bound) {
         | 
| 353 409 | 
             
                                    sto(function() {
         | 
| 354 410 | 
             
                                        self.hide();
         | 
| 411 | 
            +
                                        if (opts.field) {
         | 
| 412 | 
            +
                                            opts.field.blur();
         | 
| 413 | 
            +
                                        }
         | 
| 355 414 | 
             
                                    }, 100);
         | 
| 356 415 | 
             
                                }
         | 
| 357 416 | 
             
                                return;
         | 
| @@ -422,6 +481,15 @@ | |
| 422 481 |  | 
| 423 482 | 
             
                    self._onInputBlur = function()
         | 
| 424 483 | 
             
                    {
         | 
| 484 | 
            +
                        // IE allows pika div to gain focus; catch blur the input field
         | 
| 485 | 
            +
                        var pEl = document.activeElement;
         | 
| 486 | 
            +
                        do {
         | 
| 487 | 
            +
                            if (hasClass(pEl, 'pika-single')) {
         | 
| 488 | 
            +
                                return;
         | 
| 489 | 
            +
                            }
         | 
| 490 | 
            +
                        }
         | 
| 491 | 
            +
                        while ((pEl = pEl.parentNode));
         | 
| 492 | 
            +
                        
         | 
| 425 493 | 
             
                        if (!self._c) {
         | 
| 426 494 | 
             
                            self._b = sto(function() {
         | 
| 427 495 | 
             
                                self.hide();
         | 
| @@ -445,12 +513,12 @@ | |
| 445 513 | 
             
                            }
         | 
| 446 514 | 
             
                        }
         | 
| 447 515 | 
             
                        do {
         | 
| 448 | 
            -
                            if (hasClass(pEl, 'pika-single')) {
         | 
| 516 | 
            +
                            if (hasClass(pEl, 'pika-single') || pEl === opts.trigger) {
         | 
| 449 517 | 
             
                                return;
         | 
| 450 518 | 
             
                            }
         | 
| 451 519 | 
             
                        }
         | 
| 452 520 | 
             
                        while ((pEl = pEl.parentNode));
         | 
| 453 | 
            -
                        if (self._v && target !== opts.trigger) {
         | 
| 521 | 
            +
                        if (self._v && target !== opts.trigger && pEl !== opts.trigger) {
         | 
| 454 522 | 
             
                            self.hide();
         | 
| 455 523 | 
             
                        }
         | 
| 456 524 | 
             
                    };
         | 
| @@ -462,7 +530,9 @@ | |
| 462 530 | 
             
                    addEvent(self.el, 'change', self._onChange);
         | 
| 463 531 |  | 
| 464 532 | 
             
                    if (opts.field) {
         | 
| 465 | 
            -
                        if (opts. | 
| 533 | 
            +
                        if (opts.container) {
         | 
| 534 | 
            +
                            opts.container.appendChild(self.el);
         | 
| 535 | 
            +
                        } else if (opts.bound) {
         | 
| 466 536 | 
             
                            document.body.appendChild(self.el);
         | 
| 467 537 | 
             
                        } else {
         | 
| 468 538 | 
             
                            opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling);
         | 
| @@ -500,7 +570,6 @@ | |
| 500 570 | 
             
                    } else {
         | 
| 501 571 | 
             
                        this.show();
         | 
| 502 572 | 
             
                    }
         | 
| 503 | 
            -
             | 
| 504 573 | 
             
                };
         | 
| 505 574 |  | 
| 506 575 |  | 
| @@ -529,6 +598,10 @@ | |
| 529 598 |  | 
| 530 599 | 
             
                        opts.trigger = (opts.trigger && opts.trigger.nodeName) ? opts.trigger : opts.field;
         | 
| 531 600 |  | 
| 601 | 
            +
                        opts.disableWeekends = !!opts.disableWeekends;
         | 
| 602 | 
            +
             | 
| 603 | 
            +
                        opts.disableDayFn = (typeof opts.disableDayFn) == "function" ? opts.disableDayFn : null;
         | 
| 604 | 
            +
             | 
| 532 605 | 
             
                        var nom = parseInt(opts.numberOfMonths, 10) || 1;
         | 
| 533 606 | 
             
                        opts.numberOfMonths = nom > 4 ? 4 : nom;
         | 
| 534 607 |  | 
| @@ -585,10 +658,10 @@ | |
| 585 658 | 
             
                    /**
         | 
| 586 659 | 
             
                     * set the current selection from a Moment.js object (if available)
         | 
| 587 660 | 
             
                     */
         | 
| 588 | 
            -
                    setMoment: function(date)
         | 
| 661 | 
            +
                    setMoment: function(date, preventOnSelect)
         | 
| 589 662 | 
             
                    {
         | 
| 590 663 | 
             
                        if (hasMoment && moment.isMoment(date)) {
         | 
| 591 | 
            -
                            this.setDate(date.toDate());
         | 
| 664 | 
            +
                            this.setDate(date.toDate(), preventOnSelect);
         | 
| 592 665 | 
             
                        }
         | 
| 593 666 | 
             
                    },
         | 
| 594 667 |  | 
| @@ -607,6 +680,12 @@ | |
| 607 680 | 
             
                    {
         | 
| 608 681 | 
             
                        if (!date) {
         | 
| 609 682 | 
             
                            this._d = null;
         | 
| 683 | 
            +
             | 
| 684 | 
            +
                            if (this._o.field) {
         | 
| 685 | 
            +
                                this._o.field.value = '';
         | 
| 686 | 
            +
                                fireEvent(this._o.field, 'change', { firedBy: this });
         | 
| 687 | 
            +
                            }
         | 
| 688 | 
            +
             | 
| 610 689 | 
             
                            return this.draw();
         | 
| 611 690 | 
             
                        }
         | 
| 612 691 | 
             
                        if (typeof date === 'string') {
         | 
| @@ -643,11 +722,43 @@ | |
| 643 722 | 
             
                     */
         | 
| 644 723 | 
             
                    gotoDate: function(date)
         | 
| 645 724 | 
             
                    {
         | 
| 725 | 
            +
                        var newCalendar = true;
         | 
| 726 | 
            +
             | 
| 646 727 | 
             
                        if (!isDate(date)) {
         | 
| 647 728 | 
             
                            return;
         | 
| 648 729 | 
             
                        }
         | 
| 649 | 
            -
             | 
| 650 | 
            -
                        this. | 
| 730 | 
            +
             | 
| 731 | 
            +
                        if (this.calendars) {
         | 
| 732 | 
            +
                            var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1),
         | 
| 733 | 
            +
                                lastVisibleDate = new Date(this.calendars[this.calendars.length-1].year, this.calendars[this.calendars.length-1].month, 1),
         | 
| 734 | 
            +
                                visibleDate = date.getTime();
         | 
| 735 | 
            +
                            // get the end of the month
         | 
| 736 | 
            +
                            lastVisibleDate.setMonth(lastVisibleDate.getMonth()+1);
         | 
| 737 | 
            +
                            lastVisibleDate.setDate(lastVisibleDate.getDate()-1);
         | 
| 738 | 
            +
                            newCalendar = (visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate);
         | 
| 739 | 
            +
                        }
         | 
| 740 | 
            +
             | 
| 741 | 
            +
                        if (newCalendar) {
         | 
| 742 | 
            +
                            this.calendars = [{
         | 
| 743 | 
            +
                                month: date.getMonth(),
         | 
| 744 | 
            +
                                year: date.getFullYear()
         | 
| 745 | 
            +
                            }];
         | 
| 746 | 
            +
                            if (this._o.mainCalendar === 'right') {
         | 
| 747 | 
            +
                                this.calendars[0].month += 1 - this._o.numberOfMonths;
         | 
| 748 | 
            +
                            }
         | 
| 749 | 
            +
                        }
         | 
| 750 | 
            +
             | 
| 751 | 
            +
                        this.adjustCalendars();
         | 
| 752 | 
            +
                    },
         | 
| 753 | 
            +
             | 
| 754 | 
            +
                    adjustCalendars: function() {
         | 
| 755 | 
            +
                        this.calendars[0] = adjustCalendar(this.calendars[0]);
         | 
| 756 | 
            +
                        for (var c = 1; c < this._o.numberOfMonths; c++) {
         | 
| 757 | 
            +
                            this.calendars[c] = adjustCalendar({
         | 
| 758 | 
            +
                                month: this.calendars[0].month + c,
         | 
| 759 | 
            +
                                year: this.calendars[0].year
         | 
| 760 | 
            +
                            });
         | 
| 761 | 
            +
                        }
         | 
| 651 762 | 
             
                        this.draw();
         | 
| 652 763 | 
             
                    },
         | 
| 653 764 |  | 
| @@ -661,28 +772,22 @@ | |
| 661 772 | 
             
                     */
         | 
| 662 773 | 
             
                    gotoMonth: function(month)
         | 
| 663 774 | 
             
                    {
         | 
| 664 | 
            -
                        if (!isNaN( | 
| 665 | 
            -
                            this. | 
| 666 | 
            -
                            this. | 
| 775 | 
            +
                        if (!isNaN(month)) {
         | 
| 776 | 
            +
                            this.calendars[0].month = parseInt(month, 10);
         | 
| 777 | 
            +
                            this.adjustCalendars();
         | 
| 667 778 | 
             
                        }
         | 
| 668 779 | 
             
                    },
         | 
| 669 780 |  | 
| 670 781 | 
             
                    nextMonth: function()
         | 
| 671 782 | 
             
                    {
         | 
| 672 | 
            -
                         | 
| 673 | 
            -
             | 
| 674 | 
            -
                            this._y++;
         | 
| 675 | 
            -
                        }
         | 
| 676 | 
            -
                        this.draw();
         | 
| 783 | 
            +
                        this.calendars[0].month++;
         | 
| 784 | 
            +
                        this.adjustCalendars();
         | 
| 677 785 | 
             
                    },
         | 
| 678 786 |  | 
| 679 787 | 
             
                    prevMonth: function()
         | 
| 680 788 | 
             
                    {
         | 
| 681 | 
            -
                         | 
| 682 | 
            -
             | 
| 683 | 
            -
                            this._y--;
         | 
| 684 | 
            -
                        }
         | 
| 685 | 
            -
                        this.draw();
         | 
| 789 | 
            +
                        this.calendars[0].month--;
         | 
| 790 | 
            +
                        this.adjustCalendars();
         | 
| 686 791 | 
             
                    },
         | 
| 687 792 |  | 
| 688 793 | 
             
                    /**
         | 
| @@ -691,8 +796,8 @@ | |
| 691 796 | 
             
                    gotoYear: function(year)
         | 
| 692 797 | 
             
                    {
         | 
| 693 798 | 
             
                        if (!isNaN(year)) {
         | 
| 694 | 
            -
                            this. | 
| 695 | 
            -
                            this. | 
| 799 | 
            +
                            this.calendars[0].year = parseInt(year, 10);
         | 
| 800 | 
            +
                            this.adjustCalendars();
         | 
| 696 801 | 
             
                        }
         | 
| 697 802 | 
             
                    },
         | 
| 698 803 |  | 
| @@ -724,7 +829,8 @@ | |
| 724 829 | 
             
                            minYear = opts.minYear,
         | 
| 725 830 | 
             
                            maxYear = opts.maxYear,
         | 
| 726 831 | 
             
                            minMonth = opts.minMonth,
         | 
| 727 | 
            -
                            maxMonth = opts.maxMonth | 
| 832 | 
            +
                            maxMonth = opts.maxMonth,
         | 
| 833 | 
            +
                            html = '';
         | 
| 728 834 |  | 
| 729 835 | 
             
                        if (this._y <= minYear) {
         | 
| 730 836 | 
             
                            this._y = minYear;
         | 
| @@ -739,10 +845,13 @@ | |
| 739 845 | 
             
                            }
         | 
| 740 846 | 
             
                        }
         | 
| 741 847 |  | 
| 742 | 
            -
                         | 
| 848 | 
            +
                        for (var c = 0; c < opts.numberOfMonths; c++) {
         | 
| 849 | 
            +
                            html += '<div class="pika-lendar">' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year) + this.render(this.calendars[c].year, this.calendars[c].month) + '</div>';
         | 
| 850 | 
            +
                        }
         | 
| 851 | 
            +
             | 
| 852 | 
            +
                        this.el.innerHTML = html;
         | 
| 743 853 |  | 
| 744 854 | 
             
                        if (opts.bound) {
         | 
| 745 | 
            -
                            this.adjustPosition();
         | 
| 746 855 | 
             
                            if(opts.field.type !== 'hidden') {
         | 
| 747 856 | 
             
                                sto(function() {
         | 
| 748 857 | 
             
                                    opts.trigger.focus();
         | 
| @@ -760,6 +869,7 @@ | |
| 760 869 |  | 
| 761 870 | 
             
                    adjustPosition: function()
         | 
| 762 871 | 
             
                    {
         | 
| 872 | 
            +
                        if (this._o.container) return;
         | 
| 763 873 | 
             
                        var field = this._o.trigger, pEl = field,
         | 
| 764 874 | 
             
                        width = this.el.offsetWidth, height = this.el.offsetHeight,
         | 
| 765 875 | 
             
                        viewportWidth = window.innerWidth || document.documentElement.clientWidth,
         | 
| @@ -780,13 +890,29 @@ | |
| 780 890 | 
             
                            }
         | 
| 781 891 | 
             
                        }
         | 
| 782 892 |  | 
| 783 | 
            -
                         | 
| 893 | 
            +
                        // default position is bottom & left
         | 
| 894 | 
            +
                        if ((this._o.reposition && left + width > viewportWidth) ||
         | 
| 895 | 
            +
                            (
         | 
| 896 | 
            +
                                this._o.position.indexOf('right') > -1 &&
         | 
| 897 | 
            +
                                left - width + field.offsetWidth > 0
         | 
| 898 | 
            +
                            )
         | 
| 899 | 
            +
                        ) {
         | 
| 784 900 | 
             
                            left = left - width + field.offsetWidth;
         | 
| 785 901 | 
             
                        }
         | 
| 786 | 
            -
                        if (top + height > viewportHeight + scrollTop)  | 
| 902 | 
            +
                        if ((this._o.reposition && top + height > viewportHeight + scrollTop) ||
         | 
| 903 | 
            +
                            (
         | 
| 904 | 
            +
                                this._o.position.indexOf('top') > -1 &&
         | 
| 905 | 
            +
                                top - height - field.offsetHeight > 0
         | 
| 906 | 
            +
                            )
         | 
| 907 | 
            +
                        ) {
         | 
| 787 908 | 
             
                            top = top - height - field.offsetHeight;
         | 
| 788 909 | 
             
                        }
         | 
| 789 | 
            -
             | 
| 910 | 
            +
             | 
| 911 | 
            +
                        this.el.style.cssText = [
         | 
| 912 | 
            +
                            'position: absolute',
         | 
| 913 | 
            +
                            'left: ' + left + 'px',
         | 
| 914 | 
            +
                            'top: ' + top + 'px'
         | 
| 915 | 
            +
                        ].join(';');
         | 
| 790 916 | 
             
                    },
         | 
| 791 917 |  | 
| 792 918 | 
             
                    /**
         | 
| @@ -816,14 +942,20 @@ | |
| 816 942 | 
             
                        for (var i = 0, r = 0; i < cells; i++)
         | 
| 817 943 | 
             
                        {
         | 
| 818 944 | 
             
                            var day = new Date(year, month, 1 + (i - before)),
         | 
| 819 | 
            -
                                isDisabled = (opts.minDate && day < opts.minDate) || (opts.maxDate && day > opts.maxDate),
         | 
| 820 945 | 
             
                                isSelected = isDate(this._d) ? compareDates(day, this._d) : false,
         | 
| 821 946 | 
             
                                isToday = compareDates(day, now),
         | 
| 822 | 
            -
                                isEmpty = i < before || i >= (days + before) | 
| 947 | 
            +
                                isEmpty = i < before || i >= (days + before),
         | 
| 948 | 
            +
                                isDisabled = (opts.minDate && day < opts.minDate) ||
         | 
| 949 | 
            +
                                             (opts.maxDate && day > opts.maxDate) ||
         | 
| 950 | 
            +
                                             (opts.disableWeekends && isWeekend(day)) ||
         | 
| 951 | 
            +
                                             (opts.disableDayFn && opts.disableDayFn(day));
         | 
| 823 952 |  | 
| 824 | 
            -
                            row.push(renderDay(1 + (i - before), isSelected, isToday, isDisabled, isEmpty));
         | 
| 953 | 
            +
                            row.push(renderDay(1 + (i - before), month, year, isSelected, isToday, isDisabled, isEmpty));
         | 
| 825 954 |  | 
| 826 955 | 
             
                            if (++r === 7) {
         | 
| 956 | 
            +
                                if (opts.showWeekNumber) {
         | 
| 957 | 
            +
                                    row.unshift(renderWeek(i - before, month, year));
         | 
| 958 | 
            +
                                }
         | 
| 827 959 | 
             
                                data.push(renderRow(row, opts.isRTL));
         | 
| 828 960 | 
             
                                row = [];
         | 
| 829 961 | 
             
                                r = 0;
         | 
| @@ -840,12 +972,13 @@ | |
| 840 972 | 
             
                    show: function()
         | 
| 841 973 | 
             
                    {
         | 
| 842 974 | 
             
                        if (!this._v) {
         | 
| 843 | 
            -
                            if (this._o.bound) {
         | 
| 844 | 
            -
                                addEvent(document, 'click', this._onClick);
         | 
| 845 | 
            -
                            }
         | 
| 846 975 | 
             
                            removeClass(this.el, 'is-hidden');
         | 
| 847 976 | 
             
                            this._v = true;
         | 
| 848 977 | 
             
                            this.draw();
         | 
| 978 | 
            +
                            if (this._o.bound) {
         | 
| 979 | 
            +
                                addEvent(document, 'click', this._onClick);
         | 
| 980 | 
            +
                                this.adjustPosition();
         | 
| 981 | 
            +
                            }
         | 
| 849 982 | 
             
                            if (typeof this._o.onOpen === 'function') {
         | 
| 850 983 | 
             
                                this._o.onOpen.call(this);
         | 
| 851 984 | 
             
                            }
         | 
| @@ -893,4 +1026,4 @@ | |
| 893 1026 |  | 
| 894 1027 | 
             
                return Pikaday;
         | 
| 895 1028 |  | 
| 896 | 
            -
            }));
         | 
| 1029 | 
            +
            }));
         | 
| @@ -0,0 +1,52 @@ | |
| 1 | 
            +
            /*!
         | 
| 2 | 
            +
             * Pikaday jQuery plugin.
         | 
| 3 | 
            +
             *
         | 
| 4 | 
            +
             * Copyright © 2013 David Bushell | BSD & MIT license | https://github.com/dbushell/Pikaday
         | 
| 5 | 
            +
             */
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            (function (root, factory)
         | 
| 8 | 
            +
            {
         | 
| 9 | 
            +
                'use strict';
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                if (typeof exports === 'object') {
         | 
| 12 | 
            +
                    // CommonJS module
         | 
| 13 | 
            +
                    factory(require('jquery'), require('../pikaday'));
         | 
| 14 | 
            +
                } else if (typeof define === 'function' && define.amd) {
         | 
| 15 | 
            +
                    // AMD. Register as an anonymous module.
         | 
| 16 | 
            +
                    define(['jquery', 'pikaday'], factory);
         | 
| 17 | 
            +
                } else {
         | 
| 18 | 
            +
                    // Browser globals
         | 
| 19 | 
            +
                    factory(root.jQuery, root.Pikaday);
         | 
| 20 | 
            +
                }
         | 
| 21 | 
            +
            }(this, function ($, Pikaday)
         | 
| 22 | 
            +
            {
         | 
| 23 | 
            +
                'use strict';
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                $.fn.pikaday = function()
         | 
| 26 | 
            +
                {
         | 
| 27 | 
            +
                    var args = arguments;
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                    if (!args || !args.length) {
         | 
| 30 | 
            +
                        args = [{ }];
         | 
| 31 | 
            +
                    }
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                    return this.each(function()
         | 
| 34 | 
            +
                    {
         | 
| 35 | 
            +
                        var self   = $(this),
         | 
| 36 | 
            +
                            plugin = self.data('pikaday');
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                        if (!(plugin instanceof Pikaday)) {
         | 
| 39 | 
            +
                            if (typeof args[0] === 'object') {
         | 
| 40 | 
            +
                                var options = $.extend({}, args[0]);
         | 
| 41 | 
            +
                                options.field = self[0];
         | 
| 42 | 
            +
                                self.data('pikaday', new Pikaday(options));
         | 
| 43 | 
            +
                            }
         | 
| 44 | 
            +
                        } else {
         | 
| 45 | 
            +
                            if (typeof args[0] === 'string' && typeof plugin[args[0]] === 'function') {
         | 
| 46 | 
            +
                                plugin[args[0]].apply(plugin, Array.prototype.slice.call(args,1));
         | 
| 47 | 
            +
                            }
         | 
| 48 | 
            +
                        }
         | 
| 49 | 
            +
                    });
         | 
| 50 | 
            +
                };
         | 
| 51 | 
            +
             | 
| 52 | 
            +
            }));
         |