diff --git a/src/lib/datetime/bootstrap-material-datetimepicker/bootstrap-material-datetimepicker.scss b/src/lib/datetime/bootstrap-material-datetimepicker/bootstrap-material-datetimepicker.scss
index 85ec7e75..83c4e487 100644
--- a/src/lib/datetime/bootstrap-material-datetimepicker/bootstrap-material-datetimepicker.scss
+++ b/src/lib/datetime/bootstrap-material-datetimepicker/bootstrap-material-datetimepicker.scss
@@ -25,16 +25,15 @@ Modificado a partir de https://github.com/T00rk/bootstrap-material-datetimepicke
user-select: none;
}
-.dtp > .dtp-content {
+.dtp>.dtp-content {
background: #fff;
max-width: 300px;
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
- max-height: 555px;
position: relative;
left: 50%;
}
-.dtp > .dtp-content > .dtp-date-view > header.dtp-header {
+.dtp>.dtp-content>.dtp-date-view>header.dtp-header {
background: $blue;
color: #fff;
text-align: center;
@@ -49,7 +48,7 @@ Modificado a partir de https://github.com/T00rk/bootstrap-material-datetimepicke
padding: 10px;
}
-.dtp div.dtp-date > div {
+.dtp div.dtp-date>div {
padding: 0;
margin: 0;
}
@@ -71,6 +70,56 @@ Modificado a partir de https://github.com/T00rk/bootstrap-material-datetimepicke
.dtp div.dtp-actual-year {
font-size: 1.5em;
color: #fff;
+ cursor: pointer;
+ width: 40%;
+ margin-top: 10px;
+ border: 1px solid white;
+
+ .adi {
+ position: relative;
+ float: right;
+ margin-left: -50%;
+ }
+}
+
+.dtp div.dtp-year-before,
+.dtp div.dtp-year-after {
+ margin-top: 10px;
+}
+
+.dtp-select-year-after {
+ margin-top: 10px;
+}
+
+.dtp-select-year-range {
+ background-color: #bdbdbd;
+ border: none;
+
+ &.before {
+ margin-bottom: 10px;
+ }
+ &.after {
+ margin-top: 10px;
+ margin-bottom: 20px;
+ }
+
+ &:hover, &:focus {
+ color: #ffffff;
+ }
+}
+
+.year-picker-item {
+ font-weight: 700;
+ cursor: pointer;
+ margin-bottom: 5px;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+
+ &:hover, &:focus {
+ color: #00a8e0;
+ }
}
.dtp div.dtp-picker {
@@ -86,7 +135,7 @@ Modificado a partir de https://github.com/T00rk/bootstrap-material-datetimepicke
.dtp div.dtp-picker-month {
padding-bottom: 20px !important;
- text-transform: uppercase!important;
+ text-transform: uppercase !important;
}
.dtp .dtp-close {
@@ -95,11 +144,11 @@ Modificado a partir de https://github.com/T00rk/bootstrap-material-datetimepicke
right: 1em;
}
-.dtp .dtp-close > a {
+.dtp .dtp-close>a {
color: #fff;
}
-.dtp .dtp-close > a > i {
+.dtp .dtp-close>a>i {
font-size: 1em;
}
@@ -110,24 +159,24 @@ Modificado a partir de https://github.com/T00rk/bootstrap-material-datetimepicke
.dtp table.dtp-picker-days,
.dtp table.dtp-picker-days tr,
-.dtp table.dtp-picker-days tr > td {
+.dtp table.dtp-picker-days tr>td {
border: none;
}
-.dtp table.dtp-picker-days tr > td {
+.dtp table.dtp-picker-days tr>td {
font-weight: 700;
font-size: .8em;
text-align: center;
padding: .5em .3em;
}
-.dtp table.dtp-picker-days tr > td > span.dtp-select-day {
- color: #BDBDBD!important;
+.dtp table.dtp-picker-days tr>td>span.dtp-select-day {
+ color: #BDBDBD !important;
padding: .4em .5em .5em .6em;
}
-.dtp .dtp-picker-time > a,
-.dtp table.dtp-picker-days tr > td > a {
+.dtp .dtp-picker-time>a,
+.dtp table.dtp-picker-days tr>td>a {
color: #212121;
text-decoration: none;
padding: 0.3em 0.5em;
@@ -136,19 +185,19 @@ Modificado a partir de https://github.com/T00rk/bootstrap-material-datetimepicke
margin-top: 5px;
}
-.dtp table.dtp-picker-days tr > td > a.selected {
+.dtp table.dtp-picker-days tr>td>a.selected {
background: $teal;
color: #fff;
}
-.dtp table.dtp-picker-days tr > th {
+.dtp table.dtp-picker-days tr>th {
color: #757575;
text-align: center;
font-weight: 700;
padding: .4em .3em;
}
-.dtp .p10 > a {
+.dtp .p10>a {
color: $white;
text-decoration: none;
}
@@ -156,6 +205,7 @@ Modificado a partir de https://github.com/T00rk/bootstrap-material-datetimepicke
.dtp .p10 {
width: 10%;
display: inline-block;
+ padding: 5px;
}
.dtp .p20 {
@@ -180,7 +230,7 @@ Modificado a partir de https://github.com/T00rk/bootstrap-material-datetimepicke
color: #212121;
font-weight: 500;
padding: .7em .5em;
- border-radius: 50%!important;
+ border-radius: 50% !important;
text-decoration: none;
background: #eee;
font-size: 1em;
@@ -191,11 +241,11 @@ Modificado a partir de https://github.com/T00rk/bootstrap-material-datetimepicke
color: #fff;
}
-.dtp .dtp-picker-time > .dtp-select-hour {
+.dtp .dtp-picker-time>.dtp-select-hour {
cursor: pointer;
}
-.dtp .dtp-picker-time > .dtp-select-minute {
+.dtp .dtp-picker-time>.dtp-select-minute {
cursor: pointer;
}
@@ -227,4 +277,4 @@ Modificado a partir de https://github.com/T00rk/bootstrap-material-datetimepicke
.dtp .center {
text-align: center;
-}
+}
\ No newline at end of file
diff --git a/src/lib/datetime/bootstrap-material-datetimepicker/bootstrap-material-datetimepicker.ts b/src/lib/datetime/bootstrap-material-datetimepicker/bootstrap-material-datetimepicker.ts
index a407ef63..16ab06b4 100644
--- a/src/lib/datetime/bootstrap-material-datetimepicker/bootstrap-material-datetimepicker.ts
+++ b/src/lib/datetime/bootstrap-material-datetimepicker/bootstrap-material-datetimepicker.ts
@@ -8,987 +8,1297 @@ Modificado a partir de https://github.com/T00rk/bootstrap-material-datetimepicke
declare var moment;
/* tslint:disable */
-(function ($, moment) {
- var pluginName = "bootstrapMaterialDatePicker";
- var pluginDataName = "plugin_" + pluginName;
+(function ($, moment)
+{
+ var pluginName = "bootstrapMaterialDatePicker";
+ var pluginDataName = "plugin_" + pluginName;
- moment.locale('en');
+ moment.locale('en');
- function Plugin(element, options) {
- this.currentView = 0;
+ function Plugin(element, options)
+ {
+ this.currentView = 0;
- this.minDate;
- this.maxDate;
+ this.minDate;
+ this.maxDate;
- this._attachedEvents = [];
+ this._attachedEvents = [];
- this.element = element;
- this.$element = $(element);
+ this.element = element;
+ this.$element = $(element);
- this.params = { date: true, time: true, format: 'YYYY-MM-DD', minDate: null, maxDate: null, currentDate: null, lang: 'en', weekStart: 0, shortTime: false, clearButton: false, nowButton: false, cancelText: 'Cancel', okText: 'OK', clearText: 'Clear', nowText: 'Now', switchOnClick: false, triggerEvent: 'click' };
- this.params = ($ as any).fn.extend(this.params, options);
- this.name = "dtp_" + this.setName();
- this.$element.attr("data-dtp", this.name);
+ this.params = {date: true, time: true, format: 'YYYY-MM-DD', minDate: null, maxDate: null, currentDate: null, lang: 'en', weekStart: 0, disabledDays: [], shortTime: false, clearButton: false, nowButton: false, cancelText: 'Cancel', okText: 'OK', clearText: 'Clear', nowText: 'Now', switchOnClick: false, triggerEvent: 'focus', monthPicker: false, year:true};
+ this.params = ($ as any).fn.extend(this.params, options);
- moment.locale(this.params.lang);
+ this.name = "dtp_" + this.setName();
+ this.$element.attr("data-dtp", this.name);
- this.init();
- }
+ moment.locale(this.params.lang);
- $.fn[pluginName] = function (options, p) {
- this.each(function () {
- if (!$.data(this, pluginDataName)) {
- $.data(this, pluginDataName, new Plugin(this, options));
- } else {
- if (typeof ($.data(this, pluginDataName)[options]) === 'function') {
- $.data(this, pluginDataName)[options](p);
- }
- if (options === 'destroy') {
- // delete $.data(this, pluginDataName);
- }
- }
- });
- return this;
- };
+ this.init();
+ }
- Plugin.prototype =
+ $.fn[pluginName] = function (options, p)
+ {
+ this.each(function ()
{
- init: function () {
- this.initDays();
- this.initDates();
-
- this.initTemplate();
-
- this.initButtons();
-
- this._attachEvent($(window), 'resize', this._centerBox.bind(this));
- this._attachEvent(this.$dtpElement.find('.dtp-content'), 'click', this._onElementClick.bind(this));
- this._attachEvent(this.$dtpElement, 'click', this._onBackgroundClick.bind(this));
- this._attachEvent(this.$dtpElement.find('.dtp-close > a'), 'click', this._onCloseClick.bind(this));
- this._attachEvent(this.$element, this.params.triggerEvent, this._fireCalendar.bind(this));
- },
- initDays: function () {
- this.days = [];
- for (var i = this.params.weekStart; this.days.length < 7; i++) {
- if (i > 6) {
- i = 0;
- }
- this.days.push(i.toString());
- }
- },
- initDates: function () {
- if (this.$element.val().length > 0) {
- if (typeof (this.params.format) !== 'undefined' && this.params.format !== null) {
- this.currentDate = moment(this.$element.val(), this.params.format).locale(this.params.lang);
- } else {
- this.currentDate = moment(this.$element.val()).locale(this.params.lang);
- }
- } else {
- if (typeof (this.$element.attr('value')) !== 'undefined' && this.$element.attr('value') !== null && this.$element.attr('value') !== "") {
- if (typeof (this.$element.attr('value')) === 'string') {
- if (typeof (this.params.format) !== 'undefined' && this.params.format !== null) {
- this.currentDate = moment(this.$element.attr('value'), this.params.format).locale(this.params.lang);
- } else {
- this.currentDate = moment(this.$element.attr('value')).locale(this.params.lang);
- }
- }
- } else {
- if (typeof (this.params.currentDate) !== 'undefined' && this.params.currentDate !== null) {
- if (typeof (this.params.currentDate) === 'string') {
- if (typeof (this.params.format) !== 'undefined' && this.params.format !== null) {
- this.currentDate = moment(this.params.currentDate, this.params.format).locale(this.params.lang);
- } else {
- this.currentDate = moment(this.params.currentDate).locale(this.params.lang);
- }
- } else {
- if (typeof (this.params.currentDate.isValid) === 'undefined' || typeof (this.params.currentDate.isValid) !== 'function') {
- var x = this.params.currentDate.getTime();
- this.currentDate = moment(x, "x").locale(this.params.lang);
- } else {
- this.currentDate = this.params.currentDate;
- }
- }
- this.$element.val(this.currentDate.format(this.params.format));
- } else
- this.currentDate = moment();
- }
- }
-
- if (typeof (this.params.minDate) !== 'undefined' && this.params.minDate !== null) {
- if (typeof (this.params.minDate) === 'string') {
- if (typeof (this.params.format) !== 'undefined' && this.params.format !== null) {
- this.minDate = moment(this.params.minDate, this.params.format).locale(this.params.lang);
- } else {
- this.minDate = moment(this.params.minDate).locale(this.params.lang);
- }
- } else {
- if (typeof (this.params.minDate.isValid) === 'undefined' || typeof (this.params.minDate.isValid) !== 'function') {
- var x = this.params.minDate.getTime();
- this.minDate = moment(x, "x").locale(this.params.lang);
- } else {
- this.minDate = this.params.minDate;
- }
- }
- } else if (this.params.minDate === null) {
- this.minDate = null;
- }
-
- if (typeof (this.params.maxDate) !== 'undefined' && this.params.maxDate !== null) {
- if (typeof (this.params.maxDate) === 'string') {
- if (typeof (this.params.format) !== 'undefined' && this.params.format !== null) {
- this.maxDate = moment(this.params.maxDate, this.params.format).locale(this.params.lang);
- } else {
- this.maxDate = moment(this.params.maxDate).locale(this.params.lang);
- }
- } else {
- if (typeof (this.params.maxDate.isValid) === 'undefined' || typeof (this.params.maxDate.isValid) !== 'function') {
- var x = this.params.maxDate.getTime();
- this.maxDate = moment(x, "x").locale(this.params.lang);
- } else {
- this.maxDate = this.params.maxDate;
- }
- }
- } else if (this.params.maxDate === null) {
- this.maxDate = null;
- }
-
- if (!this.isAfterMinDate(this.currentDate)) {
- this.currentDate = moment(this.minDate);
- }
- if (!this.isBeforeMaxDate(this.currentDate)) {
- this.currentDate = moment(this.maxDate);
- }
- },
- initTemplate: function () {
- this.template = '
' +
- '
' +
- '
' +
- '' +
- '
' +
- '
' +
- '
' +
- '
MAR
' +
- '
' +
- '
' +
- '
' +
- '
13
' +
- '
' +
- '
' +
- '
2014
' +
- '
' +
- '
' +
- '
' +
- '
' +
- '
' +
- '
' +
- '
' +
- '
' +
- '
' +
- '
' +
- '
' +
- '
' +
- '
' +
- '
' +
- '
' +
- '
' +
- '
' +
- '
' +
- '
' +
- '
' +
- '
' +
- '
';
-
- if ($('body').find("#" + this.name).length <= 0) {
- $('body').append(this.template);
-
- if (this)
- this.dtpElement = $('body').find("#" + this.name);
- this.$dtpElement = $(this.dtpElement);
- }
- },
- initButtons: function () {
- this._attachEvent(this.$dtpElement.find('.dtp-btn-cancel'), 'click', this._onCancelClick.bind(this));
- this._attachEvent(this.$dtpElement.find('.dtp-btn-ok'), 'click', this._onOKClick.bind(this));
- this._attachEvent(this.$dtpElement.find('a.dtp-select-month-before'), 'click', this._onMonthBeforeClick.bind(this));
- this._attachEvent(this.$dtpElement.find('a.dtp-select-month-after'), 'click', this._onMonthAfterClick.bind(this));
- this._attachEvent(this.$dtpElement.find('a.dtp-select-year-before'), 'click', this._onYearBeforeClick.bind(this));
- this._attachEvent(this.$dtpElement.find('a.dtp-select-year-after'), 'click', this._onYearAfterClick.bind(this));
-
- if (this.params.clearButton === true) {
- this._attachEvent(this.$dtpElement.find('.dtp-btn-clear'), 'click', this._onClearClick.bind(this));
- this.$dtpElement.find('.dtp-btn-clear').removeClass('hidden');
- }
-
- if (this.params.nowButton === true) {
- this._attachEvent(this.$dtpElement.find('.dtp-btn-now'), 'click', this._onNowClick.bind(this));
- this.$dtpElement.find('.dtp-btn-now').removeClass('hidden');
- }
-
- if ((this.params.nowButton === true) && (this.params.clearButton === true)) {
- this.$dtpElement.find('.dtp-btn-clear, .dtp-btn-now, .dtp-btn-cancel, .dtp-btn-ok').addClass('btn-xs');
- } else if ((this.params.nowButton === true) || (this.params.clearButton === true)) {
- this.$dtpElement.find('.dtp-btn-clear, .dtp-btn-now, .dtp-btn-cancel, .dtp-btn-ok').addClass('btn-sm');
- }
- },
- initMeridienButtons: function () {
- this.$dtpElement.find('a.dtp-meridien-am').off('click').on('click', this._onSelectAM.bind(this));
- this.$dtpElement.find('a.dtp-meridien-pm').off('click').on('click', this._onSelectPM.bind(this));
- },
- initDate: function (d) {
- this.currentView = 0;
-
- this.$dtpElement.find('.dtp-picker-calendar').removeClass('hidden');
- this.$dtpElement.find('.dtp-picker-datetime').addClass('hidden');
-
- var _date = ((typeof (this.currentDate) !== 'undefined' && this.currentDate !== null) ? this.currentDate : null);
- var _calendar = this.generateCalendar(this.currentDate);
-
- if (typeof (_calendar.week) !== 'undefined' && typeof (_calendar.days) !== 'undefined') {
- var _template = this.constructHTMLCalendar(_date, _calendar);
-
- this.$dtpElement.find('a.dtp-select-day').off('click');
- this.$dtpElement.find('.dtp-picker-calendar').html(_template);
-
- this.$dtpElement.find('a.dtp-select-day').on('click', this._onSelectDate.bind(this));
-
- this.toggleButtons(_date);
- }
-
- this._centerBox();
- this.showDate(_date);
- },
- initHours: function () {
- this.currentView = 1;
-
- this.showTime(this.currentDate);
- this.initMeridienButtons();
-
- if (this.currentDate.hour() < 12) {
- this.$dtpElement.find('a.dtp-meridien-am').click();
- } else {
- this.$dtpElement.find('a.dtp-meridien-pm').click();
- }
-
- var hFormat = ((this.params.shortTime) ? 'h' : 'H');
-
- this.$dtpElement.find('.dtp-picker-datetime').removeClass('hidden');
- this.$dtpElement.find('.dtp-picker-calendar').addClass('hidden');
-
- var svgClockElement = this.createSVGClock(true);
-
- for (var i = 0; i < 12; i++) {
- var x = -(162 * (Math.sin(-Math.PI * 2 * (i / 12))));
- var y = -(162 * (Math.cos(-Math.PI * 2 * (i / 12))));
-
- var fill = ((this.currentDate.format(hFormat) == i) ? "#A1A1A1" : 'transparent');
- var color = ((this.currentDate.format(hFormat) == i) ? "#fff" : '#000');
-
- var svgHourCircle = this.createSVGElement("circle", { 'id': 'h-' + i, 'class': 'dtp-select-hour', 'style': 'cursor:pointer', r: '30', cx: x, cy: y, fill: fill, 'data-hour': i });
-
- var svgHourText = this.createSVGElement("text", { 'id': 'th-' + i, 'class': 'dtp-select-hour-text', 'text-anchor': 'middle', 'style': 'cursor:pointer', 'font-weight': 'bold', 'font-size': '20', x: x, y: y + 7, fill: color, 'data-hour': i });
- svgHourText.textContent = ((i === 0) ? ((this.params.shortTime) ? 12 : i) : i);
-
- if (!this.toggleTime(i, true)) {
- svgHourCircle.classList.add('disabled');
- svgHourText.classList.add('disabled');
- svgHourText.setAttribute('fill', '#bdbdbd');
- } else {
- svgHourCircle.addEventListener('click', this._onSelectHour.bind(this));
- svgHourText.addEventListener('click', this._onSelectHour.bind(this));
- }
-
- svgClockElement.appendChild(svgHourCircle)
- svgClockElement.appendChild(svgHourText)
- }
-
- if (!this.params.shortTime) {
- for (var i = 0; i < 12; i++) {
- var x = -(110 * (Math.sin(-Math.PI * 2 * (i / 12))));
- var y = -(110 * (Math.cos(-Math.PI * 2 * (i / 12))));
-
- var fill = ((this.currentDate.format(hFormat) == (i + 12)) ? "#A1A1A1" : 'transparent');
- var color = ((this.currentDate.format(hFormat) == (i + 12)) ? "#fff" : '#000');
-
- var svgHourCircle = this.createSVGElement("circle", { 'id': 'h-' + (i + 12), 'class': 'dtp-select-hour', 'style': 'cursor:pointer', r: '30', cx: x, cy: y, fill: fill, 'data-hour': (i + 12) });
-
- var svgHourText = this.createSVGElement("text", { 'id': 'th-' + (i + 12), 'class': 'dtp-select-hour-text', 'text-anchor': 'middle', 'style': 'cursor:pointer', 'font-weight': 'bold', 'font-size': '22', x: x, y: y + 7, fill: color, 'data-hour': (i + 12) });
- svgHourText.textContent = i + 12;
-
- if (!this.toggleTime(i + 12, true)) {
- svgHourCircle.classList.add('disabled');
- svgHourText.classList.add('disabled');
- svgHourText.setAttribute('fill', '#bdbdbd');
- } else {
- svgHourCircle.addEventListener('click', this._onSelectHour.bind(this));
- svgHourText.addEventListener('click', this._onSelectHour.bind(this));
- }
-
- svgClockElement.appendChild(svgHourCircle)
- svgClockElement.appendChild(svgHourText)
- }
-
- this.$dtpElement.find('a.dtp-meridien-am').addClass('hidden');
- this.$dtpElement.find('a.dtp-meridien-pm').addClass('hidden');
- }
-
- this._centerBox();
- },
- initMinutes: function () {
- this.currentView = 2;
-
- this.showTime(this.currentDate);
-
- this.initMeridienButtons();
-
- if (this.currentDate.hour() < 12) {
- this.$dtpElement.find('a.dtp-meridien-am').click();
- } else {
- this.$dtpElement.find('a.dtp-meridien-pm').click();
- }
-
- this.$dtpElement.find('.dtp-picker-calendar').addClass('hidden');
- this.$dtpElement.find('.dtp-picker-datetime').removeClass('hidden');
-
- var svgClockElement = this.createSVGClock(false);
-
- for (var i = 0; i < 60; i++) {
- var s = ((i % 5 === 0) ? 162 : 158);
- var r = ((i % 5 === 0) ? 30 : 20);
-
- var x = -(s * (Math.sin(-Math.PI * 2 * (i / 60))));
- var y = -(s * (Math.cos(-Math.PI * 2 * (i / 60))));
-
- var color = ((this.currentDate.format("m") == i) ? "#A1A1A1" : 'transparent');
-
- var svgMinuteCircle = this.createSVGElement("circle", { 'id': 'm-' + i, 'class': 'dtp-select-minute', 'style': 'cursor:pointer', r: r, cx: x, cy: y, fill: color, 'data-minute': i });
-
- if (!this.toggleTime(i, false)) {
- svgMinuteCircle.classList.add("disabled");
- } else {
- svgMinuteCircle.addEventListener('click', this._onSelectMinute.bind(this));
- }
-
- svgClockElement.appendChild(svgMinuteCircle)
- }
-
- for (var i = 0; i < 60; i++) {
- if ((i % 5) === 0) {
- var x = -(162 * (Math.sin(-Math.PI * 2 * (i / 60))));
- var y = -(162 * (Math.cos(-Math.PI * 2 * (i / 60))));
-
- var color = ((this.currentDate.format("m") == i) ? "#fff" : '#000');
-
- var svgMinuteText = this.createSVGElement("text", { 'id': 'tm-' + i, 'class': 'dtp-select-minute-text', 'text-anchor': 'middle', 'style': 'cursor:pointer', 'font-weight': 'bold', 'font-size': '20', x: x, y: y + 7, fill: color, 'data-minute': i });
- svgMinuteText.textContent = i;
-
- if (!this.toggleTime(i, false)) {
- svgMinuteText.classList.add("disabled");
- svgMinuteText.setAttribute('fill', '#bdbdbd');
- } else {
- svgMinuteText.addEventListener('click', this._onSelectMinute.bind(this));
- }
-
- svgClockElement.appendChild(svgMinuteText)
- }
- }
-
- this._centerBox();
- },
- animateHands: function () {
- var H = this.currentDate.hour();
- var M = this.currentDate.minute();
-
- var hh = this.$dtpElement.find('.hour-hand');
- hh[0].setAttribute('transform', "rotate(" + 360 * H / 12 + ")");
-
- var mh = this.$dtpElement.find('.minute-hand');
- mh[0].setAttribute('transform', "rotate(" + 360 * M / 60 + ")");
- },
- createSVGClock: function (isHour) {
- var hl = ((this.params.shortTime) ? -120 : -90);
-
- var svgElement = this.createSVGElement("svg", { class: 'svg-clock', viewBox: '0,0,400,400' });
- var svgGElement = this.createSVGElement("g", { transform: 'translate(200,200) ' });
- var svgClockFace = this.createSVGElement("circle", { r: '192', fill: '#eee', stroke: '#bdbdbd', 'stroke-width': 2 });
- var svgClockCenter = this.createSVGElement("circle", { r: '15', fill: '#757575' });
-
- svgGElement.appendChild(svgClockFace)
-
- if (isHour) {
- var svgMinuteHand = this.createSVGElement("line", { class: 'minute-hand', x1: 0, y1: 0, x2: 0, y2: -150, stroke: '#bdbdbd', 'stroke-width': 2 });
- var svgHourHand = this.createSVGElement("line", { class: 'hour-hand', x1: 0, y1: 0, x2: 0, y2: hl, stroke: '#A1A1A1', 'stroke-width': 8 });
-
- svgGElement.appendChild(svgMinuteHand);
- svgGElement.appendChild(svgHourHand);
- } else {
- var svgMinuteHand = this.createSVGElement("line", { class: 'minute-hand', x1: 0, y1: 0, x2: 0, y2: -150, stroke: '#A1A1A1', 'stroke-width': 2 });
- var svgHourHand = this.createSVGElement("line", { class: 'hour-hand', x1: 0, y1: 0, x2: 0, y2: hl, stroke: '#bdbdbd', 'stroke-width': 8 });
-
- svgGElement.appendChild(svgHourHand);
- svgGElement.appendChild(svgMinuteHand);
- }
-
- svgGElement.appendChild(svgClockCenter)
-
- svgElement.appendChild(svgGElement)
-
- this.$dtpElement.find("#dtp-svg-clock").empty();
- this.$dtpElement.find("#dtp-svg-clock")[0].appendChild(svgElement);
-
- this.animateHands();
-
- return svgGElement;
- },
- createSVGElement: function (tag, attrs) {
- var el = document.createElementNS('http://www.w3.org/2000/svg', tag);
- for (var k in attrs) {
- el.setAttribute(k, attrs[k]);
- }
- return el;
- },
- isAfterMinDate: function (date, checkHour, checkMinute) {
- var _return = true;
-
- if (typeof (this.minDate) !== 'undefined' && this.minDate !== null) {
- var _minDate = moment(this.minDate);
- var _date = moment(date);
-
- if (!checkHour && !checkMinute) {
- _minDate.hour(0);
- _minDate.minute(0);
-
- _date.hour(0);
- _date.minute(0);
- }
-
- _minDate.second(0);
- _date.second(0);
- _minDate.millisecond(0);
- _date.millisecond(0);
-
- if (!checkMinute) {
- _date.minute(0);
- _minDate.minute(0);
-
- _return = (parseInt(_date.format("X")) >= parseInt(_minDate.format("X")));
- } else {
- _return = (parseInt(_date.format("X")) >= parseInt(_minDate.format("X")));
- }
- }
-
- return _return;
- },
- isBeforeMaxDate: function (date, checkTime, checkMinute) {
- var _return = true;
-
- if (typeof (this.maxDate) !== 'undefined' && this.maxDate !== null) {
- var _maxDate = moment(this.maxDate);
- var _date = moment(date);
-
- if (!checkTime && !checkMinute) {
- _maxDate.hour(0);
- _maxDate.minute(0);
-
- _date.hour(0);
- _date.minute(0);
- }
-
- _maxDate.second(0);
- _date.second(0);
- _maxDate.millisecond(0);
- _date.millisecond(0);
-
- if (!checkMinute) {
- _date.minute(0);
- _maxDate.minute(0);
-
- _return = (parseInt(_date.format("X")) <= parseInt(_maxDate.format("X")));
- } else {
- _return = (parseInt(_date.format("X")) <= parseInt(_maxDate.format("X")));
- }
- }
-
- return _return;
- },
- rotateElement: function (el, deg) {
- $(el).css
- ({
- WebkitTransform: 'rotate(' + deg + 'deg)',
- '-moz-transform': 'rotate(' + deg + 'deg)'
- });
- },
- showDate: function (date) {
- if (date) {
- this.$dtpElement.find('.dtp-actual-day').html(date.locale(this.params.lang).format('dddd'));
- this.$dtpElement.find('.dtp-actual-month').html(date.locale(this.params.lang).format('MMM').toUpperCase());
- this.$dtpElement.find('.dtp-actual-num').html(date.locale(this.params.lang).format('DD'));
- this.$dtpElement.find('.dtp-actual-year').html(date.locale(this.params.lang).format('YYYY'));
- }
- },
- showTime: function (date) {
- if (date) {
- var minutes = date.minute();
- var content = ((this.params.shortTime) ? date.format('hh') : date.format('HH')) + ':' + ((minutes.toString().length == 2) ? minutes : '0' + minutes) + ((this.params.shortTime) ? ' ' + date.format('A') : '');
-
- if (this.params.date)
- this.$dtpElement.find('.dtp-actual-time').html(content);
- else {
- if (this.params.shortTime)
- this.$dtpElement.find('.dtp-actual-day').html(date.format('A'));
- else
- this.$dtpElement.find('.dtp-actual-day').html(' ');
-
- this.$dtpElement.find('.dtp-actual-maxtime').html(content);
- }
- }
- },
- selectDate: function (date) {
- if (date) {
- this.currentDate.date(date);
-
- this.showDate(this.currentDate);
- this.$element.trigger('dateSelected', this.currentDate);
- }
- },
- generateCalendar: function (date) {
- var _calendar: any = {};
-
- if (date !== null) {
- var startOfMonth = moment(date).locale(this.params.lang).startOf('month');
- var endOfMonth = moment(date).locale(this.params.lang).endOf('month');
-
- var iNumDay = startOfMonth.format('d');
-
- _calendar.week = this.days;
- _calendar.days = [];
-
- for (var i = startOfMonth.date(); i <= endOfMonth.date(); i++) {
- if (i === startOfMonth.date()) {
- var iWeek = _calendar.week.indexOf(iNumDay.toString());
- if (iWeek > 0) {
- for (var x = 0; x < iWeek; x++) {
- _calendar.days.push(0);
- }
- }
- }
- _calendar.days.push(moment(startOfMonth).locale(this.params.lang).date(i));
- }
- }
-
- return _calendar;
- },
- constructHTMLCalendar: function (date, calendar) {
- var _template = "";
-
- _template += '' + date.locale(this.params.lang).format('MMMM YYYY') + '
';
- _template += '';
- for (var i = 0; i < calendar.week.length; i++) {
- _template += '' + moment(parseInt(calendar.week[i]), "d").locale(this.params.lang).format("dd").substring(0, 1) + ' | ';
- }
-
- _template += '';
- _template += '';
-
- for (var i = 0; i < calendar.days.length; i++) {
- if (i % 7 == 0)
- _template += '
';
- _template += '';
- if (calendar.days[i] != 0) {
- if (this.isBeforeMaxDate(moment(calendar.days[i]), false, false) === false || this.isAfterMinDate(moment(calendar.days[i]), false, false) === false) {
- _template += '' + moment(calendar.days[i]).locale(this.params.lang).format("DD") + '';
- } else {
- if (moment(calendar.days[i]).locale(this.params.lang).format("DD") === moment(this.currentDate).locale(this.params.lang).format("DD")) {
- _template += '' + moment(calendar.days[i]).locale(this.params.lang).format("DD") + '';
- } else {
- _template += '' + moment(calendar.days[i]).locale(this.params.lang).format("DD") + '';
- }
- }
-
- _template += ' | ';
- }
- }
- _template += '
';
-
- return _template;
- },
- setName: function () {
- var text = "";
- var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
-
- for (var i = 0; i < 5; i++) {
- text += possible.charAt(Math.floor(Math.random() * possible.length));
- }
-
- return text;
- },
- isPM: function () {
- return this.$dtpElement.find('a.dtp-meridien-pm').hasClass('selected');
- },
- setElementValue: function () {
- this.$element.trigger('beforeChange', this.currentDate);
- if (typeof (($ as any).material) !== 'undefined') {
- this.$element.removeClass('empty');
- }
- this.$element.val(moment(this.currentDate).locale(this.params.lang).format(this.params.format));
- this.$element.trigger('change', this.currentDate);
- },
- toggleButtons: function (date) {
- if (date && date.isValid()) {
- var startOfMonth = moment(date).locale(this.params.lang).startOf('month');
- var endOfMonth = moment(date).locale(this.params.lang).endOf('month');
-
- if (!this.isAfterMinDate(startOfMonth, false, false)) {
- this.$dtpElement.find('a.dtp-select-month-before').addClass('invisible');
- } else {
- this.$dtpElement.find('a.dtp-select-month-before').removeClass('invisible');
- }
-
- if (!this.isBeforeMaxDate(endOfMonth, false, false)) {
- this.$dtpElement.find('a.dtp-select-month-after').addClass('invisible');
- } else {
- this.$dtpElement.find('a.dtp-select-month-after').removeClass('invisible');
- }
-
- var startOfYear = moment(date).locale(this.params.lang).startOf('year');
- var endOfYear = moment(date).locale(this.params.lang).endOf('year');
-
- if (!this.isAfterMinDate(startOfYear, false, false)) {
- this.$dtpElement.find('a.dtp-select-year-before').addClass('invisible');
- } else {
- this.$dtpElement.find('a.dtp-select-year-before').removeClass('invisible');
- }
-
- if (!this.isBeforeMaxDate(endOfYear, false, false)) {
- this.$dtpElement.find('a.dtp-select-year-after').addClass('invisible');
- } else {
- this.$dtpElement.find('a.dtp-select-year-after').removeClass('invisible');
- }
- }
- },
- toggleTime: function (value, isHours) {
- var result = false;
-
- if (isHours) {
- var _date = moment(this.currentDate);
- _date.hour(this.convertHours(value)).minute(0).second(0);
-
- result = !(this.isAfterMinDate(_date, true, false) === false || this.isBeforeMaxDate(_date, true, false) === false);
- } else {
- var _date = moment(this.currentDate);
- _date.minute(value).second(0);
-
- result = !(this.isAfterMinDate(_date, true, true) === false || this.isBeforeMaxDate(_date, true, true) === false);
- }
-
- return result;
- },
- _attachEvent: function (el, ev, fn) {
- el.on(ev, null, null, fn);
- this._attachedEvents.push([el, ev, fn]);
- },
- _detachEvents: function () {
- for (var i = this._attachedEvents.length - 1; i >= 0; i--) {
- this._attachedEvents[i][0].off(this._attachedEvents[i][1], this._attachedEvents[i][2]);
- this._attachedEvents.splice(i, 1);
- }
- },
- _fireCalendar: function () {
- this.currentView = 0;
- this.$element.blur();
-
- this.initDates();
- this.show();
-
- if (this.params.date) {
- this.$dtpElement.find('.dtp-date').removeClass('hidden');
- this.initDate();
- } else {
- if (this.params.time) {
- this.$dtpElement.find('.dtp-time').removeClass('hidden');
- this.initHours();
- }
- }
- },
- _onBackgroundClick: function (e) {
- e.stopPropagation();
- this.hide();
- },
- _onElementClick: function (e) {
- e.stopPropagation();
- },
- _onKeydown: function (e) {
- if (e.which === 27) {
- this.hide();
- }
- },
- _onCloseClick: function () {
- this.hide();
- },
- _onClearClick: function () {
- this.currentDate = null;
- this.$element.trigger('beforeChange', this.currentDate);
- this.hide();
- if (typeof (($ as any).material) !== 'undefined') {
- this.$element.addClass('empty');
- }
- this.$element.val('');
- this.$element.trigger('change', this.currentDate);
- },
- _onNowClick: function () {
- this.currentDate = moment();
-
- if (this.params.date === true) {
- this.showDate(this.currentDate);
-
- if (this.currentView === 0) {
- this.initDate();
- }
- }
-
- if (this.params.time === true) {
- this.showTime(this.currentDate);
-
- switch (this.currentView) {
- case 1:
- this.initHours();
- break;
- case 2:
- this.initMinutes();
- break;
- }
-
- this.animateHands();
- }
- },
- _onOKClick: function () {
- switch (this.currentView) {
- case 0:
- if (this.params.time === true) {
- this.initHours();
- } else {
- this.setElementValue();
- this.hide();
- }
- break;
- case 1:
- this.initMinutes();
- break;
- case 2:
- this.setElementValue();
- this.hide();
- break;
- }
- },
- _onCancelClick: function () {
- if (this.params.time) {
- switch (this.currentView) {
- case 0:
- this.hide();
- break;
- case 1:
- if (this.params.date) {
- this.initDate();
- } else {
- this.hide();
- }
- break;
- case 2:
- this.initHours();
- break;
- }
- } else {
- this.hide();
- }
- },
- _onMonthBeforeClick: function () {
- this.currentDate.subtract(1, 'months');
- this.initDate(this.currentDate);
- },
- _onMonthAfterClick: function () {
- this.currentDate.add(1, 'months');
- this.initDate(this.currentDate);
- },
- _onYearBeforeClick: function () {
- this.currentDate.subtract(1, 'years');
- this.initDate(this.currentDate);
- },
- _onYearAfterClick: function () {
- this.currentDate.add(1, 'years');
- this.initDate(this.currentDate);
- },
- _onSelectDate: function (e) {
- this.$dtpElement.find('a.dtp-select-day').removeClass('selected');
- $(e.currentTarget).addClass('selected');
-
- this.selectDate($(e.currentTarget).parent().data("date"));
-
- if (this.params.switchOnClick === true && this.params.time === true)
- setTimeout(this.initHours.bind(this), 200);
-
- if (this.params.switchOnClick === true && this.params.time === false) {
- setTimeout(this._onOKClick.bind(this), 200);
- }
-
- },
- _onSelectHour: function (e) {
- if (!$(e.target).hasClass('disabled')) {
- var value = $(e.target).data('hour');
- var parent = $(e.target).parent();
-
- var h = parent.find('.dtp-select-hour');
- for (var i = 0; i < h.length; i++) {
- $(h[i]).attr('fill', 'transparent');
- }
- var th = parent.find('.dtp-select-hour-text');
- for (var i = 0; i < th.length; i++) {
- $(th[i]).attr('fill', '#000');
- }
-
- $(parent.find('#h-' + value)).attr('fill', '#A1A1A1');
- $(parent.find('#th-' + value)).attr('fill', '#fff');
-
- this.currentDate.hour(parseInt(value));
-
- if (this.params.shortTime === true && this.isPM()) {
- this.currentDate.add(12, 'hours');
- }
-
- this.showTime(this.currentDate);
-
- this.animateHands();
-
- if (this.params.switchOnClick === true)
- setTimeout(this.initMinutes.bind(this), 200);
- }
- },
- _onSelectMinute: function (e) {
- if (!$(e.target).hasClass('disabled')) {
- var value = $(e.target).data('minute');
- var parent = $(e.target).parent();
-
- var m = parent.find('.dtp-select-minute');
- for (var i = 0; i < m.length; i++) {
- $(m[i]).attr('fill', 'transparent');
- }
- var tm = parent.find('.dtp-select-minute-text');
- for (var i = 0; i < tm.length; i++) {
- $(tm[i]).attr('fill', '#000');
- }
-
- $(parent.find('#m-' + value)).attr('fill', '#A1A1A1');
- $(parent.find('#tm-' + value)).attr('fill', '#fff');
-
- this.currentDate.minute(parseInt(value));
- this.showTime(this.currentDate);
-
- this.animateHands();
-
- if (this.params.switchOnClick === true)
- setTimeout(function () {
- this.setElementValue();
- this.hide();
- }.bind(this), 200);
- }
- },
- _onSelectAM: function (e) {
- $('.dtp-actual-meridien').find('a').removeClass('selected');
- $(e.currentTarget).addClass('selected');
-
- if (this.currentDate.hour() >= 12) {
- if (this.currentDate.subtract(12, 'hours'))
- this.showTime(this.currentDate);
- }
- this.toggleTime((this.currentView === 1));
- },
- _onSelectPM: function (e) {
- $('.dtp-actual-meridien').find('a').removeClass('selected');
- $(e.currentTarget).addClass('selected');
-
- if (this.currentDate.hour() < 12) {
- if (this.currentDate.add(12, 'hours'))
- this.showTime(this.currentDate);
+ if (!$.data(this, pluginDataName))
+ {
+ $.data(this, pluginDataName, new Plugin(this, options));
+ } else
+ {
+ if (typeof ($.data(this, pluginDataName)[options]) === 'function')
+ {
+ $.data(this, pluginDataName)[options](p);
+ }
+ if (options === 'destroy')
+ {
+ // delete $.data(this, pluginDataName);
+ }
+ }
+ });
+ return this;
+ };
+
+ Plugin.prototype =
+ {
+ init: function ()
+ {
+ this.initDays();
+ this.initDates();
+
+ this.initTemplate();
+
+ this.initButtons();
+
+ this._attachEvent($(window), 'resize', this._centerBox.bind(this));
+ this._attachEvent(this.$dtpElement.find('.dtp-content'), 'click', this._onElementClick.bind(this));
+ this._attachEvent(this.$dtpElement, 'click', this._onBackgroundClick.bind(this));
+ this._attachEvent(this.$dtpElement.find('.dtp-close > a'), 'click', this._onCloseClick.bind(this));
+ this._attachEvent(this.$element, this.params.triggerEvent, this._fireCalendar.bind(this));
+ },
+ initDays: function ()
+ {
+ this.days = [];
+ for (var i = this.params.weekStart; this.days.length < 7; i++)
+ {
+ if (i > 6)
+ {
+ i = 0;
+ }
+ this.days.push(i.toString());
+ }
+ },
+ initDates: function ()
+ {
+ if (this.$element.val().length > 0)
+ {
+ if (typeof (this.params.format) !== 'undefined' && this.params.format !== null)
+ {
+ this.currentDate = moment(this.$element.val(), this.params.format).locale(this.params.lang);
+ } else
+ {
+ this.currentDate = moment(this.$element.val()).locale(this.params.lang);
+ }
+ } else
+ {
+ if (typeof (this.$element.attr('value')) !== 'undefined' && this.$element.attr('value') !== null && this.$element.attr('value') !== "")
+ {
+ if (typeof (this.$element.attr('value')) === 'string')
+ {
+ if (typeof (this.params.format) !== 'undefined' && this.params.format !== null)
+ {
+ this.currentDate = moment(this.$element.attr('value'), this.params.format).locale(this.params.lang);
+ } else
+ {
+ this.currentDate = moment(this.$element.attr('value')).locale(this.params.lang);
+ }
+ }
+ } else
+ {
+ if (typeof (this.params.currentDate) !== 'undefined' && this.params.currentDate !== null)
+ {
+ if (typeof (this.params.currentDate) === 'string')
+ {
+ if (typeof (this.params.format) !== 'undefined' && this.params.format !== null)
+ {
+ this.currentDate = moment(this.params.currentDate, this.params.format).locale(this.params.lang);
+ } else
+ {
+ this.currentDate = moment(this.params.currentDate).locale(this.params.lang);
+ }
+ } else
+ {
+ if (typeof (this.params.currentDate.isValid) === 'undefined' || typeof (this.params.currentDate.isValid) !== 'function')
+ {
+ var x = this.params.currentDate.getTime();
+ this.currentDate = moment(x, "x").locale(this.params.lang);
+ } else
+ {
+ this.currentDate = this.params.currentDate;
+ }
+ }
+ this.$element.val(this.currentDate.format(this.params.format));
+ } else
+ this.currentDate = moment();
+ }
+ }
+
+ if (typeof (this.params.minDate) !== 'undefined' && this.params.minDate !== null)
+ {
+ if (typeof (this.params.minDate) === 'string')
+ {
+ if (typeof (this.params.format) !== 'undefined' && this.params.format !== null)
+ {
+ this.minDate = moment(this.params.minDate, this.params.format).locale(this.params.lang);
+ } else
+ {
+ this.minDate = moment(this.params.minDate).locale(this.params.lang);
+ }
+ } else
+ {
+ if (typeof (this.params.minDate.isValid) === 'undefined' || typeof (this.params.minDate.isValid) !== 'function')
+ {
+ var x = this.params.minDate.getTime();
+ this.minDate = moment(x, "x").locale(this.params.lang);
+ } else
+ {
+ this.minDate = this.params.minDate;
+ }
+ }
+ } else if (this.params.minDate === null)
+ {
+ this.minDate = null;
+ }
+
+ if (typeof (this.params.maxDate) !== 'undefined' && this.params.maxDate !== null)
+ {
+ if (typeof (this.params.maxDate) === 'string')
+ {
+ if (typeof (this.params.format) !== 'undefined' && this.params.format !== null)
+ {
+ this.maxDate = moment(this.params.maxDate, this.params.format).locale(this.params.lang);
+ } else
+ {
+ this.maxDate = moment(this.params.maxDate).locale(this.params.lang);
+ }
+ } else
+ {
+ if (typeof (this.params.maxDate.isValid) === 'undefined' || typeof (this.params.maxDate.isValid) !== 'function')
+ {
+ var x = this.params.maxDate.getTime();
+ this.maxDate = moment(x, "x").locale(this.params.lang);
+ } else
+ {
+ this.maxDate = this.params.maxDate;
+ }
+ }
+ } else if (this.params.maxDate === null)
+ {
+ this.maxDate = null;
+ }
+
+ if (!this.isAfterMinDate(this.currentDate))
+ {
+ this.currentDate = moment(this.minDate);
+ }
+ if (!this.isBeforeMaxDate(this.currentDate))
+ {
+ this.currentDate = moment(this.maxDate);
+ }
+ },
+ initTemplate: function ()
+ {
+ var yearPicker = "";
+ var y =this.currentDate.year();
+ for (var i = y-3; i < y + 4; i++) {
+ yearPicker += '' + i + '
';
}
- this.toggleTime((this.currentView === 1));
- },
- convertHours: function (h) {
- var _return = h;
-
- if (this.params.shortTime === true) {
- if ((h < 12) && this.isPM()) {
- _return += 12;
+ this.midYear=y;
+ var yearHtml =
+ '' +
+ '
' +
+ yearPicker +
+ '
' +
+ '
';
+
+ this.template = '' +
+ '
' +
+ '
' +
+ '' +
+ '
' +
+ '
' +
+ '
' +
+ '
MAR
' +
+ '
' +
+ '
' +
+ '
' +
+ '
13
' +
+ '
' +
+ '
' +
+ '
' +
+ '
2014
' +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ yearHtml+
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ '
';
+
+ if ($('body').find("#" + this.name).length <= 0)
+ {
+ $('body').append(this.template);
+
+ if (this)
+ this.dtpElement = $('body').find("#" + this.name);
+ this.$dtpElement = $(this.dtpElement);
+ }
+ },
+ initButtons: function ()
+ {
+ this._attachEvent(this.$dtpElement.find('.dtp-btn-cancel'), 'click', this._onCancelClick.bind(this));
+ this._attachEvent(this.$dtpElement.find('.dtp-btn-ok'), 'click', this._onOKClick.bind(this));
+ this._attachEvent(this.$dtpElement.find('a.dtp-select-month-before'), 'click', this._onMonthBeforeClick.bind(this));
+ this._attachEvent(this.$dtpElement.find('a.dtp-select-month-after'), 'click', this._onMonthAfterClick.bind(this));
+ this._attachEvent(this.$dtpElement.find('a.dtp-select-year-before'), 'click', this._onYearBeforeClick.bind(this));
+ this._attachEvent(this.$dtpElement.find('a.dtp-select-year-after'), 'click', this._onYearAfterClick.bind(this));
+ this._attachEvent(this.$dtpElement.find('.dtp-actual-year'), 'click', this._onActualYearClick.bind(this));
+ this._attachEvent(this.$dtpElement.find('a.dtp-select-year-range.before'), 'click', this._onYearRangeBeforeClick.bind(this));
+ this._attachEvent(this.$dtpElement.find('a.dtp-select-year-range.after'), 'click', this._onYearRangeAfterClick.bind(this));
+ this._attachEvent(this.$dtpElement.find('div.year-picker-item'), 'click', this._onYearItemClick.bind(this));
+
+ if (this.params.clearButton === true)
+ {
+ this._attachEvent(this.$dtpElement.find('.dtp-btn-clear'), 'click', this._onClearClick.bind(this));
+ this.$dtpElement.find('.dtp-btn-clear').removeClass('hidden');
+ }
+
+ if (this.params.nowButton === true)
+ {
+ this._attachEvent(this.$dtpElement.find('.dtp-btn-now'), 'click', this._onNowClick.bind(this));
+ this.$dtpElement.find('.dtp-btn-now').removeClass('hidden');
+ }
+
+ if ((this.params.nowButton === true) && (this.params.clearButton === true))
+ {
+ this.$dtpElement.find('.dtp-btn-clear, .dtp-btn-now, .dtp-btn-cancel, .dtp-btn-ok').addClass('btn-xs');
+ } else if ((this.params.nowButton === true) || (this.params.clearButton === true))
+ {
+ this.$dtpElement.find('.dtp-btn-clear, .dtp-btn-now, .dtp-btn-cancel, .dtp-btn-ok').addClass('btn-sm');
+ }
+ },
+ initMeridienButtons: function ()
+ {
+ this.$dtpElement.find('a.dtp-meridien-am').off('click').on('click', this._onSelectAM.bind(this));
+ this.$dtpElement.find('a.dtp-meridien-pm').off('click').on('click', this._onSelectPM.bind(this));
+ },
+ initDate: function (d)
+ {
+ this.currentView = 0;
+
+ if (this.params.monthPicker === false)
+ {
+ this.$dtpElement.find('.dtp-picker-calendar').removeClass('hidden');
+ }
+ this.$dtpElement.find('.dtp-picker-datetime').addClass('hidden');
+ this.$dtpElement.find('.dtp-picker-year').addClass('hidden');
+
+ var _date = ((typeof (this.currentDate) !== 'undefined' && this.currentDate !== null) ? this.currentDate : null);
+ var _calendar = this.generateCalendar(this.currentDate);
+
+ if (typeof (_calendar.week) !== 'undefined' && typeof (_calendar.days) !== 'undefined')
+ {
+ var _template = this.constructHTMLCalendar(_date, _calendar);
+
+ this.$dtpElement.find('a.dtp-select-day').off('click');
+ this.$dtpElement.find('.dtp-picker-calendar').html(_template);
+
+ this.$dtpElement.find('a.dtp-select-day').on('click', this._onSelectDate.bind(this));
+
+ this.toggleButtons(_date);
+ }
+
+ this._centerBox();
+ this.showDate(_date);
+ },
+ initHours: function ()
+ {
+ this.currentView = 1;
+
+ this.showTime(this.currentDate);
+ this.initMeridienButtons();
+
+ if (this.currentDate.hour() < 12)
+ {
+ this.$dtpElement.find('a.dtp-meridien-am').click();
+ } else
+ {
+ this.$dtpElement.find('a.dtp-meridien-pm').click();
+ }
+
+ var hFormat = ((this.params.shortTime) ? 'h' : 'H');
+
+ this.$dtpElement.find('.dtp-picker-datetime').removeClass('hidden');
+ this.$dtpElement.find('.dtp-picker-calendar').addClass('hidden');
+ this.$dtpElement.find('.dtp-picker-year').addClass('hidden');
+
+ var svgClockElement = this.createSVGClock(true);
+
+ for (var i = 0; i < 12; i++)
+ {
+ var x = -(162 * (Math.sin(-Math.PI * 2 * (i / 12))));
+ var y = -(162 * (Math.cos(-Math.PI * 2 * (i / 12))));
+
+ var fill = ((this.currentDate.format(hFormat) == i) ? "00a8e0" : 'transparent');
+ var color = ((this.currentDate.format(hFormat) == i) ? "#fff" : '#000');
+
+ var svgHourCircle = this.createSVGElement("circle", {'id': 'h-' + i, 'class': 'dtp-select-hour', 'style': 'cursor:pointer', r: '30', cx: x, cy: y, fill: fill, 'data-hour': i});
+
+ var svgHourText = this.createSVGElement("text", {'id': 'th-' + i, 'class': 'dtp-select-hour-text', 'text-anchor': 'middle', 'style': 'cursor:pointer', 'font-weight': 'bold', 'font-size': '20', x: x, y: y + 7, fill: color, 'data-hour': i});
+ svgHourText.textContent = ((i === 0) ? ((this.params.shortTime) ? 12 : i) : i);
+
+ if (!this.toggleTime(i, true))
+ {
+ svgHourCircle.className += " disabled";
+ svgHourText.className += " disabled";
+ svgHourText.setAttribute('fill', '#bdbdbd');
+ } else
+ {
+ svgHourCircle.addEventListener('click', this._onSelectHour.bind(this));
+ svgHourText.addEventListener('click', this._onSelectHour.bind(this));
+ }
+
+ svgClockElement.appendChild(svgHourCircle)
+ svgClockElement.appendChild(svgHourText)
+ }
+
+ if (!this.params.shortTime)
+ {
+ for (var i = 0; i < 12; i++)
+ {
+ var x = -(110 * (Math.sin(-Math.PI * 2 * (i / 12))));
+ var y = -(110 * (Math.cos(-Math.PI * 2 * (i / 12))));
+
+ var fill = ((this.currentDate.format(hFormat) == (i + 12)) ? "#00a8e0" : 'transparent');
+ var color = ((this.currentDate.format(hFormat) == (i + 12)) ? "#fff" : '#000');
+
+ var svgHourCircle = this.createSVGElement("circle", {'id': 'h-' + (i + 12), 'class': 'dtp-select-hour', 'style': 'cursor:pointer', r: '30', cx: x, cy: y, fill: fill, 'data-hour': (i + 12)});
+
+ var svgHourText = this.createSVGElement("text", {'id': 'th-' + (i + 12), 'class': 'dtp-select-hour-text', 'text-anchor': 'middle', 'style': 'cursor:pointer', 'font-weight': 'bold', 'font-size': '22', x: x, y: y + 7, fill: color, 'data-hour': (i + 12)});
+ svgHourText.textContent = i + 12;
+
+ if (!this.toggleTime(i + 12, true))
+ {
+ svgHourCircle.className += " disabled";
+ svgHourText.className += " disabled";
+ svgHourText.setAttribute('fill', '#bdbdbd');
+ } else
+ {
+ svgHourCircle.addEventListener('click', this._onSelectHour.bind(this));
+ svgHourText.addEventListener('click', this._onSelectHour.bind(this));
+ }
+
+ svgClockElement.appendChild(svgHourCircle)
+ svgClockElement.appendChild(svgHourText)
+ }
+
+ this.$dtpElement.find('a.dtp-meridien-am').addClass('hidden');
+ this.$dtpElement.find('a.dtp-meridien-pm').addClass('hidden');
+ }
+
+ this._centerBox();
+ },
+ initMinutes: function ()
+ {
+ this.currentView = 2;
+
+ this.showTime(this.currentDate);
+
+ this.initMeridienButtons();
+
+ if (this.currentDate.hour() < 12)
+ {
+ this.$dtpElement.find('a.dtp-meridien-am').click();
+ } else
+ {
+ this.$dtpElement.find('a.dtp-meridien-pm').click();
+ }
+
+ this.$dtpElement.find('.dtp-picker-year').addClass('hidden');
+ this.$dtpElement.find('.dtp-picker-calendar').addClass('hidden');
+ this.$dtpElement.find('.dtp-picker-datetime').removeClass('hidden');
+
+ var svgClockElement = this.createSVGClock(false);
+
+ for (var i = 0; i < 60; i++)
+ {
+ var s = ((i % 5 === 0) ? 162 : 158);
+ var r = ((i % 5 === 0) ? 30 : 20);
+
+ var x = -(s * (Math.sin(-Math.PI * 2 * (i / 60))));
+ var y = -(s * (Math.cos(-Math.PI * 2 * (i / 60))));
+
+ var color = ((this.currentDate.format("m") == i) ? "#00a8e0" : 'transparent');
+
+ var svgMinuteCircle = this.createSVGElement("circle", {'id': 'm-' + i, 'class': 'dtp-select-minute', 'style': 'cursor:pointer', r: r, cx: x, cy: y, fill: color, 'data-minute': i});
+
+ if (!this.toggleTime(i, false))
+ {
+ svgMinuteCircle.className += " disabled";
+ } else
+ {
+ svgMinuteCircle.addEventListener('click', this._onSelectMinute.bind(this));
+ }
+
+ svgClockElement.appendChild(svgMinuteCircle)
+ }
+
+ for (var i = 0; i < 60; i++)
+ {
+ if ((i % 5) === 0)
+ {
+ var x = -(162 * (Math.sin(-Math.PI * 2 * (i / 60))));
+ var y = -(162 * (Math.cos(-Math.PI * 2 * (i / 60))));
+
+ var color = ((this.currentDate.format("m") == i) ? "#fff" : '#000');
+
+ var svgMinuteText = this.createSVGElement("text", {'id': 'tm-' + i, 'class': 'dtp-select-minute-text', 'text-anchor': 'middle', 'style': 'cursor:pointer', 'font-weight': 'bold', 'font-size': '20', x: x, y: y + 7, fill: color, 'data-minute': i});
+ svgMinuteText.textContent = i;
+
+ if (!this.toggleTime(i, false))
+ {
+ svgMinuteText.className += " disabled";
+ svgMinuteText.setAttribute('fill', '#bdbdbd');
+ } else
+ {
+ svgMinuteText.addEventListener('click', this._onSelectMinute.bind(this));
+ }
+
+ svgClockElement.appendChild(svgMinuteText)
+ }
+ }
+
+ this._centerBox();
+ },
+ animateHands: function ()
+ {
+ var H = this.currentDate.hour();
+ var M = this.currentDate.minute();
+
+ var hh = this.$dtpElement.find('.hour-hand');
+ hh[0].setAttribute('transform', "rotate(" + 360 * H / 12 + ")");
+
+ var mh = this.$dtpElement.find('.minute-hand');
+ mh[0].setAttribute('transform', "rotate(" + 360 * M / 60 + ")");
+ },
+ createSVGClock: function (isHour)
+ {
+ var hl = ((this.params.shortTime) ? -120 : -90);
+
+ var svgElement = this.createSVGElement("svg", {class: 'svg-clock', viewBox: '0,0,400,400'});
+ var svgGElement = this.createSVGElement("g", {transform: 'translate(200,200) '});
+ var svgClockFace = this.createSVGElement("circle", {r: '192', fill: '#eee', stroke: '#bdbdbd', 'stroke-width': 2});
+ var svgClockCenter = this.createSVGElement("circle", {r: '15', fill: '#757575'});
+
+ svgGElement.appendChild(svgClockFace)
+
+ if (isHour)
+ {
+ var svgMinuteHand = this.createSVGElement("line", {class: 'minute-hand', x1: 0, y1: 0, x2: 0, y2: -150, stroke: '#bdbdbd', 'stroke-width': 2});
+ var svgHourHand = this.createSVGElement("line", {class: 'hour-hand', x1: 0, y1: 0, x2: 0, y2: hl, stroke: '#00a8e0', 'stroke-width': 8});
+
+ svgGElement.appendChild(svgMinuteHand);
+ svgGElement.appendChild(svgHourHand);
+ } else
+ {
+ var svgMinuteHand = this.createSVGElement("line", {class: 'minute-hand', x1: 0, y1: 0, x2: 0, y2: -150, stroke: '#00a8e0', 'stroke-width': 2});
+ var svgHourHand = this.createSVGElement("line", {class: 'hour-hand', x1: 0, y1: 0, x2: 0, y2: hl, stroke: '#bdbdbd', 'stroke-width': 8});
+
+ svgGElement.appendChild(svgHourHand);
+ svgGElement.appendChild(svgMinuteHand);
+ }
+
+ svgGElement.appendChild(svgClockCenter)
+
+ svgElement.appendChild(svgGElement)
+
+ this.$dtpElement.find("#dtp-svg-clock").empty();
+ this.$dtpElement.find("#dtp-svg-clock")[0].appendChild(svgElement);
+
+ this.animateHands();
+
+ return svgGElement;
+ },
+ createSVGElement: function (tag, attrs)
+ {
+ var el = document.createElementNS('http://www.w3.org/2000/svg', tag);
+ for (var k in attrs)
+ {
+ el.setAttribute(k, attrs[k]);
+ }
+ return el;
+ },
+ isAfterMinDate: function (date, checkHour, checkMinute)
+ {
+ var _return = true;
+
+ if (typeof (this.minDate) !== 'undefined' && this.minDate !== null)
+ {
+ var _minDate = moment(this.minDate);
+ var _date = moment(date);
+
+ if (!checkHour && !checkMinute)
+ {
+ _minDate.hour(0);
+ _minDate.minute(0);
+
+ _date.hour(0);
+ _date.minute(0);
+ }
+
+ _minDate.second(0);
+ _date.second(0);
+ _minDate.millisecond(0);
+ _date.millisecond(0);
+
+ if (!checkMinute)
+ {
+ _date.minute(0);
+ _minDate.minute(0);
+
+ _return = (parseInt(_date.format("X")) >= parseInt(_minDate.format("X")));
+ } else
+ {
+ _return = (parseInt(_date.format("X")) >= parseInt(_minDate.format("X")));
+ }
+ }
+
+ return _return;
+ },
+ isBeforeMaxDate: function (date, checkTime, checkMinute)
+ {
+ var _return = true;
+
+ if (typeof (this.maxDate) !== 'undefined' && this.maxDate !== null)
+ {
+ var _maxDate = moment(this.maxDate);
+ var _date = moment(date);
+
+ if (!checkTime && !checkMinute)
+ {
+ _maxDate.hour(0);
+ _maxDate.minute(0);
+
+ _date.hour(0);
+ _date.minute(0);
+ }
+
+ _maxDate.second(0);
+ _date.second(0);
+ _maxDate.millisecond(0);
+ _date.millisecond(0);
+
+ if (!checkMinute)
+ {
+ _date.minute(0);
+ _maxDate.minute(0);
+
+ _return = (parseInt(_date.format("X")) <= parseInt(_maxDate.format("X")));
+ } else
+ {
+ _return = (parseInt(_date.format("X")) <= parseInt(_maxDate.format("X")));
+ }
+ }
+
+ return _return;
+ },
+ rotateElement: function (el, deg)
+ {
+ $(el).css
+ ({
+ WebkitTransform: 'rotate(' + deg + 'deg)',
+ '-moz-transform': 'rotate(' + deg + 'deg)'
+ });
+ },
+ showDate: function (date)
+ {
+ if (date)
+ {
+ this.$dtpElement.find('.dtp-actual-day').html(date.locale(this.params.lang).format('dddd'));
+ this.$dtpElement.find('.dtp-actual-month').html(date.locale(this.params.lang).format('MMM').toUpperCase());
+ this.$dtpElement.find('.dtp-actual-num').html(date.locale(this.params.lang).format('DD'));
+ this.$dtpElement.find('.dtp-actual-year').html(date.locale(this.params.lang).format('YYYY') + '');
+ }
+ },
+ showTime: function (date)
+ {
+ if (date)
+ {
+ var minutes = date.minute();
+ var content = ((this.params.shortTime) ? date.format('hh') : date.format('HH')) + ':' + ((minutes.toString().length == 2) ? minutes : '0' + minutes) + ((this.params.shortTime) ? ' ' + date.format('A') : '');
+
+ if (this.params.date)
+ this.$dtpElement.find('.dtp-actual-time').html(content);
+ else
+ {
+ if (this.params.shortTime)
+ this.$dtpElement.find('.dtp-actual-day').html(date.format('A'));
+ else
+ this.$dtpElement.find('.dtp-actual-day').html(' ');
+
+ this.$dtpElement.find('.dtp-actual-maxtime').html(content);
+ }
+ }
+ },
+ selectDate: function (date)
+ {
+ if (date)
+ {
+ this.currentDate.date(date);
+
+ this.showDate(this.currentDate);
+ this.$element.trigger('dateSelected', this.currentDate);
+ }
+ },
+ generateCalendar: function (date)
+ {
+ // var _calendar = {};
+ var _calendar: any = {};
+
+ if (date !== null)
+ {
+ var startOfMonth = moment(date).locale(this.params.lang).startOf('month');
+ var endOfMonth = moment(date).locale(this.params.lang).endOf('month');
+
+ var iNumDay = startOfMonth.format('d');
+
+ _calendar.week = this.days;
+ _calendar.days = [];
+
+ for (var i = startOfMonth.date(); i <= endOfMonth.date(); i++)
+ {
+ if (i === startOfMonth.date())
+ {
+ var iWeek = _calendar.week.indexOf(iNumDay.toString());
+ if (iWeek > 0)
+ {
+ for (var x = 0; x < iWeek; x++)
+ {
+ _calendar.days.push(0);
+ }
+ }
+ }
+ _calendar.days.push(moment(startOfMonth).locale(this.params.lang).date(i));
+ }
+ }
+
+ return _calendar;
+ },
+ constructHTMLCalendar: function (date, calendar)
+ {
+ var _template = "";
+
+ _template += '' + date.locale(this.params.lang).format('MMMM YYYY') + '
';
+ _template += '';
+ for (var i = 0; i < calendar.week.length; i++)
+ {
+ _template += '' + moment(parseInt(calendar.week[i]), "d").locale(this.params.lang).format("dd").substring(0, 1) + ' | ';
+ }
+
+ _template += '';
+ _template += '';
+
+ for (var i = 0; i < calendar.days.length; i++)
+ {
+ if (i % 7 == 0)
+ _template += '
';
+ _template += '';
+ if (calendar.days[i] != 0)
+ {
+ if (this.isBeforeMaxDate(moment(calendar.days[i]), false, false) === false
+ || this.isAfterMinDate(moment(calendar.days[i]), false, false) === false
+ || this.params.disabledDays.indexOf(calendar.days[i].isoWeekday()) !== -1)
+ {
+ _template += '' + moment(calendar.days[i]).locale(this.params.lang).format("DD") + '';
+ } else
+ {
+ if (moment(calendar.days[i]).locale(this.params.lang).format("DD") === moment(this.currentDate).locale(this.params.lang).format("DD"))
+ {
+ _template += '' + moment(calendar.days[i]).locale(this.params.lang).format("DD") + '';
+ } else
+ {
+ _template += '' + moment(calendar.days[i]).locale(this.params.lang).format("DD") + '';
+ }
}
- }
- return _return;
- },
- setDate: function (date) {
- this.params.currentDate = date;
- this.initDates();
- },
- setMinDate: function (date) {
- this.params.minDate = date;
- this.initDates();
- },
- setMaxDate: function (date) {
- this.params.maxDate = date;
- this.initDates();
- },
- destroy: function () {
- this._detachEvents();
- this.$dtpElement.remove();
- },
- show: function () {
- this.$dtpElement.removeClass('hidden');
- this._attachEvent($(window), 'keydown', this._onKeydown.bind(this));
- this._centerBox();
- },
- hide: function () {
- ($ as any)(window).off('keydown', null, null, this._onKeydown.bind(this));
- this.$dtpElement.addClass('hidden');
- },
- _centerBox: function () {
- var h = (this.$dtpElement.height() - this.$dtpElement.find('.dtp-content').height()) / 2;
- this.$dtpElement.find('.dtp-content').css('marginLeft', -(this.$dtpElement.find('.dtp-content').width() / 2) + 'px');
- this.$dtpElement.find('.dtp-content').css('top', h + 'px');
- },
- enableDays: function () {
- var enableDays = this.params.enableDays;
- if (enableDays) {
- $(".dtp-picker-days tbody tr td").each(function () {
- if (!(($.inArray($(this).index(), enableDays)) >= 0)) {
- $(this).find('a').css({
- "background": "#e3e3e3",
- "cursor": "no-drop",
- "opacity": "0.5"
- }).off("click");
- }
- });
+ _template += ' | ';
+ }
+ }
+ _template += '
';
+
+ return _template;
+ },
+ setName: function ()
+ {
+ var text = "";
+ var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+
+ for (var i = 0; i < 5; i++)
+ {
+ text += possible.charAt(Math.floor(Math.random() * possible.length));
+ }
+
+ return text;
+ },
+ isPM: function ()
+ {
+ return this.$dtpElement.find('a.dtp-meridien-pm').hasClass('selected');
+ },
+ setElementValue: function ()
+ {
+ this.$element.trigger('beforeChange', this.currentDate);
+ if (typeof (($ as any).material) !== 'undefined')
+ {
+ this.$element.removeClass('empty');
+ }
+ this.$element.val(moment(this.currentDate).locale(this.params.lang).format(this.params.format));
+ this.$element.trigger('change', this.currentDate);
+ },
+ toggleButtons: function (date)
+ {
+ if (date && date.isValid())
+ {
+ var startOfMonth = moment(date).locale(this.params.lang).startOf('month');
+ var endOfMonth = moment(date).locale(this.params.lang).endOf('month');
+
+ if (!this.isAfterMinDate(startOfMonth, false, false))
+ {
+ this.$dtpElement.find('a.dtp-select-month-before').addClass('invisible');
+ } else
+ {
+ this.$dtpElement.find('a.dtp-select-month-before').removeClass('invisible');
+ }
+
+ if (!this.isBeforeMaxDate(endOfMonth, false, false))
+ {
+ this.$dtpElement.find('a.dtp-select-month-after').addClass('invisible');
+ } else
+ {
+ this.$dtpElement.find('a.dtp-select-month-after').removeClass('invisible');
+ }
+
+ var startOfYear = moment(date).locale(this.params.lang).startOf('year');
+ var endOfYear = moment(date).locale(this.params.lang).endOf('year');
+
+ if (!this.isAfterMinDate(startOfYear, false, false))
+ {
+ this.$dtpElement.find('a.dtp-select-year-before').addClass('invisible');
+ } else
+ {
+ this.$dtpElement.find('a.dtp-select-year-before').removeClass('invisible');
+ }
+
+ if (!this.isBeforeMaxDate(endOfYear, false, false))
+ {
+ this.$dtpElement.find('a.dtp-select-year-after').addClass('invisible');
+ } else
+ {
+ this.$dtpElement.find('a.dtp-select-year-after').removeClass('invisible');
+ }
+ }
+ },
+ toggleTime: function (value, isHours)
+ {
+ var result = false;
+
+ if (isHours)
+ {
+ var _date = moment(this.currentDate);
+ _date.hour(this.convertHours(value)).minute(0).second(0);
+
+ result = !(this.isAfterMinDate(_date, true, false) === false || this.isBeforeMaxDate(_date, true, false) === false);
+ } else
+ {
+ var _date = moment(this.currentDate);
+ _date.minute(value).second(0);
+
+ result = !(this.isAfterMinDate(_date, true, true) === false || this.isBeforeMaxDate(_date, true, true) === false);
+ }
+
+ return result;
+ },
+ _attachEvent: function (el, ev, fn)
+ {
+ el.on(ev, null, null, fn);
+ this._attachedEvents.push([el, ev, fn]);
+ },
+ _detachEvents: function ()
+ {
+ for (var i = this._attachedEvents.length - 1; i >= 0; i--)
+ {
+ this._attachedEvents[i][0].off(this._attachedEvents[i][1], this._attachedEvents[i][2]);
+ this._attachedEvents.splice(i, 1);
+ }
+ },
+ _fireCalendar: function ()
+ {
+ this.currentView = 0;
+ this.$element.blur();
+
+ this.initDates();
+
+ this.show();
+
+ if (this.params.date)
+ {
+ this.$dtpElement.find('.dtp-date').removeClass('hidden');
+ this.initDate();
+ } else
+ {
+ if (this.params.time)
+ {
+ this.$dtpElement.find('.dtp-time').removeClass('hidden');
+ this.initHours();
+ }
+ }
+ },
+ _onBackgroundClick: function (e)
+ {
+ e.stopPropagation();
+ this.hide();
+ },
+ _onElementClick: function (e)
+ {
+ e.stopPropagation();
+ },
+ _onKeydown: function (e)
+ {
+ if (e.which === 27)
+ {
+ this.hide();
+ }
+ },
+ _onCloseClick: function ()
+ {
+ this.hide();
+ },
+ _onClearClick: function ()
+ {
+ this.currentDate = null;
+ this.$element.trigger('beforeChange', this.currentDate);
+ this.hide();
+ if (typeof (($ as any).material) !== 'undefined')
+ {
+ this.$element.addClass('empty');
+ }
+ this.$element.val('');
+ this.$element.trigger('change', this.currentDate);
+ },
+ _onNowClick: function ()
+ {
+ this.currentDate = moment();
+
+ if (this.params.date === true)
+ {
+ this.showDate(this.currentDate);
+
+ if (this.currentView === 0)
+ {
+ this.initDate();
+ }
+ }
+
+ if (this.params.time === true)
+ {
+ this.showTime(this.currentDate);
+
+ switch (this.currentView)
+ {
+ case 1 :
+ this.initHours();
+ break;
+ case 2 :
+ this.initMinutes();
+ break;
+ }
+
+ this.animateHands();
+ }
+ },
+ _onOKClick: function ()
+ {
+ switch (this.currentView)
+ {
+ case 0:
+ if (this.params.time === true)
+ {
+ this.initHours();
+ } else
+ {
+ this.setElementValue();
+ this.hide();
+ }
+ break;
+ case 1:
+ this.initMinutes();
+ break;
+ case 2:
+ this.setElementValue();
+ this.hide();
+ break;
+ }
+ },
+ _onCancelClick: function ()
+ {
+ if (this.params.time)
+ {
+ switch (this.currentView)
+ {
+ case 0:
+ this.hide();
+ break;
+ case 1:
+ if (this.params.date)
+ {
+ this.initDate();
+ } else
+ {
+ this.hide();
+ }
+ break;
+ case 2:
+ this.initHours();
+ break;
+ }
+ } else
+ {
+ this.hide();
+ }
+ },
+ _onMonthBeforeClick: function ()
+ {
+ this.currentDate.subtract(1, 'months');
+ this.initDate(this.currentDate);
+ this._closeYearPicker();
+ },
+ _onMonthAfterClick: function ()
+ {
+ this.currentDate.add(1, 'months');
+ this.initDate(this.currentDate);
+ this._closeYearPicker();
+ },
+ _onYearBeforeClick: function ()
+ {
+ this.currentDate.subtract(1, 'years');
+ this.initDate(this.currentDate);
+ this._closeYearPicker();
+ },
+ _onYearAfterClick: function ()
+ {
+ this.currentDate.add(1, 'years');
+ this.initDate(this.currentDate);
+ this._closeYearPicker();
+ },
+ refreshYearItems:function () {
+ var curYear=this.currentDate.year(),midYear=this.midYear;
+ var minYear=1850;
+ if (typeof (this.minDate) !== 'undefined' && this.minDate !== null){
+ minYear=moment(this.minDate).year();
+ }
+
+ var maxYear=2200;
+ if (typeof (this.maxDate) !== 'undefined' && this.maxDate !== null){
+ maxYear=moment(this.maxDate).year();
+ }
+
+ this.$dtpElement.find(".dtp-picker-year .invisible").removeClass("invisible");
+ this.$dtpElement.find(".year-picker-item").each(function (i, el) {
+ var newYear = midYear - 3 + i;
+ $(el).attr("data-year", newYear).text(newYear).data("year", newYear);
+ if (curYear == newYear) {
+ $(el).addClass("active");
+ } else {
+ $(el).removeClass("active");
+ }
+ if(newYearmaxYear){
+ $(el).addClass("invisible")
+ }
+ });
+ if(minYear>=midYear-3){
+ this.$dtpElement.find(".dtp-select-year-range.before").addClass('invisible');
+ }
+ if(maxYear<=midYear+3){
+ this.$dtpElement.find(".dtp-select-year-range.after").addClass('invisible');
+ }
+
+ this.$dtpElement.find(".dtp-select-year-range").data("mid", midYear);
+ },
+ _onActualYearClick:function(){
+ if(this.params.year){
+ if(this.$dtpElement.find('.dtp-picker-year.hidden').length>0) {
+ this.$dtpElement.find('.dtp-picker-datetime').addClass("hidden");
+ this.$dtpElement.find('.dtp-picker-calendar').addClass("hidden");
+ this.$dtpElement.find('.dtp-picker-year').removeClass("hidden");
+ this.midYear = this.currentDate.year();
+ this.refreshYearItems();
+ }else{
+ this._closeYearPicker();
+ }
}
- }
-
- };
-})(jQuery, moment);
+ },
+ _onYearRangeBeforeClick:function(){
+ this.midYear-=7;
+ this.refreshYearItems();
+ },
+ _onYearRangeAfterClick:function(){
+ this.midYear+=7;
+ this.refreshYearItems();
+ },
+ _onYearItemClick:function (e) {
+ var newYear = $(e.currentTarget).data('year');
+ var oldYear = this.currentDate.year();
+ var diff = newYear - oldYear;
+ this.currentDate.add(diff, 'years');
+ this.initDate(this.currentDate);
+
+ this._closeYearPicker();
+ this.$element.trigger("yearSelected",this.currentDate);
+ },
+ _closeYearPicker:function(){
+ this.$dtpElement.find('.dtp-picker-calendar').removeClass("hidden");
+ this.$dtpElement.find('.dtp-picker-year').addClass("hidden");
+ },
+ enableYearPicker:function () {
+ this.params.year=true;
+ this.$dtpElement.find(".dtp-actual-year").removeClass("disabled");
+ },
+ disableYearPicker:function () {
+ this.params.year=false;
+ this.$dtpElement.find(".dtp-actual-year").addClass("disabled");
+ this._closeYearPicker();
+ },
+ _onSelectDate: function (e)
+ {
+ this.$dtpElement.find('a.dtp-select-day').removeClass('selected');
+ $(e.currentTarget).addClass('selected');
+
+ this.selectDate($(e.currentTarget).parent().data("date"));
+
+ if (this.params.switchOnClick === true && this.params.time === true)
+ setTimeout(this.initHours.bind(this), 200);
+
+ if(this.params.switchOnClick === true && this.params.time === false) {
+ setTimeout(this._onOKClick.bind(this), 200);
+ }
+
+ },
+ _onSelectHour: function (e)
+ {
+ if (!$(e.target).hasClass('disabled'))
+ {
+ var value = $(e.target).data('hour');
+ var parent = $(e.target).parent();
+
+ var h = parent.find('.dtp-select-hour');
+ for (var i = 0; i < h.length; i++)
+ {
+ $(h[i]).attr('fill', 'transparent');
+ }
+ var th = parent.find('.dtp-select-hour-text');
+ for (var i = 0; i < th.length; i++)
+ {
+ $(th[i]).attr('fill', '#000');
+ }
+
+ $(parent.find('#h-' + value)).attr('fill', '#00a8e0');
+ $(parent.find('#th-' + value)).attr('fill', '#fff');
+
+ this.currentDate.hour(parseInt(value));
+
+ if (this.params.shortTime === true && this.isPM())
+ {
+ this.currentDate.add(12, 'hours');
+ }
+
+ this.showTime(this.currentDate);
+
+ this.animateHands();
+
+ if (this.params.switchOnClick === true)
+ setTimeout(this.initMinutes.bind(this), 200);
+ }
+ },
+ _onSelectMinute: function (e)
+ {
+ if (!$(e.target).hasClass('disabled'))
+ {
+ var value = $(e.target).data('minute');
+ var parent = $(e.target).parent();
+
+ var m = parent.find('.dtp-select-minute');
+ for (var i = 0; i < m.length; i++)
+ {
+ $(m[i]).attr('fill', 'transparent');
+ }
+ var tm = parent.find('.dtp-select-minute-text');
+ for (var i = 0; i < tm.length; i++)
+ {
+ $(tm[i]).attr('fill', '#000');
+ }
+
+ $(parent.find('#m-' + value)).attr('fill', '#00a8e0');
+ $(parent.find('#tm-' + value)).attr('fill', '#fff');
+
+ this.currentDate.minute(parseInt(value));
+ this.showTime(this.currentDate);
+
+ this.animateHands();
+
+ if (this.params.switchOnClick === true)
+ setTimeout(function ()
+ {
+ this.setElementValue();
+ this.hide();
+ }.bind(this), 200);
+ }
+ },
+ _onSelectAM: function (e)
+ {
+ $('.dtp-actual-meridien').find('a').removeClass('selected');
+ $(e.currentTarget).addClass('selected');
+
+ if (this.currentDate.hour() >= 12)
+ {
+ if (this.currentDate.subtract(12, 'hours'))
+ this.showTime(this.currentDate);
+ }
+ this.toggleTime((this.currentView === 1));
+ },
+ _onSelectPM: function (e)
+ {
+ $('.dtp-actual-meridien').find('a').removeClass('selected');
+ $(e.currentTarget).addClass('selected');
+
+ if (this.currentDate.hour() < 12)
+ {
+ if (this.currentDate.add(12, 'hours'))
+ this.showTime(this.currentDate);
+ }
+ this.toggleTime((this.currentView === 1));
+ },
+ _hideCalendar: function() {
+ this.$dtpElement.find('.dtp-picker-calendar').addClass('hidden');
+ },
+ convertHours: function (h)
+ {
+ var _return = h;
+
+ if (this.params.shortTime === true)
+ {
+ if ((h < 12) && this.isPM())
+ {
+ _return += 12;
+ }
+ }
+
+ return _return;
+ },
+ setDate: function (date)
+ {
+ this.params.currentDate = date;
+ this.initDates();
+ },
+ setMinDate: function (date)
+ {
+ this.params.minDate = date;
+ this.initDates();
+ },
+ setMaxDate: function (date)
+ {
+ this.params.maxDate = date;
+ this.initDates();
+ },
+ destroy: function ()
+ {
+ this._detachEvents();
+ this.$dtpElement.remove();
+ },
+ show: function ()
+ {
+ this.$dtpElement.removeClass('hidden');
+ this._attachEvent($(window), 'keydown', this._onKeydown.bind(this));
+ this._centerBox();
+ this.$element.trigger('open');
+ if (this.params.monthPicker === true)
+ {
+ this._hideCalendar();
+ }
+ },
+ hide: function ()
+ {
+ ($ as any)(window).off('keydown', null, null, this._onKeydown.bind(this));
+ this.$dtpElement.addClass('hidden');
+ this.$element.trigger('close');
+ },
+ _centerBox: function ()
+ {
+ var h = (this.$dtpElement.height() - this.$dtpElement.find('.dtp-content').height()) / 2;
+ this.$dtpElement.find('.dtp-content').css('marginLeft', -(this.$dtpElement.find('.dtp-content').width() / 2) + 'px');
+ this.$dtpElement.find('.dtp-content').css('top', h + 'px');
+ },
+ enableDays: function ()
+ {
+ var enableDays = this.params.enableDays;
+ if (enableDays) {
+ $(".dtp-picker-days tbody tr td").each(function () {
+ if (!(($.inArray($(this).index(), enableDays)) >= 0)) {
+ $(this).find('a').css({
+ "background": "#e3e3e3",
+ "cursor": "no-drop",
+ "opacity": "0.5"
+ }).off("click");
+ }
+ });
+ }
+ }
+
+ };
+})(jQuery, moment);
\ No newline at end of file
diff --git a/src/lib/datetime/datetime.component.ts b/src/lib/datetime/datetime.component.ts
index 3d907e72..1ee9b40b 100644
--- a/src/lib/datetime/datetime.component.ts
+++ b/src/lib/datetime/datetime.component.ts
@@ -222,7 +222,8 @@ export class PlexDateTimeComponent implements OnInit, AfterViewInit, OnChanges,
time: this.type === 'time' || this.type === 'datetime',
minDate: this.min,
maxDate: this.max,
- triggerEvent: 'focus'
+ triggerEvent: 'focus',
+ year: true
});
this.$button.on('change', (event, date) => {
diff --git a/src/lib/table/table.component.ts b/src/lib/table/table.component.ts
index 895238f8..04a4ec46 100644
--- a/src/lib/table/table.component.ts
+++ b/src/lib/table/table.component.ts
@@ -1,13 +1,7 @@
-<<<<<<< HEAD
import { Component, EventEmitter, Input, Optional, Output, Self } from '@angular/core';
-=======
-import { AfterViewInit, Component, ContentChildren, ElementRef, EventEmitter, Input, Optional, Output, Renderer2, Self, ViewChild, ViewEncapsulation } from '@angular/core';
->>>>>>> 8055766 (feat(plex-327): selector de transparecia en table head)
import { Observable } from 'rxjs';
import { PlexColumnDirective } from './columns.directive';
import { IPlexTableColumns } from './table.interfaces';
-import { PlexLayoutComponent } from '../layout/layout.component';
-
@Component({
selector: 'plex-table',
@@ -71,11 +65,7 @@ export class PlexTableComponent {
public _height: string;
-<<<<<<< HEAD
@Input() headOpacity = 0;
-=======
- @Input() headOpacity = 100;
->>>>>>> 8055766 (feat(plex-327): selector de transparecia en table head)
/**
* Indica la altura del listado respecto a su contenedor