moment.locale('es');
moment.locale('es', {
monthsShort : [
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"
]
});
if ( typeof angular != "undefined" ) {
jQuery.fn._calendar = {};
jQuery.fn._calendar.sstart = " ";
jQuery.fn._calendar.send = " ";
var list_msg = jQuery('#list-msg-calendar');
var calendar_header = '
' +
'
Events for {{sdm.format("MMMM")}} {{edm.format("YYYY")}}' +
'
'+list_msg.data('today')+'
';
var calendar_month_links = '
' +
'
{{prevMonth}}
' +
'
{{nextMonth}}
' +
'
' +
'' +
'
'
;
var calendar_week = '
' +
'
'+list_msg.data('sun')+'
' +
'
'+list_msg.data('mon')+'
' +
'
'+list_msg.data('tue')+'
' +
'
'+list_msg.data('wed')+'
' +
'
'+list_msg.data('thu')+'
' +
'
'+list_msg.data('fri')+'
' +
'
'+list_msg.data('sat')+'
' +
'
';
calendar_week += '
' +
'
'+list_msg.data('shortSun')+'
' +
'
'+list_msg.data('shortMon')+'
' +
'
'+list_msg.data('shortTue')+'
' +
'
'+list_msg.data('shortWed')+'
' +
'
'+list_msg.data('shortThu')+'
' +
'
'+list_msg.data('shortFri')+'
' +
'
'+list_msg.data('shortSat')+'
' +
'
';
var calendar_day = '
' +
'
' +
'
' +
'
' +
'{{day.name}} {{day.number}} ' +
'
' +
'
' +
'
' +
'
' + list_msg.data('more') + ' {{eventtimes[day.date_value].length}} ' + list_msg.data('label-events') + '' +
'
' +
'
' +
'
';
var calendar_2 = '
' +
'
'+list_msg.data('sun')+'
' +
'
'+list_msg.data('mon')+'
' +
'
'+list_msg.data('tue')+'
' +
'
'+list_msg.data('wed')+'
' +
'
'+list_msg.data('thu')+'
' +
'
'+list_msg.data('fri')+'
' +
'
'+list_msg.data('sat')+'
' +
'
' +
'
';
var _lB = '
';
var calendar_t = calendar_header + calendar_month_links + calendar_week + calendar_day + '
' + calendar_month_links + '
';
jQuery.fn._calendar.mydefere = {
then: function callback(callback) {
callback();
}
};
(function($) {
/**
* Double check wrapper width to hide/show the calendar title bar
* */
$(document).ready(function() {
var wrapper = jQuery('#artsopolis-calendar-tabs-events');
if (wrapper.width() <= 768) {
$('.ac-cl-head.full').hide();
$('.ac-cl-head.short').show();
}
else {
$('.ac-cl-head.full').show();
$('.ac-cl-head.short').hide();
}
});
jQuery.fn._calendar.closeModal = function(){
$(document).on('click', '.light-box', function(e){
e.stopPropagation();
if($('.box').length){
$('.closepopup').trigger('click');
}
if($('.viewmore-box').length){
$('.closeviewmore').trigger('click');
}
if($('.boxEdit').length){
$('.closepopup').trigger('click');
}
});
};
jQuery.fn._calendar.findPos = function (obj, offsetpclass) {
var left = 0 , top = 0;
if (obj.offsetParent) {
do {
left += obj.offsetLeft;
top += obj.offsetTop;
} while ((obj = obj.offsetParent) && !obj.classList.contains(offsetpclass));
}
return {left: left, top: top};
};
jQuery.fn._calendar.closeModal();
})(jQuery);
var app = angular.module("dashboard", []).filter('timeampm', function() {
return function(input) {
input = input || '';
if(input === '')
return '';
var ai = input.split(':');
var out = [];
if(parseInt(ai[0], 10) < 12 )
{
if(ai[0] === '00') {
out.push(12);
}
else {
out.push(ai[0]);
}
out.push(ai[1]);
out.push(list_msg.data('am'));
}
else {
if(ai[0] === '12') {
out.push(12);
}
else {
out.push(ai[0] - 12);
}
out.push(ai[1]);
out.push(list_msg.data('pm'));
}
var _strTime = out.pop(2);
return out.join(':')+ ' '+ _strTime;
};
});
app.controller("calendar", function($scope) {
$scope.day = moment();
});
app.service(
"eventTimeService",
function( $http, $q ) {
// Return public API.
return({
getAllEventTime: getAllEventTime,
});
// ---
// PUBLIC METHODS.
// ---
function getAllEventTime(scope, event_id) {
var currentMonth = scope.month.month();
var currentYear = scope.month.year();
var datePrevNextData = acDatePrevNextData(currentMonth, currentYear);
var prevDate = moment([currentYear, datePrevNextData.prevMonth]);
var nextDate = moment([datePrevNextData.nextYear, datePrevNextData.nextMonth]);
scope.prevMonth = prevDate.format('MMMM');
scope.nextMonth = nextDate.format('MMMM');
var $searchInstance = new acSearchFn(1, 'yes', '', '', 'json');
var _blockUI = {
message: AC_GLOBAL.loading.message,
css: jQuery.parseJSON(AC_GLOBAL.loading.image_style)
};
jQuery(window).block(_blockUI);
var request = $http({
method: "get",
url: AC_GLOBAL.ajax_url,
params: $searchInstance.initSearch()
});
return( request.then( function(res) {
scope.eventtimes = res.data.html;
jQuery(window).unblock();
}, handleError ) );
}
// I transform the error response, unwrapping the application dta from
// the API response payload.
function handleError( response ) {
// The API response from the server should be returned in a
// nomralized format. However, if the request was not handled by the
// server (or what not handles properly - ex. server error), then we
// may have to normalize it on our end, as best we can.
if (
! angular.isObject( response.data ) ||
! response.data.message
) {
return( $q.reject(list_msg.data('unknow-error')) );
}
if (response.data.error_type == 'nonce') {
alert(response.data.message);
}
// Otherwise, use expected error message.
return( $q.reject( response.data.message ) );
}
// I transform the successful response, unwrapping the application data
// from the API response payload.
function handleSuccess( response ) {
return( response.data );
}
}
);
app.directive('resize', function($window) {
return {
link: function(scope) {
angular.element($window).on('resize', function(e) {
// Namespacing events with name of directive + event to avoid collisions
scope.$broadcast('resize::resize');
});
}
}
});
app.directive("calendar", ['$compile', 'eventTimeService', function($compile, eventTimeService) {
return {
restrict: "E",
scope: {
selected: "=",
eid: "@eid",
sd: "@sd",
ed: "@ed",
dws: "@dws"
},
link: function(scope, elem, attrs) {
if(attrs.type === '2') {
var days_of_week = scope.dws.split(',');
var arrEnableDay = [];
var dow = ['SUN','MON','TUE','WED','THU','FRI','SAT'];
elem.replaceWith($compile(calendar_2)(scope));
scope.type = '2';
scope.specialc = [];
scope.specialc.days = { 'SUN' : list_msg.data('sun'),
'MON' : list_msg.data('mon'),
'TUE' : list_msg.data('tue'),
'WED' : list_msg.data('wed'),
'THU' : list_msg.data('thu'),
'FRI' : list_msg.data('fri'),
'SAT' : list_msg.data('sat') };
scope.specialc.eventtimes = [];
jQuery.each(days_of_week, function( index, value ) {
arrEnableDay[index] = dow[value];
});
scope.enableDays = arrEnableDay;
}
else {
elem.replaceWith($compile(calendar_t)(scope));
scope.type = '1';
}
scope.eventtimes = [];
scope.sdm = moment(scope.sd, "YYYY-MM-DD");
scope.sdm_month = scope.sdm.format('MMMM');
scope.edm = moment(scope.ed, "YYYY-MM-DD");
scope.selected = scope.sdm;
scope.month = scope.selected.clone();
scope.acLimit = 3;
scope.checkExistEvent = function (eventtimes, v2) {
var isexist = false;
jQuery.each(eventtimes , function(_, v) {
if(v.time_from == v2.time_from && v.time_to == v2.time_to) {
isexist = true;
return false;
}
});
return isexist;
};
scope.moreThanThree = function(eventtimes) {
return typeof eventtimes !== "undefined" && (eventtimes.length > scope.acLimit);
};
scope.orderTime = function(eventtime) {
return eventtime.time_from;
};
scope.sameYear = function() {
return scope.sdm.format("YYYY") === scope.edm.format("YYYY");
};
scope.checkUnnormalEventTime = function(date_from, date_to, time_from, time_to) {
var d1 = moment(date_from, 'YYYY-MM-DD');
var d2 = moment(date_to, 'YYYY-MM-DD');
var dta = d2.diff(d1, 'day');
var et = '';
var arr_error = [];
for(var i = 0; i <= dta; i++) {
var iday = d1.clone();
iday.add(i, 'days');
var _sdate = iday.format('YYYY-MM-DD');
if(typeof scope.eventtimes[_sdate] === 'undefined')
continue;
et = scope.eventtimes[_sdate];
jQuery.each(et, function(_, v) {
if(v.time_from >= time_from && v.time_to <= time_to ) {
arr_error.push(_sdate);
return false;
}
});
}
return arr_error;
};
scope.haveInValid = function(_sdate) {
if(typeof scope.eventtimes !== 'undefined' && typeof scope.eventtimes[_sdate] === 'undefined')
return false;
var et = scope.eventtimes[_sdate];
if(et.length === 1) return false;
var isVaid = false;
for(var i =0 ;i < et.length; i++) {
for(var j = i+1; j < et.length; j++) {
if(et[i].time_from >= et[j].time_from && et[i].time_to <= et[j].time_to || et[i].time_from <= et[j].time_from && et[i].time_to >= et[j].time_to) {
return true;
}
}
}
return isVaid;
};
scope.mbUpdateSpecial = function() {
if(scope.type === '2') {
var d1 = scope.sdm.clone().add('1', 'w');
for(var i = 0; i < 7; i++) {
var n = d1.clone().add(i, 'days')
, w = n.format('ddd').toUpperCase()
, sn = n.format('YYYY-MM-DD')
;
scope.specialc.eventtimes[w] = scope.eventtimes[sn];
}
}
};
/**
* Get events date time
* */
eventTimeService.getAllEventTime(scope, scope.eid).then(function() {
renderT(scope, jQuery);
}).then(function() {
scope.mbUpdateSpecial();
});
}
};
function getPrevClosestSundayInWeek(md) {
var _md = md.clone();
var _n = _md.format("dd").substring(0, 2).toUpperCase();
if(_n === 'SU') {
return md;
}
return getPrevClosestSundayInWeek(_md.add(-1, 'day'));
}
function getNextClosestSaturdayInWeek(md) {
var _md = md.clone();
var _n = _md.format("dd").substring(0, 2).toUpperCase();
if(_n === 'SA') {
return md;
}
return getNextClosestSaturdayInWeek(_md.add(1, 'day'));
}
function renderT(scope, $) {
var start = getPrevClosestSundayInWeek(scope.sdm);
var end = getNextClosestSaturdayInWeek(scope.edm);
_buildMonth(scope, start, end);
scope.select = clickListener;
scope.disableDayInCa2 = disableListener;
scope.viewmore = function(events, $e) {
var $calendar_container = jQuery('.calendar-container');
var $body = $('body');
var $this = jQuery($e.target);
var _pos = jQuery.fn._calendar.findPos($this[0], 'calendar-container');
var _cur_top = _pos.top + jQuery('.calendar-container').position().top;
var _cur_left = _pos.left + jQuery('.calendar-container').position().left;
$body.append(_lB);
var $vmb = $('.viewmore-box');
var cell_width = $this.closest('.ac-date-cell').outerWidth();
$vmb.css('display','block');
$vmb.fadeIn(1000, 'linear');
_pos_top = _cur_top + 25;
_pos_left = _cur_left - ($this.width()/2 ) + (cell_width > 120 ? 30 : 0);
if(_pos_left + $vmb.width() > $(".artsopolis-calendar-frontend").width()){
$vmb.find(".arrow-box").css({'left': 'unset', 'right': 0});
_pos_left = _pos_left - $vmb.width() / 2 - (cell_width > 120 ? 30 : 0);
} else {
$vmb.find(".arrow-box").attr('style','');
}
console.log(cell_width, $(".artsopolis-calendar-frontend").width(),
$vmb.width(), _pos_left);
$vmb.attr('style','display: block; position: absolute !important; top: ' + _pos_top + 'px !important; left: ' + _pos_left + "px !important");
if(typeof scope.current_edit_date !== 'undefined') {
// move back
jQuery('[data-date="' + scope.current_edit_date + '"]').find('.contain-vm-small').append(scope._eventList);
}
scope._eventList = $this.parents('.ac-date-cell').find('.contain-vm-small .ac-cl-event-list ');
scope.current_edit_date = $this.parents(".ac-date-cell").data('date');
$('.viewmore-box .ac-cl-event-list ').remove();
$vmb.append(scope._eventList);
};
scope.isnulltt = function(time_to) {
return time_to === "";
};
/**
* Searching
*
* */
scope.search = function () {
var searchIns = new acSearchFn();
searchIns.setDateTimeData(scope.sd, scope.ed);
eventTimeService.getAllEventTime(scope, scope.eid).then(function() {
renderT(scope, jQuery);
}).then(function() {
scope.mbUpdateSpecial();
});
jQuery.fn._calendar.sstart = " ";
jQuery.fn._calendar.send = " ";
}
/**
* Next month
*
* */
scope.next = function() {
if(jQuery("#_apl_ca_next").hasClass('disable')) {
return;
}
var next = scope.month.clone();
_removeTime(next.month(next.month()+1).date(1));
var currentMonth = scope.month.month();
var currentYear = scope.month.year();
var datePrevNextData = acDatePrevNextData(currentMonth, currentYear);
var startDate = moment([datePrevNextData.nextYear, datePrevNextData.nextMonth]);
var endDate = moment(startDate).endOf('month');
scope.resetScopes(startDate, endDate);
var searchIns = new acSearchFn();
searchIns.setDateTimeData(scope.sd, scope.ed);
eventTimeService.getAllEventTime(scope, scope.eid).then(function() {
renderT(scope, jQuery);
}).then(function() {
scope.mbUpdateSpecial();
});
jQuery.fn._calendar.sstart = " ";
jQuery.fn._calendar.send = " ";
};
scope.previous = function() {
if(jQuery("#_apl_ca_prev").hasClass('disable')) {
return;
}
var previous = scope.month.clone();
_removeTime(previous.month(previous.month()-1).date(1));
var currentMonth = scope.month.month();
var currentYear = scope.month.year();
var datePrevNextData = acDatePrevNextData(currentMonth, currentYear);
var startDate = moment([datePrevNextData.prevYear, datePrevNextData.prevMonth]);
var endDate = moment(startDate).endOf('month');
scope.resetScopes(startDate, endDate);
var searchIns = new acSearchFn();
searchIns.setDateTimeData(scope.sd, scope.ed);
eventTimeService.getAllEventTime(scope, scope.eid).then(function() {
renderT(scope, jQuery);
}).then(function() {
scope.mbUpdateSpecial();
});
};
/**
* Reset scopes
* */
scope.resetScopes = function(startDate, endDate) {
scope.month = startDate;
scope.sdm = startDate;
scope.edm = endDate;
scope.sd = startDate.format('YYYY-MM-DD');
scope.ed = endDate.format('YYYY-MM-DD');
};
(function($) {
var _blockUI = {
message: AC_GLOBAL.loading.message,
css: $.parseJSON(AC_GLOBAL.loading.image_style)
};
var $body = $('body');
$body.on('click', '.closepopup', function(e){
var $parent = $(this).parent();
$parent.remove();
$('.light-box').remove();
$('.ac-date-cell').removeClass('add-event');
});
$body.on('click', '.closeviewmore', function(){
$('.viewmore-box').css('display','none');
$('.light-box').remove();
$('.ac-date-cell').removeClass('add-event');
});
$(window).on('resize', function(e) {
if(typeof scope.current_edit_date !== 'undefined') {
// move back
jQuery('[data-date="' + scope.current_edit_date + '"]').find('.contain-vm-small').append(scope._eventList);
}
});
})(jQuery);
}
function _removeTime(date) {
return date.day(0).hour(0).minute(0).second(0).millisecond(0);
}
function _buildMonth(scope, start, end) {
scope.weeks = [];
var done = false, date = start.clone(), monthIndex = scope.month.month();
while (!done) {
scope.weeks.push({ days: _buildWeek(date.clone(), monthIndex, scope) });
date.add(1, "w");
done = date.diff(end) >= 0;
}
}
function _buildWeek(date, month, scope) {
var days = [];
var days_of_week = scope.dws.split(',');
for (var i = 0; i < 7; i++) {
var number = date.date();
if(date.date() === 1 || date.diff(scope.sdm) === 0) {
number = date.format('MMM') + ' ' + number;
}
days.push({
name: date.format("dd").substring(0, 2).toUpperCase(),
number: number,
isCurrentMonth: date.month() === month,
isToday: date.isSame(new Date(), "day"),
date: date,
outrange: !(date.month() === month),
date_value: date.format("YYYY-MM-DD")
});
date = date.clone();
date.add(1, "d");
}
return days;
}
function clickListener(day, e) {
(function($) {
var $this = $(e.target), $body = $('body');
var _eleTarget = e.target.className;
if(_eleTarget.indexOf('date-cell') === -1 && (_eleTarget.indexOf("num") > -1 || _eleTarget.indexOf("sun") > -1 || _eleTarget.indexOf("dName sun") > -1 || _eleTarget.indexOf("dName") > -1 || _eleTarget.indexOf("day")> -1 || _eleTarget.indexOf("event")> -1)){
$this = $this.parents('.ac-date-cell');
_eleTarget = $this.attr('class');
}
if($this.hasClass('disable') || $this.hasClass('shift-selected')) return;
if(!e.shiftKey){
_selectedDay = $(e.target);
var _cur_left = $this.offset().left;
var _cur_top = $this.offset().top;
if(_eleTarget.indexOf("date-cell") > -1 || _eleTarget.indexOf("num") > -1 || _eleTarget.indexOf("sun") > -1 || _eleTarget.indexOf("dName sun") > -1 || _eleTarget.indexOf("dName") > -1){
$this.addClass('add-event');
$body.append(_lB);
var $box = $('.box');
$box.css('display','block');
$box.fadeIn(1000, 'linear');
if($(window).width()>480){
$box.css('top',_cur_top-30);
if(($(window).width()- (_cur_left+30))>290){
$box.css('left',_cur_left+30);
}else{
$box.css('left',_cur_left);
}
}else{
$box.css('top',_cur_top-30);
$box.css('left',($(window).width()/2)-140);
}
}
}else if(e.shiftKey){
var _start = jQuery.fn._calendar.sstart;
var _end = jQuery.fn._calendar.send;
if(_eleTarget.indexOf('viewmore') !== -1 || _eleTarget.indexOf('date-cell') === -1 ){
$this = $this.parents('.ac-date-cell');
}
var week_index = $this.parent('.date-week').index();
var shift_press = $this.index() + week_index * 7;
if(jQuery.fn._calendar.sstart === " "){
_start = shift_press + 1;
}else{
_end = shift_press + 1;
}
$this.addClass('shift-selected');
if((_start !==" ") && (_end !==" ")){
if((_end - _start) > 0){
for(var i = _start ; i < _end; i ++ ){
$('.ac-date-cell:eq('+i+')').addClass('shift-selected');
}
}else if(_end !== " "){
for(var j = _start ; j > _end; j--){
$('.ac-date-cell:eq('+(j-1)+')').addClass('shift-selected');
}
}
}
jQuery.fn._calendar.sstart = _start;
jQuery.fn._calendar.send = _end;
}
})(jQuery);
}
function disableListener(day,enableDays){
if(jQuery.inArray( day, enableDays ) != -1){
return false;
}else{
return true;
}
}
}]);
}
function acDatePrevNextData(currentMonth, currentYear)
{
var prevMonth, nextMonth, nextYear, prevYear;
if (currentMonth == 11) {
prevMonth = 10;
nextMonth = 0;
nextYear = currentYear + 1;
prevYear = currentYear;
}
else if (currentMonth == 0) {
prevMonth = 11;
nextMonth = 1;
nextYear = currentYear;
prevYear = currentYear - 1;
}
else {
prevMonth = currentMonth - 1;
nextMonth = currentMonth + 1;
nextYear = currentYear;
prevYear = currentYear;
}
return {
prevMonth: prevMonth,
nextMonth: nextMonth,
nextYear: nextYear,
prevYear: prevYear,
};
}