diff --git a/plugins/event/lib/event_plugin/event_block.rb b/plugins/event/lib/event_plugin/event_block.rb index a750b57..96d772f 100644 --- a/plugins/event/lib/event_plugin/event_block.rb +++ b/plugins/event/lib/event_plugin/event_block.rb @@ -1,10 +1,11 @@ class EventPlugin::EventBlock < Block - attr_accessible :all_env_events, :limit, :future_only, :date_distance_limit + attr_accessible :all_env_events, :limit, :future_only, :date_distance_limit, :display_as_calendar settings_items :all_env_events, :type => :boolean, :default => false settings_items :limit, :type => :integer, :default => 4 settings_items :future_only, :type => :boolean, :default => true settings_items :date_distance_limit, :type => :integer, :default => 0 + settings_items :display_as_calendar, :type => :boolean, :default => false def self.description _('Events') @@ -51,4 +52,11 @@ class EventPlugin::EventBlock < Block { :profile => [:article], :environment => [:article] } end + def api_content + content = [] + events.each do |event| + content << { title: event.title, id: event.id, date: event.start_date.to_i * 1000, view_url: event.view_url } + end + { events: content } + end end diff --git a/plugins/event/public/jquery.e-calendar.js b/plugins/event/public/jquery.e-calendar.js new file mode 100644 index 0000000..cbecdc2 --- /dev/null +++ b/plugins/event/public/jquery.e-calendar.js @@ -0,0 +1,194 @@ +/** + * @license e-Calendar v0.9.3 + * (c) 2014-2016 - Jhonis de Souza + * License: GNU + */ + +(function ($) { + + var eCalendar = function (options, object) { + // Initializing global variables + var adDay = new Date().getDate(); + var adMonth = new Date().getMonth(); + var adYear = new Date().getFullYear(); + var dDay = adDay; + var dMonth = adMonth; + var dYear = adYear; + var instance = object; + + var settings = $.extend({}, $.fn.eCalendar.defaults, options); + + function lpad(value, length, pad) { + if (typeof pad == 'undefined') { + pad = '0'; + } + var p; + for (var i = 0; i < length; i++) { + p += pad; + } + return (p + value).slice(-length); + } + + var mouseOver = function () { + $(this).addClass('c-nav-btn-over'); + }; + var mouseLeave = function () { + $(this).removeClass('c-nav-btn-over'); + }; + var mouseOverEvent = function () { + $(this).addClass('c-event-over'); + var d = $(this).attr('data-event-day'); + $('div.c-event-item[data-event-day="' + d + '"]').addClass('c-event-over'); + }; + var mouseLeaveEvent = function () { + $(this).removeClass('c-event-over') + var d = $(this).attr('data-event-day'); + $('div.c-event-item[data-event-day="' + d + '"]').removeClass('c-event-over'); + }; + var mouseOverItem = function () { + $(this).addClass('c-event-over'); + var d = $(this).attr('data-event-day'); + $('div.c-event[data-event-day="' + d + '"]').addClass('c-event-over'); + }; + var mouseLeaveItem = function () { + $(this).removeClass('c-event-over') + var d = $(this).attr('data-event-day'); + $('div.c-event[data-event-day="' + d + '"]').removeClass('c-event-over'); + }; + var nextMonth = function () { + if (dMonth < 11) { + dMonth++; + } else { + dMonth = 0; + dYear++; + } + print(); + }; + var previousMonth = function () { + if (dMonth > 0) { + dMonth--; + } else { + dMonth = 11; + dYear--; + } + print(); + }; + + function loadEvents() { + if (typeof settings.url != 'undefined' && settings.url != '') { + $.ajax({url: settings.url, + async: false, + success: function (result) { + settings.events = result; + } + }); + } + } + + function print() { + loadEvents(); + var dWeekDayOfMonthStart = new Date(dYear, dMonth, 1).getDay() - settings.firstDayOfWeek; + if (dWeekDayOfMonthStart < 0) { + dWeekDayOfMonthStart = 6 - ((dWeekDayOfMonthStart + 1) * -1); + } + var dLastDayOfMonth = new Date(dYear, dMonth + 1, 0).getDate(); + var dLastDayOfPreviousMonth = new Date(dYear, dMonth + 1, 0).getDate() - dWeekDayOfMonthStart + 1; + + var cBody = $('
').addClass('c-grid'); + var cEvents = $('').addClass('c-event-grid'); + var cEventsBody = $('').addClass('c-event-body'); + cEvents.append($('').addClass('c-event-title c-pad-top').html(settings.eventTitle)); + cEvents.append(cEventsBody); + var cNext = $('').addClass('c-next c-grid-title c-pad-top'); + var cMonth = $('').addClass('c-month c-grid-title c-pad-top'); + var cPrevious = $('').addClass('c-previous c-grid-title c-pad-top'); + cPrevious.html(settings.textArrows.previous); + cMonth.html(settings.months[dMonth] + ' ' + dYear); + cNext.html(settings.textArrows.next); + + cPrevious.on('mouseover', mouseOver).on('mouseleave', mouseLeave).on('click', previousMonth); + cNext.on('mouseover', mouseOver).on('mouseleave', mouseLeave).on('click', nextMonth); + + cBody.append(cPrevious); + cBody.append(cMonth); + cBody.append(cNext); + var dayOfWeek = settings.firstDayOfWeek; + for (var i = 0; i < 7; i++) { + if (dayOfWeek > 6) { + dayOfWeek = 0; + } + var cWeekDay = $('').addClass('c-week-day c-pad-top'); + cWeekDay.html(settings.weekDays[dayOfWeek]); + cBody.append(cWeekDay); + dayOfWeek++; + } + var day = 1; + var dayOfNextMonth = 1; + for (var i = 0; i < 42; i++) { + var cDay = $(''); + if (i < dWeekDayOfMonthStart) { + cDay.addClass('c-day-previous-month c-pad-top'); + cDay.html(dLastDayOfPreviousMonth++); + } else if (day <= dLastDayOfMonth) { + cDay.addClass('c-day c-pad-top'); + if (day == dDay && adMonth == dMonth && adYear == dYear) { + cDay.addClass('c-today'); + } + for (var j = 0; j < settings.events.length; j++) { + var d = settings.events[j].datetime; + if (d.getDate() == day && d.getMonth() == dMonth && d.getFullYear() == dYear) { + cDay.addClass('c-event').attr('data-event-day', d.getDate()); + cDay.on('mouseover', mouseOverEvent).on('mouseleave', mouseLeaveEvent); + } + } + cDay.html(day++); + } else { + cDay.addClass('c-day-next-month c-pad-top'); + cDay.html(dayOfNextMonth++); + } + cBody.append(cDay); + } + var eventList = $('').addClass('c-event-list'); + for (var i = 0; i < settings.events.length; i++) { + var d = settings.events[i].datetime; + if (d.getMonth() == dMonth && d.getFullYear() == dYear) { + var date = lpad(d.getDate(), 2) + '/' + lpad(d.getMonth() + 1, 2) + ' ' + lpad(d.getHours(), 2) + ':' + lpad(d.getMinutes(), 2); + var item = $('').addClass('c-event-item'); + var title = $('').addClass('title').html(date + ' ' + settings.events[i].title + '<%= labelled_check_box(_('Only show future events'), "block[future_only]", "1", @block.future_only) %>
+ +<%= labelled_check_box(_('Display as a calendar'), "block[display_as_calendar]", "1", @block.display_as_calendar) %>
+ +<%= labelled_form_field _('Limit of days to display'), text_field(:block, :date_distance_limit, :size => 4) %>
-<%= labelled_form_field _('Limit of days to display'), - text_field(:block, :date_distance_limit, :size => 4) %> (<%=_('Only show events in this interval of days.')%>) diff --git a/plugins/events/lib/events_plugin.rb b/plugins/events/lib/events_plugin.rb deleted file mode 100644 index 075c65a..0000000 --- a/plugins/events/lib/events_plugin.rb +++ /dev/null @@ -1,23 +0,0 @@ -class EventsPlugin < Noosfero::Plugin - def self.plugin_name - 'EventsPlugin' - end - - def self.plugin_description - _('Adds a block that shows events in a calendar') - end - - def self.extra_blocks - { - EventsPlugin::EventsBlock => { type: [Person, Community, Enterprise] } - } - end - - def self.has_admin_url? - false - end - - def stylesheet? - true - end -end diff --git a/plugins/events/lib/events_plugin/events_block.rb b/plugins/events/lib/events_plugin/events_block.rb deleted file mode 100644 index 27e99c6..0000000 --- a/plugins/events/lib/events_plugin/events_block.rb +++ /dev/null @@ -1,45 +0,0 @@ -class EventsPlugin::EventsBlock < Block - def view_title - self.default_title - end - - def events - owner.events - end - - def extra_option - { } - end - - def self.description - _('Shows events in a calendar.') - end - - def help - _('This block shows events in a calendar.') - end - - def default_title - _('Events Calendar') - end - - def api_content - content = [] - events.each do |event| - content << { title: event.title, id: event.id, date: event.start_date } - end - { events: content } - end - - def display_api_content_by_default? - false - end - - def timeout - 4.hours - end - - def self.expire_on - { profile: [:article] } - end -end diff --git a/plugins/events/public/jquery.e-calendar.js b/plugins/events/public/jquery.e-calendar.js deleted file mode 100644 index cbecdc2..0000000 --- a/plugins/events/public/jquery.e-calendar.js +++ /dev/null @@ -1,194 +0,0 @@ -/** - * @license e-Calendar v0.9.3 - * (c) 2014-2016 - Jhonis de Souza - * License: GNU - */ - -(function ($) { - - var eCalendar = function (options, object) { - // Initializing global variables - var adDay = new Date().getDate(); - var adMonth = new Date().getMonth(); - var adYear = new Date().getFullYear(); - var dDay = adDay; - var dMonth = adMonth; - var dYear = adYear; - var instance = object; - - var settings = $.extend({}, $.fn.eCalendar.defaults, options); - - function lpad(value, length, pad) { - if (typeof pad == 'undefined') { - pad = '0'; - } - var p; - for (var i = 0; i < length; i++) { - p += pad; - } - return (p + value).slice(-length); - } - - var mouseOver = function () { - $(this).addClass('c-nav-btn-over'); - }; - var mouseLeave = function () { - $(this).removeClass('c-nav-btn-over'); - }; - var mouseOverEvent = function () { - $(this).addClass('c-event-over'); - var d = $(this).attr('data-event-day'); - $('div.c-event-item[data-event-day="' + d + '"]').addClass('c-event-over'); - }; - var mouseLeaveEvent = function () { - $(this).removeClass('c-event-over') - var d = $(this).attr('data-event-day'); - $('div.c-event-item[data-event-day="' + d + '"]').removeClass('c-event-over'); - }; - var mouseOverItem = function () { - $(this).addClass('c-event-over'); - var d = $(this).attr('data-event-day'); - $('div.c-event[data-event-day="' + d + '"]').addClass('c-event-over'); - }; - var mouseLeaveItem = function () { - $(this).removeClass('c-event-over') - var d = $(this).attr('data-event-day'); - $('div.c-event[data-event-day="' + d + '"]').removeClass('c-event-over'); - }; - var nextMonth = function () { - if (dMonth < 11) { - dMonth++; - } else { - dMonth = 0; - dYear++; - } - print(); - }; - var previousMonth = function () { - if (dMonth > 0) { - dMonth--; - } else { - dMonth = 11; - dYear--; - } - print(); - }; - - function loadEvents() { - if (typeof settings.url != 'undefined' && settings.url != '') { - $.ajax({url: settings.url, - async: false, - success: function (result) { - settings.events = result; - } - }); - } - } - - function print() { - loadEvents(); - var dWeekDayOfMonthStart = new Date(dYear, dMonth, 1).getDay() - settings.firstDayOfWeek; - if (dWeekDayOfMonthStart < 0) { - dWeekDayOfMonthStart = 6 - ((dWeekDayOfMonthStart + 1) * -1); - } - var dLastDayOfMonth = new Date(dYear, dMonth + 1, 0).getDate(); - var dLastDayOfPreviousMonth = new Date(dYear, dMonth + 1, 0).getDate() - dWeekDayOfMonthStart + 1; - - var cBody = $('').addClass('c-grid'); - var cEvents = $('').addClass('c-event-grid'); - var cEventsBody = $('').addClass('c-event-body'); - cEvents.append($('').addClass('c-event-title c-pad-top').html(settings.eventTitle)); - cEvents.append(cEventsBody); - var cNext = $('').addClass('c-next c-grid-title c-pad-top'); - var cMonth = $('').addClass('c-month c-grid-title c-pad-top'); - var cPrevious = $('').addClass('c-previous c-grid-title c-pad-top'); - cPrevious.html(settings.textArrows.previous); - cMonth.html(settings.months[dMonth] + ' ' + dYear); - cNext.html(settings.textArrows.next); - - cPrevious.on('mouseover', mouseOver).on('mouseleave', mouseLeave).on('click', previousMonth); - cNext.on('mouseover', mouseOver).on('mouseleave', mouseLeave).on('click', nextMonth); - - cBody.append(cPrevious); - cBody.append(cMonth); - cBody.append(cNext); - var dayOfWeek = settings.firstDayOfWeek; - for (var i = 0; i < 7; i++) { - if (dayOfWeek > 6) { - dayOfWeek = 0; - } - var cWeekDay = $('').addClass('c-week-day c-pad-top'); - cWeekDay.html(settings.weekDays[dayOfWeek]); - cBody.append(cWeekDay); - dayOfWeek++; - } - var day = 1; - var dayOfNextMonth = 1; - for (var i = 0; i < 42; i++) { - var cDay = $(''); - if (i < dWeekDayOfMonthStart) { - cDay.addClass('c-day-previous-month c-pad-top'); - cDay.html(dLastDayOfPreviousMonth++); - } else if (day <= dLastDayOfMonth) { - cDay.addClass('c-day c-pad-top'); - if (day == dDay && adMonth == dMonth && adYear == dYear) { - cDay.addClass('c-today'); - } - for (var j = 0; j < settings.events.length; j++) { - var d = settings.events[j].datetime; - if (d.getDate() == day && d.getMonth() == dMonth && d.getFullYear() == dYear) { - cDay.addClass('c-event').attr('data-event-day', d.getDate()); - cDay.on('mouseover', mouseOverEvent).on('mouseleave', mouseLeaveEvent); - } - } - cDay.html(day++); - } else { - cDay.addClass('c-day-next-month c-pad-top'); - cDay.html(dayOfNextMonth++); - } - cBody.append(cDay); - } - var eventList = $('').addClass('c-event-list'); - for (var i = 0; i < settings.events.length; i++) { - var d = settings.events[i].datetime; - if (d.getMonth() == dMonth && d.getFullYear() == dYear) { - var date = lpad(d.getDate(), 2) + '/' + lpad(d.getMonth() + 1, 2) + ' ' + lpad(d.getHours(), 2) + ':' + lpad(d.getMinutes(), 2); - var item = $('').addClass('c-event-item'); - var title = $('').addClass('title').html(date + ' ' + settings.events[i].title + '