Initial setup of mycontroller

This commit is contained in:
2019-11-28 09:16:11 -06:00
parent 62d71e30c1
commit 665eb783be
504 changed files with 212034 additions and 0 deletions

View File

@@ -0,0 +1,108 @@
/**
* @license angular-bootstrap-datetimepicker version: 0.4.0
* Copyright 2015 Knight Rider Consulting, Inc. http://www.knightrider.com
* License: MIT
*/
.datetimepicker {
border-radius: 4px;
direction: ltr;
display: block;
margin-top: 1px;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
width: 320px;
}
.datetimepicker > div {
display: none;
}
.datetimepicker .hour,
.datetimepicker .minute {
height: 34px;
line-height: 34px;
margin: 0;
width: 25%;
}
.datetimepicker .table {
margin: 0;
}
.datetimepicker .table td,
.datetimepicker .table th {
border: 0;
border-radius: 4px;
height: 20px;
text-align: center;
}
.datetimepicker .minute:hover,
.datetimepicker .hour:hover,
.datetimepicker .day:hover,
.datetimepicker .switch:hover,
.datetimepicker .left:hover,
.datetimepicker .right:hover {
background: #eeeeee;
cursor: pointer;
}
.datetimepicker .disabled,
.datetimepicker .disabled:hover {
background: none;
color: #ebebeb;
cursor: default;
}
.datetimepicker .active,
.datetimepicker .active:hover,
.datetimepicker .active.disabled,
.datetimepicker .active.disabled:hover {
background-color: #0044cc;
background-image: linear-gradient(to bottom, #0088cc, #0044cc);
background-repeat: repeat-x;
border-color: #0044cc #0044cc #002a80;
color: #ffffff;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#08c', endColorstr='#04c', GradientType=0);
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.datetimepicker .active:hover,
.datetimepicker .active:hover:hover,
.datetimepicker .active.disabled:hover,
.datetimepicker .active.disabled:hover:hover,
.datetimepicker .active:active,
.datetimepicker .active:hover:active,
.datetimepicker .active.disabled:active,
.datetimepicker .active.disabled:hover:active,
.datetimepicker .active.active,
.datetimepicker .active:hover.active,
.datetimepicker .active.disabled.active,
.datetimepicker .active.disabled:hover.active,
.datetimepicker .active.disabled,
.datetimepicker .active:hover.disabled,
.datetimepicker .active.disabled.disabled,
.datetimepicker .active.disabled:hover.disabled,
.datetimepicker td.active[disabled],
.datetimepicker td.active:hover[disabled],
.datetimepicker td.active.disabled[disabled],
.datetimepicker td.active.disabled:hover[disabled],
.datetimepicker span.active[disabled],
.datetimepicker span.active:hover[disabled],
.datetimepicker span.active.disabled[disabled],
.datetimepicker span.active.disabled:hover[disabled] {
background-color: #0044cc;
}
.datetimepicker span {
border-radius: 4px;
cursor: pointer;
display: block;
float: left;
height: 54px;
line-height: 54px;
margin: 1%;
width: 23%;
}
.datetimepicker span:hover {
background: #eeeeee;
}
.datetimepicker .past,
.datetimepicker .future {
color: #999999;
}
/*# sourceMappingURL=datetimepicker.css.map */

View File

@@ -0,0 +1 @@
{"version":3,"sources":["datetimepicker.css"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;EACE,mBAAmB;EACnB,eAAe;EACf,eAAe;EACf,gBAAgB;EAChB,0BAAkB;KAAlB,uBAAkB;MAAlB,sBAAkB;UAAlB,kBAAkB;EAClB,aAAa,EAAE;EACf;IACE,cAAc,EAAE;EAClB;;IAEE,aAAa;IACb,kBAAkB;IAClB,UAAU;IACV,WAAW,EAAE;EACf;IACE,UAAU,EAAE;EACd;;IAEE,UAAU;IACV,mBAAmB;IACnB,aAAa;IACb,mBAAmB,EAAE;EACvB;;;;;;IAME,iBAAiB;IACjB,gBAAgB,EAAE;EACpB;;IAEE,iBAAiB;IACjB,eAAe;IACf,gBAAgB,EAAE;EACpB;;;;IAIE,uBAAuB;IACvB,yDAAyD;IACzD,4BAA4B;IAC5B,gCAAgC;IAChC,YAAY;IACZ,6GAA6G;IAC7G,0CAA0C,EAAE;EAC9C;;;;;;;;;;;;;;;;;;;;;;;;IAwBE,uBAAuB,EAAE;EAC3B;IACE,mBAAmB;IACnB,gBAAgB;IAChB,eAAe;IACf,YAAY;IACZ,aAAa;IACb,kBAAkB;IAClB,WAAW;IACX,WAAW,EAAE;IACb;MACE,iBAAiB,EAAE;EACvB;;IAEE,YAAY,EAAE","file":"datetimepicker.css","sourcesContent":["/**\n * @license angular-bootstrap-datetimepicker version: 0.3.14\n * Copyright 2015 Knight Rider Consulting, Inc. http://www.knightrider.com\n * License: MIT\n */\n.datetimepicker {\n border-radius: 4px;\n direction: ltr;\n display: block;\n margin-top: 1px;\n user-select: none;\n width: 320px; }\n .datetimepicker > div {\n display: none; }\n .datetimepicker .hour,\n .datetimepicker .minute {\n height: 34px;\n line-height: 34px;\n margin: 0;\n width: 25%; }\n .datetimepicker .table {\n margin: 0; }\n .datetimepicker .table td,\n .datetimepicker .table th {\n border: 0;\n border-radius: 4px;\n height: 20px;\n text-align: center; }\n .datetimepicker .minute:hover,\n .datetimepicker .hour:hover,\n .datetimepicker .day:hover,\n .datetimepicker .switch:hover,\n .datetimepicker .left:hover,\n .datetimepicker .right:hover {\n background: #eee;\n cursor: pointer; }\n .datetimepicker .disabled,\n .datetimepicker .disabled:hover {\n background: none;\n color: #ebebeb;\n cursor: default; }\n .datetimepicker .active,\n .datetimepicker .active:hover,\n .datetimepicker .active.disabled,\n .datetimepicker .active.disabled:hover {\n background-color: #04c;\n background-image: linear-gradient(to bottom, #08c, #04c);\n background-repeat: repeat-x;\n border-color: #04c #04c #002a80;\n color: #fff;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#08c', endColorstr='#04c', GradientType=0);\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); }\n .datetimepicker .active:hover,\n .datetimepicker .active:hover:hover,\n .datetimepicker .active.disabled:hover,\n .datetimepicker .active.disabled:hover:hover,\n .datetimepicker .active:active,\n .datetimepicker .active:hover:active,\n .datetimepicker .active.disabled:active,\n .datetimepicker .active.disabled:hover:active,\n .datetimepicker .active.active,\n .datetimepicker .active:hover.active,\n .datetimepicker .active.disabled.active,\n .datetimepicker .active.disabled:hover.active,\n .datetimepicker .active.disabled,\n .datetimepicker .active:hover.disabled,\n .datetimepicker .active.disabled.disabled,\n .datetimepicker .active.disabled:hover.disabled,\n .datetimepicker td.active[disabled],\n .datetimepicker td.active:hover[disabled],\n .datetimepicker td.active.disabled[disabled],\n .datetimepicker td.active.disabled:hover[disabled],\n .datetimepicker span.active[disabled],\n .datetimepicker span.active:hover[disabled],\n .datetimepicker span.active.disabled[disabled],\n .datetimepicker span.active.disabled:hover[disabled] {\n background-color: #04c; }\n .datetimepicker span {\n border-radius: 4px;\n cursor: pointer;\n display: block;\n float: left;\n height: 54px;\n line-height: 54px;\n margin: 1%;\n width: 23%; }\n .datetimepicker span:hover {\n background: #eee; }\n .datetimepicker .past,\n .datetimepicker .future {\n color: #999; }\n"],"sourceRoot":"/source/"}

View File

@@ -0,0 +1,448 @@
/*globals define, jQuery, module, require */
/*jslint vars:true */
/**
* @license angular-bootstrap-datetimepicker version: 0.4.0
* Copyright 2015 Knight Rider Consulting, Inc. http://www.knightrider.com
* License: MIT
*/
/**
*
* @author Dale "Ducky" Lotts
* @since 2013-Jul-8
*/
(function (factory) {
'use strict';
/* istanbul ignore if */
if (typeof define === 'function' && /* istanbul ignore next */ define.amd) {
define(['angular', 'moment'], factory); // AMD
/* istanbul ignore next */
} else if (typeof exports === 'object') {
module.exports = factory(require('angular'), require('moment')); // CommonJS
} else {
factory(window.angular, window.moment); // Browser global
}
}(function (angular, moment) {
'use strict';
angular.module('ui.bootstrap.datetimepicker', [])
.constant('dateTimePickerConfig', {
configureOn: null,
dropdownSelector: null,
minuteStep: 5,
minView: 'minute',
renderOn: null,
startView: 'day'
})
.directive('datetimepicker', ['$log', 'dateTimePickerConfig', function datetimepickerDirective($log, defaultConfig) {
function DateObject() {
var tempDate = new Date();
var localOffset = tempDate.getTimezoneOffset() * 60000;
this.utcDateValue = tempDate.getTime();
this.selectable = true;
this.localDateValue = function () {
return this.utcDateValue + localOffset;
};
var validProperties = ['utcDateValue', 'localDateValue', 'display', 'active', 'selectable', 'past', 'future'];
for (var prop in arguments[0]) {
/* istanbul ignore else */
//noinspection JSUnfilteredForInLoop
if (validProperties.indexOf(prop) >= 0) {
//noinspection JSUnfilteredForInLoop
this[prop] = arguments[0][prop];
}
}
}
var validateConfiguration = function validateConfiguration(configuration) {
var validOptions = [
'configureOn',
'dropdownSelector',
'minuteStep',
'minView',
'renderOn',
'startView'
];
for (var prop in configuration) {
//noinspection JSUnfilteredForInLoop
if (validOptions.indexOf(prop) < 0) {
throw ('invalid option: ' + prop);
}
}
// Order of the elements in the validViews array is significant.
var validViews = ['minute', 'hour', 'day', 'month', 'year'];
if (validViews.indexOf(configuration.startView) < 0) {
throw ('invalid startView value: ' + configuration.startView);
}
if (validViews.indexOf(configuration.minView) < 0) {
throw ('invalid minView value: ' + configuration.minView);
}
if (validViews.indexOf(configuration.minView) > validViews.indexOf(configuration.startView)) {
throw ('startView must be greater than minView');
}
if (!angular.isNumber(configuration.minuteStep)) {
throw ('minuteStep must be numeric');
}
if (configuration.minuteStep <= 0 || configuration.minuteStep >= 60) {
throw ('minuteStep must be greater than zero and less than 60');
}
if (configuration.configureOn !== null && !angular.isString(configuration.configureOn)) {
throw ('configureOn must be a string');
}
if (configuration.configureOn !== null && configuration.configureOn.length < 1) {
throw ('configureOn must not be an empty string');
}
if (configuration.renderOn !== null && !angular.isString(configuration.renderOn)) {
throw ('renderOn must be a string');
}
if (configuration.renderOn !== null && configuration.renderOn.length < 1) {
throw ('renderOn must not be an empty string');
}
if (configuration.dropdownSelector !== null && !angular.isString(configuration.dropdownSelector)) {
throw ('dropdownSelector must be a string');
}
/* istanbul ignore next */
if (configuration.dropdownSelector !== null && ((typeof jQuery === 'undefined') || (typeof jQuery().dropdown !== 'function'))) {
$log.error('Please DO NOT specify the dropdownSelector option unless you are using jQuery AND Bootstrap.js. ' +
'Please include jQuery AND Bootstrap.js, or write code to close the dropdown in the on-set-time callback. \n\n' +
'The dropdownSelector configuration option is being removed because it will not function properly.');
delete configuration.dropdownSelector;
}
};
return {
restrict: 'E',
require: 'ngModel',
template: '<div class="datetimepicker table-responsive">' +
'<table class="table table-condensed {{ data.currentView }}-view">' +
' <thead>' +
' <tr>' +
' <th class="left" data-ng-click="changeView(data.currentView, data.leftDate, $event)" data-ng-show="data.leftDate.selectable"><i class="glyphicon glyphicon-arrow-left"/></th>' +
' <th class="switch" colspan="5" data-ng-show="data.previousViewDate.selectable" data-ng-click="changeView(data.previousView, data.previousViewDate, $event)">{{ data.previousViewDate.display }}</th>' +
' <th class="right" data-ng-click="changeView(data.currentView, data.rightDate, $event)" data-ng-show="data.rightDate.selectable"><i class="glyphicon glyphicon-arrow-right"/></th>' +
' </tr>' +
' <tr>' +
' <th class="dow" data-ng-repeat="day in data.dayNames" >{{ day }}</th>' +
' </tr>' +
' </thead>' +
' <tbody>' +
' <tr data-ng-if="data.currentView !== \'day\'" >' +
' <td colspan="7" >' +
' <span class="{{ data.currentView }}" ' +
' data-ng-repeat="dateObject in data.dates" ' +
' data-ng-class="{active: dateObject.active, past: dateObject.past, future: dateObject.future, disabled: !dateObject.selectable}" ' +
' data-ng-click="changeView(data.nextView, dateObject, $event)">{{ dateObject.display }}</span> ' +
' </td>' +
' </tr>' +
' <tr data-ng-if="data.currentView === \'day\'" data-ng-repeat="week in data.weeks">' +
' <td data-ng-repeat="dateObject in week.dates" ' +
' data-ng-click="changeView(data.nextView, dateObject, $event)"' +
' class="day" ' +
' data-ng-class="{active: dateObject.active, past: dateObject.past, future: dateObject.future, disabled: !dateObject.selectable}" >{{ dateObject.display }}</td>' +
' </tr>' +
' </tbody>' +
'</table></div>',
scope: {
onSetTime: '&',
beforeRender: '&'
},
replace: true,
link: function link(scope, element, attrs, ngModelController) {
var configure = function configure() {
var directiveConfig = {};
if (attrs.datetimepickerConfig) {
directiveConfig = scope.$parent.$eval(attrs.datetimepickerConfig);
}
var configuration = {};
angular.extend(configuration, defaultConfig, directiveConfig);
validateConfiguration(configuration);
return configuration;
};
var configuration = configure();
var startOfDecade = function startOfDecade(unixDate) {
var startYear = (parseInt(moment.utc(unixDate).year() / 10, 10) * 10);
return moment.utc(unixDate).year(startYear).startOf('year');
};
var dataFactory = {
year: function year(unixDate) {
var selectedDate = moment.utc(unixDate).startOf('year');
// View starts one year before the decade starts and ends one year after the decade ends
// i.e. passing in a date of 1/1/2013 will give a range of 2009 to 2020
// Truncate the last digit from the current year and subtract 1 to get the start of the decade
var startDecade = (parseInt(selectedDate.year() / 10, 10) * 10);
var startDate = moment.utc(startOfDecade(unixDate)).subtract(1, 'year').startOf('year');
var activeYear = ngModelController.$modelValue ? moment(ngModelController.$modelValue).year() : 0;
var result = {
'currentView': 'year',
'nextView': configuration.minView === 'year' ? 'setTime' : 'month',
'previousViewDate': new DateObject({
utcDateValue: null,
display: startDecade + '-' + (startDecade + 9)
}),
'leftDate': new DateObject({utcDateValue: moment.utc(startDate).subtract(9, 'year').valueOf()}),
'rightDate': new DateObject({utcDateValue: moment.utc(startDate).add(11, 'year').valueOf()}),
'dates': []
};
for (var i = 0; i < 12; i += 1) {
var yearMoment = moment.utc(startDate).add(i, 'years');
var dateValue = {
'utcDateValue': yearMoment.valueOf(),
'display': yearMoment.format('YYYY'),
'past': yearMoment.year() < startDecade,
'future': yearMoment.year() > startDecade + 9,
'active': yearMoment.year() === activeYear
};
result.dates.push(new DateObject(dateValue));
}
return result;
},
month: function month(unixDate) {
var startDate = moment.utc(unixDate).startOf('year');
var previousViewDate = startOfDecade(unixDate);
var activeDate = ngModelController.$modelValue ? moment(ngModelController.$modelValue).format('YYYY-MMM') : 0;
var result = {
'previousView': 'year',
'currentView': 'month',
'nextView': configuration.minView === 'month' ? 'setTime' : 'day',
'previousViewDate': new DateObject({
utcDateValue: previousViewDate.valueOf(),
display: startDate.format('YYYY')
}),
'leftDate': new DateObject({utcDateValue: moment.utc(startDate).subtract(1, 'year').valueOf()}),
'rightDate': new DateObject({utcDateValue: moment.utc(startDate).add(1, 'year').valueOf()}),
'dates': []
};
for (var i = 0; i < 12; i += 1) {
var monthMoment = moment.utc(startDate).add(i, 'months');
var dateValue = {
'utcDateValue': monthMoment.valueOf(),
'display': monthMoment.format('MMM'),
'active': monthMoment.format('YYYY-MMM') === activeDate
};
result.dates.push(new DateObject(dateValue));
}
return result;
},
day: function day(unixDate) {
var selectedDate = moment.utc(unixDate);
var startOfMonth = moment.utc(selectedDate).startOf('month');
var previousViewDate = moment.utc(selectedDate).startOf('year');
var endOfMonth = moment.utc(selectedDate).endOf('month');
var startDate = moment.utc(startOfMonth).subtract(Math.abs(startOfMonth.weekday()), 'days');
var activeDate = ngModelController.$modelValue ? moment(ngModelController.$modelValue).format('YYYY-MMM-DD') : '';
var result = {
'previousView': 'month',
'currentView': 'day',
'nextView': configuration.minView === 'day' ? 'setTime' : 'hour',
'previousViewDate': new DateObject({
utcDateValue: previousViewDate.valueOf(),
display: startOfMonth.format('YYYY-MMM')
}),
'leftDate': new DateObject({utcDateValue: moment.utc(startOfMonth).subtract(1, 'months').valueOf()}),
'rightDate': new DateObject({utcDateValue: moment.utc(startOfMonth).add(1, 'months').valueOf()}),
'dayNames': [],
'weeks': []
};
for (var dayNumber = 0; dayNumber < 7; dayNumber += 1) {
result.dayNames.push(moment.utc().weekday(dayNumber).format('dd'));
}
for (var i = 0; i < 6; i += 1) {
var week = {dates: []};
for (var j = 0; j < 7; j += 1) {
var monthMoment = moment.utc(startDate).add((i * 7) + j, 'days');
var dateValue = {
'utcDateValue': monthMoment.valueOf(),
'display': monthMoment.format('D'),
'active': monthMoment.format('YYYY-MMM-DD') === activeDate,
'past': monthMoment.isBefore(startOfMonth),
'future': monthMoment.isAfter(endOfMonth)
};
week.dates.push(new DateObject(dateValue));
}
result.weeks.push(week);
}
return result;
},
hour: function hour(unixDate) {
var selectedDate = moment.utc(unixDate).startOf('day');
var previousViewDate = moment.utc(selectedDate).startOf('month');
var activeFormat = ngModelController.$modelValue ? moment(ngModelController.$modelValue).format('YYYY-MM-DD H') : '';
var result = {
'previousView': 'day',
'currentView': 'hour',
'nextView': configuration.minView === 'hour' ? 'setTime' : 'minute',
'previousViewDate': new DateObject({
utcDateValue: previousViewDate.valueOf(),
display: selectedDate.format('ll')
}),
'leftDate': new DateObject({utcDateValue: moment.utc(selectedDate).subtract(1, 'days').valueOf()}),
'rightDate': new DateObject({utcDateValue: moment.utc(selectedDate).add(1, 'days').valueOf()}),
'dates': []
};
for (var i = 0; i < 24; i += 1) {
var hourMoment = moment.utc(selectedDate).add(i, 'hours');
var dateValue = {
'utcDateValue': hourMoment.valueOf(),
'display': hourMoment.format('LT'),
'active': hourMoment.format('YYYY-MM-DD H') === activeFormat
};
result.dates.push(new DateObject(dateValue));
}
return result;
},
minute: function minute(unixDate) {
var selectedDate = moment.utc(unixDate).startOf('hour');
var previousViewDate = moment.utc(selectedDate).startOf('day');
var activeFormat = ngModelController.$modelValue ? moment(ngModelController.$modelValue).format('YYYY-MM-DD H:mm') : '';
var result = {
'previousView': 'hour',
'currentView': 'minute',
'nextView': 'setTime',
'previousViewDate': new DateObject({
utcDateValue: previousViewDate.valueOf(),
display: selectedDate.format('lll')
}),
'leftDate': new DateObject({utcDateValue: moment.utc(selectedDate).subtract(1, 'hours').valueOf()}),
'rightDate': new DateObject({utcDateValue: moment.utc(selectedDate).add(1, 'hours').valueOf()}),
'dates': []
};
var limit = 60 / configuration.minuteStep;
for (var i = 0; i < limit; i += 1) {
var hourMoment = moment.utc(selectedDate).add(i * configuration.minuteStep, 'minute');
var dateValue = {
'utcDateValue': hourMoment.valueOf(),
'display': hourMoment.format('LT'),
'active': hourMoment.format('YYYY-MM-DD H:mm') === activeFormat
};
result.dates.push(new DateObject(dateValue));
}
return result;
},
setTime: function setTime(unixDate) {
var tempDate = new Date(unixDate);
var newDate = new Date(tempDate.getUTCFullYear(), tempDate.getUTCMonth(), tempDate.getUTCDate(), tempDate.getUTCHours(), tempDate.getUTCMinutes(), tempDate.getUTCSeconds(), tempDate.getUTCMilliseconds());
var oldDate = ngModelController.$modelValue;
ngModelController.$setViewValue(newDate);
if (configuration.dropdownSelector) {
jQuery(configuration.dropdownSelector).dropdown('toggle');
}
scope.onSetTime({newDate: newDate, oldDate: oldDate});
return dataFactory[configuration.startView](unixDate);
}
};
var getUTCTime = function getUTCTime(modelValue) {
var tempDate = (modelValue ? moment(modelValue).toDate() : new Date());
return tempDate.getTime() - (tempDate.getTimezoneOffset() * 60000);
};
scope.changeView = function changeView(viewName, dateObject, event) {
if (event) {
event.stopPropagation();
event.preventDefault();
}
if (viewName && (dateObject.utcDateValue > -Infinity) && dateObject.selectable && dataFactory[viewName]) {
var result = dataFactory[viewName](dateObject.utcDateValue);
var weekDates = [];
if (result.weeks) {
for (var i = 0; i < result.weeks.length; i += 1) {
var week = result.weeks[i];
for (var j = 0; j < week.dates.length; j += 1) {
var weekDate = week.dates[j];
weekDates.push(weekDate);
}
}
}
scope.beforeRender({
$view: result.currentView,
$dates: result.dates || weekDates,
$leftDate: result.leftDate,
$upDate: result.previousViewDate,
$rightDate: result.rightDate
});
scope.data = result;
}
};
ngModelController.$render = function $render() {
scope.changeView(configuration.startView, new DateObject({utcDateValue: getUTCTime(ngModelController.$viewValue)}));
};
if (configuration.configureOn) {
scope.$on(configuration.configureOn, function () {
configuration = configure();
ngModelController.$render();
});
}
if (configuration.renderOn) {
scope.$on(configuration.renderOn, ngModelController.$render);
}
}
};
}]);
}));