social_stream-events 1.1.1 → 2.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/app/assets/javascripts/social_stream/calendar.js.erb +135 -0
- data/app/assets/javascripts/social_stream/event.js +44 -0
- data/app/assets/javascripts/social_stream/events.action.js +36 -0
- data/app/assets/javascripts/social_stream/events.poster.js +23 -0
- data/app/assets/javascripts/social_stream/events.timeline.js +6 -0
- data/app/assets/javascripts/social_stream/fullcalendar.js +135 -0
- data/app/assets/javascripts/social_stream-events.js +1 -1
- data/app/assets/stylesheets/social_stream/events/calendar/_calendar.css.sass +63 -0
- data/app/assets/stylesheets/social_stream/events/calendar/_calendar_modal.css.sass +15 -0
- data/app/assets/stylesheets/social_stream/events/calendar/_calendar_sidebar.css.sass +50 -0
- data/app/assets/stylesheets/social_stream/events/calendar/layout/_calendar.css.sass +28 -0
- data/app/assets/stylesheets/social_stream/events/calendar/layout/_calendar_modal.css.sass +60 -0
- data/app/assets/stylesheets/social_stream/events/calendar/layout/_calendar_sidebar.css.sass +26 -0
- data/app/assets/stylesheets/social_stream/events/explore/layout/_explore_timeline_events.css.sass +6 -0
- data/app/assets/stylesheets/social_stream/events/header_nav/layout/_header_nav_events.css.sass +2 -0
- data/app/assets/stylesheets/social_stream/events/repository/_repository.css.sass +16 -0
- data/app/assets/stylesheets/social_stream/events/repository/layout/_repository.css.sass +24 -0
- data/app/assets/stylesheets/social_stream/events/responsive/_responsive-1200px-min.css.sass +34 -0
- data/app/assets/stylesheets/social_stream/events/responsive/_responsive-767px-max.css.sass +77 -0
- data/app/assets/stylesheets/social_stream/events/responsive/_responsive-768px-979px.css.sass +32 -0
- data/app/assets/stylesheets/social_stream/events/timeline/_timeline_events.css.sass +66 -0
- data/app/assets/stylesheets/social_stream/events/timeline/layout/_timeline_events.css.sass +70 -0
- data/app/assets/stylesheets/social_stream-events.css.sass +42 -0
- data/app/helpers/events_helper.rb +12 -1
- data/app/models/event.rb +7 -9
- data/app/overrides/layouts/_header_signed_in/icon_nav.html.erb.deface +8 -0
- data/app/overrides/settings/_index/add_rooms.html.erb.deface +6 -0
- data/app/overrides/sidebar/_show/add_calendar.html.erb.deface +5 -0
- data/app/views/events/_calendar_month.erb +3 -1
- data/app/views/events/{_event_date.html.erb → _date.html.erb} +5 -8
- data/app/views/events/{_event_date_sidebar.html.erb → _date_sidebar.html.erb} +4 -4
- data/app/views/events/{_event_details.html.erb → _details.html.erb} +11 -8
- data/app/views/events/_event.html.erb +17 -9
- data/app/views/events/_event_sidebar.html.erb +3 -3
- data/app/views/events/_form_poster.html.erb +2 -2
- data/app/views/events/_new.html.erb +11 -20
- data/app/views/events/_poster.html.erb +13 -0
- data/app/views/events/_quick_search_result.html.erb +1 -0
- data/app/views/events/_search_result.html.erb +1 -0
- data/app/views/events/_timeline.html.erb +8 -0
- data/app/views/events/create.js.erb +4 -16
- data/app/views/events/edit.js.erb +2 -2
- data/app/views/events/index.html.erb +23 -91
- data/app/views/events/index.js.erb +1 -1
- data/app/views/rooms/_form.html.erb +11 -16
- data/app/views/rooms/_index.html.erb +3 -7
- data/app/views/settings/_rooms.html.erb +11 -0
- data/app/views/sidebar/_calendar.html.erb +48 -0
- data/config/locales/en.yml +6 -0
- data/config/locales/es.yml +6 -0
- data/lib/generators/social_stream/events/install_generator.rb +2 -3
- data/lib/social_stream/events/engine.rb +0 -12
- data/lib/social_stream/events/version.rb +1 -1
- data/lib/social_stream-events.rb +3 -12
- data/lib/tasks/db/populate.rake +44 -0
- data/social_stream-events.gemspec +2 -2
- data/spec/controllers/events_controller_spec.rb +20 -0
- data/spec/views/settings_spec.rb +39 -0
- metadata +69 -44
- data/app/assets/javascripts/social_stream.calendar.js.erb +0 -104
- data/app/assets/javascripts/social_stream.event.js +0 -55
- data/app/assets/javascripts/social_stream.events.action.js +0 -31
- data/app/assets/javascripts/social_stream.events.poster.js +0 -22
- data/app/assets/stylesheets/events.css.scss +0 -218
- data/app/assets/stylesheets/social_stream-events.css +0 -3
- data/app/decorators/social_stream/base/document_decorator.rb +0 -3
- data/app/models/activity_object_property/poster.rb +0 -2
- data/app/views/events/_event_poster.html.erb +0 -9
- data/app/views/events/_sidebar_calendar.html.erb +0 -45
- data/app/views/rooms/_settings.html.erb +0 -23
- data/lib/social_stream/events/models/document.rb +0 -26
- data/lib/social_stream/views/settings/events.rb +0 -18
- data/lib/social_stream/views/sidebar/events.rb +0 -17
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4987018b8e4381997ef90ed050e02372997d8053
|
4
|
+
data.tar.gz: 94fb6cb287d1ec59d53f8a08e8e4c4acaded1542
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 26a6ca8444a54b5417e77c47fbfe96561de78196425295ac2584b6e852e6f1f83dbd31007e9450672f013f96209eba4f35ff8dade130c84f5307710d4ca373af
|
7
|
+
data.tar.gz: ae173bef7a68e5c34a66848ad84412027ee325e66bad1a9be6746ec40f88f887022fd20044686a08f7a9c32f44545a5a254e6fb58853fd1b9be31818c87baaf6
|
@@ -0,0 +1,135 @@
|
|
1
|
+
//= require jquery.tipsy
|
2
|
+
|
3
|
+
SocialStream.Calendar = (function(SS, $, undefined){
|
4
|
+
var eventsPath;
|
5
|
+
|
6
|
+
var element = function(){
|
7
|
+
return $("#sidebar_calendar");
|
8
|
+
}
|
9
|
+
var eventElementRegExp = new RegExp('day_(..?)_(..?)_(..?.?.?)');
|
10
|
+
|
11
|
+
var eventElementMatch = function(el){
|
12
|
+
return eventElementRegExp.exec($(el).attr('id'));
|
13
|
+
}
|
14
|
+
|
15
|
+
var eventElementDate = function(el) {
|
16
|
+
var m = eventElementMatch(el);
|
17
|
+
|
18
|
+
if(m == null) return;
|
19
|
+
|
20
|
+
return new Date(m[3], (m[2]-1), m[1], 23, 59, 59);
|
21
|
+
}
|
22
|
+
|
23
|
+
var eventElement = function(date) {
|
24
|
+
return $('#day_' + date.getDate() + '_' + (date.getMonth()+1) + '_' + date.getFullYear())
|
25
|
+
}
|
26
|
+
|
27
|
+
var show = function(){
|
28
|
+
var cal = $('#sidebar_calendar');
|
29
|
+
var calStart = cal.attr('data-start');
|
30
|
+
var calEnd = cal.attr('data-end');
|
31
|
+
eventsPath = cal.attr('data-path');
|
32
|
+
|
33
|
+
var now = new Date();
|
34
|
+
|
35
|
+
eventElement(now).addClass('today');
|
36
|
+
|
37
|
+
|
38
|
+
cal.find('#days td').each(function(index, domEl){
|
39
|
+
var d = eventElementDate(domEl)
|
40
|
+
|
41
|
+
if(d < now) $(domEl).addClass('past');
|
42
|
+
if(d.getMonth() != now.getMonth() && d > now) $(domEl).addClass('next_month');
|
43
|
+
});
|
44
|
+
|
45
|
+
$.ajax({
|
46
|
+
dataType: 'json',
|
47
|
+
cache: false,
|
48
|
+
url: eventsPath,
|
49
|
+
data: {
|
50
|
+
start: calStart,
|
51
|
+
end: calEnd
|
52
|
+
},
|
53
|
+
|
54
|
+
success: initBusyEvents
|
55
|
+
});
|
56
|
+
}
|
57
|
+
|
58
|
+
var initBusyEvents = function(events) {
|
59
|
+
$.each(events, function(i, event) {
|
60
|
+
var start = new Date(event.start); // This applies TZ
|
61
|
+
var end = new Date(event.end);
|
62
|
+
|
63
|
+
for(loopTime=start.getTime(); loopTime <= end.getTime(); loopTime+=86400000) {
|
64
|
+
var d = new Date(loopTime);
|
65
|
+
var domEl = eventElement(d);
|
66
|
+
|
67
|
+
domEl.addClass("busy");
|
68
|
+
}
|
69
|
+
|
70
|
+
element().find('.busy').click(function(e) {
|
71
|
+
e.preventDefault();
|
72
|
+
|
73
|
+
showBusyModal($(this));
|
74
|
+
});
|
75
|
+
})
|
76
|
+
}
|
77
|
+
|
78
|
+
var showBusyModal = function(el) {
|
79
|
+
if (! el.attr('data-loaded')) {
|
80
|
+
createBusyModal(el);
|
81
|
+
}
|
82
|
+
|
83
|
+
$('#modal-' + el.attr('id')).modal('show');
|
84
|
+
};
|
85
|
+
|
86
|
+
var createBusyModal = function(el) {
|
87
|
+
var modal = $('#modal-sidebar_calendar').clone();
|
88
|
+
|
89
|
+
modal.attr('id', 'modal-' + el.attr('id'));
|
90
|
+
modal.find(".modal-header h3").html(busyTitle(el));
|
91
|
+
modal.find("button.view-calendar").click(function() {
|
92
|
+
document.location.href = el.find('a').attr('href');
|
93
|
+
});
|
94
|
+
|
95
|
+
loadBusyContent(el);
|
96
|
+
|
97
|
+
modal.appendTo($('body'));
|
98
|
+
|
99
|
+
modal.modal();
|
100
|
+
|
101
|
+
el.attr('data-loaded', true);
|
102
|
+
};
|
103
|
+
|
104
|
+
var busyTitle = function(el){
|
105
|
+
var date = eventElementDate(el);
|
106
|
+
|
107
|
+
return I18n.t('event.popover.title', { date: I18n.l('date.formats.long', date) } );
|
108
|
+
};
|
109
|
+
|
110
|
+
var loadBusyContent = function(el){
|
111
|
+
var startDate = eventElementDate(el)
|
112
|
+
startDate.setHours(0);
|
113
|
+
startDate.setMinutes(0);
|
114
|
+
startDate.setSeconds(0);
|
115
|
+
var endDate = eventElementDate(el)
|
116
|
+
|
117
|
+
$.ajax({
|
118
|
+
dataType: "script",
|
119
|
+
url: eventsPath,
|
120
|
+
data: {
|
121
|
+
// use UNIX timestamps
|
122
|
+
start: Math.round(startDate.getTime() / 1000),
|
123
|
+
end: Math.round(endDate.getTime() / 1000),
|
124
|
+
day: el.attr('id')
|
125
|
+
}
|
126
|
+
});
|
127
|
+
}
|
128
|
+
|
129
|
+
return {
|
130
|
+
show: show,
|
131
|
+
element: element,
|
132
|
+
eventElement: eventElement
|
133
|
+
}
|
134
|
+
|
135
|
+
})(SocialStream, jQuery);
|
@@ -0,0 +1,44 @@
|
|
1
|
+
//= require social_stream/callback
|
2
|
+
//= require social_stream/events.poster
|
3
|
+
|
4
|
+
SocialStream.Event = (function(SS, $, undefined) {
|
5
|
+
var callback = new SS.Callback();
|
6
|
+
|
7
|
+
var color = function(){
|
8
|
+
return SS.Events.current.eventColor;
|
9
|
+
};
|
10
|
+
|
11
|
+
var fixDates = function(){
|
12
|
+
$(".event").each(function(){
|
13
|
+
dateString = $(this).find("time").attr("datetime");
|
14
|
+
|
15
|
+
date = new Date(dateString);
|
16
|
+
|
17
|
+
var dayEl = $(this).find(".event .day");
|
18
|
+
if (dayEl.length) {
|
19
|
+
dayEl.text($.datepicker.formatDate('d', date));
|
20
|
+
}
|
21
|
+
|
22
|
+
var monthEl = $(this).find(".event .month");
|
23
|
+
if (monthEl.length) {
|
24
|
+
monthEl.text($.datepicker.formatDate('M', date));
|
25
|
+
}
|
26
|
+
|
27
|
+
var hourEl = $(this).find(".event .hour");
|
28
|
+
if(hourEl.length) {
|
29
|
+
var minutes = date.getMinutes();
|
30
|
+
if (minutes<10) minutes = "0" + minutes;
|
31
|
+
hourEl.text(date.getHours() + ':' + minutes);
|
32
|
+
}
|
33
|
+
});
|
34
|
+
};
|
35
|
+
|
36
|
+
callback.register('index',
|
37
|
+
fixDates,
|
38
|
+
SocialStream.Events.Poster.show);
|
39
|
+
|
40
|
+
return callback.extend({
|
41
|
+
color: color,
|
42
|
+
});
|
43
|
+
|
44
|
+
})(SocialStream, jQuery);
|
@@ -0,0 +1,36 @@
|
|
1
|
+
//= require social_stream/action
|
2
|
+
|
3
|
+
SocialStream.Events.Action = (function(SS, $, undefined){
|
4
|
+
var animateCalendar = function(action) {
|
5
|
+
if (action.activity_object.type != "Event") {
|
6
|
+
return;
|
7
|
+
}
|
8
|
+
|
9
|
+
if (!action.follow) {
|
10
|
+
return;
|
11
|
+
}
|
12
|
+
|
13
|
+
var el = SS.Action.followForms(action).closest(".event");
|
14
|
+
var eventDate = new Date(el.find("time").attr('datetime'));
|
15
|
+
|
16
|
+
var calEl = SS.Calendar.eventElement(eventDate);
|
17
|
+
|
18
|
+
if (calEl.length === 0) {
|
19
|
+
calEl = SS.Calendar.element();
|
20
|
+
}
|
21
|
+
|
22
|
+
if (action.follow.following) {
|
23
|
+
el.find('.poster').effect("transfer", {to: calEl});
|
24
|
+
calEl.addClass("busy");
|
25
|
+
} else {
|
26
|
+
calEl.effect("transfer", {to: el.find('.poster')});
|
27
|
+
calEl.effect("pulsate");
|
28
|
+
}
|
29
|
+
};
|
30
|
+
|
31
|
+
SS.Action.callbackRegister('update', animateCalendar);
|
32
|
+
|
33
|
+
return {
|
34
|
+
};
|
35
|
+
|
36
|
+
})(SocialStream, jQuery);
|
@@ -0,0 +1,23 @@
|
|
1
|
+
//= require social_stream/callback
|
2
|
+
|
3
|
+
SocialStream.Events.Poster = (function(SS, $, undefined){
|
4
|
+
var callback = new SS.Callback();
|
5
|
+
|
6
|
+
var init = function(){
|
7
|
+
$('.event .poster .update').hide();
|
8
|
+
|
9
|
+
$('.event .poster').hover(
|
10
|
+
function(){
|
11
|
+
$(this).find(".update").fadeIn("slow");
|
12
|
+
},
|
13
|
+
function(){
|
14
|
+
$(this).find(".update").fadeOut("slow");
|
15
|
+
});
|
16
|
+
};
|
17
|
+
|
18
|
+
callback.register('show', init);
|
19
|
+
|
20
|
+
return callback.extend({
|
21
|
+
});
|
22
|
+
|
23
|
+
})(SocialStream, jQuery);
|
@@ -0,0 +1,135 @@
|
|
1
|
+
//= require social_stream/callback
|
2
|
+
//= require social_stream/object
|
3
|
+
|
4
|
+
SocialStream.FullCalendar = (function(SS, $, Scheduler, undefined){
|
5
|
+
var callback = new SS.Callback(),
|
6
|
+
current,
|
7
|
+
eventColor = 'gray';
|
8
|
+
|
9
|
+
var getCurrent = function() {
|
10
|
+
return current;
|
11
|
+
};
|
12
|
+
|
13
|
+
var getCalendarEl = function() {
|
14
|
+
return $('#calendar');
|
15
|
+
};
|
16
|
+
|
17
|
+
var getFormEl = function() {
|
18
|
+
return $('#calendar_form');
|
19
|
+
};
|
20
|
+
|
21
|
+
var initFullCalendar = function() {
|
22
|
+
var calendar = getCalendarEl();
|
23
|
+
|
24
|
+
var options = {
|
25
|
+
header: {
|
26
|
+
left: 'prev,next today',
|
27
|
+
center: 'title',
|
28
|
+
right: 'month,agendaWeek,agendaDay'
|
29
|
+
},
|
30
|
+
ignoreTimezone: false,
|
31
|
+
firstDay: 1,
|
32
|
+
eventColor: eventColor,
|
33
|
+
events: getEvents
|
34
|
+
};
|
35
|
+
|
36
|
+
if (calendar.attr('data-can-create')) {
|
37
|
+
$.extend(options, {
|
38
|
+
selectable: true,
|
39
|
+
selectHelper: true,
|
40
|
+
select: selectEvent
|
41
|
+
// Implement event edition
|
42
|
+
// editable: true,
|
43
|
+
});
|
44
|
+
}
|
45
|
+
|
46
|
+
current = calendar.fullCalendar(options);
|
47
|
+
|
48
|
+
// Hack for Fullcalendar + Twitter Bootstrap, see https://github.com/addyosmani/jquery-ui-bootstrap/issues/37
|
49
|
+
$('.fc-button-content').each(function() {
|
50
|
+
$(this).parent().parent().html($(this).html());
|
51
|
+
});
|
52
|
+
|
53
|
+
if (calendar.attr('data-date'))
|
54
|
+
// TODO: optimize this to save one index call
|
55
|
+
current.fullCalendar('gotoDate', new Date(calendar.attr('data-date') * 1000));
|
56
|
+
|
57
|
+
if (calendar.attr('data-view'))
|
58
|
+
current.fullCalendar('changeView', calendar.attr('data-view'));
|
59
|
+
};
|
60
|
+
|
61
|
+
var initFormModal = function() {
|
62
|
+
getFormEl().modal({
|
63
|
+
show: false
|
64
|
+
});
|
65
|
+
};
|
66
|
+
|
67
|
+
var selectEvent = function(startDate, endDate, allDay, jsEvent){
|
68
|
+
var c = getFormEl().find('.new_event');
|
69
|
+
|
70
|
+
c.children('#event_start_at').val(startDate.toJSON());
|
71
|
+
c.children('#event_end_at').val(endDate.toJSON());
|
72
|
+
c.children('#event_all_day').val(allDay.toString());
|
73
|
+
|
74
|
+
// From rails-scheduler gem
|
75
|
+
Scheduler.form.init(c.find('.scheduler_form'), startDate);
|
76
|
+
|
77
|
+
getFormEl().modal('show');
|
78
|
+
};
|
79
|
+
|
80
|
+
var getEvents = function(start, end, callback) {
|
81
|
+
$.ajax({
|
82
|
+
url: getCalendarEl().attr('data-events-path'),
|
83
|
+
dataType: 'json',
|
84
|
+
data: {
|
85
|
+
// our hypothetical feed requires UNIX timestamps
|
86
|
+
start: Math.round(start.getTime() / 1000),
|
87
|
+
end: Math.round(end.getTime() / 1000)
|
88
|
+
},
|
89
|
+
success: function(events) {
|
90
|
+
callback(
|
91
|
+
$.map(events, function(event) {
|
92
|
+
event.color = eventColor;
|
93
|
+
return event;
|
94
|
+
})
|
95
|
+
);
|
96
|
+
}
|
97
|
+
});
|
98
|
+
};
|
99
|
+
|
100
|
+
var addEvent = function(options) {
|
101
|
+
getFormEl().modal('hide');
|
102
|
+
|
103
|
+
$.each(JSON.parse(options.events), function(i, ev) {
|
104
|
+
ev.color = eventColor;
|
105
|
+
current.fullCalendar('renderEvent', ev,
|
106
|
+
true // make the event "stick"
|
107
|
+
);
|
108
|
+
});
|
109
|
+
|
110
|
+
current.fullCalendar('unselect');
|
111
|
+
};
|
112
|
+
|
113
|
+
var resetForm = function() {
|
114
|
+
var form = getFormEl();
|
115
|
+
form.find('#event_title').val('');
|
116
|
+
form.find('#event_description').val('');
|
117
|
+
|
118
|
+
Scheduler.form.reset(form.find('.scheduler_form'));
|
119
|
+
};
|
120
|
+
|
121
|
+
callback.register('show',
|
122
|
+
initFullCalendar,
|
123
|
+
initFormModal,
|
124
|
+
SS.Object.new_);
|
125
|
+
|
126
|
+
callback.register('create',
|
127
|
+
addEvent,
|
128
|
+
resetForm);
|
129
|
+
|
130
|
+
return callback.extend({
|
131
|
+
current: getCurrent,
|
132
|
+
getFormEl: getFormEl
|
133
|
+
});
|
134
|
+
|
135
|
+
})(SocialStream, jQuery, Scheduler);
|
@@ -0,0 +1,63 @@
|
|
1
|
+
@import "fullcalendar"
|
2
|
+
|
3
|
+
#calendar
|
4
|
+
.fc-button.fc-state-default
|
5
|
+
@include btn-primary
|
6
|
+
color: $blue
|
7
|
+
@include border-radius(0)
|
8
|
+
|
9
|
+
.fc-button.fc-state-active
|
10
|
+
@include btn-secundary
|
11
|
+
color: $white
|
12
|
+
.fc-button.fc-state-disabled
|
13
|
+
@include btn-primary
|
14
|
+
background-color: $blue
|
15
|
+
color: $white
|
16
|
+
|
17
|
+
.fc-button.fc-state-disabled:active
|
18
|
+
@include box-shadow(none)
|
19
|
+
|
20
|
+
.fc-button.fc-corner-left
|
21
|
+
@include border-top-left-radius (4px)
|
22
|
+
@include border-bottom-left-radius (4px)
|
23
|
+
|
24
|
+
.fc-button.fc-corner-right
|
25
|
+
// .btn-group > .btn:last-child, .btn-group > .dropdown-toggle
|
26
|
+
@include border-top-right-radius (4px)
|
27
|
+
@include border-bottom-right-radius (4px)
|
28
|
+
|
29
|
+
.fc-event-inner
|
30
|
+
background-color: $gray
|
31
|
+
|
32
|
+
.fc-event-inner,
|
33
|
+
.fc-other-month
|
34
|
+
@include opacity (80)
|
35
|
+
|
36
|
+
.fc-day-number
|
37
|
+
pointer: pointer
|
38
|
+
|
39
|
+
.fc-header-right,
|
40
|
+
.fc-header-left,
|
41
|
+
.fc-header-center
|
42
|
+
vertical-align: middle
|
43
|
+
text-align: center
|
44
|
+
|
45
|
+
.fc-header-right,
|
46
|
+
.fc-header-left
|
47
|
+
background-color: whitesmoke
|
48
|
+
.fc-header-right
|
49
|
+
.fc-header-title
|
50
|
+
h2
|
51
|
+
line-height: 32px
|
52
|
+
|
53
|
+
|
54
|
+
.fc-widget-header
|
55
|
+
background: whitesmoke
|
56
|
+
|
57
|
+
.fc-event-skin
|
58
|
+
background-color: $gray
|
59
|
+
|
60
|
+
|
61
|
+
#calendar_form
|
62
|
+
.modal-body
|
63
|
+
background: whitesmoke
|
@@ -0,0 +1,50 @@
|
|
1
|
+
@import "fullcalendar"
|
2
|
+
|
3
|
+
|
4
|
+
#month_top,
|
5
|
+
#month_bottom
|
6
|
+
text-align: center
|
7
|
+
|
8
|
+
|
9
|
+
#month_top
|
10
|
+
border-bottom: 1px solid #dbdbdb
|
11
|
+
|
12
|
+
|
13
|
+
#month_bottom
|
14
|
+
border-top: 1px solid #dbdbdb
|
15
|
+
|
16
|
+
|
17
|
+
#month_top.past
|
18
|
+
@include opacity (70)
|
19
|
+
|
20
|
+
|
21
|
+
#days
|
22
|
+
tbody
|
23
|
+
tr
|
24
|
+
td
|
25
|
+
text-align: right
|
26
|
+
a
|
27
|
+
color: $gray
|
28
|
+
text-decoration: none
|
29
|
+
.today
|
30
|
+
@include border-radius(15px)
|
31
|
+
border: 1px solid $blue !important
|
32
|
+
a
|
33
|
+
color: $blue
|
34
|
+
.busy
|
35
|
+
font-weight: bold
|
36
|
+
@include border-radius(5px)
|
37
|
+
border: 1px solid #c4c4c4
|
38
|
+
background-color: $white
|
39
|
+
.past
|
40
|
+
@include opacity (70)
|
41
|
+
.other_month
|
42
|
+
@include opacity (70)
|
43
|
+
|
44
|
+
.fc-content
|
45
|
+
.fc-cell-overlay,
|
46
|
+
@include opacity (40)
|
47
|
+
color: $blue
|
48
|
+
|
49
|
+
.fc-state-highlight
|
50
|
+
background-color: rgba(4,156,219,0.2)
|
@@ -0,0 +1,28 @@
|
|
1
|
+
@import "fullcalendar"
|
2
|
+
|
3
|
+
#calendar
|
4
|
+
.fc-button.fc-state-default
|
5
|
+
position: relative
|
6
|
+
|
7
|
+
.fc-button.fc-corner-left
|
8
|
+
// .btn-group > .btn:first-child
|
9
|
+
margin-left: 0
|
10
|
+
|
11
|
+
|
12
|
+
.fc-day-number
|
13
|
+
float: right
|
14
|
+
padding: 1px 3px 0 0
|
15
|
+
min-height: 89px
|
16
|
+
|
17
|
+
.fc-header-right,
|
18
|
+
.fc-header-left,
|
19
|
+
.fc-header-center
|
20
|
+
padding: 0 0 6px 6px
|
21
|
+
|
22
|
+
.fc-header-right
|
23
|
+
padding-right: 6px
|
24
|
+
|
25
|
+
.fc-header-title
|
26
|
+
margin-top: 13px
|
27
|
+
.btn
|
28
|
+
margin-right: 6px
|
@@ -0,0 +1,60 @@
|
|
1
|
+
#new_event
|
2
|
+
textarea,
|
3
|
+
height: 100px
|
4
|
+
width: 97%
|
5
|
+
|
6
|
+
#event_title
|
7
|
+
width: 97%
|
8
|
+
|
9
|
+
#scheduler-options
|
10
|
+
display: inline-table
|
11
|
+
input
|
12
|
+
padding: 0 9px 0 7px
|
13
|
+
width: auto
|
14
|
+
margin-left: 6px
|
15
|
+
|
16
|
+
#event_frequency
|
17
|
+
float: left
|
18
|
+
margin-right: 11px
|
19
|
+
|
20
|
+
#event_week_day_order,
|
21
|
+
#event_week_day,
|
22
|
+
#event_frequency
|
23
|
+
width: 95px !important
|
24
|
+
display: inline-block
|
25
|
+
margin-left: 6px
|
26
|
+
|
27
|
+
.scheduler_form
|
28
|
+
input
|
29
|
+
&[type="submit"]
|
30
|
+
float: right
|
31
|
+
margin-top: 20px
|
32
|
+
|
33
|
+
#scheduler-weekly-week,
|
34
|
+
#scheduler-frequency-3
|
35
|
+
input
|
36
|
+
&[type="number"]
|
37
|
+
width: 25px !important
|
38
|
+
margin-top: 3px
|
39
|
+
|
40
|
+
|
41
|
+
#scheduler-frequency-3
|
42
|
+
display: inline-table
|
43
|
+
float: left
|
44
|
+
|
45
|
+
#scheduler-weekly-days
|
46
|
+
margin-left: 42px
|
47
|
+
padding: 6px
|
48
|
+
margin-top: 1px
|
49
|
+
|
50
|
+
|
51
|
+
#event_week_days_0
|
52
|
+
margin-left: 0px
|
53
|
+
|
54
|
+
#event_week_days_1,
|
55
|
+
#event_week_days_2,
|
56
|
+
#event_week_days_3,
|
57
|
+
#event_week_days_4,
|
58
|
+
#event_week_days_5,
|
59
|
+
#event_week_days_6
|
60
|
+
margin-left: 4px
|
@@ -0,0 +1,26 @@
|
|
1
|
+
@import "fullcalendar"
|
2
|
+
|
3
|
+
#events
|
4
|
+
#toolbar
|
5
|
+
display: none
|
6
|
+
|
7
|
+
#sidebar
|
8
|
+
.calendar
|
9
|
+
padding: 2%
|
10
|
+
display: block
|
11
|
+
|
12
|
+
#month_top,
|
13
|
+
#month_bottom
|
14
|
+
padding: 2%
|
15
|
+
|
16
|
+
|
17
|
+
#days
|
18
|
+
margin: 0 auto
|
19
|
+
padding: 2.5%
|
20
|
+
width: 100%
|
21
|
+
tbody
|
22
|
+
width: 100%
|
23
|
+
tr
|
24
|
+
td
|
25
|
+
padding-left: 2.5%
|
26
|
+
padding-right: 2.5%
|
@@ -0,0 +1,24 @@
|
|
1
|
+
/////////////////////////////////////// EXPLORE SEARCH
|
2
|
+
/////////////
|
3
|
+
|
4
|
+
#repository
|
5
|
+
.event
|
6
|
+
width: 240px
|
7
|
+
float: left
|
8
|
+
margin-left: 19px
|
9
|
+
min-height: 81px
|
10
|
+
margin-bottom: 14px
|
11
|
+
.avatar
|
12
|
+
float: left
|
13
|
+
min-height: 55px
|
14
|
+
a
|
15
|
+
.icon_50-event
|
16
|
+
@include size (53px, 50px)
|
17
|
+
background-image: url("icons/files_ico-50.png")
|
18
|
+
.data
|
19
|
+
.name
|
20
|
+
margin-top: 11px
|
21
|
+
@include ellipsis
|
22
|
+
width: 73%
|
23
|
+
.date
|
24
|
+
font-size: 11px
|