diff --git a/app/assets/javascripts/calendar.js b/app/assets/javascripts/calendar.js
index 9ffdd24..abb4b36 100644
--- a/app/assets/javascripts/calendar.js
+++ b/app/assets/javascripts/calendar.js
@@ -1,4 +1,53 @@
window.auto_close_popup = false;
+if(window.calendar_variable == undefined){
+ window.calendar_variable = {};
+ window.calendar_variable.is_chinese = ( I18n && I18n.locale.indexOf('zh') != -1 );
+ window.calendar_variable.date_type = 0;
+}else{
+ if(window.calendar_variable.date_type == 1){
+ window.calendar_variable.is_chinese = false;
+ }else{
+ window.calendar_variable.is_chinese = ( I18n && I18n.locale.indexOf('zh') != -1 );
+ }
+}
+if(!(window.calendar_variable.dayNames)){
+ if(window.calendar_variable.is_chinese){
+ window.calendar_variable.dayNames = ['週日', '週一', '週二', '週三','週四', '週五', '週六'];
+ window.calendar_variable.dayNamesShort = ['日', '一', '二', '三','四', '五', '六'];
+ }else{
+ window.calendar_variable.dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday','Thursday', 'Friday', 'Saturday'];
+ window.calendar_variable.dayNamesShort = ['Sun', 'Mon', 'Tue', 'Wed','Thu', 'Fri', 'Sat'];
+ }
+}
+if(window.calendar_variable.is_chinese){
+ window.calendar_variable.months = [];
+ for(var i=0;i<12;i++){
+ window.calendar_variable.months.push((i+1)+"月");
+ }
+}else{
+ window.calendar_variable.months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
+}
+if(window.calendar_variable.date_type == 2){
+ window.calendar_variable.datetime_format = calendar_variable.is_chinese ? 'yy/MM/dd b h:m' : 'dd/MM/yy h:m b';
+ window.calendar_variable.month_year_format = calendar_variable.is_chinese ? 'yy/MM' : 'MM/yy';
+ window.calendar_variable.date_format = calendar_variable.is_chinese ? 'yy/MM/dd' : 'dd/MM/yy';
+ window.calendar_variable.date_format_with_short_month = calendar_variable.is_chinese ? 'yy/MM/dd' : 'dd/MM/yy';
+ window.calendar_variable.date_format_with_week = calendar_variable.is_chinese ? 'yy/MM/dd (W)' : 'W, MM/dd/yy';
+ window.calendar_variable.short_date = (calendar_variable.is_chinese ? "MM/dd (W)" : "W, dd/MM");
+ window.calendar_variable.short_date_time = (calendar_variable.is_chinese ? "MM/dd (W) b h:m" : "W, dd/MM h:m b");
+}else{
+ window.calendar_variable.datetime_format = calendar_variable.is_chinese ? 'y MMM d b h:m' : 'd MMM, y h:m b';
+ window.calendar_variable.month_year_format = calendar_variable.is_chinese ? 'y MMM' : 'MMM y';
+ window.calendar_variable.date_format = calendar_variable.is_chinese ? 'y MMM d' : 'd MMM, y';
+ window.calendar_variable.date_format_with_short_month = calendar_variable.is_chinese ? 'y M d' : 'd M, y';
+ window.calendar_variable.date_format_with_week = calendar_variable.is_chinese ? 'y MMM d (W)' : 'W, MMM d, y';
+ window.calendar_variable.short_date = (calendar_variable.is_chinese ? "MMM d (W)" : "W, d MMM");
+ window.calendar_variable.short_date_time = (calendar_variable.is_chinese ? "MMM d (W) b h:m" : "W, d MMM h:m b");
+}
+window.calendar_variable.short_date_numeric = (calendar_variable.is_chinese ? "MM/dd (w)" : "w MM/dd");
+window.time_format = (calendar_variable.is_chinese ? "b h:m" : "h:m b");
+window.calendar_variable.std_date_format = 'y-MM-d';
+window.calendar_variable.short_day = (calendar_variable.is_chinese ? "d (W)" : "W d");
$.fn.fullCalendar = function(args){
var self = this[0]
if(!self.calendar_args)
@@ -60,41 +109,40 @@ FullCalendar.Calendar.prototype.isAnOverlapEvent = function(eventStartDay, event
}
return false;
}
-window.is_chinese = ( I18n && I18n.locale.indexOf('zh') != -1 );
-window.datetime_format = is_chinese ? 'y M d h:m b' : 'd M, y h:m b';
-window.date_format = is_chinese ? 'y M d' : 'd M, y';
-window.datetime_format = window.date_format;
-window.time_format = "h:m b";
-window.std_date_format = 'y-MM-d';
-window.short_day = (is_chinese ? "d (w)" : "w d");
-window.short_date = (is_chinese ? "M d (w)" : "w d, M");
-window.short_date_time = (is_chinese ? "M d (w) h:m b" : "w d, M h:m b");
-window.getDateString = function(date, format,is_chinese) {
- var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
- var week_days = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];
- if(is_chinese){
- months = [];
- for(var i=0;i<12;i++){
- months.push((i+1)+"月");
- }
- week_days = ["週日","週一","週二","週三","週四","週五","週六"]
- }
+
+window.getDateString = function(date, format, is_chinese) {
+ var months = calendar_variable.months;
+ var week_days = calendar_variable.dayNames;
var getPaddedComp = function(comp) {
return ((parseInt(comp) < 10) ? ('0' + comp) : comp)
},
formattedDate = format,
+ y = date.getFullYear(),
+ m = date.getMonth(),
+ d = date.getDate(),
+ H = date.getHours(),
+ M = date.getMinutes(),
+ s = date.getSeconds(),
+ S = date.getMilliseconds(),
+ month_name = months[m],
+ am_trans = (calendar_variable.is_chinese ? '上午' : 'AM'),
+ pm_trans = (calendar_variable.is_chinese ? '下午' : 'PM'),
o = {
- "y+": date.getFullYear() + (is_chinese ? "年" : ""), // year
- "MM+": getPaddedComp(date.getMonth() + 1), //raw month
- "M+": months[date.getMonth()], //month
- "d+": (is_chinese ? (date.getDate() + "日") : getPaddedComp(date.getDate())), //day
- "w+": week_days[date.getDay()], //weekday
- "h+": getPaddedComp((date.getHours() > 12) ? date.getHours() % 12 : date.getHours()), //hour
- "H+": getPaddedComp(date.getHours()), //hour
- "m+": getPaddedComp(date.getMinutes()), //minute
- "s+": getPaddedComp(date.getSeconds()), //second
- "S+": getPaddedComp(date.getMilliseconds()), //millisecond,
- "b+": (date.getHours() >= 12) ? 'PM' : 'AM'
+ "yy+": y, //raw year
+ "y+": y + (calendar_variable.is_chinese ? "年" : ""), // year
+ "MMM+": month_name, //month
+ "MM+": getPaddedComp(m + 1), //raw month
+ "M+": month_name.substring(0,3), //month
+ "dd+": getPaddedComp(d), //raw day
+ "d+": (calendar_variable.is_chinese ? (d + "日") : getPaddedComp(d)), //day
+ "W+": week_days[date.getDay()], //weekday
+ "w+": (calendar_variable.is_chinese ? week_days[date.getDay()].substr(-1, 1) : week_days[date.getDay()].substr(0, 3)), //weekday
+ "h+": getPaddedComp((H > 12) ? H % 12 : H), //hour
+ "H+": getPaddedComp(H), //hour
+ "m+": getPaddedComp(M), //minute
+ "s+": getPaddedComp(s), //second
+ "S+": getPaddedComp(S), //millisecond,
+ "b+": (H >= 12) ? pm_trans : am_trans
};
for (var k in o) {
@@ -288,7 +336,7 @@ var Calendar = function(dom){
});
},
// events: 'https://fullcalendar.io/demo-events.json',
- headerToolbar: false,
+ headerToolbar: false,
fixedWeekCount: false,
initialView: dview,
loading: function(bool) {
@@ -306,12 +354,35 @@ var Calendar = function(dom){
originalEvent = eventClickInfo.jsEvent,
view = eventClickInfo.view,
el = $(eventClickInfo.el);
- c.event_create_space.html("").hide();
- c.dialog.dismiss();
- c.dialog.inflate(calEvent);
- c.dialog.show({"x": originalEvent.clientX,"y": originalEvent.clientY});
+ if(el.hasClass("reserve_btn")){
+ window.calEvent = calEvent;
+ var start_time = calEvent.event.start;
+ var date_str = window.getDateString(start_time,std_date_format);
+ c.dialog.hide();
+ var allow_times = calEvent.event._def.extendedProps.allow_times;
+ window.pick_hire_date(date_str,allow_times);
+ }else{
+ c.event_create_space.html("").hide();
+ c.dialog.dismiss();
+ c.dialog.inflate(calEvent);
+ c.dialog.show({"x": originalEvent.clientX,"y": originalEvent.clientY});
+ }
},
- select : function(selectionInfo){
+ dateClick: function(ev) {
+ var calendar = this;
+ var calendar_dom = $(this.el);
+ if(c.calendar_dom.hasClass("active_picker")){
+ var date = ev.date,
+ date_str = getDateString(date,date_time_str_format),
+ day_element = ev.dayEl,
+ jsEvent = ev.jsEvent;
+ var time_str = date_str.split(" ")[1];
+ var date_str = date_str.split(" ")[0];
+ calendar_dom.trigger("init_time",[time_str]);
+ calendar_dom.trigger("select_time",[date_str]);
+ }
+ },
+ select : function(selectionInfo){
var jsEvent = selectionInfo.jsEvent,
view = selectionInfo.view;
var start = selectionInfo.start,
@@ -338,10 +409,37 @@ var Calendar = function(dom){
})
},
views: {
- dayGridMonth: {
- dayMaxEvents: false
- }
- }
+ timeGridDay: {
+ titleFormat: function(date_info){
+ var date = date_info.date.marker;
+ return getDateString(date, calendar_variable.date_format_with_week);
+ },
+ dayHeaderFormat: function(date_info){
+ return window.calendar_variable.dayNames[date_info.date.marker.getDay()];
+ }
+ },
+ timeGridWeek: {
+ titleFormat: function(date_info){
+ var start = date_info.start.marker,
+ end = date_info.end.marker;
+ return getDateString(start, calendar_variable.date_format) + ' ~ ' + getDateString(end, calendar_variable.date_format);
+ },
+ dayHeaderFormat: function(date_info){
+ return getDateString(date_info.date.marker, calendar_variable.short_date_numeric);
+ }
+ },
+ dayGridMonth: {
+ dayMaxEvents: false,
+ titleFormat: function(date_info){
+ var date = date_info.date.marker;
+ return getDateString(date, calendar_variable.month_year_format);
+ },
+ dayHeaderFormat: function(date_info){
+ return window.calendar_variable.dayNamesShort[date_info.date.marker.getDay()];
+ }
+ }
+ },
+ firstDay: (window.calendar_variable.sunday_first == true ? 0 : 1)
});
c.create_event_btn.click(function(){
$.ajax({
@@ -356,14 +454,17 @@ var Calendar = function(dom){
c.nextBtn.click(function(){
c.dialog.dismiss();
c.calendar_dom.calendar.next();
+ c.title.text(c.calendar_dom.calendar.currentData.viewTitle);
});
c.prevBtn.click(function(){
c.dialog.dismiss();
c.calendar_dom.calendar.prev();
+ c.title.text(c.calendar_dom.calendar.currentData.viewTitle);
});
c.todayBtn.click(function(){
c.dialog.dismiss();
c.calendar_dom.calendar.today();
+ c.title.text(c.calendar_dom.calendar.currentData.viewTitle);
});
c.modeBtns.click(function(){
c.dialog.dismiss();
@@ -404,13 +505,8 @@ var Calendar = function(dom){
c.calendar_dom.calendar.refetchEvents();
loadeventsonviewchange = false;
}
- if(c.calendar_dom.calendar.currentData){
- var viewTitle = c.calendar_dom.calendar.currentData.viewTitle;
- if(view == "timeGridDay" && $('.fc-col-header-cell-cushion ').text() != "")
- viewTitle = $('.fc-col-header-cell-cushion ').text() + ', ' + viewTitle;
- $('#current_title').html(viewTitle);
- }
- c.calendar_dom.calendar.render(); //Rerender to fix layout
+ c.title.text(c.calendar_dom.calendar.currentData.viewTitle);
+ // c.calendar_dom.calendar.rerenderEvents(); //Rerender to fix layout
};
if(c.currentView == "agenda"){toggleViews("agenda");loadeventsonviewchange = true;}
};
@@ -464,11 +560,8 @@ var EventDialog = function(calendar,event){
_event.allDay = _event.event.allDay;
_event._start = _event.event.start;
_event._end = (_event.event.end ? _event.event.end : _event.event.start);
- // var start_date = getDateString(_event._start,date_format);
- // var end_date = getDateString(_event._end,date_format);
- if(_event._end - _event._start > 86400 * 1000){
- _event.allDay = true;
- }
+ // var start_date = getDateString(_event._start,calendar_variable.date_format);
+ // var end_date = getDateString(_event._end,calendar_variable.date_format);
_event.title = _event.event.title;
var extendedProps = _event.event.extendedProps;
Object.keys(extendedProps).forEach(function(k){
@@ -481,15 +574,15 @@ var EventDialog = function(calendar,event){
end_time = "",
time_string = null;
if(_event.allDay) {
- start_time = getDateString(_event._start,datetime_format, is_chinese);
+ start_time = getDateString(_event._start,calendar_variable.date_format_with_short_month);
if(_event._end)
- end_time = getDateString(_event._end,datetime_format, is_chinese);
+ end_time = getDateString(_event._end,calendar_variable.date_format_with_short_month);
time_string = (_event._start === _event._end || !_event._end ? "
" + start_time + "
" : "" + start_time + "
" + end_time + "");
} else {
- start_time = getDateString(_event._start,date_format, is_chinese);
- end_time = getDateString(_event._end,date_format, is_chinese);
- var stime = getDateString(_event._start,time_format, is_chinese),
- etime = getDateString(_event._end,time_format, is_chinese),
+ start_time = getDateString(_event._start,calendar_variable.date_format_with_short_month);
+ end_time = getDateString(_event._end,calendar_variable.date_format_with_short_month);
+ var stime = getDateString(_event._start,time_format),
+ etime = getDateString(_event._end,time_format),
same = (start_time == end_time);
if( same ){
time_string = " " +
@@ -507,7 +600,7 @@ var EventDialog = function(calendar,event){
template = '
' +
'' +
'
' +
'
' + time_string + '' + _event.hiring_person_name + '
' + _event.note +
@@ -615,20 +708,16 @@ var AgendaView = function(calendar){
var start_year = today.getFullYear();
var end_month = ((start_month + minDifference) > 11 ? (start_month + minDifference) - 11 : start_month + minDifference);
var end_year = ((start_month + minDifference) > 11 ? start_year+1 : start_year);
- var monthNames = ['January','February','March','April','May','June','July','August','September','October','November','December'];
+ var monthNames = window.calendar_variable.months;
var month_template = '
' +
'
' +
'
' +
'
' +
'' +
'' +
- 'Sun | ' +
- 'Mon | ' +
- 'Tue | ' +
- 'Wed | ' +
- 'Thu | ' +
- 'Fri | ' +
- 'Sat | ' +
+ calendar_variable.dayNamesShort.map(function(title){
+ return ''+title+' | ';
+ }).join('') +
'
' +
'' +
'
' +
@@ -639,10 +728,8 @@ var AgendaView = function(calendar){
'
' +
'' +
'' +
- 'Date | ' +
- 'Time | ' +
+ 'DateTime | ' +
'Events | ' +
- 'Borrower | ' +
'
' +
'' +
'' +
@@ -654,20 +741,18 @@ var AgendaView = function(calendar){
'';
var head_template = '' +
- '' +
+ '' +
''+
- '' +
+ '' +
''+
'' +
'
';
var event_template = '' +
- ' | ' +
- ' | ' +
+ ' | ' +
'' +
'' +
' | ' +
- ''+
' |
';
// var month_template = '';
@@ -762,8 +847,9 @@ var AgendaView = function(calendar){
type : "get",
url : url,
dataType : "json",
- data : {"agenda_start":sd.toLocaleString(),"agenda_end":ed.toLocaleString(),"page_id" : _calendar.page_id,"start":usd,"end":ued},
+ data : {"agenda_start":sd.toLocaleString(),"agenda_end":ed.toLocaleString(),"unix_start":usd,"unix_end":ued},
success : function(data){
+ console.log(data)
$("#agenda_start,#agenda_end").datepicker({
dateFormat: "yy/mm",
onChangeMonthYear: function( year, month, inst ){
@@ -850,16 +936,21 @@ var AgendaView = function(calendar){
var e_t = $(event_template),
s = new Date(event.start),
e = new Date(event.end),
- dateFormat = "",
- hiring_person_name = event.hiring_person_name;
- if(s.getDate() == e.getDate() && s.getMonth() == s.getMonth() && e.getFullYear() == e.getFullYear())
- dateFormat = getDateString(s, short_day,is_chinese);
- else
- dateFormat = getDateString(s,short_date,is_chinese) + ' - ' + getDateString(e,short_date,is_chinese);
- e_t.find("td:first").text(dateFormat);
- e_t.find("td.event_time").text((event.diff_day ? (getDateString(s, short_date_time,is_chinese)+"~"+getDateString(e, short_date_time, is_chinese)) : (getDateString(s, time_format)+"~"+getDateString(e, time_format))));
+ datetimeFormat = "";
+ if(s.getDate() == e.getDate() && s.getMonth() == s.getMonth() && e.getFullYear() == e.getFullYear()){
+ datetimeFormat = getDateString(s, calendar_variable.short_day);
+ if(!event.allDay){
+ datetimeFormat += (' ' + getDateString(s,time_format) + ' - ' + getDateString(e,time_format));
+ }
+ }else{
+ if(event.allDay){
+ datetimeFormat = getDateString(s,calendar_variable.short_date) + ' - ' + getDateString(e,calendar_variable.short_date);
+ }else{
+ datetimeFormat = getDateString(s,calendar_variable.short_date_time) + ' - ' + getDateString(e,calendar_variable.short_date_time);
+ }
+ }
+ e_t.find("td.event_datetime").text(datetimeFormat);
e_t.find("div.event").html(event.title).css("color",event.color);
- e_t.find("td.Borrower").text(hiring_person_name);
return e_t;
}
@@ -918,7 +1009,8 @@ var AgendaView = function(calendar){
var last_inserted_date = 1;
var renderMonth = function(){
- var num_of_rows = getNumberOfRows(year,month)
+ var num_of_rows = getNumberOfRows(year,month);
+ var tbody = template.find("table.table tbody");
for(var i = 0; i < num_of_rows; i++){
var tr = null;
if(i == 0)
@@ -931,9 +1023,9 @@ var AgendaView = function(calendar){
if(tr == null){
break;
}
- template.find("table.table tbody").append(tr);
- template.find("h4").text(monthNames[firstDay.getMonth()] + " - " + firstDay.getFullYear());
+ tbody.append(tr);
}
+ template.find("h4").text(getDateString(firstDay, calendar_variable.month_year_format));
_this.monthDom.append(template);
_this.monthDom.append(list_template);
}
diff --git a/app/assets/javascripts/calendar_frontend.js b/app/assets/javascripts/calendar_frontend.js
index 638c74f..dda077c 100644
--- a/app/assets/javascripts/calendar_frontend.js
+++ b/app/assets/javascripts/calendar_frontend.js
@@ -1,4 +1,53 @@
window.auto_close_popup = false;
+if(window.calendar_variable == undefined){
+ window.calendar_variable = {};
+ window.calendar_variable.is_chinese = ( I18n && I18n.locale.indexOf('zh') != -1 );
+ window.calendar_variable.date_type = 0;
+}else{
+ if(window.calendar_variable.date_type == 1){
+ window.calendar_variable.is_chinese = false;
+ }else{
+ window.calendar_variable.is_chinese = ( I18n && I18n.locale.indexOf('zh') != -1 );
+ }
+}
+if(!(window.calendar_variable.dayNames)){
+ if(window.calendar_variable.is_chinese){
+ window.calendar_variable.dayNames = ['週日', '週一', '週二', '週三','週四', '週五', '週六'];
+ window.calendar_variable.dayNamesShort = ['日', '一', '二', '三','四', '五', '六'];
+ }else{
+ window.calendar_variable.dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday','Thursday', 'Friday', 'Saturday'];
+ window.calendar_variable.dayNamesShort = ['Sun', 'Mon', 'Tue', 'Wed','Thu', 'Fri', 'Sat'];
+ }
+}
+if(window.calendar_variable.is_chinese){
+ window.calendar_variable.months = [];
+ for(var i=0;i<12;i++){
+ window.calendar_variable.months.push((i+1)+"月");
+ }
+}else{
+ window.calendar_variable.months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
+}
+if(window.calendar_variable.date_type == 2){
+ window.calendar_variable.datetime_format = calendar_variable.is_chinese ? 'yy/MM/dd b h:m' : 'dd/MM/yy h:m b';
+ window.calendar_variable.month_year_format = calendar_variable.is_chinese ? 'yy/MM' : 'MM/yy';
+ window.calendar_variable.date_format = calendar_variable.is_chinese ? 'yy/MM/dd' : 'dd/MM/yy';
+ window.calendar_variable.date_format_with_short_month = calendar_variable.is_chinese ? 'yy/MM/dd' : 'dd/MM/yy';
+ window.calendar_variable.date_format_with_week = calendar_variable.is_chinese ? 'yy/MM/dd (W)' : 'W, MM/dd/yy';
+ window.calendar_variable.short_date = (calendar_variable.is_chinese ? "MM/dd (W)" : "W, dd/MM");
+ window.calendar_variable.short_date_time = (calendar_variable.is_chinese ? "MM/dd (W) b h:m" : "W, dd/MM h:m b");
+}else{
+ window.calendar_variable.datetime_format = calendar_variable.is_chinese ? 'y MMM d b h:m' : 'd MMM, y h:m b';
+ window.calendar_variable.month_year_format = calendar_variable.is_chinese ? 'y MMM' : 'MMM y';
+ window.calendar_variable.date_format = calendar_variable.is_chinese ? 'y MMM d' : 'd MMM, y';
+ window.calendar_variable.date_format_with_short_month = calendar_variable.is_chinese ? 'y M d' : 'd M, y';
+ window.calendar_variable.date_format_with_week = calendar_variable.is_chinese ? 'y MMM d (W)' : 'W, MMM d, y';
+ window.calendar_variable.short_date = (calendar_variable.is_chinese ? "MMM d (W)" : "W, d MMM");
+ window.calendar_variable.short_date_time = (calendar_variable.is_chinese ? "MMM d (W) b h:m" : "W, d MMM h:m b");
+}
+window.calendar_variable.short_date_numeric = (calendar_variable.is_chinese ? "MM/dd (w)" : "w MM/dd");
+window.time_format = (calendar_variable.is_chinese ? "b h:m" : "h:m b");
+window.calendar_variable.std_date_format = 'y-MM-d';
+window.calendar_variable.short_day = (calendar_variable.is_chinese ? "d (W)" : "W d");
$.fn.fullCalendar = function(args){
var self = this[0]
if(!self.calendar_args)
@@ -44,65 +93,64 @@ FullCalendar.Calendar.prototype.isAnOverlapEvent = function(eventStartDay, event
eventEndDay = new Date(eventEndDay);
var events = this.get_all_events();
for (var i = 0; i < events.length; i++) {
- var eventA = events[i];
- // start-time in between any of the events
- if (eventStartDay >= eventA.start && eventStartDay <= eventA.end) {
- return true;
- }
- //end-time in between any of the events
- if (eventEndDay >= eventA.start && eventEndDay <= eventA.end) {
- return true;
- }
- //any of the events in between/on the start-time and end-time
- if (eventStartDay <= eventA.start && eventEndDay >= eventA.end) {
- return true;
- }
- }
- return false;
+ var eventA = events[i];
+ // start-time in between any of the events
+ if (eventStartDay >= eventA.start && eventStartDay <= eventA.end) {
+ return true;
+ }
+ //end-time in between any of the events
+ if (eventEndDay >= eventA.start && eventEndDay <= eventA.end) {
+ return true;
+ }
+ //any of the events in between/on the start-time and end-time
+ if (eventStartDay <= eventA.start && eventEndDay >= eventA.end) {
+ return true;
+ }
+ }
+ return false;
}
-window.is_chinese = ( I18n && I18n.locale.indexOf('zh') != -1 );
-window.datetime_format = is_chinese ? 'y M d h:m b' : 'd M, y h:m b';
-window.date_format = is_chinese ? 'y M d' : 'd M, y';
-window.time_format = "h:m b";
-window.date_time_str_format = 'y/MM/d H:m';
-window.std_date_format = 'y-MM-d';
-window.short_day = (is_chinese ? "d (w)" : "w d");
-window.short_date = (is_chinese ? "M d (w)" : "w d, M");
-window.short_date_time = (is_chinese ? "M d (w) h:m b" : "w d, M h:m b");
-window.getDateString = function(date, format,is_chinese) {
- var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
- var week_days = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];
- if(is_chinese){
- months = [];
- for(var i=0;i<12;i++){
- months.push((i+1)+"月");
- }
- week_days = ["週日","週一","週二","週三","週四","週五","週六"]
- }
- var getPaddedComp = function(comp) {
- return ((parseInt(comp) < 10) ? ('0' + comp) : comp)
- },
- formattedDate = format,
- o = {
- "y+": date.getFullYear() + (is_chinese ? "年" : ""), // year
- "MM+": getPaddedComp(date.getMonth() + 1), //raw month
- "M+": months[date.getMonth()], //month
- "d+": (is_chinese ? (date.getDate() + "日") : getPaddedComp(date.getDate())), //day
- "w+": week_days[date.getDay()], //weekday
- "h+": getPaddedComp((date.getHours() > 12) ? date.getHours() % 12 : date.getHours()), //hour
- "H+": getPaddedComp(date.getHours()), //hour
- "m+": getPaddedComp(date.getMinutes()), //minute
- "s+": getPaddedComp(date.getSeconds()), //second
- "S+": getPaddedComp(date.getMilliseconds()), //millisecond,
- "b+": (date.getHours() >= 12) ? 'PM' : 'AM'
- };
- for (var k in o) {
- if (new RegExp("(" + k + ")").test(format)) {
- formattedDate = formattedDate.replace(RegExp.$1, o[k]);
- }
- }
- return formattedDate;
+window.getDateString = function(date, format, is_chinese) {
+ var months = calendar_variable.months;
+ var week_days = calendar_variable.dayNames;
+ var getPaddedComp = function(comp) {
+ return ((parseInt(comp) < 10) ? ('0' + comp) : comp)
+ },
+ formattedDate = format,
+ y = date.getFullYear(),
+ m = date.getMonth(),
+ d = date.getDate(),
+ H = date.getHours(),
+ M = date.getMinutes(),
+ s = date.getSeconds(),
+ S = date.getMilliseconds(),
+ month_name = months[m],
+ am_trans = (calendar_variable.is_chinese ? '上午' : 'AM'),
+ pm_trans = (calendar_variable.is_chinese ? '下午' : 'PM'),
+ o = {
+ "yy+": y, //raw year
+ "y+": y + (calendar_variable.is_chinese ? "年" : ""), // year
+ "MMM+": month_name, //month
+ "MM+": getPaddedComp(m + 1), //raw month
+ "M+": month_name.substring(0,3), //month
+ "dd+": getPaddedComp(d), //raw day
+ "d+": (calendar_variable.is_chinese ? (d + "日") : getPaddedComp(d)), //day
+ "W+": week_days[date.getDay()], //weekday
+ "w+": (calendar_variable.is_chinese ? week_days[date.getDay()].substr(-1, 1) : week_days[date.getDay()].substr(0, 3)), //weekday
+ "h+": getPaddedComp((H > 12) ? H % 12 : H), //hour
+ "H+": getPaddedComp(H), //hour
+ "m+": getPaddedComp(M), //minute
+ "s+": getPaddedComp(s), //second
+ "S+": getPaddedComp(S), //millisecond,
+ "b+": (H >= 12) ? pm_trans : am_trans
+ };
+
+ for (var k in o) {
+ if (new RegExp("(" + k + ")").test(format)) {
+ formattedDate = formattedDate.replace(RegExp.$1, o[k]);
+ }
+ }
+ return formattedDate;
};
var Calendar = function(dom,page_id,event_date=''){
@@ -123,6 +171,7 @@ var Calendar = function(dom,page_id,event_date=''){
this.rangeSelection = $("#range_selection");
var agendaView = new AgendaView(c);
var loadeventsonviewchange = false;
+ this.success_event = null;
this.initialize = function(){
if (event_date != ''){
var event_dates = event_date.split("-");
@@ -164,7 +213,7 @@ var Calendar = function(dom,page_id,event_date=''){
});
},
// events: 'https://fullcalendar.io/demo-events.json',
- headerToolbar: false,
+ headerToolbar: false,
fixedWeekCount: false,
initialView: dview,
loading: function(bool) {
@@ -177,12 +226,12 @@ var Calendar = function(dom,page_id,event_date=''){
c.calendar_dom.calendar.refetchEvents();
},
eventTimeFormat: { hour12: true, hour: '2-digit', minute: '2-digit', omitZeroMinute: true, meridiem: 'narrow' },
- eventClick: function(eventClickInfo) {
- var calEvent = {"event": eventClickInfo.event},
- originalEvent = eventClickInfo.jsEvent,
- view = eventClickInfo.view,
- el = $(eventClickInfo.el);
- if(el.hasClass("reserve_btn")){
+ eventClick: function(eventClickInfo) {
+ var calEvent = {"event": eventClickInfo.event},
+ originalEvent = eventClickInfo.jsEvent,
+ view = eventClickInfo.view,
+ el = $(eventClickInfo.el);
+ if(el.hasClass("reserve_btn")){
window.calEvent = calEvent;
var start_time = calEvent.event.start;
var date_str = window.getDateString(start_time,std_date_format);
@@ -190,12 +239,12 @@ var Calendar = function(dom,page_id,event_date=''){
var allow_times = calEvent.event._def.extendedProps.allow_times;
window.pick_hire_date(date_str,allow_times);
}else{
- c.dialog.dismiss();
- c.dialog.inflate(calEvent);
- c.dialog.show({"x": originalEvent.clientX,"y": originalEvent.clientY});
- }
- },
- dateClick: function(ev) {
+ c.dialog.dismiss();
+ c.dialog.inflate(calEvent);
+ c.dialog.show({"x": originalEvent.clientX,"y": originalEvent.clientY});
+ }
+ },
+ dateClick: function(ev) {
var calendar = this;
var calendar_dom = $(this.el);
if(c.calendar_dom.hasClass("active_picker")){
@@ -208,25 +257,54 @@ var Calendar = function(dom,page_id,event_date=''){
calendar_dom.trigger("init_time",[time_str]);
calendar_dom.trigger("select_time",[date_str]);
}
- },
+ },
views: {
- dayGridMonth: {
- dayMaxEvents: false
- }
- }
+ timeGridDay: {
+ titleFormat: function(date_info){
+ var date = date_info.date.marker;
+ return getDateString(date, calendar_variable.date_format_with_week);
+ },
+ dayHeaderFormat: function(date_info){
+ return window.calendar_variable.dayNames[date_info.date.marker.getDay()];
+ }
+ },
+ timeGridWeek: {
+ titleFormat: function(date_info){
+ var start = date_info.start.marker,
+ end = date_info.end.marker;
+ return getDateString(start, calendar_variable.date_format) + ' ~ ' + getDateString(end, calendar_variable.date_format);
+ },
+ dayHeaderFormat: function(date_info){
+ return getDateString(date_info.date.marker, calendar_variable.short_date_numeric);
+ }
+ },
+ dayGridMonth: {
+ dayMaxEvents: false,
+ titleFormat: function(date_info){
+ var date = date_info.date.marker;
+ return getDateString(date, calendar_variable.month_year_format);
+ },
+ dayHeaderFormat: function(date_info){
+ return window.calendar_variable.dayNamesShort[date_info.date.marker.getDay()];
+ }
+ }
+ },
+ firstDay: (window.calendar_variable.sunday_first == true ? 0 : 1)
});
-
c.nextBtn.click(function(){
c.dialog.dismiss();
c.calendar_dom.calendar.next();
+ c.title.text(c.calendar_dom.calendar.currentData.viewTitle);
});
c.prevBtn.click(function(){
c.dialog.dismiss();
c.calendar_dom.calendar.prev();
+ c.title.text(c.calendar_dom.calendar.currentData.viewTitle);
});
c.todayBtn.click(function(){
c.dialog.dismiss();
c.calendar_dom.calendar.today();
+ c.title.text(c.calendar_dom.calendar.currentData.viewTitle);
});
c.modeBtns.click(function(){
c.dialog.dismiss();
@@ -239,7 +317,6 @@ var Calendar = function(dom,page_id,event_date=''){
else
c.calendar_dom.calendar.refetchEvents();
});
-
var toggleViews = function(view){
c.modeBtns.removeClass("active");
c.modeBtns.each(function(){
@@ -265,13 +342,8 @@ var Calendar = function(dom,page_id,event_date=''){
c.calendar_dom.calendar.refetchEvents();
loadeventsonviewchange = false;
}
- if(c.calendar_dom.calendar.currentData){
- var viewTitle = c.calendar_dom.calendar.currentData.viewTitle;
- if(view == "timeGridDay" && $('.fc-col-header-cell-cushion ').text() != "")
- viewTitle = $('.fc-col-header-cell-cushion ').text() + ', ' + viewTitle;
- $('#current_title').html(viewTitle);
- }
- c.calendar_dom.calendar.render(); //Rerender to fix layout
+ c.title.text(c.calendar_dom.calendar.currentData.viewTitle);
+ // c.calendar_dom.calendar.rerenderEvents(); //Rerender to fix layout
};
if(c.currentView == "agenda"){toggleViews("agenda");loadeventsonviewchange = true;}
};
@@ -301,7 +373,7 @@ var Calendar = function(dom,page_id,event_date=''){
}
})
}
-
+
this.renderEvent = function(eventStick){
if(eventStick.recurring === true)
c.calendar_dom.calendar.refetchEvents();
@@ -325,11 +397,8 @@ var EventDialog = function(calendar,event){
_event.allDay = _event.event.allDay;
_event._start = _event.event.start;
_event._end = (_event.event.end ? _event.event.end : _event.event.start);
- // var start_date = getDateString(_event._start,date_format);
- // var end_date = getDateString(_event._end,date_format);
- if(_event._end - _event._start > 86400 * 1000){
- _event.allDay = true;
- }
+ // var start_date = getDateString(_event._start,calendar_variable.date_format);
+ // var end_date = getDateString(_event._end,calendar_variable.date_format);
_event.title = _event.event.title;
var extendedProps = _event.event.extendedProps;
Object.keys(extendedProps).forEach(function(k){
@@ -342,15 +411,15 @@ var EventDialog = function(calendar,event){
end_time = "",
time_string = null;
if(_event.allDay) {
- start_time = getDateString(_event._start,datetime_format, is_chinese);
+ start_time = getDateString(_event._start,calendar_variable.date_format_with_short_month);
if(_event._end)
- end_time = getDateString(_event._end,datetime_format, is_chinese);
+ end_time = getDateString(_event._end,calendar_variable.date_format_with_short_month);
time_string = (_event._start === _event._end || !_event._end ? "" + start_time + "
" : "" + start_time + "
" + end_time + "");
} else {
- start_time = getDateString(_event._start,date_format, is_chinese);
- end_time = getDateString(_event._end,date_format, is_chinese);
- var stime = getDateString(_event._start,time_format, is_chinese),
- etime = getDateString(_event._end,time_format, is_chinese),
+ start_time = getDateString(_event._start,calendar_variable.date_format_with_short_month);
+ end_time = getDateString(_event._end,calendar_variable.date_format_with_short_month);
+ var stime = getDateString(_event._start,time_format),
+ etime = getDateString(_event._end,time_format),
same = (start_time == end_time);
if( same ){
time_string = " " +
@@ -366,15 +435,15 @@ var EventDialog = function(calendar,event){
}
event_quick_view = $('
');
template = '' +
- '' +
- '
' +
- '
' + time_string + '' + _event.hiring_person_name + '
' + _event.note +
- (_event.error_message ? ("
" + _event.error_message + "") : "")
- '
' +
- '' +
+ '' +
+ '
' +
+ '
' + time_string + '' + _event.hiring_person_name + '
' + _event.note +
+ (_event.error_message ? ("
" + _event.error_message + "") : "")
+ '
' +
+ '' +
'
';
}
@@ -453,11 +522,11 @@ var EventDialog = function(calendar,event){
}
var UserException = function(message) {
- this.message = message;
- this.name = "UserException";
- this.toString = function(){
- return this.message;
- }
+ this.message = message;
+ this.name = "UserException";
+ this.toString = function(){
+ return this.message;
+ }
}
var AgendaView = function(calendar){
@@ -470,20 +539,16 @@ var AgendaView = function(calendar){
var start_year = today.getFullYear();
var end_month = ((start_month + minDifference) > 11 ? (start_month + minDifference) - 11 : start_month + minDifference);
var end_year = ((start_month + minDifference) > 11 ? start_year+1 : start_year);
- var monthNames = ['January','February','March','April','May','June','July','August','September','October','November','December'];
+ var monthNames = window.calendar_variable.months;
var month_template = '' +
'
' +
'
' +
'
' +
'' +
'' +
- 'Sun | ' +
- 'Mon | ' +
- 'Tue | ' +
- 'Wed | ' +
- 'Thu | ' +
- 'Fri | ' +
- 'Sat | ' +
+ calendar_variable.dayNamesShort.map(function(title){
+ return ''+title+' | ';
+ }).join('') +
'
' +
'' +
'
' +
@@ -494,10 +559,8 @@ var AgendaView = function(calendar){
'
' +
'' +
'' +
- 'Date | ' +
- 'Time | ' +
+ 'DateTime | ' +
'Events | ' +
- 'Borrower | ' +
'
' +
'' +
'' +
@@ -509,20 +572,18 @@ var AgendaView = function(calendar){
'';
var head_template = '' +
- '' +
+ '' +
''+
- '' +
+ '' +
''+
'' +
'
';
var event_template = '' +
- ' | ' +
- ' | ' +
+ ' | ' +
'' +
'' +
' | ' +
- ''+
' |
';
// var month_template = '';
@@ -617,8 +678,9 @@ var AgendaView = function(calendar){
type : "get",
url : url,
dataType : "json",
- data : {"agenda_start":sd.toLocaleString(),"agenda_end":ed.toLocaleString(),"page_id" : _calendar.page_id,"start":usd,"end":ued},
+ data : {"agenda_start":sd.toLocaleString(),"agenda_end":ed.toLocaleString(),"unix_start":usd,"unix_end":ued},
success : function(data){
+ data = data.events;
$("#agenda_start,#agenda_end").datepicker({
dateFormat: "yy/mm",
onChangeMonthYear: function( year, month, inst ){
@@ -641,13 +703,13 @@ var AgendaView = function(calendar){
$.datepicker._updateDatepicker(inst);
})
$("#agenda_start,#agenda_end").focus(function () {
- $(".ui-datepicker-calendar").hide();
- $("#ui-datepicker-div").position({
- my: "center top",
- at: "center bottom",
- of: $(this)
- });
- });
+ $(".ui-datepicker-calendar").hide();
+ $("#ui-datepicker-div").position({
+ my: "center top",
+ at: "center bottom",
+ of: $(this)
+ });
+ });
$.each(data,function(i,e){
var ed = eventDom(e),
s = new Date(e.start),
@@ -705,16 +767,24 @@ var AgendaView = function(calendar){
var e_t = $(event_template),
s = new Date(event.start),
e = new Date(event.end),
- dateFormat = "",
- hiring_person_name = event.hiring_person_name;
- if(s.getDate() == e.getDate() && s.getMonth() == s.getMonth() && e.getFullYear() == e.getFullYear())
- dateFormat = getDateString(s, short_day,is_chinese);
- else
- dateFormat = getDateString(s,short_date,is_chinese) + ' - ' + getDateString(e,short_date,is_chinese);
- e_t.find("td:first").text(dateFormat);
- e_t.find("td.event_time").text((event.diff_day ? (getDateString(s, short_date_time,is_chinese)+"~"+getDateString(e, short_date_time, is_chinese)) : (getDateString(s, time_format)+"~"+getDateString(e, time_format))));
+ datetimeFormat = "";
+ if(s.getDate() == e.getDate() && s.getMonth() == s.getMonth() && e.getFullYear() == e.getFullYear()){
+ datetimeFormat = getDateString(s, calendar_variable.short_day);
+ if(!event.allDay){
+ datetimeFormat += (' ' + getDateString(s,time_format) + ' - ' + getDateString(e,time_format));
+ }
+ }else{
+ console.log(event);
+ console.log(event.start);
+ console.log(event.end);
+ if(event.allDay){
+ datetimeFormat = getDateString(s,calendar_variable.short_date) + ' - ' + getDateString(e,calendar_variable.short_date);
+ }else{
+ datetimeFormat = getDateString(s,calendar_variable.short_date_time) + ' - ' + getDateString(e,calendar_variable.short_date_time);
+ }
+ }
+ e_t.find("td.event_datetime").text(datetimeFormat);
e_t.find("div.event").html(event.title).css("color",event.color);
- e_t.find("td.Borrower").text(hiring_person_name);
return e_t;
}
@@ -773,7 +843,8 @@ var AgendaView = function(calendar){
var last_inserted_date = 1;
var renderMonth = function(){
- var num_of_rows = getNumberOfRows(year,month)
+ var num_of_rows = getNumberOfRows(year,month);
+ var tbody = template.find("table.table tbody");
for(var i = 0; i < num_of_rows; i++){
var tr = null;
if(i == 0)
@@ -786,29 +857,29 @@ var AgendaView = function(calendar){
if(tr == null){
break;
}
- template.find("table.table tbody").append(tr);
- template.find("h4").text(monthNames[firstDay.getMonth()] + " - " + firstDay.getFullYear());
+ tbody.append(tr);
}
+ template.find("h4").text(getDateString(firstDay, calendar_variable.month_year_format));
_this.monthDom.append(template);
_this.monthDom.append(list_template);
}
function getNumberOfRows(year, month) {
- var day = 1,
- sat_counter = 0,
- sunday_counter = 0,
- date = new Date(year, month, day);
+ var day = 1,
+ sat_counter = 0,
+ sunday_counter = 0,
+ date = new Date(year, month, day);
- while(date.getMonth() === month) {
- if(date.getDay() === 0) {
- sunday_counter++;
- }else if(date.getDay() === 6) {
- sat_counter++;
- }
- day++;
- date = new Date(year, month, day);
- }
- return (sunday_counter == 5 && sat_counter == 5 ? 6 : 5);
+ while(date.getMonth() === month) {
+ if(date.getDay() === 0) {
+ sunday_counter++;
+ }else if(date.getDay() === 6) {
+ sat_counter++;
+ }
+ day++;
+ date = new Date(year, month, day);
+ }
+ return (sunday_counter == 5 && sat_counter == 5 ? 6 : 5);
}
var makeRow = function(position){
diff --git a/app/assets/javascripts/calendar_moment.min.js b/app/assets/javascripts/calendar_moment.min.js
new file mode 100644
index 0000000..07a184c
--- /dev/null
+++ b/app/assets/javascripts/calendar_moment.min.js
@@ -0,0 +1,2 @@
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.moment=t()}(this,function(){"use strict";var e,i;function f(){return e.apply(null,arguments)}function o(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function u(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function m(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function l(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(m(e,t))return;return 1}function r(e){return void 0===e}function h(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function a(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function d(e,t){for(var n=[],s=0;s>>0,s=0;sFe(e)?(r=e+1,a-Fe(e)):(r=e,a);return{year:r,dayOfYear:o}}function Ae(e,t,n){var s,i,r=Ge(e.year(),t,n),a=Math.floor((e.dayOfYear()-r-1)/7)+1;return a<1?s=a+je(i=e.year()-1,t,n):a>je(e.year(),t,n)?(s=a-je(e.year(),t,n),i=e.year()+1):(i=e.year(),s=a),{week:s,year:i}}function je(e,t,n){var s=Ge(e,t,n),i=Ge(e+1,t,n);return(Fe(e)-s+i)/7}C("w",["ww",2],"wo","week"),C("W",["WW",2],"Wo","isoWeek"),L("week","w"),L("isoWeek","W"),A("week",5),A("isoWeek",5),ce("w",te),ce("ww",te,Q),ce("W",te),ce("WW",te,Q),ge(["w","ww","W","WW"],function(e,t,n,s){t[s.substr(0,1)]=Z(e)});function Ie(e,t){return e.slice(t,7).concat(e.slice(0,t))}C("d",0,"do","day"),C("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),C("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),C("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),C("e",0,0,"weekday"),C("E",0,0,"isoWeekday"),L("day","d"),L("weekday","e"),L("isoWeekday","E"),A("day",11),A("weekday",11),A("isoWeekday",11),ce("d",te),ce("e",te),ce("E",te),ce("dd",function(e,t){return t.weekdaysMinRegex(e)}),ce("ddd",function(e,t){return t.weekdaysShortRegex(e)}),ce("dddd",function(e,t){return t.weekdaysRegex(e)}),ge(["dd","ddd","dddd"],function(e,t,n,s){var i=n._locale.weekdaysParse(e,s,n._strict);null!=i?t.d=i:y(n).invalidWeekday=e}),ge(["d","e","E"],function(e,t,n,s){t[s]=Z(e)});var Ze="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),ze="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),$e="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),qe=de,Be=de,Je=de;function Qe(){function e(e,t){return t.length-e.length}for(var t,n,s,i,r=[],a=[],o=[],u=[],l=0;l<7;l++)t=_([2e3,1]).day(l),n=me(this.weekdaysMin(t,"")),s=me(this.weekdaysShort(t,"")),i=me(this.weekdays(t,"")),r.push(n),a.push(s),o.push(i),u.push(n),u.push(s),u.push(i);r.sort(e),a.sort(e),o.sort(e),u.sort(e),this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Xe(){return this.hours()%12||12}function Ke(e,t){C(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function et(e,t){return t._meridiemParse}C("H",["HH",2],0,"hour"),C("h",["hh",2],0,Xe),C("k",["kk",2],0,function(){return this.hours()||24}),C("hmm",0,0,function(){return""+Xe.apply(this)+T(this.minutes(),2)}),C("hmmss",0,0,function(){return""+Xe.apply(this)+T(this.minutes(),2)+T(this.seconds(),2)}),C("Hmm",0,0,function(){return""+this.hours()+T(this.minutes(),2)}),C("Hmmss",0,0,function(){return""+this.hours()+T(this.minutes(),2)+T(this.seconds(),2)}),Ke("a",!0),Ke("A",!1),L("hour","h"),A("hour",13),ce("a",et),ce("A",et),ce("H",te),ce("h",te),ce("k",te),ce("HH",te,Q),ce("hh",te,Q),ce("kk",te,Q),ce("hmm",ne),ce("hmmss",se),ce("Hmm",ne),ce("Hmmss",se),ye(["H","HH"],Me),ye(["k","kk"],function(e,t,n){var s=Z(e);t[Me]=24===s?0:s}),ye(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),ye(["h","hh"],function(e,t,n){t[Me]=Z(e),y(n).bigHour=!0}),ye("hmm",function(e,t,n){var s=e.length-2;t[Me]=Z(e.substr(0,s)),t[De]=Z(e.substr(s)),y(n).bigHour=!0}),ye("hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[Me]=Z(e.substr(0,s)),t[De]=Z(e.substr(s,2)),t[Se]=Z(e.substr(i)),y(n).bigHour=!0}),ye("Hmm",function(e,t,n){var s=e.length-2;t[Me]=Z(e.substr(0,s)),t[De]=Z(e.substr(s))}),ye("Hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[Me]=Z(e.substr(0,s)),t[De]=Z(e.substr(s,2)),t[Se]=Z(e.substr(i))});var tt=z("Hours",!0);var nt,st={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Te,monthsShort:Ne,week:{dow:0,doy:6},weekdays:Ze,weekdaysMin:$e,weekdaysShort:ze,meridiemParse:/[ap]\.?m?\.?/i},it={},rt={};function at(e){return e?e.toLowerCase().replace("_","-"):e}function ot(e){for(var t,n,s,i,r=0;r=t&&function(e,t){for(var n=Math.min(e.length,t.length),s=0;s=t-1)break;t--}r++}return nt}function ut(t){var e=null;if(void 0===it[t]&&"undefined"!=typeof module&&module&&module.exports)try{e=nt._abbr,require("./locale/"+t),lt(e)}catch(e){it[t]=null}return it[t]}function lt(e,t){var n;return e&&((n=r(t)?dt(e):ht(e,t))?nt=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),nt._abbr}function ht(e,t){if(null===t)return delete it[e],null;var n,s=st;if(t.abbr=e,null!=it[e])Y("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=it[e]._config;else if(null!=t.parentLocale)if(null!=it[t.parentLocale])s=it[t.parentLocale]._config;else{if(null==(n=ut(t.parentLocale)))return rt[t.parentLocale]||(rt[t.parentLocale]=[]),rt[t.parentLocale].push({name:e,config:t}),null;s=n._config}return it[e]=new x(b(s,t)),rt[e]&&rt[e].forEach(function(e){ht(e.name,e.config)}),lt(e),it[e]}function dt(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return nt;if(!o(e)){if(t=ut(e))return t;e=[e]}return ot(e)}function ct(e){var t,n=e._a;return n&&-2===y(e).overflow&&(t=n[ve]<0||11xe(n[pe],n[ve])?ke:n[Me]<0||24je(n,r,a)?y(e)._overflowWeeks=!0:null!=u?y(e)._overflowWeekday=!0:(o=Ee(n,s,i,r,a),e._a[pe]=o.year,e._dayOfYear=o.dayOfYear)}(e),null!=e._dayOfYear&&(r=St(e._a[pe],s[pe]),(e._dayOfYear>Fe(r)||0===e._dayOfYear)&&(y(e)._overflowDayOfYear=!0),n=Ve(r,0,e._dayOfYear),e._a[ve]=n.getUTCMonth(),e._a[ke]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=u[t]=s[t];for(;t<7;t++)e._a[t]=u[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[Me]&&0===e._a[De]&&0===e._a[Se]&&0===e._a[Ye]&&(e._nextDay=!0,e._a[Me]=0),e._d=(e._useUTC?Ve:function(e,t,n,s,i,r,a){var o;return e<100&&0<=e?(o=new Date(e+400,t,n,s,i,r,a),isFinite(o.getFullYear())&&o.setFullYear(e)):o=new Date(e,t,n,s,i,r,a),o}).apply(null,u),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[Me]=24),e._w&&void 0!==e._w.d&&e._w.d!==i&&(y(e).weekdayMismatch=!0)}}function Ot(e){if(e._f!==f.ISO_8601)if(e._f!==f.RFC_2822){e._a=[],y(e).empty=!0;for(var t,n,s,i,r,a,o,u=""+e._i,l=u.length,h=0,d=H(e._f,e._locale).match(N)||[],c=0;cn.valueOf():n.valueOf()"}),pn.toJSON=function(){return this.isValid()?this.toISOString():null},pn.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},pn.unix=function(){return Math.floor(this.valueOf()/1e3)},pn.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},pn.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},pn.eraName=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;nthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},pn.isLocal=function(){return!!this.isValid()&&!this._isUTC},pn.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},pn.isUtc=At,pn.isUTC=At,pn.zoneAbbr=function(){return this._isUTC?"UTC":""},pn.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},pn.dates=n("dates accessor is deprecated. Use date instead.",fn),pn.months=n("months accessor is deprecated. Use month instead",Ue),pn.years=n("years accessor is deprecated. Use year instead",Le),pn.zone=n("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}),pn.isDSTShifted=n("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!r(this._isDSTShifted))return this._isDSTShifted;var e,t={};return v(t,this),(t=bt(t))._a?(e=(t._isUTC?_:Tt)(t._a),this._isDSTShifted=this.isValid()&&0 @calendar_setting.get_modes_info.map.with_index{|(trans, mode),i| {trans: trans, mode: mode, active_class: (i ==
+ 2 ? 'active' : '')}},
"extras" => {
"page_id" => OrbitHelper.params[:page_id],
'widget_title' => page.name,
@@ -29,7 +32,10 @@ class CalendarsController < ApplicationController
def widget
part = OrbitHelper.get_current_widget
+ @calendar_setting = CalendarSetting.first
{
+ "modes_info" => @calendar_setting.get_modes_info.map.with_index{|(trans, mode),i| {trans: trans, mode: mode, active_class: (i ==
+ 2 ? 'active' : '')}},
"extras" => {
"subpart-id" => part.id.to_s,
"more_url" => OrbitHelper.widget_more_url,
@@ -84,7 +90,7 @@ class CalendarsController < ApplicationController
events = event.agenda_events(agenda_start,agenda_end)
end
end
- render json: {"events" => events,"calendar_title"=>get_calendar_title(Time.at(params[:month_start].to_i).utc)}.to_json({"frontend" => true})
+ render json: {"events" => events,"calendar_title"=>get_calendar_title(Time.at(params[:unix_start].to_i).utc)}.to_json({"frontend" => true})
end
end
@@ -109,7 +115,7 @@ class CalendarsController < ApplicationController
events = event.agenda_events(agenda_start,agenda_end)
end
end
- render json: {"events" => events,"calendar_title"=>get_calendar_title(Time.at(params[:month_start].to_i).utc)}.to_json({"frontend" => true})
+ render json: {"events" => events,"calendar_title"=>get_calendar_title(Time.at(params[:unix_start].to_i).utc)}.to_json({"frontend" => true})
end
end
def get_calendar_title(now_date=nil)
diff --git a/app/models/calendar_setting.rb b/app/models/calendar_setting.rb
new file mode 100644
index 0000000..b254927
--- /dev/null
+++ b/app/models/calendar_setting.rb
@@ -0,0 +1,81 @@
+class CalendarSetting
+ include Mongoid::Document
+ include Mongoid::Timestamps
+ field :enable, type: Boolean, default: false
+ field :modes, type: Hash, default: {}, localize: true
+ field :days, type: Array, default: [], localize: true
+ field :sunday_first, type: Boolean, localize: true
+ field :date_type, type: Integer, localize: true, default: 0
+ field :titleFormat, localize: true
+ All_days = (0...7).to_a
+ ModesInfo = {'day'=>'timeGridDay', 'week'=>'timeGridWeek', 'month'=>'dayGridMonth', 'agenda'=>'agenda'}
+ All_modes = ModesInfo.keys
+ DateTypes = {
+ "zh_tw"=>["[LocaleString]: 2022年7月12日 (週三)", "[en-US format]: weekday, monthname dd, YYYY", "[Locale Numeric]: YYYY/mm/dd (weekday)"],
+ "en"=>["[LocaleString]: weekday, monthname dd, YYYY", "[en-US format]: weekday, monthname dd, YYYY", "[Locale Numeric]: weekday, mm/dd/YYYY"]
+ }
+ def week_title
+ if self.days.present?
+ self.days
+ else
+ (0...7).map{|i| I18n.t("calendar.day.#{i}")}
+ end
+ end
+ def get_week_title(locale)
+ tmp = self.days_translations[locale]
+ if tmp.present?
+ tmp
+ else
+ I18n.with_locale(locale){All_days.map{|i| I18n.t("calendar.day.#{i}")}}
+ end
+ end
+ def sunday_first
+ val = super
+ if val.nil?
+ if I18n.locale == :zh_tw
+ val = false
+ else
+ val = true
+ end
+ end
+ val
+ end
+ def get_sunday_first(locale)
+ val = self.sunday_first_translations[locale]
+ if val.nil?
+ if locale == :zh_tw
+ val = false
+ else
+ val = true
+ end
+ end
+ val
+ end
+ def get_mode(mode, locale)
+ tmp = self.modes_translations[locale] || {}
+ val = tmp[mode]
+ if val.nil?
+ val = I18n.with_locale(locale){I18n.t("calendar.mode.#{mode}")}
+ end
+ val
+ end
+ def get_modes(use_default=false)
+ tmp = self.modes_translations[I18n.locale]
+ if tmp.blank? || use_default
+ All_modes.map{|m| [m, I18n.t("calendar.mode.#{m}")]}.to_h
+ else
+ tmp
+ end
+ end
+ def get_modes_info(use_default=false)
+ tmp = self.get_modes(use_default || !(self.enable))
+ tmp.map{|m, trans| [trans, ModesInfo[m]]}
+ end
+ def titleFormat
+ tmp = super
+ if tmp.nil?
+ tmp = 'dddd, MMMM D, YYYY'
+ end
+ tmp
+ end
+end
\ No newline at end of file
diff --git a/app/views/admin/calendars/calendar_setting.html.erb b/app/views/admin/calendars/calendar_setting.html.erb
new file mode 100644
index 0000000..eefb467
--- /dev/null
+++ b/app/views/admin/calendars/calendar_setting.html.erb
@@ -0,0 +1,79 @@
+
+<%= stylesheet_link_tag "lib/togglebox"%>
+<%= form_for @calendar_setting, url: update_calendar_setting_admin_calendars_path, html: {class: "form-horizontal main-forms"} do |f| %>
+