src/cm/media/js/lib/yui/yui3-3.15.0/build/calendar/calendar-debug.js
author ymh <ymh.work@gmail.com>
Thu, 10 Apr 2014 17:30:29 +0200
changeset 630 36ef50b63372
parent 602 e16a97fb364a
permissions -rw-r--r--
update karma config after test lib moves
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
602
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     1
YUI.add('calendar', function (Y, NAME) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     2
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     3
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     4
 * The Calendar component is a UI widget that allows users
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
 * to view dates in a two-dimensional month grid, as well as
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
 * to select one or more dates, or ranges of dates. Calendar
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
 * is generated dynamically and relies on the developer to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
 * provide for a progressive enhancement alternative.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
 * @module calendar
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
var getCN             = Y.ClassNameManager.getClassName,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
    CALENDAR          = 'calendar',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
    KEY_DOWN          = 40,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
    KEY_UP            = 38,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
    KEY_LEFT          = 37,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
    KEY_RIGHT         = 39,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
    KEY_ENTER         = 13,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
    KEY_SPACE         = 32,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
    CAL_DAY_SELECTED  = getCN(CALENDAR, 'day-selected'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
    CAL_DAY_HILITED   = getCN(CALENDAR, 'day-highlighted'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
    CAL_DAY           = getCN(CALENDAR, 'day'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
    CAL_PREVMONTH_DAY = getCN(CALENDAR, 'prevmonth-day'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
    CAL_NEXTMONTH_DAY = getCN(CALENDAR, 'nextmonth-day'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
    CAL_GRID          = getCN(CALENDAR, 'grid'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
    ydate             = Y.DataType.Date,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
    CAL_PANE          = getCN(CALENDAR, 'pane'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
    os                = Y.UA.os;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
/** Create a calendar view to represent a single or multiple
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
    * month range of dates, rendered as a grid with date and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
    * weekday labels.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
    *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
    * @class Calendar
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
    * @extends CalendarBase
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
    * @param config {Object} Configuration object (see Configuration attributes)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
    * @constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
function Calendar() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
    Calendar.superclass.constructor.apply ( this, arguments );
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
Y.Calendar = Y.extend(Calendar, Y.CalendarBase, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
    _keyEvents: [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
    _highlightedDateNode: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
     * A property tracking the last selected date on the calendar, for the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
     * purposes of multiple selection.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
     * @property _lastSelectedDate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
     * @type Date
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
     * @default null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
    _lastSelectedDate: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
     * Designated initializer. Activates the navigation plugin for the calendar.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
     * @method initializer
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
    initializer : function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
        this.plug(Y.Plugin.CalendarNavigator);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
        this._keyEvents = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
        this._highlightedDateNode = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
        this._lastSelectedDate = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
     * Overrides the _bindCalendarEvents placeholder in CalendarBase
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
     * and binds calendar events during bindUI stage.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
     * @method _bindCalendarEvents
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
    _bindCalendarEvents : function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
        var contentBox = this.get('contentBox'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
            pane       = contentBox.one("." + CAL_PANE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
        pane.on("selectstart", this._preventSelectionStart);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
        pane.delegate("click", this._clickCalendar, "." + CAL_DAY + ", ." + CAL_PREVMONTH_DAY + ", ." + CAL_NEXTMONTH_DAY, this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
        pane.delegate("keydown", this._keydownCalendar, "." + CAL_GRID, this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
        pane.delegate("focus", this._focusCalendarGrid, "." + CAL_GRID, this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
        pane.delegate("focus", this._focusCalendarCell, "." + CAL_DAY, this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
        pane.delegate("blur", this._blurCalendarGrid, "." + CAL_GRID + ",." + CAL_DAY, this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
        this.after(['minimumDateChange', 'maximumDateChange'], this._afterCustomRendererChange);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
     * Prevents text selection if it is started within the calendar pane
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
     * @method _preventSelectionStart
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
     * @param event {Event} The selectstart event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
    _preventSelectionStart : function (event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
        event.preventDefault();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
     * Highlights a specific date node with keyboard highlight class
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
     * @method _highlightDateNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
     * @param oDate {Date} Date corresponding the node to be highlighted
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
    _highlightDateNode : function (oDate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
        this._unhighlightCurrentDateNode();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
        var newNode = this._dateToNode(oDate);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
        newNode.focus();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
        newNode.addClass(CAL_DAY_HILITED);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
     * Unhighlights a specific date node currently highlighted with keyboard highlight class
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
     * @method _unhighlightCurrentDateNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
    _unhighlightCurrentDateNode : function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
        var allHilitedNodes = this.get("contentBox").all("." + CAL_DAY_HILITED);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
        if (allHilitedNodes) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
            allHilitedNodes.removeClass(CAL_DAY_HILITED);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
     * Returns the grid number for a specific calendar grid (for multi-grid templates)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
     * @method _getGridNumber
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
     * @param gridNode {Node} Node corresponding to a specific grid
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
    _getGridNumber : function (gridNode) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
        var idParts = gridNode.get("id").split("_").reverse();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
        return parseInt(idParts[0], 10);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
     * Handler for loss of focus of calendar grid
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
     * @method _blurCalendarGrid
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   148
    _blurCalendarGrid : function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   149
        this._unhighlightCurrentDateNode();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   150
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
     * Handler for gain of focus of calendar cell
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
     * @method _focusCalendarCell
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
    _focusCalendarCell : function (ev) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
        this._highlightedDateNode = ev.target;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
        ev.stopPropagation();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
     * Handler for gain of focus of calendar grid
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
     * @method _focusCalendarGrid
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   168
    _focusCalendarGrid : function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   169
        this._unhighlightCurrentDateNode();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
        this._highlightedDateNode = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
     * Handler for keyboard press on a calendar grid
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
     * @method _keydownCalendar
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
    _keydownCalendar : function (ev) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
        var gridNum = this._getGridNumber(ev.target),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   180
            curDate = !this._highlightedDateNode ? null : this._nodeToDate(this._highlightedDateNode),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   181
            keyCode = ev.keyCode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   182
            dayNum = 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
            dir = '',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   184
            selMode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
            newDate,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
            startDate,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
            endDate,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
            lastPaneDate;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   190
        switch(keyCode) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   191
            case KEY_DOWN:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   192
                dayNum = 7;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   193
                dir = 's';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   194
                break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   195
            case KEY_UP:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   196
                dayNum = -7;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   197
                dir = 'n';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   198
                break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   199
            case KEY_LEFT:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   200
                dayNum = -1;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   201
                dir = 'w';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   202
                break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   203
            case KEY_RIGHT:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   204
                dayNum = 1;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   205
                dir = 'e';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   206
                break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   207
            case KEY_SPACE: case KEY_ENTER:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   208
                ev.preventDefault();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   209
                if (this._highlightedDateNode) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   210
                    selMode = this.get("selectionMode");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   211
                    if (selMode === "single" && !this._highlightedDateNode.hasClass(CAL_DAY_SELECTED)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   212
                            this._clearSelection(true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   213
                            this._addDateToSelection(curDate);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   214
                    } else if (selMode === "multiple" || selMode === "multiple-sticky") {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   215
                        if (this._highlightedDateNode.hasClass(CAL_DAY_SELECTED)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   216
                            this._removeDateFromSelection(curDate);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   217
                        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   218
                            this._addDateToSelection(curDate);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   219
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   220
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   221
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   222
                break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   223
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   224
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   225
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   226
        if (keyCode === KEY_DOWN || keyCode === KEY_UP || keyCode === KEY_LEFT || keyCode === KEY_RIGHT) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   227
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   228
            if (!curDate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   229
                curDate = ydate.addMonths(this.get("date"), gridNum);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   230
                dayNum = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   231
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   232
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   233
            ev.preventDefault();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   234
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   235
            newDate = ydate.addDays(curDate, dayNum);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   236
            startDate = this.get("date");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   237
            endDate = ydate.addMonths(this.get("date"), this._paneNumber - 1);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   238
            lastPaneDate = new Date(endDate);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   239
            endDate.setDate(ydate.daysInMonth(endDate));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   240
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   241
            if (ydate.isInRange(newDate, startDate, endDate)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   242
/*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   243
                var paneShift = (newDate.getMonth() - curDate.getMonth()) % 10;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   244
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   245
                if (paneShift != 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   246
                    var newGridNum = gridNum + paneShift,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   247
                            contentBox = this.get('contentBox'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   248
                            newPane = contentBox.one("#" + this._calendarId + "_pane_" + newGridNum);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   249
                            newPane.focus();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   250
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   251
*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   252
                this._highlightDateNode(newDate);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   253
            } else if (ydate.isGreater(startDate, newDate)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   254
                if (!ydate.isGreaterOrEqual(this.get("minimumDate"), startDate)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   255
                    this.set("date", ydate.addMonths(startDate, -1));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   256
                    this._highlightDateNode(newDate);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   257
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   258
            } else if (ydate.isGreater(newDate, endDate)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   259
                if (!ydate.isGreaterOrEqual(lastPaneDate, this.get("maximumDate"))) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   260
                    this.set("date", ydate.addMonths(startDate, 1));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   261
                    this._highlightDateNode(newDate);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   262
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   263
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   264
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   265
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   266
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   267
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   268
     * Handles the calendar clicks based on selection mode.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   269
     * @method _clickCalendar
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   270
     * @param {Event} ev A click event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   271
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   272
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   273
    _clickCalendar : function (ev) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   274
        var clickedCell = ev.currentTarget,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   275
            clickedCellIsDay = clickedCell.hasClass(CAL_DAY) &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   276
                                !clickedCell.hasClass(CAL_PREVMONTH_DAY) &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   277
                                !clickedCell.hasClass(CAL_NEXTMONTH_DAY),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   278
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   279
        clickedCellIsSelected = clickedCell.hasClass(CAL_DAY_SELECTED),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   280
        selectedDate;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   281
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   282
        switch (this.get("selectionMode")) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   283
            case("single"):
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   284
                if (clickedCellIsDay) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   285
                    if (!clickedCellIsSelected) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   286
                        this._clearSelection(true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   287
                        this._addDateToSelection(this._nodeToDate(clickedCell));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   288
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   289
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   290
                break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   291
            case("multiple-sticky"):
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   292
                if (clickedCellIsDay) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   293
                    if (clickedCellIsSelected) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   294
                        this._removeDateFromSelection(this._nodeToDate(clickedCell));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   295
                    } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   296
                        this._addDateToSelection(this._nodeToDate(clickedCell));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   297
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   298
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   299
                break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   300
            case("multiple"):
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   301
                if (clickedCellIsDay) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   302
                    if (!ev.metaKey && !ev.ctrlKey && !ev.shiftKey) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   303
                        this._clearSelection(true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   304
                        this._lastSelectedDate = this._nodeToDate(clickedCell);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   305
                        this._addDateToSelection(this._lastSelectedDate);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   306
                    } else if (((os === 'macintosh' && ev.metaKey) || (os !== 'macintosh' && ev.ctrlKey)) && !ev.shiftKey) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   307
                        if (clickedCellIsSelected) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   308
                            this._removeDateFromSelection(this._nodeToDate(clickedCell));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   309
                            this._lastSelectedDate = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   310
                        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   311
                            this._lastSelectedDate = this._nodeToDate(clickedCell);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   312
                            this._addDateToSelection(this._lastSelectedDate);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   313
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   314
                    } else if (((os === 'macintosh' && ev.metaKey) || (os !== 'macintosh' && ev.ctrlKey)) && ev.shiftKey) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   315
                        if (this._lastSelectedDate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   316
                            selectedDate = this._nodeToDate(clickedCell);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   317
                            this._addDateRangeToSelection(selectedDate, this._lastSelectedDate);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   318
                            this._lastSelectedDate = selectedDate;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   319
                        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   320
                            this._lastSelectedDate = this._nodeToDate(clickedCell);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   321
                            this._addDateToSelection(this._lastSelectedDate);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   322
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   323
                    } else if (ev.shiftKey) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   324
                        if (this._lastSelectedDate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   325
                            selectedDate = this._nodeToDate(clickedCell);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   326
                            this._clearSelection(true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   327
                            this._addDateRangeToSelection(selectedDate, this._lastSelectedDate);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   328
                            this._lastSelectedDate = selectedDate;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   329
                        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   330
                            this._clearSelection(true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   331
                            this._lastSelectedDate = this._nodeToDate(clickedCell);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   332
                            this._addDateToSelection(this._lastSelectedDate);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   333
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   334
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   335
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   336
                break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   337
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   338
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   339
        if (clickedCellIsDay) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   340
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   341
            * Fired when a specific date cell in the calendar is clicked. The event carries a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   342
            * payload which includes a `cell` property corresponding to the node of the actual
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   343
            * date cell, and a `date` property, with the `Date` that was clicked.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   344
            *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   345
            * @event dateClick
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   346
            */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   347
            this.fire("dateClick", {cell: clickedCell, date: this._nodeToDate(clickedCell)});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   348
        } else if (clickedCell.hasClass(CAL_PREVMONTH_DAY)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   349
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   350
            * Fired when any of the previous month's days displayed before the calendar grid
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   351
            * are clicked.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   352
            *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   353
            * @event prevMonthClick
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   354
            */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   355
            this.fire("prevMonthClick");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   356
        } else if (clickedCell.hasClass(CAL_NEXTMONTH_DAY)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   357
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   358
            * Fired when any of the next month's days displayed after the calendar grid
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   359
            * are clicked.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   360
            *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   361
            * @event nextMonthClick
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   362
            */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   363
            this.fire("nextMonthClick");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   364
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   365
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   366
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   367
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   368
     * Overrides CalendarBase.prototype._canBeSelected to disable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   369
     * nodes earlier than minimumDate and later than maximumDate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   370
     * @method _canBeSelected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   371
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   372
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   373
    _canBeSelected : function (date) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   374
        var minDate = this.get('minimumDate'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   375
            maxDate = this.get('maximumDate');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   376
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   377
        if ((minDate && !ydate.isGreaterOrEqual(date, minDate)) ||
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   378
            (maxDate &&  ydate.isGreater(date, maxDate))) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   379
            return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   380
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   381
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   382
        return Calendar.superclass._canBeSelected.call(this, date);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   383
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   384
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   385
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   386
     * Overrides CalendarBase.prototype._renderCustomRules to disable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   387
     * nodes earlier than minimumDate and later than maximumDate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   388
     * @method _renderCustomRules
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   389
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   390
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   391
    _renderCustomRules: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   392
        Calendar.superclass._renderCustomRules.call(this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   393
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   394
        var minDate = this.get('minimumDate'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   395
            maxDate = this.get('maximumDate'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   396
            dates = [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   397
            i, l,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   398
            paneDate,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   399
            paneNum;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   400
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   401
        if (!minDate && !maxDate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   402
            return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   403
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   404
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   405
        for (paneNum = 0; paneNum < this._paneNumber; paneNum++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   406
            paneDate = ydate.addMonths(this.get("date"), paneNum);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   407
            dates = dates.concat(ydate.listOfDatesInMonth(paneDate));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   408
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   409
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   410
        if (minDate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   411
            for (i = 0, l = dates.length; i < l; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   412
                if (!ydate.isGreaterOrEqual(dates[i], minDate)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   413
                    this._disableDate(dates[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   414
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   415
                    break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   416
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   417
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   418
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   419
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   420
        if (maxDate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   421
            for (i = dates.length - 1; i >= 0; i--) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   422
                if (ydate.isGreater(dates[i], maxDate)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   423
                    this._disableDate(dates[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   424
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   425
                    break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   426
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   427
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   428
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   429
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   430
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   431
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   432
     * Subtracts one month from the current calendar view.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   433
     * @method subtractMonth
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   434
     * @return {Calendar} A reference to this object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   435
     * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   436
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   437
    subtractMonth : function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   438
        this.set("date", ydate.addMonths(this.get("date"), -1));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   439
        if (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   440
            e.halt();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   441
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   442
        return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   443
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   444
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   445
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   446
     * Subtracts one year from the current calendar view.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   447
     * @method subtractYear
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   448
     * @return {Calendar} A reference to this object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   449
     * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   450
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   451
    subtractYear : function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   452
        this.set("date", ydate.addYears(this.get("date"), -1));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   453
        if (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   454
            e.halt();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   455
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   456
        return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   457
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   458
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   459
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   460
     * Adds one month to the current calendar view.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   461
     * @method addMonth
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   462
     * @return {Calendar} A reference to this object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   463
     * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   464
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   465
    addMonth : function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   466
        this.set("date", ydate.addMonths(this.get("date"), 1));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   467
        if (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   468
            e.halt();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   469
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   470
        return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   471
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   472
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   473
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   474
     * Adds one year to the current calendar view.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   475
     * @method addYear
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   476
     * @return {Calendar} A reference to this object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   477
     * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   478
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   479
    addYear : function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   480
        this.set("date", ydate.addYears(this.get("date"), 1));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   481
        if (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   482
            e.halt();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   483
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   484
        return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   485
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   486
}, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   487
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   488
    * The identity of the widget.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   489
    *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   490
    * @property NAME
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   491
    * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   492
    * @default 'calendar'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   493
    * @readOnly
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   494
    * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   495
    * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   496
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   497
    NAME: "calendar",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   498
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   499
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   500
    * Static property used to define the default attribute configuration of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   501
    * the Widget.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   502
    *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   503
    * @property ATTRS
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   504
    * @type {Object}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   505
    * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   506
    * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   507
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   508
    ATTRS: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   509
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   510
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   511
         * A setting specifying the type of selection the calendar allows.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   512
         * Possible values include:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   513
         * <ul>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   514
         *   <li>`single` - One date at a time</li>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   515
         *   <li>`multiple-sticky` - Multiple dates, selected one at a time (the dates "stick"). This option
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   516
         *   is appropriate for mobile devices, where function keys from the keyboard are not available.</li>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   517
         *   <li>`multiple` - Multiple dates, selected with Ctrl/Meta keys for additional single
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   518
         *   dates, and Shift key for date ranges.</li>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   519
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   520
         * @attribute selectionMode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   521
         * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   522
         * @default single
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   523
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   524
        selectionMode: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   525
            value: "single"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   526
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   527
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   528
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   529
         * The date corresponding to the current calendar view. Always
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   530
         * normalized to the first of the month that contains the date
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   531
         * at assignment time. Used as the first date visible in the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   532
         * calendar.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   533
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   534
         * @attribute date
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   535
         * @type Date
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   536
         * @default Today's date as set on the user's computer.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   537
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   538
        date: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   539
            value: new Date(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   540
            lazyAdd: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   541
            setter: function (val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   542
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   543
                var newDate    = this._normalizeDate(val),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   544
                    newEndDate = ydate.addMonths(newDate, this._paneNumber - 1),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   545
                    minDate    = this.get("minimumDate"),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   546
                    maxDate    = this.get("maximumDate");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   547
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   548
                if ((!minDate || ydate.isGreaterOrEqual(newDate, minDate)) &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   549
                    (!maxDate || ydate.isGreaterOrEqual(maxDate, newEndDate))
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   550
                ) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   551
                    return newDate;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   552
                } else if (minDate && ydate.isGreater(minDate, newDate)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   553
                    return this._normalizeDate(minDate);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   554
                } else if (maxDate && ydate.isGreater(newEndDate, maxDate)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   555
                    return ydate.addMonths(this._normalizeDate(maxDate), 1 - this._paneNumber);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   556
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   557
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   558
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   559
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   560
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   561
         * Unless minimumDate is null, it will not be possible to display and select dates earlier than this one.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   562
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   563
         * @attribute minimumDate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   564
         * @type Date
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   565
         * @default null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   566
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   567
        minimumDate: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   568
            value: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   569
            setter: function (val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   570
                if (Y.Lang.isDate(val)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   571
                    var curDate = this.get('date'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   572
                        newMin  = this._normalizeTime(val);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   573
                    if (curDate && !ydate.isGreaterOrEqual(curDate, newMin)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   574
                        this.set('date', val);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   575
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   576
                    return newMin;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   577
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   578
                    return null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   579
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   580
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   581
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   582
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   583
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   584
         * Unless maximumDate is null, it will not be possible to display and select dates later than this one.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   585
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   586
         * @attribute maximumDate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   587
         * @type Date
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   588
         * @default null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   589
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   590
        maximumDate: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   591
            value: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   592
            setter: function (val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   593
                if (Y.Lang.isDate(val)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   594
                    var curDate = this.get('date');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   595
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   596
                    if (curDate && !ydate.isGreaterOrEqual(val, ydate.addMonths(curDate, this._paneNumber - 1))) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   597
                        this.set('date', ydate.addMonths(this._normalizeDate(val), 1 - this._paneNumber));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   598
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   599
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   600
                    return this._normalizeTime(val);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   601
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   602
                    return null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   603
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   604
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   605
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   606
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   607
});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   608
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   609
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   610
}, '@VERSION@', {"requires": ["calendar-base", "calendarnavigator"], "skinnable": true});