diff --git a/app/assets/javascripts/calendar.js b/app/assets/javascripts/calendar.js
index 3f8b96b..cf921a4 100644
--- a/app/assets/javascripts/calendar.js
+++ b/app/assets/javascripts/calendar.js
@@ -902,6 +902,7 @@ var AgendaView = function(calendar){
});
$.each(data,function(i,e){
var ed = eventDom(e),
+ calendar_id = e.calendar,
s = new Date(e.start),
e = new Date(e.end),
e_m = ((e.getMonth() > s.getMonth() || s.getMonth() == e.getMonth()) && s.getFullYear() == e.getFullYear() ? e.getMonth() : e.getMonth() + 12)
@@ -921,7 +922,7 @@ var AgendaView = function(calendar){
}
if(s.getDate() == e.getDate() && s.getMonth() == s.getMonth() && e.getFullYear() == e.getFullYear()){
var td = agenda_space.find("td[data-date-node="+s.getDate()+"-"+s.getMonth()+"-"+s.getFullYear()+"]");
- td.addClass("has_event");
+ td.addClass("has_event").attr("data-calendar-id", calendar_id);
}else{
var timeDiff = Math.abs(e.getTime() - s.getTime()),
diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)),
@@ -929,10 +930,9 @@ var AgendaView = function(calendar){
c_d = s.getDate(),
c_y = s.getFullYear(),
end_of_c_month = new Date(s.getFullYear(),s.getMonth()+1,0).getDate();
-
for(var i = 0; i <= diffDays; i++){
var td = agenda_space.find("td[data-date-node="+c_d+"-"+c_m+"-"+c_y+"]");
- td.addClass("has_event");
+ td.addClass("has_event").attr("data-calendar-id", calendar_id);
c_d++;
if(c_d > end_of_c_month){
c_d = 1;
@@ -949,6 +949,11 @@ var AgendaView = function(calendar){
if($(this).find("tr").length > 1)
$(this).find("td.no_events").parent().remove();
})
+ $(".edit_event_btn").on("click", function(){
+ var _this = $(this);
+ _calendar.editEvent(_this.data('edit-url'), _this.data('allDay'));
+ return false;
+ });
// nano scroller here
}
@@ -971,7 +976,11 @@ var AgendaView = function(calendar){
}
}
e_t.find("td.event_datetime").text(datetimeFormat);
- e_t.find("div.event").html(event.title).css("color",event.color);
+ var tmp_html = event.title;
+ if(event.edit_url){
+ tmp_html = '' + tmp_html + '';
+ }
+ e_t.find("div.event").html(tmp_html).css("color",event.color).attr("data-calendar-id", event.calendar);
return e_t;
}
diff --git a/app/assets/javascripts/calendar_frontend.js b/app/assets/javascripts/calendar_frontend.js
index 3978fca..1c7e670 100644
--- a/app/assets/javascripts/calendar_frontend.js
+++ b/app/assets/javascripts/calendar_frontend.js
@@ -734,6 +734,7 @@ var AgendaView = function(calendar){
});
$.each(data,function(i,e){
var ed = eventDom(e),
+ calendar_id = e.calendar,
s = new Date(e.start),
e = new Date(e.end),
e_m = ((e.getMonth() > s.getMonth() || s.getMonth() == e.getMonth()) && s.getFullYear() == e.getFullYear() ? e.getMonth() : e.getMonth() + 12)
@@ -753,7 +754,7 @@ var AgendaView = function(calendar){
}
if(s.getDate() == e.getDate() && s.getMonth() == s.getMonth() && e.getFullYear() == e.getFullYear()){
var td = agenda_space.find("td[data-date-node="+s.getDate()+"-"+s.getMonth()+"-"+s.getFullYear()+"]");
- td.addClass("has_event");
+ td.addClass("has_event").attr("data-calendar-id", calendar_id);
}else{
var timeDiff = Math.abs(e.getTime() - s.getTime()),
diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)),
@@ -764,7 +765,7 @@ var AgendaView = function(calendar){
for(var i = 0; i <= diffDays; i++){
var td = agenda_space.find("td[data-date-node="+c_d+"-"+c_m+"-"+c_y+"]");
- td.addClass("has_event");
+ td.addClass("has_event").attr("data-calendar-id", calendar_id);
c_d++;
if(c_d > end_of_c_month){
c_d = 1;
diff --git a/app/assets/javascripts/calendar_widget.js b/app/assets/javascripts/calendar_widget.js
index 9fc74c5..e059041 100644
--- a/app/assets/javascripts/calendar_widget.js
+++ b/app/assets/javascripts/calendar_widget.js
@@ -451,7 +451,7 @@ var CalendarModuleMonth1 = function(date,dom,subpart,url,index_flag){
events[dt]=[]
}
events[dt].push(eve)
- td.addClass("w-calendar-event");
+ td.addClass("w-calendar-event").attr("data-calendar-id", eve.calendar);
if(events[dt] && events[dt].length==1){
td.click(function(){
toggle_event(this,'show')
@@ -474,7 +474,7 @@ var CalendarModuleMonth1 = function(date,dom,subpart,url,index_flag){
toggle_event(this,'show')
})
}
- td.addClass("w-calendar-event");
+ td.addClass("w-calendar-event").attr("data-calendar-id", eve.calendar);
}
})
if (!toggle_data){
diff --git a/app/assets/javascripts/calendar_widget2.js b/app/assets/javascripts/calendar_widget2.js
index b25ebba..fa65de6 100644
--- a/app/assets/javascripts/calendar_widget2.js
+++ b/app/assets/javascripts/calendar_widget2.js
@@ -591,7 +591,7 @@ var CalendarModuleMonth2 = function(date,dom,subpart,url,index_flag){
events[dt]=[]
}
events[dt].push(eve)
- td.addClass("w-calendar-event");
+ td.addClass("w-calendar-event").attr("data-calendar-id", eve.calendar);
if(events[dt] && events[dt].length==1){
td.click(function(){
toggle_event(this,'show')
@@ -614,7 +614,7 @@ var CalendarModuleMonth2 = function(date,dom,subpart,url,index_flag){
toggle_event(this,'show')
})
}
- td.addClass("w-calendar-event");
+ td.addClass("w-calendar-event").attr("data-calendar-id", eve.calendar);
}
})
if (!toggle_data){
diff --git a/app/controllers/admin/calendars_controller.rb b/app/controllers/admin/calendars_controller.rb
index 1ba9bbd..d44d40d 100644
--- a/app/controllers/admin/calendars_controller.rb
+++ b/app/controllers/admin/calendars_controller.rb
@@ -3,6 +3,7 @@ class Admin::CalendarsController < OrbitAdminController
# GET /events.json
def index
+ @calendar_types = CalendarType.all
@calendar_setting = CalendarSetting.first
@events = []
tags = @module_app.tags
@@ -17,7 +18,7 @@ class Admin::CalendarsController < OrbitAdminController
@monthly_events = Event.monthly_event(sdt,edt).with_categories(filters("category"))
.with_tags(filters("tag")).convert_front
@re = Event.with_categories(filters("category")).with_tags(filters("tag")).recurring_event(sdt,edt)
- allevents = @monthly_events.inject(@re, :<<)
+ allevents = @monthly_events.inject(@re, :<<).sort_by{|e| e[:start]}
events = allevents.to_json
events = JSON.parse(events)
events.each_with_index do |e,i|
@@ -51,7 +52,7 @@ class Admin::CalendarsController < OrbitAdminController
def agenda
agenda_start = Time.at(params[:unix_start].to_i).utc
agenda_end = Time.at(params[:unix_end].to_i).utc
- @events = Event.agenda_events(agenda_start,agenda_end)
+ @events = Event.agenda_events(agenda_start,agenda_end).sort_by{|e| e[:start]}
# re = Event.recurring_event(Time.at(params[:unix_start].to_i), Time.at(params[:unix_end].to_i))
# @events = @events.inject(re, :<<)
render :json=>@events.to_json
diff --git a/app/controllers/calendars_controller.rb b/app/controllers/calendars_controller.rb
index e71d380..134ce32 100644
--- a/app/controllers/calendars_controller.rb
+++ b/app/controllers/calendars_controller.rb
@@ -6,6 +6,11 @@ class CalendarsController < ApplicationController
def index
page = Page.where(page_id: OrbitHelper.params[:page_id]).first
style_file = page.layout=='index3' ? '/assets/calendar_widget2' : '/assets/calendar_widget1'
+ cat_ids = page.categories
+ if cat_ids.include?('all')
+ cat_ids = []
+ end
+ @calendar_types = cat_ids.blank? ? CalendarType.all : CalendarType.where(:id.in => cat_ids)
@calendar_setting = CalendarSetting.first
{
"modes_info" => @calendar_setting.get_modes_info.map.with_index{|(trans, mode),i| {trans: trans, mode: mode, active_class: (i ==
@@ -34,12 +39,9 @@ class CalendarsController < ApplicationController
def widget
part = OrbitHelper.get_current_widget
@calendar_setting = CalendarSetting.first
- begin
- extra_before_html = render_to_string(partial: 'calendars/calendar_variable', locals: {:@calendar_setting=>@calendar_setting})
- rescue => e
- extra_before_html = ""
- puts e, e.backtrace
- end
+ cat_ids = part.custom_array_field
+ @calendar_types = cat_ids.blank? ? CalendarType.all : CalendarType.where(:id.in => cat_ids)
+ extra_before_html = render_to_string(partial: 'calendars/calendar_variable', locals: {:@calendar_setting=>@calendar_setting,:@calendar_types=>@calendar_types})
{
"modes_info" => @calendar_setting.get_modes_info.map.with_index{|(trans, mode),i| {trans: trans, mode: mode, active_class: (i ==
2 ? 'active' : '')}},
@@ -97,7 +99,7 @@ class CalendarsController < ApplicationController
agenda_start = Time.at(params[:unix_start].to_i).utc
agenda_end = Time.at(params[:unix_end].to_i).utc
event = Event.where("title_translations.#{locale}".to_sym.ne=>"")
- events = event.with_categories(calendar_types).agenda_events(agenda_start,agenda_end)
+ events = event.with_categories(calendar_types).agenda_events(agenda_start,agenda_end).sort_by{|e| e[:start]}
end
render json: {"events" => events,"calendar_title"=>get_calendar_title(Time.at(params[:month_start].to_i).utc)}.to_json({"frontend" => true})
end
@@ -118,7 +120,7 @@ class CalendarsController < ApplicationController
agenda_start = Time.at(params[:unix_start].to_i).utc
agenda_end = Time.at(params[:unix_end].to_i).utc
event = Event.where("title_translations.#{locale}".to_sym.ne=>"")
- events = event.with_categories(calendar_types).agenda_events(agenda_start,agenda_end)
+ events = event.with_categories(calendar_types).agenda_events(agenda_start,agenda_end).sort_by{|e| e[:start]}
end
render json: {"events" => events,"calendar_title"=>get_calendar_title(Time.at(params[:month_start].to_i).utc)}.to_json({"frontend" => true})
end
diff --git a/app/models/event.rb b/app/models/event.rb
index ecc1581..c8d749d 100644
--- a/app/models/event.rb
+++ b/app/models/event.rb
@@ -109,35 +109,75 @@ class Event
]
def as_json(options = {})
- if options["frontend"]
- {
- :id => self.id.to_s,
- :title => self.title,
- :note => self.note || "",
- :start => self.start.to_json.gsub('"',''),
- :end => self.end.to_json.gsub('"',''),
- :allDay => self.all_day,
- :recurring => self.recurring,
- :calendar => self.calendar_type_id.to_s,
- :color => (self.calendar_type.color rescue nil),
- :diff_day => self.all_day
- }
- else
- {
- :id => self.id.to_s,
- :title => self.title,
- :note => self.note || "",
- :start => self.start.to_json.gsub('"',''),
- :end => self.end.to_json.gsub('"',''),
- :allDay => self.all_day,
- :recurring => self.recurring,
- :calendar => self.calendar_type_id.to_s,
- :color => (self.calendar_type.color rescue nil),
- :diff_day => self.all_day,
- :edit_url => Rails.application.routes.url_helpers.edit_admin_calendar_path(:locale=>I18n.locale, :id=>self.id),
- :delete_url => Rails.application.routes.url_helpers.admin_calendar_path(:locale=>I18n.locale, :id=>self.id)
- }
- end
+ tmp_note = self.note || ""
+ if self.recurring
+ freq = self.frequency.to_i
+ if @week_titles.nil?
+ @week_titles = CalendarSetting.first.week_title
+ @weekdayst = I18n.t("calendar.weekdays")
+ @dailyt = I18n.t("calendar.daily")
+ @weeklyt = I18n.t("calendar.weekly")
+ @monthlyt = I18n.t("calendar.monthly")
+ @yearlyt = I18n.t("calendar.yearly")
+ @conjt = I18n.t('calendar.conj')
+ @andt = I18n.t('calendar.and')
+ end
+ case self.period
+ when 'Daily'
+ every_n_days = (freq == 1 ? @dailyt : I18n.t("calendar.every_n_days", {:num=>self.frequency}))
+ tmp_note = every_n_days + "
" + tmp_note
+ when 'Weekly'
+ if self.is_weekdays
+ days = @weekdayst
+ elsif self.weekdays.present?
+ days = self.weekdays.map{|i| @week_titles[i]}
+ if days.count > 1
+ days = days[0...-1].join(@conjt) + @andt + days[-1]
+ else
+ days = days[0]
+ end
+ end
+ every_n_weeks = (freq == 1 ? @weeklyt : I18n.t("calendar.every_n_weeks", {:num=>self.frequency}))
+ tmp_note = I18n.t("calendar.every_week_day", {:every_n_weeks=>every_n_weeks,:days=>days}) + "
" + tmp_note
+ when 'Monthly'
+ days = self.start.day
+ every_n_months = (freq == 1 ? @monthlyt : I18n.t("calendar.every_n_months", {:num=>self.frequency}))
+ tmp_note = I18n.t("calendar.every_month_day", {:every_n_months=>every_n_months,:days=>days}) + "
" + tmp_note
+ when 'Yearly'
+ date = self.start.strftime('%m/%d')
+ every_n_years = (freq == 1 ? @yearlyt : I18n.t("calendar.every_n_years", {:num=>self.frequency}))
+ tmp_note = I18n.t("calendar.every_year_day", {:every_n_years=>every_n_years,:date=>date}) + "
" + tmp_note
+ end
+ end
+ if options["frontend"]
+ {
+ :id => self.id.to_s,
+ :title => self.title,
+ :note => tmp_note,
+ :start => self.start.to_json.gsub('"',''),
+ :end => (self.all_day ? [self.start, self.end - 1.day].max : self.end).to_json.gsub('"',''),
+ :allDay => self.all_day,
+ :recurring => self.recurring,
+ :calendar => self.calendar_type_id.to_s,
+ :color => (self.calendar_type.color rescue nil),
+ :diff_day => self.all_day
+ }
+ else
+ {
+ :id => self.id.to_s,
+ :title => self.title,
+ :note => tmp_note,
+ :start => self.start.to_json.gsub('"',''),
+ :end => (self.all_day ? [self.start, self.end - 1.day].max : self.end).to_json.gsub('"',''),
+ :allDay => self.all_day,
+ :recurring => self.recurring,
+ :calendar => self.calendar_type_id.to_s,
+ :color => (self.calendar_type.color rescue nil),
+ :diff_day => self.all_day,
+ :edit_url => Rails.application.routes.url_helpers.edit_admin_calendar_path(:locale=>I18n.locale, :id=>self.id),
+ :delete_url => Rails.application.routes.url_helpers.admin_calendar_path(:locale=>I18n.locale, :id=>self.id)
+ }
+ end
end
@@ -146,9 +186,7 @@ class Event
end
def self.convert_front
self.all.collect do |re|
- edit_url = Rails.application.routes.url_helpers.edit_admin_calendar_path(:locale=>I18n.locale, :id=>re.id)
- delete_url = Rails.application.routes.url_helpers.admin_calendar_path(:locale=>I18n.locale, :id=>re.id)
- {:id => re.id.to_s, :title=>re.title, :note=>re.note || "", :allDay => re.all_day, :recurring => re.recurring, :calendar => re.calendar_type.id.to_s, :color => (re.calendar_type.color rescue nil), :edit_url => edit_url, :delete_url => delete_url, :url_linked => re.url_to_fronted, :start => re.start, :end => re.end}
+ re.as_json
end
end
def self.get_diff_month(date1,date2)
@@ -187,7 +225,7 @@ class Event
if period_str
org_start = re.start
@start_date = re.start
- @end_date = re.end
+ @end_date = (re.all_day ? [re.start, re.end - 1.day].max : re.end)
freq = re.frequency.to_i
interval = freq.send(period_str)
if is_month
diff --git a/app/views/calendars/_calendar_variable.html.erb b/app/views/calendars/_calendar_variable.html.erb
index 66d02e1..ec87e46 100644
--- a/app/views/calendars/_calendar_variable.html.erb
+++ b/app/views/calendars/_calendar_variable.html.erb
@@ -3,7 +3,7 @@
window.calendar_variable = {};
window.calendar_variable.from = "<%=t('calendar.from')%>";
window.calendar_variable.to = "<%=t('calendar.to')%>";
- <% if @calendar_setting && @calendar_setting.enable %>
+ <% if @calendar_setting && (@calendar_setting.enable rescue false) %>
window.calendar_variable.sunday_first = <%=@calendar_setting.sunday_first%>;
window.calendar_variable.week_title = <%=@calendar_setting.week_title.to_s.html_safe%>;
window.calendar_variable.date_type = <%=@calendar_setting.date_type%>;
@@ -16,4 +16,23 @@
<% end %>
<% end %>
}
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 3869fbb..7539f55 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -1,5 +1,14 @@
en:
calendar:
+ conj: ", "
+ and: " and "
+ every_n_years: "Every %{num} years"
+ every_n_months: "Every %{num} months"
+ every_n_weeks: "Every %{num} weeks"
+ every_n_days: "Every %{num} days"
+ every_year_day: "%{every_n_years} on %{date}"
+ every_month_day: "%{every_n_months} on day %{days}"
+ every_week_day: "%{every_n_weeks} on %{days}"
type: Type
custom: Custom
weekdays: Weekdays
diff --git a/config/locales/zh_tw.yml b/config/locales/zh_tw.yml
index d971e62..45ec323 100644
--- a/config/locales/zh_tw.yml
+++ b/config/locales/zh_tw.yml
@@ -1,5 +1,14 @@
zh_tw:
calendar:
+ conj: "、"
+ and: "與"
+ every_n_years: "每%{num}年"
+ every_n_months: "每%{num}個月"
+ every_n_weeks: "每%{num}週"
+ every_n_days: "每%{num}天"
+ every_year_day: "%{every_n_years}的%{date}"
+ every_month_day: "%{every_n_months}的第%{days}天"
+ every_week_day: "%{every_n_weeks}的%{days}"
type: 類型
custom: 自訂
weekdays: 平日