vkhater-social_stream-events 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. data/.gitignore +10 -0
  2. data/Gemfile +5 -0
  3. data/README.rdoc +3 -0
  4. data/Rakefile +26 -0
  5. data/app/assets/javascripts/0_init.js +4 -0
  6. data/app/assets/javascripts/events.js.coffee +66 -0
  7. data/app/assets/javascripts/social_stream-events.js +1 -0
  8. data/app/assets/stylesheets/events.css.scss +66 -0
  9. data/app/assets/stylesheets/social_stream-events.css +3 -0
  10. data/app/controllers/events_controller.rb +40 -0
  11. data/app/controllers/rooms_controller.rb +7 -0
  12. data/app/helpers/events_helper.rb +16 -0
  13. data/app/models/event.rb +53 -0
  14. data/app/models/room.rb +8 -0
  15. data/app/views/events/_calendar_month.erb +1 -0
  16. data/app/views/events/_event.html.erb +1 -0
  17. data/app/views/events/_new.html.erb +40 -0
  18. data/app/views/events/_sidebar_calendar.html.erb +34 -0
  19. data/app/views/events/create.js.erb +21 -0
  20. data/app/views/events/destroy.js.erb +1 -0
  21. data/app/views/events/index.html.erb +99 -0
  22. data/app/views/rooms/_form.html.erb +31 -0
  23. data/app/views/rooms/_index.html.erb +10 -0
  24. data/app/views/rooms/_settings.html.erb +23 -0
  25. data/app/views/rooms/create.js.erb +7 -0
  26. data/app/views/rooms/destroy.js.erb +1 -0
  27. data/config/locales/en.yml +35 -0
  28. data/config/locales/es.yml +35 -0
  29. data/config/routes.rb +3 -0
  30. data/db/migrate/20111101193523_create_events.rb +13 -0
  31. data/db/migrate/20111120104349_create_rooms.rb +26 -0
  32. data/db/migrate/20111204155637_add_scheduler.rb +33 -0
  33. data/db/migrate/20111218203314_change_scheduler.rb +11 -0
  34. data/lib/generators/social_stream/events/install_generator.rb +24 -0
  35. data/lib/social_stream-events.rb +27 -0
  36. data/lib/social_stream/events/ability.rb +13 -0
  37. data/lib/social_stream/events/engine.rb +29 -0
  38. data/lib/social_stream/events/models/actor.rb +13 -0
  39. data/lib/social_stream/events/version.rb +5 -0
  40. data/lib/social_stream/migrations/events.rb +8 -0
  41. data/lib/social_stream/toolbar_config/events.rb +22 -0
  42. data/lib/social_stream/views/settings/events.rb +18 -0
  43. data/lib/social_stream/views/sidebar/events.rb +15 -0
  44. data/social_stream-events.gemspec +24 -0
  45. data/vendor/assets/images/boxy-ne.png +0 -0
  46. data/vendor/assets/images/boxy-nw.png +0 -0
  47. data/vendor/assets/images/boxy-se.png +0 -0
  48. data/vendor/assets/images/boxy-sw.png +0 -0
  49. data/vendor/assets/javascripts/fullcalendar.js +5210 -0
  50. data/vendor/assets/javascripts/gcal.js +112 -0
  51. data/vendor/assets/javascripts/jquery.boxy.js +570 -0
  52. data/vendor/assets/javascripts/sprintf.js +183 -0
  53. data/vendor/assets/stylesheets/boxy.css +49 -0
  54. data/vendor/assets/stylesheets/fullcalendar.css +618 -0
  55. data/vendor/assets/stylesheets/fullcalendar.print.css +61 -0
  56. metadata +150 -0
@@ -0,0 +1,183 @@
1
+ /**
2
+ sprintf() for JavaScript 0.7-beta1
3
+ http://www.diveintojavascript.com/projects/javascript-sprintf
4
+
5
+ Copyright (c) Alexandru Marasteanu <alexaholic [at) gmail (dot] com>
6
+ All rights reserved.
7
+
8
+ Redistribution and use in source and binary forms, with or without
9
+ modification, are permitted provided that the following conditions are met:
10
+ * Redistributions of source code must retain the above copyright
11
+ notice, this list of conditions and the following disclaimer.
12
+ * Redistributions in binary form must reproduce the above copyright
13
+ notice, this list of conditions and the following disclaimer in the
14
+ documentation and/or other materials provided with the distribution.
15
+ * Neither the name of sprintf() for JavaScript nor the
16
+ names of its contributors may be used to endorse or promote products
17
+ derived from this software without specific prior written permission.
18
+
19
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
+ DISCLAIMED. IN NO EVENT SHALL Alexandru Marasteanu BE LIABLE FOR ANY
23
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
+
30
+
31
+ Changelog:
32
+ 2010.09.06 - 0.7-beta1
33
+ - features: vsprintf, support for named placeholders
34
+ - enhancements: format cache, reduced global namespace pollution
35
+
36
+ 2010.05.22 - 0.6:
37
+ - reverted to 0.4 and fixed the bug regarding the sign of the number 0
38
+ Note:
39
+ Thanks to Raphael Pigulla <raph (at] n3rd [dot) org> (http://www.n3rd.org/)
40
+ who warned me about a bug in 0.5, I discovered that the last update was
41
+ a regress. I appologize for that.
42
+
43
+ 2010.05.09 - 0.5:
44
+ - bug fix: 0 is now preceeded with a + sign
45
+ - bug fix: the sign was not at the right position on padded results (Kamal Abdali)
46
+ - switched from GPL to BSD license
47
+
48
+ 2007.10.21 - 0.4:
49
+ - unit test and patch (David Baird)
50
+
51
+ 2007.09.17 - 0.3:
52
+ - bug fix: no longer throws exception on empty paramenters (Hans Pufal)
53
+
54
+ 2007.09.11 - 0.2:
55
+ - feature: added argument swapping
56
+
57
+ 2007.04.03 - 0.1:
58
+ - initial release
59
+ **/
60
+
61
+ var sprintf = (function() {
62
+ function get_type(variable) {
63
+ return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase();
64
+ }
65
+ function str_repeat(input, multiplier) {
66
+ for (var output = []; multiplier > 0; output[--multiplier] = input) {/* do nothing */}
67
+ return output.join('');
68
+ }
69
+
70
+ var str_format = function() {
71
+ if (!str_format.cache.hasOwnProperty(arguments[0])) {
72
+ str_format.cache[arguments[0]] = str_format.parse(arguments[0]);
73
+ }
74
+ return str_format.format.call(null, str_format.cache[arguments[0]], arguments);
75
+ };
76
+
77
+ str_format.format = function(parse_tree, argv) {
78
+ var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length;
79
+ for (i = 0; i < tree_length; i++) {
80
+ node_type = get_type(parse_tree[i]);
81
+ if (node_type === 'string') {
82
+ output.push(parse_tree[i]);
83
+ }
84
+ else if (node_type === 'array') {
85
+ match = parse_tree[i]; // convenience purposes only
86
+ if (match[2]) { // keyword argument
87
+ arg = argv[cursor];
88
+ for (k = 0; k < match[2].length; k++) {
89
+ if (!arg.hasOwnProperty(match[2][k])) {
90
+ throw(sprintf('[sprintf] property "%s" does not exist', match[2][k]));
91
+ }
92
+ arg = arg[match[2][k]];
93
+ }
94
+ }
95
+ else if (match[1]) { // positional argument (explicit)
96
+ arg = argv[match[1]];
97
+ }
98
+ else { // positional argument (implicit)
99
+ arg = argv[cursor++];
100
+ }
101
+
102
+ if (/[^s]/.test(match[8]) && (get_type(arg) != 'number')) {
103
+ throw(sprintf('[sprintf] expecting number but found %s', get_type(arg)));
104
+ }
105
+ switch (match[8]) {
106
+ case 'b': arg = arg.toString(2); break;
107
+ case 'c': arg = String.fromCharCode(arg); break;
108
+ case 'd': arg = parseInt(arg, 10); break;
109
+ case 'e': arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential(); break;
110
+ case 'f': arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg); break;
111
+ case 'o': arg = arg.toString(8); break;
112
+ case 's': arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg); break;
113
+ case 'u': arg = Math.abs(arg); break;
114
+ case 'x': arg = arg.toString(16); break;
115
+ case 'X': arg = arg.toString(16).toUpperCase(); break;
116
+ }
117
+ arg = (/[def]/.test(match[8]) && match[3] && arg >= 0 ? '+'+ arg : arg);
118
+ pad_character = match[4] ? match[4] == '0' ? '0' : match[4].charAt(1) : ' ';
119
+ pad_length = match[6] - String(arg).length;
120
+ pad = match[6] ? str_repeat(pad_character, pad_length) : '';
121
+ output.push(match[5] ? arg + pad : pad + arg);
122
+ }
123
+ }
124
+ return output.join('');
125
+ };
126
+
127
+ str_format.cache = {};
128
+
129
+ str_format.parse = function(fmt) {
130
+ var _fmt = fmt, match = [], parse_tree = [], arg_names = 0;
131
+ while (_fmt) {
132
+ if ((match = /^[^\x25]+/.exec(_fmt)) !== null) {
133
+ parse_tree.push(match[0]);
134
+ }
135
+ else if ((match = /^\x25{2}/.exec(_fmt)) !== null) {
136
+ parse_tree.push('%');
137
+ }
138
+ else if ((match = /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(_fmt)) !== null) {
139
+ if (match[2]) {
140
+ arg_names |= 1;
141
+ var field_list = [], replacement_field = match[2], field_match = [];
142
+ if ((field_match = /^([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) {
143
+ field_list.push(field_match[1]);
144
+ while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {
145
+ if ((field_match = /^\.([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) {
146
+ field_list.push(field_match[1]);
147
+ }
148
+ else if ((field_match = /^\[(\d+)\]/.exec(replacement_field)) !== null) {
149
+ field_list.push(field_match[1]);
150
+ }
151
+ else {
152
+ throw('[sprintf] huh?');
153
+ }
154
+ }
155
+ }
156
+ else {
157
+ throw('[sprintf] huh?');
158
+ }
159
+ match[2] = field_list;
160
+ }
161
+ else {
162
+ arg_names |= 2;
163
+ }
164
+ if (arg_names === 3) {
165
+ throw('[sprintf] mixing positional and named placeholders is not (yet) supported');
166
+ }
167
+ parse_tree.push(match);
168
+ }
169
+ else {
170
+ throw('[sprintf] huh?');
171
+ }
172
+ _fmt = _fmt.substring(match[0].length);
173
+ }
174
+ return parse_tree;
175
+ };
176
+
177
+ return str_format;
178
+ })();
179
+
180
+ var vsprintf = function(fmt, argv) {
181
+ argv.unshift(fmt);
182
+ return sprintf.apply(null, argv);
183
+ };
@@ -0,0 +1,49 @@
1
+ .boxy-wrapper { position: absolute; }
2
+ .boxy-wrapper.fixed { position: fixed; }
3
+
4
+ /* Modal */
5
+
6
+ .boxy-modal-blackout { position: absolute; background-color: black; left: 0; top: 0; }
7
+
8
+ /* Border */
9
+
10
+ .boxy-wrapper { empty-cells: show; }
11
+ .boxy-wrapper .top-left,
12
+ .boxy-wrapper .top-right,
13
+ .boxy-wrapper .bottom-right,
14
+ .boxy-wrapper .bottom-left { width: 10px; height: 10px; padding: 0 }
15
+
16
+ .boxy-wrapper .top-left { background: url('boxy-nw.png'); }
17
+ .boxy-wrapper .top-right { background: url('boxy-ne.png'); }
18
+ .boxy-wrapper .bottom-right { background: url('boxy-se.png'); }
19
+ .boxy-wrapper .bottom-left { background: url('boxy-sw.png'); }
20
+
21
+ /* IE6+7 hacks for the border. IE7 should support this natively but fails in conjuction with modal blackout bg. */
22
+ /* NB: these must be absolute paths or URLs to your images */
23
+ .boxy-wrapper .top-left { #background: none; #filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='boxy-nw.png'); }
24
+ .boxy-wrapper .top-right { #background: none; #filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='boxy-ne.png'); }
25
+ .boxy-wrapper .bottom-right { #background: none; #filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='boxy-se.png'); }
26
+ .boxy-wrapper .bottom-left { #background: none; #filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='boxy-sw.png'); }
27
+
28
+ .boxy-wrapper .top,
29
+ .boxy-wrapper .bottom { height: 10px; background-color: black; opacity: 0.6; filter: alpha(opacity=60); padding: 0 }
30
+
31
+ .boxy-wrapper .left,
32
+ .boxy-wrapper .right { width: 10px; background-color: black; opacity: 0.6; filter: alpha(opacity=60); padding: 0 }
33
+
34
+ /* Title bar */
35
+
36
+ .boxy-wrapper .title-bar { background-color: black; padding: 6px; position: relative; }
37
+ .boxy-wrapper .title-bar.dragging { cursor: move; }
38
+ .boxy-wrapper .title-bar h2 { font-size: 12px; color: white; line-height: 1; margin: 0; padding: 0; font-weight: normal; }
39
+ .boxy-wrapper .title-bar .close { color: white; position: absolute; top: 6px; right: 6px; font-size: 90%; line-height: 1; }
40
+
41
+ /* Content Region */
42
+
43
+ .boxy-inner { background-color: white; padding: 0 }
44
+ .boxy-content { padding: 15px; }
45
+
46
+ /* Question Boxes */
47
+
48
+ .boxy-wrapper .question { width: 350px; min-height: 80px; }
49
+ .boxy-wrapper .answers { text-align: right; }
@@ -0,0 +1,618 @@
1
+ /*
2
+ * FullCalendar v1.5.2 Stylesheet
3
+ *
4
+ * Copyright (c) 2011 Adam Shaw
5
+ * Dual licensed under the MIT and GPL licenses, located in
6
+ * MIT-LICENSE.txt and GPL-LICENSE.txt respectively.
7
+ *
8
+ * Date: Sun Aug 21 22:06:09 2011 -0700
9
+ *
10
+ */
11
+
12
+
13
+ .fc {
14
+ direction: ltr;
15
+ text-align: left;
16
+ }
17
+
18
+ .fc table {
19
+ border-collapse: collapse;
20
+ border-spacing: 0;
21
+ }
22
+
23
+ html .fc,
24
+ .fc table {
25
+ font-size: 1em;
26
+ }
27
+
28
+ .fc td,
29
+ .fc th {
30
+ padding: 0;
31
+ vertical-align: top;
32
+ }
33
+
34
+
35
+
36
+ /* Header
37
+ ------------------------------------------------------------------------*/
38
+
39
+ .fc-header td {
40
+ white-space: nowrap;
41
+ }
42
+
43
+ .fc-header-left {
44
+ width: 25%;
45
+ text-align: left;
46
+ }
47
+
48
+ .fc-header-center {
49
+ text-align: center;
50
+ }
51
+
52
+ .fc-header-right {
53
+ width: 25%;
54
+ text-align: right;
55
+ }
56
+
57
+ .fc-header-title {
58
+ display: inline-block;
59
+ vertical-align: top;
60
+ }
61
+
62
+ .fc-header-title h2 {
63
+ margin-top: 0;
64
+ white-space: nowrap;
65
+ }
66
+
67
+ .fc .fc-header-space {
68
+ padding-left: 10px;
69
+ }
70
+
71
+ .fc-header .fc-button {
72
+ margin-bottom: 1em;
73
+ vertical-align: top;
74
+ }
75
+
76
+ /* buttons edges butting together */
77
+
78
+ .fc-header .fc-button {
79
+ margin-right: -1px;
80
+ }
81
+
82
+ .fc-header .fc-corner-right {
83
+ margin-right: 1px; /* back to normal */
84
+ }
85
+
86
+ .fc-header .ui-corner-right {
87
+ margin-right: 0; /* back to normal */
88
+ }
89
+
90
+ /* button layering (for border precedence) */
91
+
92
+ .fc-header .fc-state-hover,
93
+ .fc-header .ui-state-hover {
94
+ z-index: 2;
95
+ }
96
+
97
+ .fc-header .fc-state-down {
98
+ z-index: 3;
99
+ }
100
+
101
+ .fc-header .fc-state-active,
102
+ .fc-header .ui-state-active {
103
+ z-index: 4;
104
+ }
105
+
106
+
107
+
108
+ /* Content
109
+ ------------------------------------------------------------------------*/
110
+
111
+ .fc-content {
112
+ clear: both;
113
+ }
114
+
115
+ .fc-view {
116
+ width: 100%; /* needed for view switching (when view is absolute) */
117
+ overflow: hidden;
118
+ }
119
+
120
+
121
+
122
+ /* Cell Styles
123
+ ------------------------------------------------------------------------*/
124
+
125
+ .fc-widget-header, /* <th>, usually */
126
+ .fc-widget-content { /* <td>, usually */
127
+ border: 1px solid #ccc;
128
+ }
129
+
130
+ .fc-state-highlight { /* <td> today cell */ /* TODO: add .fc-today to <th> */
131
+ background: #ffc;
132
+ }
133
+
134
+ .fc-cell-overlay { /* semi-transparent rectangle while dragging */
135
+ background: #9cf;
136
+ opacity: .2;
137
+ filter: alpha(opacity=20); /* for IE */
138
+ }
139
+
140
+
141
+
142
+ /* Buttons
143
+ ------------------------------------------------------------------------*/
144
+
145
+ .fc-button {
146
+ position: relative;
147
+ display: inline-block;
148
+ cursor: pointer;
149
+ }
150
+
151
+ .fc-state-default { /* non-theme */
152
+ border-style: solid;
153
+ border-width: 1px 0;
154
+ }
155
+
156
+ .fc-button-inner {
157
+ position: relative;
158
+ float: left;
159
+ overflow: hidden;
160
+ }
161
+
162
+ .fc-state-default .fc-button-inner { /* non-theme */
163
+ border-style: solid;
164
+ border-width: 0 1px;
165
+ }
166
+
167
+ .fc-button-content {
168
+ position: relative;
169
+ float: left;
170
+ height: 1.9em;
171
+ line-height: 1.9em;
172
+ padding: 0 .6em;
173
+ white-space: nowrap;
174
+ }
175
+
176
+ /* icon (for jquery ui) */
177
+
178
+ .fc-button-content .fc-icon-wrap {
179
+ position: relative;
180
+ float: left;
181
+ top: 50%;
182
+ }
183
+
184
+ .fc-button-content .ui-icon {
185
+ position: relative;
186
+ float: left;
187
+ margin-top: -50%;
188
+ *margin-top: 0;
189
+ *top: -50%;
190
+ }
191
+
192
+ /* gloss effect */
193
+
194
+ .fc-state-default .fc-button-effect {
195
+ position: absolute;
196
+ top: 50%;
197
+ left: 0;
198
+ }
199
+
200
+ .fc-state-default .fc-button-effect span {
201
+ position: absolute;
202
+ top: -100px;
203
+ left: 0;
204
+ width: 500px;
205
+ height: 100px;
206
+ border-width: 100px 0 0 1px;
207
+ border-style: solid;
208
+ border-color: #fff;
209
+ background: #444;
210
+ opacity: .09;
211
+ filter: alpha(opacity=9);
212
+ }
213
+
214
+ /* button states (determines colors) */
215
+
216
+ .fc-state-default,
217
+ .fc-state-default .fc-button-inner {
218
+ border-style: solid;
219
+ border-color: #ccc #bbb #aaa;
220
+ background: #F3F3F3;
221
+ color: #000;
222
+ }
223
+
224
+ .fc-state-hover,
225
+ .fc-state-hover .fc-button-inner {
226
+ border-color: #999;
227
+ }
228
+
229
+ .fc-state-down,
230
+ .fc-state-down .fc-button-inner {
231
+ border-color: #555;
232
+ background: #777;
233
+ }
234
+
235
+ .fc-state-active,
236
+ .fc-state-active .fc-button-inner {
237
+ border-color: #555;
238
+ background: #777;
239
+ color: #fff;
240
+ }
241
+
242
+ .fc-state-disabled,
243
+ .fc-state-disabled .fc-button-inner {
244
+ color: #999;
245
+ border-color: #ddd;
246
+ }
247
+
248
+ .fc-state-disabled {
249
+ cursor: default;
250
+ }
251
+
252
+ .fc-state-disabled .fc-button-effect {
253
+ display: none;
254
+ }
255
+
256
+
257
+
258
+ /* Global Event Styles
259
+ ------------------------------------------------------------------------*/
260
+
261
+ .fc-event {
262
+ border-style: solid;
263
+ border-width: 0;
264
+ font-size: .85em;
265
+ cursor: default;
266
+ }
267
+
268
+ a.fc-event,
269
+ .fc-event-draggable {
270
+ cursor: pointer;
271
+ }
272
+
273
+ a.fc-event {
274
+ text-decoration: none;
275
+ }
276
+
277
+ .fc-rtl .fc-event {
278
+ text-align: right;
279
+ }
280
+
281
+ .fc-event-skin {
282
+ border-color: #36c; /* default BORDER color */
283
+ background-color: #36c; /* default BACKGROUND color */
284
+ color: #fff; /* default TEXT color */
285
+ }
286
+
287
+ .fc-event-inner {
288
+ position: relative;
289
+ width: 100%;
290
+ height: 100%;
291
+ border-style: solid;
292
+ border-width: 0;
293
+ overflow: hidden;
294
+ }
295
+
296
+ .fc-event-time,
297
+ .fc-event-title {
298
+ padding: 0 1px;
299
+ }
300
+
301
+ .fc .ui-resizable-handle { /*** TODO: don't use ui-resizable anymore, change class ***/
302
+ display: block;
303
+ position: absolute;
304
+ z-index: 99999;
305
+ overflow: hidden; /* hacky spaces (IE6/7) */
306
+ font-size: 300%; /* */
307
+ line-height: 50%; /* */
308
+ }
309
+
310
+
311
+
312
+ /* Horizontal Events
313
+ ------------------------------------------------------------------------*/
314
+
315
+ .fc-event-hori {
316
+ border-width: 1px 0;
317
+ margin-bottom: 1px;
318
+ }
319
+
320
+ /* resizable */
321
+
322
+ .fc-event-hori .ui-resizable-e {
323
+ top: 0 !important; /* importants override pre jquery ui 1.7 styles */
324
+ right: -3px !important;
325
+ width: 7px !important;
326
+ height: 100% !important;
327
+ cursor: e-resize;
328
+ }
329
+
330
+ .fc-event-hori .ui-resizable-w {
331
+ top: 0 !important;
332
+ left: -3px !important;
333
+ width: 7px !important;
334
+ height: 100% !important;
335
+ cursor: w-resize;
336
+ }
337
+
338
+ .fc-event-hori .ui-resizable-handle {
339
+ _padding-bottom: 14px; /* IE6 had 0 height */
340
+ }
341
+
342
+
343
+
344
+ /* Fake Rounded Corners (for buttons and events)
345
+ ------------------------------------------------------------*/
346
+
347
+ .fc-corner-left {
348
+ margin-left: 1px;
349
+ }
350
+
351
+ .fc-corner-left .fc-button-inner,
352
+ .fc-corner-left .fc-event-inner {
353
+ margin-left: -1px;
354
+ }
355
+
356
+ .fc-corner-right {
357
+ margin-right: 1px;
358
+ }
359
+
360
+ .fc-corner-right .fc-button-inner,
361
+ .fc-corner-right .fc-event-inner {
362
+ margin-right: -1px;
363
+ }
364
+
365
+ .fc-corner-top {
366
+ margin-top: 1px;
367
+ }
368
+
369
+ .fc-corner-top .fc-event-inner {
370
+ margin-top: -1px;
371
+ }
372
+
373
+ .fc-corner-bottom {
374
+ margin-bottom: 1px;
375
+ }
376
+
377
+ .fc-corner-bottom .fc-event-inner {
378
+ margin-bottom: -1px;
379
+ }
380
+
381
+
382
+
383
+ /* Fake Rounded Corners SPECIFICALLY FOR EVENTS
384
+ -----------------------------------------------------------------*/
385
+
386
+ .fc-corner-left .fc-event-inner {
387
+ border-left-width: 1px;
388
+ }
389
+
390
+ .fc-corner-right .fc-event-inner {
391
+ border-right-width: 1px;
392
+ }
393
+
394
+ .fc-corner-top .fc-event-inner {
395
+ border-top-width: 1px;
396
+ }
397
+
398
+ .fc-corner-bottom .fc-event-inner {
399
+ border-bottom-width: 1px;
400
+ }
401
+
402
+
403
+
404
+ /* Reusable Separate-border Table
405
+ ------------------------------------------------------------*/
406
+
407
+ table.fc-border-separate {
408
+ border-collapse: separate;
409
+ }
410
+
411
+ .fc-border-separate th,
412
+ .fc-border-separate td {
413
+ border-width: 1px 0 0 1px;
414
+ }
415
+
416
+ .fc-border-separate th.fc-last,
417
+ .fc-border-separate td.fc-last {
418
+ border-right-width: 1px;
419
+ }
420
+
421
+ .fc-border-separate tr.fc-last th,
422
+ .fc-border-separate tr.fc-last td {
423
+ border-bottom-width: 1px;
424
+ }
425
+
426
+ .fc-border-separate tbody tr.fc-first td,
427
+ .fc-border-separate tbody tr.fc-first th {
428
+ border-top-width: 0;
429
+ }
430
+
431
+
432
+
433
+ /* Month View, Basic Week View, Basic Day View
434
+ ------------------------------------------------------------------------*/
435
+
436
+ .fc-grid th {
437
+ text-align: center;
438
+ }
439
+
440
+ .fc-grid .fc-day-number {
441
+ float: right;
442
+ padding: 0 2px;
443
+ }
444
+
445
+ .fc-grid .fc-other-month .fc-day-number {
446
+ opacity: 0.3;
447
+ filter: alpha(opacity=30); /* for IE */
448
+ /* opacity with small font can sometimes look too faded
449
+ might want to set the 'color' property instead
450
+ making day-numbers bold also fixes the problem */
451
+ }
452
+
453
+ .fc-grid .fc-day-content {
454
+ clear: both;
455
+ padding: 2px 2px 1px; /* distance between events and day edges */
456
+ }
457
+
458
+ /* event styles */
459
+
460
+ .fc-grid .fc-event-time {
461
+ font-weight: bold;
462
+ }
463
+
464
+ /* right-to-left */
465
+
466
+ .fc-rtl .fc-grid .fc-day-number {
467
+ float: left;
468
+ }
469
+
470
+ .fc-rtl .fc-grid .fc-event-time {
471
+ float: right;
472
+ }
473
+
474
+
475
+
476
+ /* Agenda Week View, Agenda Day View
477
+ ------------------------------------------------------------------------*/
478
+
479
+ .fc-agenda table {
480
+ border-collapse: separate;
481
+ }
482
+
483
+ .fc-agenda-days th {
484
+ text-align: center;
485
+ }
486
+
487
+ .fc-agenda .fc-agenda-axis {
488
+ width: 50px;
489
+ padding: 0 4px;
490
+ vertical-align: middle;
491
+ text-align: right;
492
+ white-space: nowrap;
493
+ font-weight: normal;
494
+ }
495
+
496
+ .fc-agenda .fc-day-content {
497
+ padding: 2px 2px 1px;
498
+ }
499
+
500
+ /* make axis border take precedence */
501
+
502
+ .fc-agenda-days .fc-agenda-axis {
503
+ border-right-width: 1px;
504
+ }
505
+
506
+ .fc-agenda-days .fc-col0 {
507
+ border-left-width: 0;
508
+ }
509
+
510
+ /* all-day area */
511
+
512
+ .fc-agenda-allday th {
513
+ border-width: 0 1px;
514
+ }
515
+
516
+ .fc-agenda-allday .fc-day-content {
517
+ min-height: 34px; /* TODO: doesnt work well in quirksmode */
518
+ _height: 34px;
519
+ }
520
+
521
+ /* divider (between all-day and slots) */
522
+
523
+ .fc-agenda-divider-inner {
524
+ height: 2px;
525
+ overflow: hidden;
526
+ }
527
+
528
+ .fc-widget-header .fc-agenda-divider-inner {
529
+ background: #eee;
530
+ }
531
+
532
+ /* slot rows */
533
+
534
+ .fc-agenda-slots th {
535
+ border-width: 1px 1px 0;
536
+ }
537
+
538
+ .fc-agenda-slots td {
539
+ border-width: 1px 0 0;
540
+ background: none;
541
+ }
542
+
543
+ .fc-agenda-slots td div {
544
+ height: 20px;
545
+ }
546
+
547
+ .fc-agenda-slots tr.fc-slot0 th,
548
+ .fc-agenda-slots tr.fc-slot0 td {
549
+ border-top-width: 0;
550
+ }
551
+
552
+ .fc-agenda-slots tr.fc-minor th,
553
+ .fc-agenda-slots tr.fc-minor td {
554
+ border-top-style: dotted;
555
+ }
556
+
557
+ .fc-agenda-slots tr.fc-minor th.ui-widget-header {
558
+ *border-top-style: solid; /* doesn't work with background in IE6/7 */
559
+ }
560
+
561
+
562
+
563
+ /* Vertical Events
564
+ ------------------------------------------------------------------------*/
565
+
566
+ .fc-event-vert {
567
+ border-width: 0 1px;
568
+ }
569
+
570
+ .fc-event-vert .fc-event-head,
571
+ .fc-event-vert .fc-event-content {
572
+ position: relative;
573
+ z-index: 2;
574
+ width: 100%;
575
+ overflow: hidden;
576
+ }
577
+
578
+ .fc-event-vert .fc-event-time {
579
+ white-space: nowrap;
580
+ font-size: 10px;
581
+ }
582
+
583
+ .fc-event-vert .fc-event-bg { /* makes the event lighter w/ a semi-transparent overlay */
584
+ position: absolute;
585
+ z-index: 1;
586
+ top: 0;
587
+ left: 0;
588
+ width: 100%;
589
+ height: 100%;
590
+ background: #fff;
591
+ opacity: .3;
592
+ filter: alpha(opacity=30);
593
+ }
594
+
595
+ .fc .ui-draggable-dragging .fc-event-bg, /* TODO: something nicer like .fc-opacity */
596
+ .fc-select-helper .fc-event-bg {
597
+ display: none\9; /* for IE6/7/8. nested opacity filters while dragging don't work */
598
+ }
599
+
600
+ /* resizable */
601
+
602
+ .fc-event-vert .ui-resizable-s {
603
+ bottom: 0 !important; /* importants override pre jquery ui 1.7 styles */
604
+ width: 100% !important;
605
+ height: 8px !important;
606
+ overflow: hidden !important;
607
+ line-height: 8px !important;
608
+ font-size: 11px !important;
609
+ font-family: monospace;
610
+ text-align: center;
611
+ cursor: s-resize;
612
+ }
613
+
614
+ .fc-agenda .ui-resizable-resizing { /* TODO: better selector */
615
+ _overflow: hidden;
616
+ }
617
+
618
+