diff --git a/apps/common/main/lib/component/Calendar.js b/apps/common/main/lib/component/Calendar.js
index 2c1a5048b..71b282a13 100644
--- a/apps/common/main/lib/component/Calendar.js
+++ b/apps/common/main/lib/component/Calendar.js
@@ -66,7 +66,6 @@ define([
Common.UI.BaseView.prototype.initialize.call(this, options);
var me = this;
- me.cmpEl = me.$el || $(this.el);
this.monthNames = [this.textJanuary, this.textFebruary, this.textMarch, this.textApril, this.textMay, this.textJune, this.textJuly, this.textAugust, this.textSeptember, this.textOctober, this.textNovember, this.textDecember];
this.dayNamesShort = [this.textShortSunday, this.textShortMonday, this.textShortTuesday, this.textShortWednesday, this.textShortThursday, this.textShortFriday, this.textShortSaturday];
@@ -77,15 +76,17 @@ define([
me.options.firstday = options.firstday;
}
+ me.enableKeyEvents= me.options.enableKeyEvents;
+
me._state = undefined; // 0 - month, 1 - months, 2 - years
me.render();
},
render: function () {
- (this.$el || $(this.el)).html(this.template());
-
var me = this;
+ me.cmpEl = me.$el || $(this.el);
+ me.cmpEl.html(this.template());
me.currentDate = me.options.date || new Date();
@@ -103,6 +104,10 @@ define([
me.btnNext.render(me.cmpEl.find('#next-arrow'));
me.btnNext.on('click', _.bind(me.onClickNext, me));
+ me.cmpEl.on('keydown', function(e) {
+ me.trigger('calendar:keydown', me, e);
+ });
+
me.renderMonth(me.currentDate);
this.trigger('render:after', this);
@@ -211,17 +216,29 @@ define([
tmpYear++;
}
- me.yearPicker = new Common.UI.DataView({
- el: me.cmpEl.find('.calendar-content'),
- store: new Common.UI.DataViewStore(arrYears),
- itemTemplate: _.template('
<%= year %>
')
- });
- me.yearPicker.on('item:click', function (picker, item, record, e) {
- var year = record.get('year'),
- date = new Date();
- date.setFullYear(year);
- me.renderMonths(date);
- });
+ if (!me.yearPicker) {
+ me.yearPicker = new Common.UI.DataView({
+ el: me.cmpEl.find('.calendar-content'),
+ store: new Common.UI.DataViewStore(arrYears),
+ itemTemplate: _.template('<%= year %>
')
+ });
+ me.yearPicker.on('item:click', function (picker, item, record, e) {
+ var year = record.get('year'),
+ date = new Date();
+ date.setFullYear(year);
+ me.renderMonths(date);
+ });
+ me.enableKeyEvents && this.yearPicker.on('item:keydown', function(view, record, e) {
+ if (e.keyCode==Common.UI.Keys.ESC) {
+ Common.NotificationCenter.trigger('dataview:blur');
+ }
+ });
+ } else
+ me.yearPicker.store.reset(arrYears);
+
+ me.enableKeyEvents && _.delay(function() {
+ me.monthPicker.cmpEl.find('.dataview').focus();
+ }, 10);
},
renderMonths: function (date) {
@@ -273,18 +290,30 @@ define([
});
}
- me.monthsPicker = new Common.UI.DataView({
- el: me.cmpEl.find('.calendar-content'),
- store: new Common.UI.DataViewStore(arrMonths),
- itemTemplate: _.template('<%= nameMonth %>
')
- });
- me.monthsPicker.on('item:click', function (picker, item, record, e) {
- var month = record.get('indexMonth'),
- year = record.get('year'),
- date = new Date();
- date.setFullYear(year, month);
- me.renderMonth(date);
- });
+ if (!me.monthsPicker) {
+ me.monthsPicker = new Common.UI.DataView({
+ el: me.cmpEl.find('.calendar-content'),
+ store: new Common.UI.DataViewStore(arrMonths),
+ itemTemplate: _.template('<%= nameMonth %>
')
+ });
+ me.monthsPicker.on('item:click', function (picker, item, record, e) {
+ var month = record.get('indexMonth'),
+ year = record.get('year'),
+ date = new Date();
+ date.setFullYear(year, month);
+ me.renderMonth(date);
+ });
+ me.enableKeyEvents && this.monthsPicker.on('item:keydown', function(view, record, e) {
+ if (e.keyCode==Common.UI.Keys.ESC) {
+ Common.NotificationCenter.trigger('dataview:blur');
+ }
+ });
+ } else
+ me.monthsPicker.store.reset(arrMonths);
+
+ me.enableKeyEvents && _.delay(function() {
+ me.monthPicker.cmpEl.find('.dataview').focus();
+ }, 10);
},
renderMonth: function (date) {
@@ -381,21 +410,33 @@ define([
}
}
- me.monthPicker = new Common.UI.DataView({
- el: me.cmpEl.find('.calendar-content'),
- store: new Common.UI.DataViewStore(arrDays),
- itemTemplate: _.template('<%= dayNumber %>
')
- });
- me.monthPicker.on('item:click', function(picker, item, record, e) {
- var day = record.get('dayNumber'),
- month = record.get('month'),
- year = record.get('year');
- if (_.isUndefined(me.selectedDate)) {
- me.selectedDate = new Date();
- }
- me.selectedDate.setFullYear(year, month, day);
- me.trigger('date:click', me, me.selectedDate);
- });
+ if (!me.monthPicker) {
+ me.monthPicker = new Common.UI.DataView({
+ el: me.cmpEl.find('.calendar-content'),
+ store: new Common.UI.DataViewStore(arrDays),
+ itemTemplate: _.template('<%= dayNumber %>
')
+ });
+ me.monthPicker.on('item:click', function(picker, item, record, e) {
+ var day = record.get('dayNumber'),
+ month = record.get('month'),
+ year = record.get('year');
+ if (_.isUndefined(me.selectedDate)) {
+ me.selectedDate = new Date();
+ }
+ me.selectedDate.setFullYear(year, month, day);
+ me.trigger('date:click', me, me.selectedDate);
+ });
+ me.enableKeyEvents && this.monthPicker.on('item:keydown', function(view, record, e) {
+ if (e.keyCode==Common.UI.Keys.ESC) {
+ Common.NotificationCenter.trigger('dataview:blur');
+ }
+ });
+ } else
+ me.monthPicker.store.reset(arrDays);
+
+ me.enableKeyEvents && _.delay(function() {
+ me.monthPicker.cmpEl.find('.dataview').focus();
+ }, 10);
},
daysInMonth: function (date) {
diff --git a/apps/documenteditor/main/app/controller/Links.js b/apps/documenteditor/main/app/controller/Links.js
index f528ec0ae..fdd1a2a24 100644
--- a/apps/documenteditor/main/app/controller/Links.js
+++ b/apps/documenteditor/main/app/controller/Links.js
@@ -414,11 +414,18 @@ define([
if (!this.cmpCalendar) {
this.cmpCalendar = new Common.UI.Calendar({
el: documentHolderView.cmpEl.find('#id-document-calendar-control'),
+ enableKeyEvents: true,
firstday: 1
});
this.cmpCalendar.on('date:click', function (cmp, date) {
me.selectDate = new Date(date);
});
+ this.cmpCalendar.on('calendar:keydown', function (cmp, e) {
+ if (e.keyCode==Common.UI.Keys.ESC) {
+ controlsContainer.hide();
+ me.api.asc_UncheckContentControlButtons();
+ }
+ });
}
this.cmpCalendar.setDate(this.selectDate ? this.selectDate : new Date());