UNPKG

kclean

Version:

A build tool that converts KISSY module code to standard JavaScript.

2,242 lines 78.8 kB
/*
combined modules:
date-picker
date-picker/month-panel
date-picker/year-panel
date-picker/decade-panel
date-picker/xtpl/decade-panel-render
date-picker/xtpl/decade-panel
date-picker/xtpl/decades
date-picker/xtpl/decades-render
date-picker/xtpl/years-render
date-picker/xtpl/years
date-picker/xtpl/year-panel-render
date-picker/xtpl/year-panel
date-picker/xtpl/months-render
date-picker/xtpl/months
date-picker/xtpl/month-panel-render
date-picker/xtpl/month-panel
date-picker/xtpl/picker-render
date-picker/xtpl/picker
date-picker/popup
date-picker/xtpl/popup-render
date-picker/xtpl/popup
*/
modulex.add("date-picker", ["util","node","gregorian-calendar","component/control","date-picker/month-panel","event-dom/gesture/tap","gregorian-calendar-format","date-picker/xtpl/picker-render","date-picker/popup","i18n!date-picker"], function(require, exports, module) {/**
 * @ignore
 * year panel for date picker
 * @author yiminghe@gmail.com
 */

var util = require('util');
var $ = require('node'),
    GregorianCalendar = require('gregorian-calendar'),
    locale = require('i18n!date-picker'),
    Control = require('component/control'),
    MonthPanel = require('./date-picker/month-panel');
var TapGesture = require('event-dom/gesture/tap');
var tap = TapGesture.TAP;
var KeyCode = $.Event.KeyCode;

var DateTimeFormat = require('gregorian-calendar-format'),
    PickerTpl = require('./date-picker/xtpl/picker-render');
var dateRowTplStart = '<tr role="row">';
var dateRowTplEnd = '</tr>';
var dateCellTpl = '<td role="gridcell" data-index="{index}" title="{title}" class="{cls}">{content}</td>';
var weekNumberCellTpl = '<td role="gridcell" class="{cls}">{content}</td>';
var dateTpl = '<a ' +
    ' id="{id}" ' +
    ' hidefocus="on" ' +
    ' unselectable="on" ' +
    ' tabindex="-1" ' +
    ' class="{cls}" ' +
    ' href="javascript:void(0)" ' +
    ' aria-selected="{selected}" ' +
    ' aria-disabled="{disabled}">{content}</a>';
var DATE_ROW_COUNT = 6;
var DATE_COL_COUNT = 7;

function getIdFromDate(d) {
    return 'ks-date-picker-date-' + d.getYear() +
        '-' + d.getMonth() + '-' +
        d.getDayOfMonth();
}

function isSameDay(one, two) {
    return one.getYear() === two.getYear() &&
        one.getMonth() === two.getMonth() &&
        one.getDayOfMonth() === two.getDayOfMonth();
}

function isSameMonth(one, two) {
    return one.getYear() === two.getYear() &&
        one.getMonth() === two.getMonth();
}

function beforeCurrentMonthYear(current, today) {
    if (current.getYear() < today.getYear()) {
        return 1;
    }
    return current.getYear() === today.getYear() &&
        current.getMonth() < today.getMonth();
}

function afterCurrentMonthYear(current, today) {
    if (current.getYear() > today.getYear()) {
        return 1;
    }
    return current.getYear() === today.getYear() &&
        current.getMonth() > today.getMonth();
}

function goStartMonth(self) {
    var next = self.get('value').clone();
    next.setDayOfMonth(1);
    self.set('value', next);
}

function goEndMonth(self) {
    var next = self.get('value').clone();
    next.setDayOfMonth(next.getActualMaximum(GregorianCalendar.MONTH));
    self.set('value', next);
}

function goMonth(self, direction) {
    var next = self.get('value').clone();
    next.addMonth(direction);
    self.set('value', next);
}

function goYear(self, direction) {
    var next = self.get('value').clone();
    next.addYear(direction);
    self.set('value', next);
}

function goWeek(self, direction) {
    var next = self.get('value').clone();
    next.addWeekOfYear(direction);
    self.set('value', next);
}

function goDay(self, direction) {
    var next = self.get('value').clone();
    next.addDayOfMonth(direction);
    self.set('value', next);
}

function nextMonth() {
    
    goMonth(this, 1);
}

function previousMonth() {
    
    goMonth(this, -1);
}

function nextYear() {
    
    goYear(this, 1);
}

function previousYear() {
    
    goYear(this, -1);
}

function chooseCell(e) {
    var self = this;
    self.set('clear', false);
    var disabledDate = self.get('disabledDate');
    
    var td = $(e.currentTarget);
    var value = self.dateTable[parseInt(td.attr('data-index'), 10)];
    if (disabledDate && disabledDate(value, self.get('value'))) {
        return;
    }
    // fix call focus in select handler
    setTimeout(function () {
        self.set('value', value);
        self.fire('select', {
            value: value
        });
    }, 0);
}

function showMonthPanel() {
    
    var monthPanel = this.get('monthPanel');
    monthPanel.set('value', this.get('value'));
    monthPanel.show();
}

function setUpMonthPanel() {
    var self = this;
    var monthPanel = new MonthPanel({
        locale: this.get('locale'),
        render: self.get('el')
    });
    monthPanel.on('select', onMonthPanelSelect, self);
    return monthPanel;
}

function onMonthPanelSelect(e) {
    this.set('value', e.value);
    this.get('monthPanel').hide();
}

function chooseToday() {
    
    this.set('clear', false);
    var today = this.get('value').clone();
    today.setTime(util.now());
    this.set('value', today);
}

function toggleClear() {
    var self = this,
        v = !self.get('clear');
    if (!v) {
        var value = self.get('value');
        value.setDayOfMonth(1);
        self.set('clear', false);
    } else {
        self.set('clear', true);
    }
}

function onClearClick() {
    
    if (!this.get('clear')) {
        toggleClear.call(this);
    }
    this.fire('select', {
        value: null
    });
}

/**
 * date picker ui component
 * @class Date.Picker
 * @extends Component.Control
 */
module.exports = Control.extend({
    beforeCreateDom: function (renderData, renderCommands) {
        var self = this;
        var locale = self.get('locale');
        var value = self.get('value');
        var dateLocale = value.getLocale();
        var veryShortWeekdays = [];
        var weekDays = [];
        var firstDayOfWeek = value.getFirstDayOfWeek();
        for (var i = 0; i < DATE_COL_COUNT; i++) {
            var index = (firstDayOfWeek + i) % DATE_COL_COUNT;
            veryShortWeekdays[i] = locale.veryShortWeekdays[index];
            weekDays[i] = dateLocale.weekdays[index];
        }
        util.mix(renderData, {
            monthSelectLabel: locale.monthSelect,
            monthYearLabel: self.getMonthYearLabel(),
            previousMonthLabel: locale.previousMonth,
            nextMonthLabel: locale.nextMonth,
            previousYearLabel: locale.previousYear,
            nextYearLabel: locale.nextYear,
            weekdays: weekDays,
            veryShortWeekdays: veryShortWeekdays,
            todayLabel: locale.today,
            clearLabel: locale.clear,
            todayTimeLabel: self.getTodayTimeLabel()
        });
        renderCommands.renderDates = function () {
            return self.renderDates();
        };
    },

    createDom: function () {
        this.$el.attr('aria-activedescendant', getIdFromDate(this.get('value')));
    },

    bindUI: function () {
        var self = this;
        self.get('nextMonthBtn').on(tap, nextMonth, self);
        self.get('previousMonthBtn').on(tap, previousMonth, self);
        self.get('nextYearBtn').on(tap, nextYear, self);
        self.get('previousYearBtn').on(tap, previousYear, self);
        self.get('tbodyEl').delegate(
            tap,
                '.' + self.getBaseCssClass('cell'),
            chooseCell,
            self
        );
        self.get('monthSelectEl').on(tap, showMonthPanel, self);
        self.get('todayBtnEl').on(tap, chooseToday, self);
        self.get('clearBtnEl').on(tap, onClearClick, self);
    },

    getMonthYearLabel: function () {
        var self = this;
        var locale = self.get('locale');
        var value = self.get('value');
        var dateLocale = value.getLocale();
        return new DateTimeFormat(locale.monthYearFormat, dateLocale).format(value);
    },

    getTodayTimeLabel: function () {
        var self = this;
        var locale = self.get('locale');
        var value = self.get('value');
        var dateLocale = value.getLocale();
        var today = value.clone();
        today.setTime(util.now());
        return new DateTimeFormat(locale.dateFormat, dateLocale).format(today);
    },

    renderDates: function () {
        var self = this,
            i, j,
            dateTable = [],
            current,
            isClear = self.get('clear'),
            showWeekNumber = self.get('showWeekNumber'),
            locale = self.get('locale'),
            value = self.get('value'),
            today = value.clone(),
            cellClass = self.getBaseCssClasses('cell'),
            weekNumberCellClass = self.getBaseCssClasses('week-number-cell'),
            dateClass = self.getBaseCssClasses('date'),
            dateRender = self.get('dateRender'),
            disabledDate = self.get('disabledDate'),
            dateLocale = value.getLocale(),
            dateFormatter = new DateTimeFormat(locale.dateFormat, dateLocale),
            todayClass = self.getBaseCssClasses('today'),
            selectedClass = self.getBaseCssClasses('selected-day'),
            lastMonthDayClass = self.getBaseCssClasses('last-month-cell'),
            nextMonthDayClass = self.getBaseCssClasses('next-month-btn-day'),
            disabledClass = self.getBaseCssClasses('disabled-cell');

        today.setTime(util.now());
        var month1 = value.clone();
        month1.set(value.getYear(), value.getMonth(), 1);
        var day = month1.getDayOfWeek();
        var lastMonthDiffDay = (day + 7 - value.getFirstDayOfWeek()) % 7;
        // calculate last month
        var lastMonth1 = month1.clone();
        lastMonth1.addDayOfMonth(0 - lastMonthDiffDay);
        var passed = 0;
        for (i = 0; i < DATE_ROW_COUNT; i++) {
            for (j = 0; j < DATE_COL_COUNT; j++) {
                current = lastMonth1;
                if (passed) {
                    current = current.clone();
                    current.addDayOfMonth(passed);
                }
                dateTable.push(current);
                passed++;
            }
        }
        var tableHtml = '';
        passed = 0;
        for (i = 0; i < DATE_ROW_COUNT; i++) {
            var rowHtml = dateRowTplStart;
            if (showWeekNumber) {
                rowHtml += util.substitute(weekNumberCellTpl, {
                    cls: weekNumberCellClass,
                    content: dateTable[passed].getWeekOfYear()
                });
            }
            for (j = 0; j < DATE_COL_COUNT; j++) {
                current = dateTable[passed];
                var cls = cellClass;
                var disabled = false;
                var selected = false;

                if (isSameDay(current, today)) {
                    cls += ' ' + todayClass;
                }
                if (!isClear && isSameDay(current, value)) {
                    cls += ' ' + selectedClass;
                    selected = true;
                }
                if (beforeCurrentMonthYear(current, value)) {
                    cls += ' ' + lastMonthDayClass;
                }
                if (afterCurrentMonthYear(current, value)) {
                    cls += ' ' + nextMonthDayClass;
                }
                if (disabledDate && disabledDate(current, value)) {
                    cls += ' ' + disabledClass;
                    disabled = true;
                }

                var dateHtml = '';
                if (!(dateRender && (dateHtml = dateRender(current, value)))) {
                    dateHtml = util.substitute(dateTpl, {
                        cls: dateClass,
                        id: getIdFromDate(current),
                        selected: selected,
                        disabled: disabled,
                        content: current.getDayOfMonth()
                    });
                }
                rowHtml += util.substitute(dateCellTpl, {
                    cls: cls,
                    index: passed,
                    title: dateFormatter.format(current),
                    content: dateHtml
                });
                passed++;
            }
            tableHtml += rowHtml + dateRowTplEnd;
        }
        self.dateTable = dateTable;
        return tableHtml;
    },

    _onSetClear: function (v) {
        var self = this;
        var value = self.get('value');
        var selectedCls = this.getBaseCssClasses('selected-day');
        var id = getIdFromDate(value);
        var currentA = this.$('#' + id);
        if (v) {
            currentA.parent().removeClass(selectedCls);
            currentA.attr('aria-selected', false);
            self.$el.attr('aria-activedescendant', '');
        } else {
            currentA.parent().addClass(selectedCls);
            currentA.attr('aria-selected', true);
            self.$el.attr('aria-activedescendant', id);
        }
    },

    // re render after current value change
    _onSetValue: function (value, e) {
        var self = this;
        var preValue = e.prevVal;
        if (isSameMonth(preValue, value)) {
            var disabledDate = self.get('disabledDate');
            var selectedCls = self.getBaseCssClasses('selected-day');
            var prevA = self.$('#' + getIdFromDate(preValue));
            prevA.parent().removeClass(selectedCls);
            prevA.attr('aria-selected', false);
            if (!(disabledDate && disabledDate(value, value))) {
                var currentA = self.$('#' + getIdFromDate(value));
                currentA.parent().addClass(selectedCls);
                currentA.attr('aria-selected', true);
            }
        } else {
            var tbodyEl = self.get('tbodyEl');
            var monthSelectContentEl = self.get('monthSelectContentEl');
            var todayBtnEl = self.get('todayBtnEl');
            monthSelectContentEl.html(self.getMonthYearLabel());
            todayBtnEl.attr('title', self.getTodayTimeLabel());
            tbodyEl.html(self.renderDates());
        }
        self.$el.attr('aria-activedescendant', getIdFromDate(value));
    },

    handleKeyDownInternal: function (e) {
        var self = this;
        var keyCode = e.keyCode;
        var ctrlKey = e.ctrlKey;
        switch (keyCode) {
            case KeyCode.SPACE:
                self.set('clear', !self.get('clear'));
                return true;
        }
        if (this.get('clear')) {
            switch (keyCode) {
                case KeyCode.DOWN:
                case KeyCode.UP:
                case KeyCode.LEFT:
                case KeyCode.RIGHT:
                    if (!ctrlKey) {
                        toggleClear.call(self);
                    }
                    return true;
                case KeyCode.HOME:
                    toggleClear.call(self);
                    goStartMonth(self);
                    return true;
                case KeyCode.END:
                    toggleClear.call(self);
                    goEndMonth(self);
                    return true;
                case KeyCode.ENTER:
                    self.fire('select', {
                        value: null
                    });
                    return true;
            }
        }
        switch (keyCode) {
            case KeyCode.DOWN:
                goWeek(self, 1);
                return true;
            case KeyCode.UP:
                goWeek(self, -1);
                return true;
            case KeyCode.LEFT:
                if (ctrlKey) {
                    goYear(self, -1);
                } else {
                    goDay(self, -1);
                }
                return true;
            case KeyCode.RIGHT:
                if (ctrlKey) {
                    goYear(self, 1);
                } else {
                    goDay(self, 1);
                }
                return true;
            case KeyCode.HOME:
                goStartMonth(self);
                return true;
            case KeyCode.END:
                goEndMonth(self);
                return true;
            case KeyCode.PAGE_DOWN:
                goMonth(self, 1);
                return true;
            case KeyCode.PAGE_UP:
                goMonth(self, -1);
                return true;
            case KeyCode.ENTER:
                self.fire('select', {
                    value: self.get('value')
                });
                return true;
        }
        return undefined;
    }
}, {
    xclass: 'date-picker',
    ATTRS: {
        handleGestureEvents: {
            value: true
        },

        focusable: {
            value: true
        },

        allowTextSelection: {
            value: false
        },

        contentTpl: {
            value: PickerTpl
        },

        /**
         * current selected value of current date picker
         * @cfg {Date.Gregorian} value
         */
        /**
         * @ignore
         */
        value: {
            render: 1,
            sync: 0,
            valueFn: function () {
                var date = new GregorianCalendar();
                date.setTime(util.now());
                return date;
            }
        },

        previousYearBtn: {
            selector: function () {
                return '.' + this.getBaseCssClass('prev-year-btn');
            }
        },

        nextYearBtn: {
            selector: function () {
                return '.' + this.getBaseCssClass('next-year-btn');
            }
        },

        previousMonthBtn: {
            selector: function () {
                return '.' + this.getBaseCssClass('prev-month-btn');
            }
        },

        monthSelectEl: {
            selector: function () {
                return '.' + this.getBaseCssClass('month-select');
            }
        },
        monthSelectContentEl: {
            selector: function () {
                return '.' + this.getBaseCssClass('month-select-content');
            }
        },

        monthPanel: {
            valueFn: setUpMonthPanel
        },

        nextMonthBtn: {
            selector: function () {
                return '.' + this.getBaseCssClass('next-month-btn');
            }
        },
        clearBtnEl: {
            selector: function () {
                return '.' + this.getBaseCssClass('clear-btn');
            }
        },

        tbodyEl: {
            selector: function () {
                return '.' + this.getBaseCssClass('tbody');
            }
        },

        todayBtnEl: {
            selector: function () {
                return '.' + this.getBaseCssClass('today-btn');
            }
        },

        /**
         * function used to render a date cell
         *
         *      function(current){
             *          return '<a>'+current.getDay()+'</a>';
             *      }
         *
         * @cfg {Function} dateRender
         */
        /**
         * @ignore
         */
        dateRender: {},

        /**
         * function used to judge whether this date cell is disabled
         *
         *      function(current){
             *          // before 2010 is disabled
             *          return current.getYear()<2010;
             *      }
         *
         * @cfg {Function} disabledDate
         */
        /**
         * @ignore
         */
        disabledDate: {},

        /**
         * locale object for date picker
         * @cfg {Object} locale
         */
        /**
         * @ignore
         */
        locale: {
            value: locale
        },

        /**
         * whether to show today button.
         * Defaults to true.
         * @cfg {Boolean} showToday
         */
        /**
         * @ignore
         */
        showToday: {
            render: 1,
            value: true
        },

        /**
         * whether to show clear button.
         * Defaults to true.
         * @cfg {Boolean} showClear
         */
        /**
         * @ignore
         */
        showClear: {
            render: 1,
            value: true
        },

        clear: {
            render: 1,
            value: false
        },

        /**
         * whether to show week number column.
         * Defaults to true.
         * @cfg {Boolean} showWeekNumber
         */
        /**
         * @ignore
         */
        showWeekNumber: {
            render: 1,
            value: true
        }
    }
});

module.exports.Popup = require('./date-picker/popup');

/*
 keyboard
 - http://www.w3.org/TR/wai-aria-practices/#datepicker
 */});
modulex.add("date-picker/month-panel", ["util","component/control","date-picker/year-panel","gregorian-calendar-format","date-picker/xtpl/months-render","date-picker/xtpl/month-panel-render","event-dom/gesture/tap","node"], function(require, exports, module) {/**
 * @ignore
 * month panel for date picker
 * @author yiminghe@gmail.com
 */

var util = require('util');
var Control = require('component/control'),
    YearPanel = require('./year-panel');
var DateFormat = require('gregorian-calendar-format'),
    MonthsTpl = require('./xtpl/months-render'),
    MonthPanelTpl = require('./xtpl/month-panel-render');
var TapGesture = require('event-dom/gesture/tap');
var tap = TapGesture.TAP;
var $ = require('node');

function prepareMonths(self) {
    var value = self.get('value');
    var currentMonth = value.getMonth();
    var current = value.clone();
    var locale = self.get('locale');
    var monthYearFormat = locale.monthYearFormat;
    var dateLocale = value.getLocale();
    var dateFormatter = new DateFormat(monthYearFormat, dateLocale);
    var months = [];
    var shortMonths = dateLocale.shortMonths;
    var index = 0;
    for (var i = 0; i < 3; i++) {
        months[i] = [];
        for (var j = 0; j < 4; j++) {
            current.setMonth(index);
            months[i][j] = {
                value: index,
                content: shortMonths[index],
                title: dateFormatter.format(current)
            };
            index++;
        }
    }
    util.mix(self.renderData, {
        months: months,
        year: value.getYear(),
        month: currentMonth
    });
    self.months = months;
    return months;
}

function goYear(self, direction) {
    var next = self.get('value').clone();
    next.addYear(direction);
    self.set('value', next);
}

function nextYear() {

    goYear(this, 1);
}

function previousYear() {

    goYear(this, -1);
}

function chooseCell(e) {

    var td = $(e.currentTarget);
    var tr = td.parent();
    var tdIndex = td.index();
    var trIndex = tr.index();
    var value = this.get('value').clone();
    value.setMonth(trIndex * 4 + tdIndex);
    this.fire('select', {
        value: value
    });
}

function showYearPanel() {

    var yearPanel = this.get('yearPanel');
    yearPanel.set('value', this.get('value'));
    yearPanel.show();
}

function setUpYearPanel() {
    var self = this;
    var yearPanel = new YearPanel({
        locale: this.get('locale'),
        render: self.get('render')
    });
    yearPanel.on('select', onYearPanelSelect, self);
    return yearPanel;
}

function onYearPanelSelect(e) {
    this.set('value', e.value);
    this.get('yearPanel').hide();
}

module.exports = Control.extend({
    beforeCreateDom: function (renderData) {
        var self = this;
        var locale = self.get('locale');
        util.mix(renderData, {
            yearSelectLabel: locale.yearSelect,
            previousYearLabel: locale.previousYear,
            nextYearLabel: locale.nextYear
        });
        prepareMonths(self);
    },

    bindUI: function () {
        var self = this;
        self.get('nextYearBtn').on(tap, nextYear, self);
        self.get('previousYearBtn').on(tap, previousYear, self);
        self.get('tbodyEl').delegate(
            tap,
                '.' + self.getBaseCssClass('cell'),
            chooseCell,
            self
        );
        self.get('yearSelectEl').on(tap, showYearPanel, self);
    },

    _onSetValue: function (value) {
        var self = this;
        prepareMonths(self);
        self.get('tbodyEl').html(this.renderTpl(MonthsTpl));
        self.get('yearSelectContentEl').html(value.getYear());
    }
}, {
    xclass: 'date-picker-month-panel',
    ATTRS: {
        contentTpl: {
            value: MonthPanelTpl
        },

        focusable: {
            value: false
        },
        value: {
            render: 1
        },
        yearPanel: {
            valueFn: setUpYearPanel
        },
        tbodyEl: {
            selector: function () {
                return '.' + this.getBaseCssClass('tbody');
            }
        },
        previousYearBtn: {
            selector: function () {
                return '.' + this.getBaseCssClass('prev-year-btn');
            }
        },
        nextYearBtn: {
            selector: function () {
                return '.' + this.getBaseCssClass('next-year-btn');
            }
        },
        yearSelectEl: {
            selector: function () {
                return '.' + this.getBaseCssClass('year-select');
            }
        },
        yearSelectContentEl: {
            selector: function () {
                return '.' + this.getBaseCssClass('year-select-content');
            }
        }
    }
});});
modulex.add("date-picker/year-panel", ["util","component/control","date-picker/decade-panel","event-dom/gesture/tap","node","gregorian-calendar-format","date-picker/xtpl/years-render","date-picker/xtpl/year-panel-render"], function(require, exports, module) {/**
 * @ignore
 * month select for date picker
 * @author yiminghe@gmail.com
 */
var util = require('util');
var Control = require('component/control'),
    DecadePanel = require('./decade-panel');
var TapGesture = require('event-dom/gesture/tap');
var tap = TapGesture.TAP;
var $ = require('node');
var DateFormat = require('gregorian-calendar-format'),
    YearsTpl = require('./xtpl/years-render'),
    YearPanelTpl = require('./xtpl/year-panel-render');

function prepareYears(self) {
    var value = self.get('value');
    var currentYear = value.getYear();
    var startYear = parseInt(currentYear / 10, 10) * 10;
    var preYear = startYear - 1;
    var current = value.clone();
    var locale = self.get('locale');
    var yearFormat = locale.yearFormat;
    var dateLocale = value.getLocale();
    var dateFormatter = new DateFormat(yearFormat, dateLocale);
    var years = [];
    var index = 0;
    for (var i = 0; i < 3; i++) {
        years[i] = [];
        for (var j = 0; j < 4; j++) {
            current.setYear(preYear + index);
            years[i][j] = {
                content: preYear + index,
                title: dateFormatter.format(current)
            };
            index++;
        }
    }
    self.years = years;
    return years;
}

function goYear(self, direction) {
    var next = self.get('value').clone();
    next.addYear(direction);
    self.set('value', next);
}

function nextDecade() {

    goYear(this, 10);
}

function prevDecade() {

    goYear(this, -10);
}

function chooseCell(e) {

    var td = $(e.currentTarget);
    var tr = td.parent();
    var tdIndex = td.index();
    var trIndex = tr.index();
    var value = this.get('value').clone();
    value.setYear(this.years[trIndex][tdIndex].content);
    this.set('value', value);
    this.fire('select', {
        value: value
    });
}

function showDecadePanel() {

    var decadePanel = this.get('decadePanel');
    decadePanel.set('value', this.get('value'));
    decadePanel.show();
}

function setUpDecadePanel() {
    var self = this;
    var decadePanel = new DecadePanel({
        locale: this.get('locale'),
        render: self.get('render')
    });
    decadePanel.on('select', onDecadePanelSelect, self);
    return decadePanel;
}

function onDecadePanelSelect(e) {
    this.set('value', e.value);
    this.get('decadePanel').hide();
}

module.exports = Control.extend({
    beforeCreateDom: function (renderData) {
        var self = this;
        var value = self.get('value');
        var currentYear = value.getYear();
        var startYear = parseInt(currentYear / 10, 10) * 10;
        var endYear = startYear + 9;
        var locale = self.get('locale');
        util.mix(renderData, {
            decadeSelectLabel: locale.decadeSelect,
            years: prepareYears(self),
            startYear: startYear,
            endYear: endYear,
            year: value.getYear(),
            previousDecadeLabel: locale.previousDecade,
            nextDecadeLabel: locale.nextDecade
        });
    },

    bindUI: function () {
        var self = this;
        self.get('nextDecadeBtn').on(tap, nextDecade, self);
        self.get('previousDecadeBtn').on(tap, prevDecade, self);
        self.get('tbodyEl').delegate(
            tap,
                '.' + self.getBaseCssClass('cell'),
            chooseCell,
            self
        );
        self.get('decadeSelectEl').on(tap, showDecadePanel, self);
    },

    _onSetValue: function (value) {
        var self = this;
        var currentYear = value.getYear();
        var startYear = parseInt(currentYear / 10, 10) * 10;
        var endYear = startYear + 9;
        util.mix(self.renderData, {
            startYear: startYear,
            endYear: endYear,
            years: prepareYears(self),
            year: value.getYear()
        });
        self.get('tbodyEl').html(this.renderTpl(YearsTpl));
        self.get('decadeSelectContentEl').html(startYear + '-' + endYear);
    }
}, {
    xclass: 'date-picker-year-panel',
    ATTRS: {
        contentTpl: {
            value: YearPanelTpl
        },
        focusable: {
            value: false
        },
        value: {
            render: 1
        },
        decadePanel: {
            valueFn: setUpDecadePanel
        },
        tbodyEl: {
            selector: function () {
                return '.' + this.getBaseCssClass('tbody');
            }
        },
        previousDecadeBtn: {
            selector: function () {
                return '.' + this.getBaseCssClass('prev-decade-btn');
            }
        },
        nextDecadeBtn: {
            selector: function () {
                return '.' + this.getBaseCssClass('next-decade-btn');
            }
        },
        decadeSelectEl: {
            selector: function () {
                return '.' + this.getBaseCssClass('decade-select');
            }
        },
        decadeSelectContentEl: {
            selector: function () {
                return '.' + this.getBaseCssClass('decade-select-content');
            }
        }
    }
});});
modulex.add("date-picker/decade-panel", ["util","event-dom/gesture/tap","node","component/control","date-picker/xtpl/decade-panel-render","date-picker/xtpl/decades-render"], function(require, exports, module) {/**
 * @ignore
 * decade panel for date picker
 * @author yiminghe@gmail.com
 */
var util = require('util');
var TapGesture = require('event-dom/gesture/tap');
var tap = TapGesture.TAP;
var $ = require('node');
var Control = require('component/control'),
    DecadePanelTpl = require('./xtpl/decade-panel-render'),
    MonthsTpl = require('./xtpl/decades-render');

function prepareYears(self, view) {
    var value = self.get('value');
    var currentYear = value.getYear();
    var startYear = parseInt(currentYear / 100, 10) * 100;
    var preYear = startYear - 10;
    var endYear = startYear + 99;
    var decades = [];
    var index = 0;
    for (var i = 0; i < 3; i++) {
        decades[i] = [];
        for (var j = 0; j < 4; j++) {
            decades[i][j] = {
                startDecade: preYear + index * 10,
                endDecade: preYear + index * 10 + 9
            };
            index++;
        }
    }
    self.decades = decades;
    util.mix(view.renderData, {
        startYear: startYear,
        endYear: endYear,
        year: currentYear,
        decades: decades
    });
}

function goYear(self, direction) {
    var next = self.get('value').clone();
    next.addYear(direction);
    self.set('value', next);
}

function nextCentury() {
    goYear(this, 100);
}

function previousCentury() {

    goYear(this, -100);
}

function chooseCell(e) {

    var td = $(e.currentTarget);
    var tr = td.parent();
    var tdIndex = td.index();
    var trIndex = tr.index();
    var value = this.get('value').clone();
    var y = value.getYear() % 10;
    value.setYear(this.decades[trIndex][tdIndex].startDecade + y);
    this.set('value', value);
    this.fire('select', {
        value: value
    });
}

module.exports = Control.extend({
    beforeCreateDom: function (renderData, childrenSelectors) {
        var self = this;
        var locale = self.get('locale');
        prepareYears(self, this);
        util.mix(renderData, {
            previousCenturyLabel: locale.previousCentury,
            nextCenturyLabel: locale.nextCentury
        });
        util.mix(childrenSelectors, {
            tbodyEl: '#ks-date-picker-decade-panel-tbody-{id}',
            previousCenturyBtn: '#ks-date-picker-decade-panel-previous-century-btn-{id}',
            centuryEl: '#ks-date-picker-decade-panel-century-{id}',
            nextCenturyBtn: '#ks-date-picker-decade-panel-next-century-btn-{id}'
        });
    },

    bindUI: function () {
        var self = this;
        self.get('nextCenturyBtn').on(tap, nextCentury, self);
        self.get('previousCenturyBtn').on(tap, previousCentury, self);
        self.get('tbodyEl').delegate(
            tap,
                '.' + self.getBaseCssClass('cell'),
            chooseCell,
            self
        );
    },

    _onSetValue: function () {
        var self = this;
        prepareYears(self, this);
        var startYear = this.renderData.startYear;
        var endYear = this.renderData.endYear;
        self.get('tbodyEl').html(this.renderTpl(MonthsTpl));
        self.get('centuryEl').html(startYear + '-' + endYear);
    }
}, {
    xclass: 'date-picker-decade-panel',
    ATTRS: {
        contentTpl: {
            value: DecadePanelTpl
        },
        focusable: {
            value: false
        },
        value: {
            render: 1
        },
        tbodyEl: {
            selector: function () {
                return '.' + this.getBaseCssClass('tbody');
            }
        },
        previousCenturyBtn: {
            selector: function () {
                return '.' + this.getBaseCssClass('prev-century-btn');
            }
        },
        nextCenturyBtn: {
            selector: function () {
                return '.' + this.getBaseCssClass('next-century-btn');
            }
        },
        centuryEl: {
            selector: function () {
                return '.' + this.getBaseCssClass('century');
            }
        }
    }
});
});
modulex.add("date-picker/xtpl/decade-panel-render", ["date-picker/xtpl/decade-panel","xtemplate/runtime"], function(require, exports, module) {var tpl = require("./decade-panel");
var XTemplateRuntime = require("xtemplate/runtime");
var instance = new XTemplateRuntime(tpl);
module.exports = function(){
return instance.render.apply(instance,arguments);
};});
modulex.add("date-picker/xtpl/decade-panel", ["date-picker/xtpl/decades"], function(require, exports, module) {module.exports = function decadePanel(undefined){
var t;
var t0;
var t1;
var t2;
var t3;
var t4;
var t5;
var t6;
var t7;
var t8;
var t9;
var tpl = this;
var root = tpl.root;
var buffer = tpl.buffer;
var scope = tpl.scope;
var name = tpl.name;
var pos = tpl.pos;
var data = scope.data;
var affix = scope.affix;
var nativeCommands = root.nativeCommands;
var utils = root.utils;
var callFnUtil = utils["callFn"];
var callCommandUtil = utils["callCommand"];
var rangeCommand = nativeCommands["range"];
var foreachCommand = nativeCommands["foreach"];
var forinCommand = nativeCommands["forin"];
var eachCommand = nativeCommands["each"];
var withCommand = nativeCommands["with"];
var ifCommand = nativeCommands["if"];
var setCommand = nativeCommands["set"];
var includeCommand = nativeCommands["include"];
var parseCommand = nativeCommands["parse"];
var extendCommand = nativeCommands["extend"];
var blockCommand = nativeCommands["block"];
var macroCommand = nativeCommands["macro"];
var debuggerCommand = nativeCommands["debugger"];


buffer.data += '<div class="';
var callRet0
callRet0 = callFnUtil(tpl, scope, {escape:1,params:['header']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet0);
buffer.data += '">\r\n    <a class="';
pos.line = 2;
var callRet1
callRet1 = callFnUtil(tpl, scope, {escape:1,params:['prev-century-btn']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet1);
buffer.data += '"\r\n       href="javascript:void(0)"\r\n       role="button"\r\n       title="';
pos.line = 5;
var id2 = ((t=(affix.previousCenturyLabel)) !== undefined ? t:((t = data.previousCenturyLabel) !== undefined ? t :scope.resolveLooseUp(["previousCenturyLabel"])));
buffer = buffer.writeEscaped(id2);
buffer.data += '"\r\n       hidefocus="on">\r\n    </a>\r\n    <div class="';
pos.line = 8;
var callRet3
callRet3 = callFnUtil(tpl, scope, {escape:1,params:['century']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet3);
buffer.data += '">\r\n                ';
pos.line = 9;
var id4 = ((t=(affix.startYear)) !== undefined ? t:((t = data.startYear) !== undefined ? t :scope.resolveLooseUp(["startYear"])));
buffer = buffer.writeEscaped(id4);
buffer.data += '-';
var id5 = ((t=(affix.endYear)) !== undefined ? t:((t = data.endYear) !== undefined ? t :scope.resolveLooseUp(["endYear"])));
buffer = buffer.writeEscaped(id5);
buffer.data += '\r\n    </div>\r\n    <a class="';
pos.line = 11;
var callRet6
callRet6 = callFnUtil(tpl, scope, {escape:1,params:['next-century-btn']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet6);
buffer.data += '"\r\n       href="javascript:void(0)"\r\n       role="button"\r\n       title="';
pos.line = 14;
var id7 = ((t=(affix.nextCenturyLabel)) !== undefined ? t:((t = data.nextCenturyLabel) !== undefined ? t :scope.resolveLooseUp(["nextCenturyLabel"])));
buffer = buffer.writeEscaped(id7);
buffer.data += '"\r\n       hidefocus="on">\r\n    </a>\r\n</div>\r\n<div class="';
pos.line = 18;
var callRet8
callRet8 = callFnUtil(tpl, scope, {escape:1,params:['body']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet8);
buffer.data += '">\r\n    <table class="';
pos.line = 19;
var callRet9
callRet9 = callFnUtil(tpl, scope, {escape:1,params:['table']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet9);
buffer.data += '" cellspacing="0" role="grid">\r\n        <tbody class="';
pos.line = 20;
var callRet10
callRet10 = callFnUtil(tpl, scope, {escape:1,params:['tbody']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet10);
buffer.data += '">\r\n        ';
pos.line = 21;
var callRet11
buffer = root.include(scope,{params:[require("./decades").TPL_NAME]},buffer,tpl);
buffer = buffer.write(callRet11);
buffer.data += '\r\n        </tbody>\r\n    </table>\r\n</div>';
return buffer;
};
module.exports.TPL_NAME = module.id || module.name;});
modulex.add("date-picker/xtpl/decades", [], function(require, exports, module) {module.exports = function decades(undefined){
var t;
var t0;
var t1;
var t2;
var t3;
var t4;
var t5;
var t6;
var t7;
var t8;
var t9;
var tpl = this;
var root = tpl.root;
var buffer = tpl.buffer;
var scope = tpl.scope;
var name = tpl.name;
var pos = tpl.pos;
var data = scope.data;
var affix = scope.affix;
var nativeCommands = root.nativeCommands;
var utils = root.utils;
var callFnUtil = utils["callFn"];
var callCommandUtil = utils["callCommand"];
var rangeCommand = nativeCommands["range"];
var foreachCommand = nativeCommands["foreach"];
var forinCommand = nativeCommands["forin"];
var eachCommand = nativeCommands["each"];
var withCommand = nativeCommands["with"];
var ifCommand = nativeCommands["if"];
var setCommand = nativeCommands["set"];
var includeCommand = nativeCommands["include"];
var parseCommand = nativeCommands["parse"];
var extendCommand = nativeCommands["extend"];
var blockCommand = nativeCommands["block"];
var macroCommand = nativeCommands["macro"];
var debuggerCommand = nativeCommands["debugger"];
function func3(scope, buffer, undefined) {
var data = scope.data;
var affix = scope.affix;
buffer.data += '\r\n         ';
pos.line = 7;
var callRet4
callRet4 = callFnUtil(tpl, scope, {escape:1,params:['selected-cell']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet4);
buffer.data += '\r\n        ';
return buffer;
}
function func12(scope, buffer, undefined) {
var data = scope.data;
var affix = scope.affix;
buffer.data += '\r\n         ';
pos.line = 10;
var callRet13
callRet13 = callFnUtil(tpl, scope, {escape:1,params:['last-century-cell']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet13);
buffer.data += '\r\n        ';
return buffer;
}
function func17(scope, buffer, undefined) {
var data = scope.data;
var affix = scope.affix;
buffer.data += '\r\n         ';
pos.line = 13;
var callRet18
callRet18 = callFnUtil(tpl, scope, {escape:1,params:['next-century-cell']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet18);
buffer.data += '\r\n        ';
return buffer;
}
function func1(scope, buffer, undefined) {
var data = scope.data;
var affix = scope.affix;
buffer.data += '\r\n    <td role="gridcell"\r\n        class="';
pos.line = 5;
var callRet2
callRet2 = callFnUtil(tpl, scope, {escape:1,params:['cell']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet2);
buffer.data += '\r\n        ';
pos.line = 6;
pos.line = 6;
var id5 = ((t=(affix.startDecade)) !== undefined ? t:((t = data.startDecade) !== undefined ? t :scope.resolveLooseUp(["startDecade"])));
var exp7 = id5;
var id6 = ((t=(affix.year)) !== undefined ? t:((t = data.year) !== undefined ? t :scope.resolveLooseUp(["year"])));
exp7 = (id5)<=(id6);
var exp11 = exp7;
if((exp11)){
var id8 = ((t=(affix.year)) !== undefined ? t:((t = data.year) !== undefined ? t :scope.resolveLooseUp(["year"])));
var exp10 = id8;
var id9 = ((t=(affix.endDecade)) !== undefined ? t:((t = data.endDecade) !== undefined ? t :scope.resolveLooseUp(["endDecade"])));
exp10 = (id8)<=(id9);
exp11 = exp10;
}
buffer = ifCommand.call(tpl, scope, {params:[exp11],fn: func3}, buffer);
buffer.data += '\r\n        ';
pos.line = 9;
pos.line = 9;
var id14 = ((t=(affix.startDecade)) !== undefined ? t:((t = data.startDecade) !== undefined ? t :scope.resolveLooseUp(["startDecade"])));
var exp16 = id14;
var id15 = ((t=(affix.startYear)) !== undefined ? t:((t = data.startYear) !== undefined ? t :scope.resolveLooseUp(["startYear"])));
exp16 = (id14)<(id15);
buffer = ifCommand.call(tpl, scope, {params:[exp16],fn: func12}, buffer);
buffer.data += '\r\n        ';
pos.line = 12;
pos.line = 12;
var id19 = ((t=(affix.endDecade)) !== undefined ? t:((t = data.endDecade) !== undefined ? t :scope.resolveLooseUp(["endDecade"])));
var exp21 = id19;
var id20 = ((t=(affix.endYear)) !== undefined ? t:((t = data.endYear) !== undefined ? t :scope.resolveLooseUp(["endYear"])));
exp21 = (id19)>(id20);
buffer = ifCommand.call(tpl, scope, {params:[exp21],fn: func17}, buffer);
buffer.data += '\r\n        ">\r\n        <a hidefocus="on"\r\n           href="javascript:void(0)"\r\n           unselectable="on"\r\n           class="';
pos.line = 19;
var callRet22
callRet22 = callFnUtil(tpl, scope, {escape:1,params:['decade']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet22);
buffer.data += '">\r\n            ';
pos.line = 20;
var id23 = ((t=(affix.startDecade)) !== undefined ? t:((t = data.startDecade) !== undefined ? t :scope.resolveLooseUp(["startDecade"])));
buffer = buffer.writeEscaped(id23);
buffer.data += '-';
var id24 = ((t=(affix.endDecade)) !== undefined ? t:((t = data.endDecade) !== undefined ? t :scope.resolveLooseUp(["endDecade"])));
buffer = buffer.writeEscaped(id24);
buffer.data += '\r\n        </a>\r\n    </td>\r\n    ';
return buffer;
}
function func0(scope, buffer, undefined) {
var data = scope.data;
var affix = scope.affix;
buffer.data += '\r\n<tr role="row">\r\n    ';
pos.line = 3;
pos.line = 3;
var id26 = ((t=(affix.xindex)) !== undefined ? t:((t = data.xindex) !== undefined ? t :scope.resolveLooseUp(["xindex"])));
var id25 = ((t=(affix.decades)) !== undefined ? affix.decades[id26]:((t = data.decades) !== undefined ? (t[id26]) :scope.resolveLooseUp(["decades",id26])));
buffer = eachCommand.call(tpl, scope, {params:[id25],fn: func1}, buffer);
buffer.data += '\r\n</tr>\r\n';
return buffer;
}


buffer.data += '';
pos.line = 1;
pos.line = 1;
var id27 = ((t=(affix.decades)) !== undefined ? t:((t = data.decades) !== undefined ? t :scope.resolveLooseUp(["decades"])));
buffer = eachCommand.call(tpl, scope, {params:[id27],fn: func0}, buffer);
return buffer;
};
module.exports.TPL_NAME = module.id || module.name;});
modulex.add("date-picker/xtpl/decades-render", ["date-picker/xtpl/decades","xtemplate/runtime"], function(require, exports, module) {var tpl = require("./decades");
var XTemplateRuntime = require("xtemplate/runtime");
var instance = new XTemplateRuntime(tpl);
module.exports = function(){
return instance.render.apply(instance,arguments);
};});
modulex.add("date-picker/xtpl/years-render", ["date-picker/xtpl/years","xtemplate/runtime"], function(require, exports, module) {var tpl = require("./years");
var XTemplateRuntime = require("xtemplate/runtime");
var instance = new XTemplateRuntime(tpl);
module.exports = function(){
return instance.render.apply(instance,arguments);
};});
modulex.add("date-picker/xtpl/years", [], function(require, exports, module) {module.exports = function years(undefined){
var t;
var t0;
var t1;
var t2;
var t3;
var t4;
var t5;
var t6;
var t7;
var t8;
var t9;
var tpl = this;
var root = tpl.root;
var buffer = tpl.buffer;
var scope = tpl.scope;
var name = tpl.name;
var pos = tpl.pos;
var data = scope.data;
var affix = scope.affix;
var nativeCommands = root.nativeCommands;
var utils = root.utils;
var callFnUtil = utils["callFn"];
var callCommandUtil = utils["callCommand"];
var rangeCommand = nativeCommands["range"];
var foreachCommand = nativeCommands["foreach"];
var forinCommand = nativeCommands["forin"];
var eachCommand = nativeCommands["each"];
var withCommand = nativeCommands["with"];
var ifCommand = nativeCommands["if"];
var setCommand = nativeCommands["set"];
var includeCommand = nativeCommands["include"];
var parseCommand = nativeCommands["parse"];
var extendCommand = nativeCommands["extend"];
var blockCommand = nativeCommands["block"];
var macroCommand = nativeCommands["macro"];
var debuggerCommand = nativeCommands["debugger"];
function func4(scope, buffer, undefined) {
var data = scope.data;
var affix = scope.affix;
buffer.data += '\r\n         ';
pos.line = 8;
var callRet5
callRet5 = callFnUtil(tpl, scope, {escape:1,params:['selected-cell']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet5);
buffer.data += '\r\n        ';
return buffer;
}
function func9(scope, buffer, undefined) {
var data = scope.data;
var affix = scope.affix;
buffer.data += '\r\n         ';
pos.line = 11;
var callRet10
callRet10 = callFnUtil(tpl, scope, {escape:1,params:['last-decade-cell']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet10);
buffer.data += '\r\n        ';
return buffer;
}
function func14(scope, buffer, undefined) {
var data = scope.data;
var affix = scope.affix;
buffer.data += '\r\n         ';
pos.line = 14;
var callRet15
callRet15 = callFnUtil(tpl, scope, {escape:1,params:['next-decade-cell']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet15);
buffer.data += '\r\n        ';
return buffer;
}
function func1(scope, buffer, undefined) {
var data = scope.data;
var affix = scope.affix;
buffer.data += '\r\n    <td role="gridcell"\r\n        title="';
pos.line = 5;
var id2 = ((t=(affix.title)) !== undefined ? t:((t = data.title) !== undefined ? t :scope.resolveLooseUp(["title"])));
buffer = buffer.writeEscaped(id2);
buffer.data += '"\r\n        class="';
pos.line = 6;
var callRet3
callRet3 = callFnUtil(tpl, scope, {escape:1,params:['cell']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet3);
buffer.data += '\r\n        ';
pos.line = 7;
pos.line = 7;
var id6 = ((t=(affix.content)) !== undefined ? t:((t = data.content) !== undefined ? t :scope.resolveLooseUp(["content"])));
var exp8 = id6;
var id7 = ((t=(affix.year)) !== undefined ? t:((t = data.year) !== undefined ? t :scope.resolveLooseUp(["year"])));
exp8 = (id6)===(id7);
buffer = ifCommand.call(tpl, scope, {params:[exp8],fn: func4}, buffer);
buffer.data += '\r\n        ';
pos.line = 10;
pos.line = 10;
var id11 = ((t=(affix.content)) !== undefined ? t:((t = data.content) !== undefined ? t :scope.resolveLooseUp(["content"])));
var exp13 = id11;
var id12 = ((t=(affix.startYear)) !== undefined ? t:((t = data.startYear) !== undefined ? t :scope.resolveLooseUp(["startYear"])));
exp13 = (id11)<(id12);
buffer = ifCommand.call(tpl, scope, {params:[exp13],fn: func9}, buffer);
buffer.data += '\r\n        ';
pos.line = 13;
pos.line = 13;
var id16 = ((t=(affix.content)) !== undefined ? t:((t = data.content) !== undefined ? t :scope.resolveLooseUp(["content"])));
var exp18 = id16;
var id17 = ((t=(affix.endYear)) !== undefined ? t:((t = data.endYear) !== undefined ? t :scope.resolveLooseUp(["endYear"])));
exp18 = (id16)>(id17);
buffer = ifCommand.call(tpl, scope, {params:[exp18],fn: func14}, buffer);
buffer.data += '\r\n        ">\r\n        <a hidefocus="on"\r\n           href="javascript:void(0)"\r\n           unselectable="on"\r\n           class="';
pos.line = 20;
var callRet19
callRet19 = callFnUtil(tpl, scope, {escape:1,params:['year']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet19);
buffer.data += '">\r\n            ';
pos.line = 21;
var id20 = ((t=(affix.content)) !== undefined ? t:((t = data.content) !== undefined ? t :scope.resolveLooseUp(["content"])));
buffer = buffer.writeEscaped(id20);
buffer.data += '\r\n        </a>\r\n    </td>\r\n    ';
return buffer;
}
function func0(scope, buffer, undefined) {
var data = scope.data;
var affix = scope.affix;
buffer.data += '\r\n<tr role="row">\r\n    ';
pos.line = 3;
pos.line = 3;
var id22 = ((t=(affix.xindex)) !== undefined ? t:((t = data.xindex) !== undefined ? t :scope.resolveLooseUp(["xindex"])));
var id21 = ((t=(affix.years)) !== undefined ? affix.years[id22]:((t = data.years) !== undefined ? (t[id22]) :scope.resolveLooseUp(["years",id22])));
buffer = eachCommand.call(tpl, scope, {params:[id21],fn: func1}, buffer);
buffer.data += '\r\n</tr>\r\n';
return buffer;
}


buffer.data += '';
pos.line = 1;
pos.line = 1;
var id23 = ((t=(affix.years)) !== undefined ? t:((t = data.years) !== undefined ? t :scope.resolveLooseUp(["years"])));
buffer = eachCommand.call(tpl, scope, {params:[id23],fn: func0}, buffer);
return buffer;
};
module.exports.TPL_NAME = module.id || module.name;});
modulex.add("date-picker/xtpl/year-panel-render", ["date-picker/xtpl/year-panel","xtemplate/runtime"], function(require, exports, module) {var tpl = require("./year-panel");
var XTemplateRuntime = require("xtemplate/runtime");
var instance = new XTemplateRuntime(tpl);
module.exports = function(){
return instance.render.apply(instance,arguments);
};});
modulex.add("date-picker/xtpl/year-panel", ["date-picker/xtpl/years"], function(require, exports, module) {module.exports = function yearPanel(undefined){
var t;
var t0;
var t1;
var t2;
var t3;
var t4;
var t5;
var t6;
var t7;
var t8;
var t9;
var tpl = this;
var root = tpl.root;
var buffer = tpl.buffer;
var scope = tpl.scope;
var name = tpl.name;
var pos = tpl.pos;
var data = scope.data;
var affix = scope.affix;
var nativeCommands = root.nativeCommands;
var utils = root.utils;
var callFnUtil = utils["callFn"];
var callCommandUtil = utils["callCommand"];
var rangeCommand = nativeCommands["range"];
var foreachCommand = nativeCommands["foreach"];
var forinCommand = nativeCommands["forin"];
var eachCommand = nativeCommands["each"];
var withCommand = nativeCommands["with"];
var ifCommand = nativeCommands["if"];
var setCommand = nativeCommands["set"];
var includeCommand = nativeCommands["include"];
var parseCommand = nativeCommands["parse"];
var extendCommand = nativeCommands["extend"];
var blockCommand = nativeCommands["block"];
var macroCommand = nativeCommands["macro"];
var debuggerCommand = nativeCommands["debugger"];


buffer.data += '<div class="';
pos.line = 1;
var callRet0
callRet0 = callFnUtil(tpl, scope, {escape:1,params:['header']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet0);
buffer.data += '">\r\n    <a class="';
pos.line = 2;
var callRet1
callRet1 = callFnUtil(tpl, scope, {escape:1,params:['prev-decade-btn']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet1);
buffer.data += '"\r\n       href="javascript:void(0)"\r\n       role="button"\r\n       title="';
pos.line = 5;
var id2 = ((t=(affix.previousDecadeLabel)) !== undefined ? t:((t = data.previousDecadeLabel) !== undefined ? t :scope.resolveLooseUp(["previousDecadeLabel"])));
buffer = buffer.writeEscaped(id2);
buffer.data += '"\r\n       hidefocus="on">\r\n    </a>\r\n\r\n    <a class="';
pos.line = 9;
var callRet3
callRet3 = callFnUtil(tpl, scope, {escape:1,params:['decade-select']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet3);
buffer.data += '"\r\n       role="button"\r\n       href="javascript:void(0)"\r\n       hidefocus="on"\r\n       title="';
pos.line = 13;
var id4 = ((t=(affix.decadeSelectLabel)) !== undefined ? t:((t = data.decadeSelectLabel) !== undefined ? t :scope.resolveLooseUp(["decadeSelectLabel"])));
buffer = buffer.writeEscaped(id4);
buffer.data += '">\r\n            <span class="';
pos.line = 14;
var callRet5
callRet5 = callFnUtil(tpl, scope, {escape:1,params:['decade-select-content']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet5);
buffer.data += '">\r\n                ';
pos.line = 15;
var id6 = ((t=(affix.startYear)) !== undefined ? t:((t = data.startYear) !== undefined ? t :scope.resolveLooseUp(["startYear"])));
buffer = buffer.writeEscaped(id6);
buffer.data += '-';
var id7 = ((t=(affix.endYear)) !== undefined ? t:((t = data.endYear) !== undefined ? t :scope.resolveLooseUp(["endYear"])));
buffer = buffer.writeEscaped(id7);
buffer.data += '\r\n            </span>\r\n        <span class="';
pos.line = 17;
var callRet8
callRet8 = callFnUtil(tpl, scope, {escape:1,params:['decade-select-arrow']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet8);
buffer.data += '">x</span>\r\n    </a>\r\n\r\n    <a class="';
pos.line = 20;
var callRet9
callRet9 = callFnUtil(tpl, scope, {escape:1,params:['next-decade-btn']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet9);
buffer.data += '"\r\n       href="javascript:void(0)"\r\n       role="button"\r\n       title="';
pos.line = 23;
var id10 = ((t=(affix.nextDecadeLabel)) !== undefined ? t:((t = data.nextDecadeLabel) !== undefined ? t :scope.resolveLooseUp(["nextDecadeLabel"])));
buffer = buffer.writeEscaped(id10);
buffer.data += '"\r\n       hidefocus="on">\r\n    </a>\r\n</div>\r\n<div class="';
pos.line = 27;
var callRet11
callRet11 = callFnUtil(tpl, scope, {escape:1,params:['body']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet11);
buffer.data += '">\r\n    <table class="';
pos.line = 28;
var callRet12
callRet12 = callFnUtil(tpl, scope, {escape:1,params:['table']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet12);
buffer.data += '" cellspacing="0" role="grid">\r\n        <tbody class="';
pos.line = 29;
var callRet13
callRet13 = callFnUtil(tpl, scope, {escape:1,params:['tbody']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet13);
buffer.data += '">\r\n        ';
pos.line = 30;
var callRet14
buffer = root.include(scope,{params:[require("./years").TPL_NAME]},buffer,tpl);
buffer = buffer.write(callRet14);
buffer.data += '\r\n        </tbody>\r\n    </table>\r\n</div>';
return buffer;
};
module.exports.TPL_NAME = module.id || module.name;});
modulex.add("date-picker/xtpl/months-render", ["date-picker/xtpl/months","xtemplate/runtime"], function(require, exports, module) {var tpl = require("./months");
var XTemplateRuntime = require("xtemplate/runtime");
var instance = new XTemplateRuntime(tpl);
module.exports = function(){
return instance.render.apply(instance,arguments);
};});
modulex.add("date-picker/xtpl/months", [], function(require, exports, module) {module.exports = function months(undefined){
var t;
var t0;
var t1;
var t2;
var t3;
var t4;
var t5;
var t6;
var t7;
var t8;
var t9;
var tpl = this;
var root = tpl.root;
var buffer = tpl.buffer;
var scope = tpl.scope;
var name = tpl.name;
var pos = tpl.pos;
var data = scope.data;
var affix = scope.affix;
var nativeCommands = root.nativeCommands;
var utils = root.utils;
var callFnUtil = utils["callFn"];
var callCommandUtil = utils["callCommand"];
var rangeCommand = nativeCommands["range"];
var foreachCommand = nativeCommands["foreach"];
var forinCommand = nativeCommands["forin"];
var eachCommand = nativeCommands["each"];
var withCommand = nativeCommands["with"];
var ifCommand = nativeCommands["if"];
var setCommand = nativeCommands["set"];
var includeCommand = nativeCommands["include"];
var parseCommand = nativeCommands["parse"];
var extendCommand = nativeCommands["extend"];
var blockCommand = nativeCommands["block"];
var macroCommand = nativeCommands["macro"];
var debuggerCommand = nativeCommands["debugger"];
function func4(scope, buffer, undefined) {
var data = scope.data;
var affix = scope.affix;
buffer.data += '\r\n        ';
pos.line = 8;
var callRet5
callRet5 = callFnUtil(tpl, scope, {escape:1,params:['selected-cell']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet5);
buffer.data += '\r\n        ';
return buffer;
}
function func1(scope, buffer, undefined) {
var data = scope.data;
var affix = scope.affix;
buffer.data += '\r\n    <td role="gridcell"\r\n        title="';
pos.line = 5;
var id2 = ((t=(affix.title)) !== undefined ? t:((t = data.title) !== undefined ? t :scope.resolveLooseUp(["title"])));
buffer = buffer.writeEscaped(id2);
buffer.data += '"\r\n        class="';
pos.line = 6;
var callRet3
callRet3 = callFnUtil(tpl, scope, {escape:1,params:['cell']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet3);
buffer.data += '\r\n        ';
pos.line = 7;
pos.line = 7;
var id6 = ((t=(affix.month)) !== undefined ? t:((t = data.month) !== undefined ? t :scope.resolveLooseUp(["month"])));
var exp8 = id6;
var id7 = ((t=(affix.value)) !== undefined ? t:((t = data.value) !== undefined ? t :scope.resolveLooseUp(["value"])));
exp8 = (id6)===(id7);
buffer = ifCommand.call(tpl, scope, {params:[exp8],fn: func4}, buffer);
buffer.data += '\r\n        ">\r\n        <a hidefocus="on"\r\n           href="javascript:void(0)"\r\n           unselectable="on"\r\n           class="';
pos.line = 14;
var callRet9
callRet9 = callFnUtil(tpl, scope, {escape:1,params:['month']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet9);
buffer.data += '">\r\n            ';
pos.line = 15;
var id10 = ((t=(affix.content)) !== undefined ? t:((t = data.content) !== undefined ? t :scope.resolveLooseUp(["content"])));
buffer = buffer.writeEscaped(id10);
buffer.data += '\r\n        </a>\r\n    </td>\r\n    ';
return buffer;
}
function func0(scope, buffer, undefined) {
var data = scope.data;
var affix = scope.affix;
buffer.data += '\r\n<tr role="row">\r\n    ';
pos.line = 3;
pos.line = 3;
var id12 = ((t=(affix.xindex)) !== undefined ? t:((t = data.xindex) !== undefined ? t :scope.resolveLooseUp(["xindex"])));
var id11 = ((t=(affix.months)) !== undefined ? affix.months[id12]:((t = data.months) !== undefined ? (t[id12]) :scope.resolveLooseUp(["months",id12])));
buffer = eachCommand.call(tpl, scope, {params:[id11],fn: func1}, buffer);
buffer.data += '\r\n</tr>\r\n';
return buffer;
}


buffer.data += '';
pos.line = 1;
pos.line = 1;
var id13 = ((t=(affix.months)) !== undefined ? t:((t = data.months) !== undefined ? t :scope.resolveLooseUp(["months"])));
buffer = eachCommand.call(tpl, scope, {params:[id13],fn: func0}, buffer);
return buffer;
};
module.exports.TPL_NAME = module.id || module.name;});
modulex.add("date-picker/xtpl/month-panel-render", ["date-picker/xtpl/month-panel","xtemplate/runtime"], function(require, exports, module) {var tpl = require("./month-panel");
var XTemplateRuntime = require("xtemplate/runtime");
var instance = new XTemplateRuntime(tpl);
module.exports = function(){
return instance.render.apply(instance,arguments);
};});
modulex.add("date-picker/xtpl/month-panel", ["date-picker/xtpl/months"], function(require, exports, module) {module.exports = function monthPanel(undefined){
var t;
var t0;
var t1;
var t2;
var t3;
var t4;
var t5;
var t6;
var t7;
var t8;
var t9;
var tpl = this;
var root = tpl.root;
var buffer = tpl.buffer;
var scope = tpl.scope;
var name = tpl.name;
var pos = tpl.pos;
var data = scope.data;
var affix = scope.affix;
var nativeCommands = root.nativeCommands;
var utils = root.utils;
var callFnUtil = utils["callFn"];
var callCommandUtil = utils["callCommand"];
var rangeCommand = nativeCommands["range"];
var foreachCommand = nativeCommands["foreach"];
var forinCommand = nativeCommands["forin"];
var eachCommand = nativeCommands["each"];
var withCommand = nativeCommands["with"];
var ifCommand = nativeCommands["if"];
var setCommand = nativeCommands["set"];
var includeCommand = nativeCommands["include"];
var parseCommand = nativeCommands["parse"];
var extendCommand = nativeCommands["extend"];
var blockCommand = nativeCommands["block"];
var macroCommand = nativeCommands["macro"];
var debuggerCommand = nativeCommands["debugger"];


buffer.data += '<div class="';
var callRet0
callRet0 = callFnUtil(tpl, scope, {escape:1,params:['header']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet0);
buffer.data += '">\r\n    <a class="';
pos.line = 2;
var callRet1
callRet1 = callFnUtil(tpl, scope, {escape:1,params:['prev-year-btn']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet1);
buffer.data += '"\r\n       href="javascript:void(0)"\r\n       role="button"\r\n       title="';
pos.line = 5;
var id2 = ((t=(affix.previousYearLabel)) !== undefined ? t:((t = data.previousYearLabel) !== undefined ? t :scope.resolveLooseUp(["previousYearLabel"])));
buffer = buffer.writeEscaped(id2);
buffer.data += '"\r\n       hidefocus="on">\r\n    </a>\r\n\r\n    <a class="';
pos.line = 9;
var callRet3
callRet3 = callFnUtil(tpl, scope, {escape:1,params:['year-select']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet3);
buffer.data += '"\r\n       role="button"\r\n       href="javascript:void(0)"\r\n       hidefocus="on"\r\n       title="';
pos.line = 13;
var id4 = ((t=(affix.yearSelectLabel)) !== undefined ? t:((t = data.yearSelectLabel) !== undefined ? t :scope.resolveLooseUp(["yearSelectLabel"])));
buffer = buffer.writeEscaped(id4);
buffer.data += '">\r\n        <span class="';
pos.line = 14;
var callRet5
callRet5 = callFnUtil(tpl, scope, {escape:1,params:['year-select-content']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet5);
buffer.data += '">';
var id6 = ((t=(affix.year)) !== undefined ? t:((t = data.year) !== undefined ? t :scope.resolveLooseUp(["year"])));
buffer = buffer.writeEscaped(id6);
buffer.data += '</span>\r\n        <span class="';
pos.line = 15;
var callRet7
callRet7 = callFnUtil(tpl, scope, {escape:1,params:['year-select-arrow']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet7);
buffer.data += '">x</span>\r\n    </a>\r\n\r\n    <a class="';
pos.line = 18;
var callRet8
callRet8 = callFnUtil(tpl, scope, {escape:1,params:['next-year-btn']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet8);
buffer.data += '"\r\n       href="javascript:void(0)"\r\n       role="button"\r\n       title="';
pos.line = 21;
var id9 = ((t=(affix.nextYearLabel)) !== undefined ? t:((t = data.nextYearLabel) !== undefined ? t :scope.resolveLooseUp(["nextYearLabel"])));
buffer = buffer.writeEscaped(id9);
buffer.data += '"\r\n       hidefocus="on">\r\n    </a>\r\n</div>\r\n<div class="';
pos.line = 25;
var callRet10
callRet10 = callFnUtil(tpl, scope, {escape:1,params:['body']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet10);
buffer.data += '">\r\n    <table class="';
pos.line = 26;
var callRet11
callRet11 = callFnUtil(tpl, scope, {escape:1,params:['table']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet11);
buffer.data += '" cellspacing="0" role="grid">\r\n        <tbody class="';
pos.line = 27;
var callRet12
callRet12 = callFnUtil(tpl, scope, {escape:1,params:['tbody']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet12);
buffer.data += '">\r\n        ';
pos.line = 28;
var callRet13
buffer = root.include(scope,{params:[require("./months").TPL_NAME]},buffer,tpl);
buffer = buffer.write(callRet13);
buffer.data += '\r\n        </tbody>\r\n    </table>\r\n</div>';
return buffer;
};
module.exports.TPL_NAME = module.id || module.name;});
modulex.add("date-picker/xtpl/picker-render", ["date-picker/xtpl/picker","xtemplate/runtime"], function(require, exports, module) {var tpl = require("./picker");
var XTemplateRuntime = require("xtemplate/runtime");
var instance = new XTemplateRuntime(tpl);
module.exports = function(){
return instance.render.apply(instance,arguments);
};});
modulex.add("date-picker/xtpl/picker", [], function(require, exports, module) {module.exports = function picker(undefined){
var t;
var t0;
var t1;
var t2;
var t3;
var t4;
var t5;
var t6;
var t7;
var t8;
var t9;
var tpl = this;
var root = tpl.root;
var buffer = tpl.buffer;
var scope = tpl.scope;
var name = tpl.name;
var pos = tpl.pos;
var data = scope.data;
var affix = scope.affix;
var nativeCommands = root.nativeCommands;
var utils = root.utils;
var callFnUtil = utils["callFn"];
var callCommandUtil = utils["callCommand"];
var rangeCommand = nativeCommands["range"];
var foreachCommand = nativeCommands["foreach"];
var forinCommand = nativeCommands["forin"];
var eachCommand = nativeCommands["each"];
var withCommand = nativeCommands["with"];
var ifCommand = nativeCommands["if"];
var setCommand = nativeCommands["set"];
var includeCommand = nativeCommands["include"];
var parseCommand = nativeCommands["parse"];
var extendCommand = nativeCommands["extend"];
var blockCommand = nativeCommands["block"];
var macroCommand = nativeCommands["macro"];
var debuggerCommand = nativeCommands["debugger"];
function func16(scope, buffer, undefined) {
var data = scope.data;
var affix = scope.affix;
buffer.data += '\r\n            <th role="columnheader" class="';
pos.line = 45;
var callRet17
callRet17 = callFnUtil(tpl, scope, {escape:1,params:['column-header']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet17);
buffer.data += ' ';
var callRet18
callRet18 = callFnUtil(tpl, scope, {escape:1,params:['week-number-header']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet18);
buffer.data += '">\r\n                <span class="';
pos.line = 46;
var callRet19
callRet19 = callFnUtil(tpl, scope, {escape:1,params:['column-header-inner']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet19);
buffer.data += '">x</span>\r\n            </th>\r\n            ';
return buffer;
}
function func21(scope, buffer, undefined) {
var data = scope.data;
var affix = scope.affix;
buffer.data += '\r\n            <th role="columnheader" title="';
pos.line = 50;
var id22 = data;
buffer = buffer.writeEscaped(id22);
buffer.data += '" class="';
var callRet23
callRet23 = callFnUtil(tpl, scope, {escape:1,params:['column-header']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet23);
buffer.data += '">\r\n                <span class="';
pos.line = 51;
var callRet24
callRet24 = callFnUtil(tpl, scope, {escape:1,params:['column-header-inner']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet24);
buffer.data += '">\r\n                    ';
pos.line = 52;
var id26 = ((t=(affix.xindex)) !== undefined ? t:((t = data.xindex) !== undefined ? t :scope.resolveLooseUp(["xindex"])));
var id25 = ((t=(affix.veryShortWeekdays)) !== undefined ? affix.veryShortWeekdays[id26]:((t = data.veryShortWeekdays) !== undefined ? (t[id26]) :scope.resolveLooseUp(["veryShortWeekdays",id26])));
buffer = buffer.writeEscaped(id25);
buffer.data += '\r\n                </span>\r\n            </th>\r\n            ';
return buffer;
}
function func30(scope, buffer, undefined) {
var data = scope.data;
var affix = scope.affix;
buffer.data += '\r\n<div class="';
pos.line = 64;
var callRet31
callRet31 = callFnUtil(tpl, scope, {escape:1,params:['footer']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet31);
buffer.data += '">\r\n    <a class="';
pos.line = 65;
var callRet32
callRet32 = callFnUtil(tpl, scope, {escape:1,params:['today-btn']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet32);
buffer.data += '"\r\n       role="button"\r\n       hidefocus="on"\r\n       tabindex="-1"\r\n       href="javascript:void(0)"\r\n       title="';
pos.line = 70;
var id33 = ((t=(affix.todayTimeLabel)) !== undefined ? t:((t = data.todayTimeLabel) !== undefined ? t :scope.resolveLooseUp(["todayTimeLabel"])));
buffer = buffer.writeEscaped(id33);
buffer.data += '">';
var id34 = ((t=(affix.todayLabel)) !== undefined ? t:((t = data.todayLabel) !== undefined ? t :scope.resolveLooseUp(["todayLabel"])));
buffer = buffer.writeEscaped(id34);
buffer.data += '</a>\r\n    <a class="';
pos.line = 71;
var callRet35
callRet35 = callFnUtil(tpl, scope, {escape:1,params:['clear-btn']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet35);
buffer.data += '"\r\n       role="button"\r\n       hidefocus="on"\r\n       tabindex="-1"\r\n       href="javascript:void(0)">';
pos.line = 75;
var id36 = ((t=(affix.clearLabel)) !== undefined ? t:((t = data.clearLabel) !== undefined ? t :scope.resolveLooseUp(["clearLabel"])));
buffer = buffer.writeEscaped(id36);
buffer.data += '</a>\r\n</div>\r\n';
return buffer;
}


buffer.data += '<div class="';
var callRet0
callRet0 = callFnUtil(tpl, scope, {escape:1,params:['header']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet0);
buffer.data += '">\r\n    <a class="';
pos.line = 2;
var callRet1
callRet1 = callFnUtil(tpl, scope, {escape:1,params:['prev-year-btn']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet1);
buffer.data += '"\r\n       href="javascript:void(0)"\r\n       tabindex="-1"\r\n       role="button"\r\n       title="';
pos.line = 6;
var id2 = ((t=(affix.previousYearLabel)) !== undefined ? t:((t = data.previousYearLabel) !== undefined ? t :scope.resolveLooseUp(["previousYearLabel"])));
buffer = buffer.writeEscaped(id2);
buffer.data += '"\r\n       hidefocus="on">\r\n    </a>\r\n    <a class="';
pos.line = 9;
var callRet3
callRet3 = callFnUtil(tpl, scope, {escape:1,params:['prev-month-btn']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet3);
buffer.data += '"\r\n       href="javascript:void(0)"\r\n       tabindex="-1"\r\n       role="button"\r\n       title="';
pos.line = 13;
var id4 = ((t=(affix.previousMonthLabel)) !== undefined ? t:((t = data.previousMonthLabel) !== undefined ? t :scope.resolveLooseUp(["previousMonthLabel"])));
buffer = buffer.writeEscaped(id4);
buffer.data += '"\r\n       hidefocus="on">\r\n    </a>\r\n    <a class="';
pos.line = 16;
var callRet5
callRet5 = callFnUtil(tpl, scope, {escape:1,params:['month-select']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet5);
buffer.data += '"\r\n       role="button"\r\n       href="javascript:void(0)"\r\n       tabindex="-1"\r\n       hidefocus="on"\r\n       title="';
pos.line = 21;
var id6 = ((t=(affix.monthSelectLabel)) !== undefined ? t:((t = data.monthSelectLabel) !== undefined ? t :scope.resolveLooseUp(["monthSelectLabel"])));
buffer = buffer.writeEscaped(id6);
buffer.data += '">\r\n        <span class="';
pos.line = 22;
var callRet7
callRet7 = callFnUtil(tpl, scope, {escape:1,params:['month-select-content']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet7);
buffer.data += '">';
var id8 = ((t=(affix.monthYearLabel)) !== undefined ? t:((t = data.monthYearLabel) !== undefined ? t :scope.resolveLooseUp(["monthYearLabel"])));
buffer = buffer.writeEscaped(id8);
buffer.data += '</span>\r\n        <span class="';
pos.line = 23;
var callRet9
callRet9 = callFnUtil(tpl, scope, {escape:1,params:['month-select-arrow']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet9);
buffer.data += '">x</span>\r\n    </a>\r\n    <a class="';
pos.line = 25;
var callRet10
callRet10 = callFnUtil(tpl, scope, {escape:1,params:['next-month-btn']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet10);
buffer.data += '"\r\n       href="javascript:void(0)"\r\n       tabindex="-1"\r\n       role="button"\r\n       title="';
pos.line = 29;
var id11 = ((t=(affix.nextMonthLabel)) !== undefined ? t:((t = data.nextMonthLabel) !== undefined ? t :scope.resolveLooseUp(["nextMonthLabel"])));
buffer = buffer.writeEscaped(id11);
buffer.data += '"\r\n       hidefocus="on">\r\n    </a>\r\n    <a class="';
pos.line = 32;
var callRet12
callRet12 = callFnUtil(tpl, scope, {escape:1,params:['next-year-btn']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet12);
buffer.data += '"\r\n       href="javascript:void(0)"\r\n       tabindex="-1"\r\n       role="button"\r\n       title="';
pos.line = 36;
var id13 = ((t=(affix.nextYearLabel)) !== undefined ? t:((t = data.nextYearLabel) !== undefined ? t :scope.resolveLooseUp(["nextYearLabel"])));
buffer = buffer.writeEscaped(id13);
buffer.data += '"\r\n       hidefocus="on">\r\n    </a>\r\n</div>\r\n<div class="';
pos.line = 40;
var callRet14
callRet14 = callFnUtil(tpl, scope, {escape:1,params:['body']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet14);
buffer.data += '">\r\n    <table class="';
pos.line = 41;
var callRet15
callRet15 = callFnUtil(tpl, scope, {escape:1,params:['table']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet15);
buffer.data += '" cellspacing="0" role="grid">\r\n        <thead>\r\n        <tr role="row">\r\n            ';
pos.line = 44;
pos.line = 44;
var id20 = ((t=(affix.showWeekNumber)) !== undefined ? t:((t = data.showWeekNumber) !== undefined ? t :scope.resolveLooseUp(["showWeekNumber"])));
buffer = ifCommand.call(tpl, scope, {params:[id20],fn: func16}, buffer);
buffer.data += '\r\n            ';
pos.line = 49;
pos.line = 49;
var id27 = ((t=(affix.weekdays)) !== undefined ? t:((t = data.weekdays) !== undefined ? t :scope.resolveLooseUp(["weekdays"])));
buffer = eachCommand.call(tpl, scope, {params:[id27],fn: func21}, buffer);
buffer.data += '\r\n        </tr>\r\n        </thead>\r\n        <tbody class="';
pos.line = 58;
var callRet28
callRet28 = callFnUtil(tpl, scope, {escape:1,params:['tbody']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet28);
buffer.data += '">\r\n        ';
pos.line = 59;
var callRet29
callRet29 = callFnUtil(tpl, scope, {}, buffer, ["renderDates"]);
buffer = buffer.write(callRet29);
buffer.data += '\r\n        </tbody>\r\n    </table>\r\n</div>\r\n';
pos.line = 63;
pos.line = 63;
var id37 = ((t=(affix.showToday)) !== undefined ? t:((t = data.showToday) !== undefined ? t :scope.resolveLooseUp(["showToday"])));
var exp39 = id37;
if(!(exp39)){
var id38 = ((t=(affix.showClear)) !== undefined ? t:((t = data.showClear) !== undefined ? t :scope.resolveLooseUp(["showClear"])));
exp39 = id38;
}
buffer = ifCommand.call(tpl, scope, {params:[exp39],fn: func30}, buffer);
return buffer;
};
module.exports.TPL_NAME = module.id || module.name;});
modulex.add("date-picker/popup", ["date-picker/xtpl/popup-render","date-picker","component/extension/shim","component/extension/align"], function(require, exports, module) {var PopupPickerTpl = require('./xtpl/popup-render'),
    DatePicker = require('date-picker'),
    Shim = require('component/extension/shim'),
    AlignExtension = require('component/extension/align');

/**
 * popup date picker ui component
 * @class Date.PopupPicker
 * @extends Component.Control
 * @mixins Component.Extension.Shim
 * @mixins Component.Extension.Align
 */
module.exports = DatePicker.extend([Shim, AlignExtension], {
}, {
    xclass: 'popup-date-picker',
    ATTRS: {
        contentTpl: {
            value: PopupPickerTpl
        }
    }
});
});
modulex.add("date-picker/xtpl/popup-render", ["date-picker/xtpl/popup","xtemplate/runtime"], function(require, exports, module) {var tpl = require("./popup");
var XTemplateRuntime = require("xtemplate/runtime");
var instance = new XTemplateRuntime(tpl);
module.exports = function(){
return instance.render.apply(instance,arguments);
};});
modulex.add("date-picker/xtpl/popup", ["date-picker/xtpl/picker"], function(require, exports, module) {module.exports = function popup(undefined){
var t;
var t0;
var t1;
var t2;
var t3;
var t4;
var t5;
var t6;
var t7;
var t8;
var t9;
var tpl = this;
var root = tpl.root;
var buffer = tpl.buffer;
var scope = tpl.scope;
var name = tpl.name;
var pos = tpl.pos;
var data = scope.data;
var affix = scope.affix;
var nativeCommands = root.nativeCommands;
var utils = root.utils;
var callFnUtil = utils["callFn"];
var callCommandUtil = utils["callCommand"];
var rangeCommand = nativeCommands["range"];
var foreachCommand = nativeCommands["foreach"];
var forinCommand = nativeCommands["forin"];
var eachCommand = nativeCommands["each"];
var withCommand = nativeCommands["with"];
var ifCommand = nativeCommands["if"];
var setCommand = nativeCommands["set"];
var includeCommand = nativeCommands["include"];
var parseCommand = nativeCommands["parse"];
var extendCommand = nativeCommands["extend"];
var blockCommand = nativeCommands["block"];
var macroCommand = nativeCommands["macro"];
var debuggerCommand = nativeCommands["debugger"];


buffer.data += '<div class="';
pos.line = 1;
var callRet0
callRet0 = callFnUtil(tpl, scope, {escape:1,params:['content']}, buffer, ["getBaseCssClasses"]);
buffer = buffer.writeEscaped(callRet0);
buffer.data += '">\r\n    ';
pos.line = 2;
var callRet1
buffer = root.include(scope,{params:[require("./picker").TPL_NAME]},buffer,tpl);
buffer = buffer.write(callRet1);
buffer.data += '\r\n</div>';
return buffer;
};
module.exports.TPL_NAME = module.id || module.name;});