fullcalendar.io-rails 2.3.1 → 2.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/fullcalendar.io/rails/version.rb +1 -1
- data/vendor/assets/javascripts/fullcalendar.js +415 -326
- data/vendor/assets/javascripts/fullcalendar/gcal.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang-all.js +4 -4
- data/vendor/assets/javascripts/fullcalendar/lang/ar-ma.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/ar-sa.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/ar-tn.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/ar.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/bg.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/ca.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/cs.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/da.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/de-at.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/de.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/el.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/en-au.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/en-ca.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/en-gb.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/es.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/fa.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/fi.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/fr-ca.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/fr.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/he.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/hi.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/hr.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/hu.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/id.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/is.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/it.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/ja.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/ko.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/lt.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/lv.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/nb.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/nl.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/pl.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/pt-br.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/pt.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/ro.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/ru.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/sk.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/sl.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/sr-cyrl.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/sr.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/sv.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/th.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/tr.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/uk.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/vi.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/zh-cn.js +1 -1
- data/vendor/assets/javascripts/fullcalendar/lang/zh-tw.js +1 -1
- data/vendor/assets/stylesheets/fullcalendar.css +10 -2
- data/vendor/assets/stylesheets/fullcalendar.print.css +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3e0c3f8226be35a93a659007d0fa20fd66a6ff65
|
|
4
|
+
data.tar.gz: ae678572c60154cf91d4519c95315749b13fa9e8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ac1647ad46ab72f4aedd60e60825dd7cbb1e76a255969f4a0bc2700e04772e0e2d6e213a3e17b121ae62f3712963cc9e036e35cf38e28cb809ef85e093477d4e
|
|
7
|
+
data.tar.gz: 1b987ab4011b943ac1fef1f48f7b9111de448f46efbd0abe68cf62fa52bc4fd46072d9aa66a5ebbb56f58849890e81251176338a7ae0128411d164b4c2a28cb8
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* FullCalendar v2.3.
|
|
2
|
+
* FullCalendar v2.3.2
|
|
3
3
|
* Docs & License: http://fullcalendar.io/
|
|
4
4
|
* (c) 2015 Adam Shaw
|
|
5
5
|
*/
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
;;
|
|
20
20
|
|
|
21
|
-
var fc = $.fullCalendar = { version: "2.3.
|
|
21
|
+
var fc = $.fullCalendar = { version: "2.3.2" };
|
|
22
22
|
var fcViews = fc.views = {};
|
|
23
23
|
|
|
24
24
|
|
|
@@ -45,7 +45,7 @@ $.fn.fullCalendar = function(options) {
|
|
|
45
45
|
}
|
|
46
46
|
// a new calendar initialization
|
|
47
47
|
else if (!calendar) { // don't initialize twice
|
|
48
|
-
calendar = new
|
|
48
|
+
calendar = new Calendar(element, options);
|
|
49
49
|
element.data('fullCalendar', calendar);
|
|
50
50
|
calendar.render();
|
|
51
51
|
}
|
|
@@ -63,41 +63,9 @@ var complexOptions = [ // names of options that are objects whose properties sho
|
|
|
63
63
|
];
|
|
64
64
|
|
|
65
65
|
|
|
66
|
-
//
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
var chain = Array.prototype.slice.call(arguments); // convert to a real array
|
|
70
|
-
var complexVals = {}; // hash for each complex option's combined values
|
|
71
|
-
var i, name;
|
|
72
|
-
var combinedVal;
|
|
73
|
-
var j;
|
|
74
|
-
var val;
|
|
75
|
-
|
|
76
|
-
// for each complex option, loop through each option-hash and accumulate the combined values
|
|
77
|
-
for (i = 0; i < complexOptions.length; i++) {
|
|
78
|
-
name = complexOptions[i];
|
|
79
|
-
combinedVal = null; // an object holding the merge of all the values
|
|
80
|
-
|
|
81
|
-
for (j = 0; j < chain.length; j++) {
|
|
82
|
-
val = chain[j][name];
|
|
83
|
-
|
|
84
|
-
if ($.isPlainObject(val)) {
|
|
85
|
-
combinedVal = $.extend(combinedVal || {}, val); // merge new properties
|
|
86
|
-
}
|
|
87
|
-
else if (val != null) { // a non-null non-undefined atomic option
|
|
88
|
-
combinedVal = null; // signal to use the atomic value
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// if not null, the final value was a combination of other objects. record it
|
|
93
|
-
if (combinedVal !== null) {
|
|
94
|
-
complexVals[name] = combinedVal;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
chain.unshift({}); // $.extend will mutate this with the result
|
|
99
|
-
chain.push(complexVals); // computed complex values are applied last
|
|
100
|
-
return $.extend.apply($, chain); // combine
|
|
66
|
+
// Merges an array of option objects into a single object
|
|
67
|
+
function mergeOptions(optionObjs) {
|
|
68
|
+
return mergeProps(optionObjs, complexOptions);
|
|
101
69
|
}
|
|
102
70
|
|
|
103
71
|
|
|
@@ -160,6 +128,7 @@ fc.isInt = isInt;
|
|
|
160
128
|
fc.htmlEscape = htmlEscape;
|
|
161
129
|
fc.cssToStr = cssToStr;
|
|
162
130
|
fc.proxy = proxy;
|
|
131
|
+
fc.capitaliseFirstLetter = capitaliseFirstLetter;
|
|
163
132
|
|
|
164
133
|
|
|
165
134
|
/* FullCalendar-specific DOM Utilities
|
|
@@ -637,6 +606,55 @@ function isTimeString(str) {
|
|
|
637
606
|
var hasOwnPropMethod = {}.hasOwnProperty;
|
|
638
607
|
|
|
639
608
|
|
|
609
|
+
// Merges an array of objects into a single object.
|
|
610
|
+
// The second argument allows for an array of property names who's object values will be merged together.
|
|
611
|
+
function mergeProps(propObjs, complexProps) {
|
|
612
|
+
var dest = {};
|
|
613
|
+
var i, name;
|
|
614
|
+
var complexObjs;
|
|
615
|
+
var j, val;
|
|
616
|
+
var props;
|
|
617
|
+
|
|
618
|
+
if (complexProps) {
|
|
619
|
+
for (i = 0; i < complexProps.length; i++) {
|
|
620
|
+
name = complexProps[i];
|
|
621
|
+
complexObjs = [];
|
|
622
|
+
|
|
623
|
+
// collect the trailing object values, stopping when a non-object is discovered
|
|
624
|
+
for (j = propObjs.length - 1; j >= 0; j--) {
|
|
625
|
+
val = propObjs[j][name];
|
|
626
|
+
|
|
627
|
+
if (typeof val === 'object') {
|
|
628
|
+
complexObjs.unshift(val);
|
|
629
|
+
}
|
|
630
|
+
else if (val !== undefined) {
|
|
631
|
+
dest[name] = val; // if there were no objects, this value will be used
|
|
632
|
+
break;
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
// if the trailing values were objects, use the merged value
|
|
637
|
+
if (complexObjs.length) {
|
|
638
|
+
dest[name] = mergeProps(complexObjs);
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
// copy values into the destination, going from last to first
|
|
644
|
+
for (i = propObjs.length - 1; i >= 0; i--) {
|
|
645
|
+
props = propObjs[i];
|
|
646
|
+
|
|
647
|
+
for (name in props) {
|
|
648
|
+
if (!(name in dest)) { // if already assigned by previous props or complex props, don't reassign
|
|
649
|
+
dest[name] = props[name];
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
return dest;
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
|
|
640
658
|
// Create an object that has the given prototype. Just like Object.create
|
|
641
659
|
function createObject(proto) {
|
|
642
660
|
var f = function() {};
|
|
@@ -1570,7 +1588,7 @@ Class.extend = function(members) {
|
|
|
1570
1588
|
// adds new member variables/methods to the class's prototype.
|
|
1571
1589
|
// can be called with another class, or a plain object hash containing new members.
|
|
1572
1590
|
Class.mixin = function(members) {
|
|
1573
|
-
copyOwnProps(members.prototype || members, this.prototype);
|
|
1591
|
+
copyOwnProps(members.prototype || members, this.prototype); // TODO: copyNativeMethods?
|
|
1574
1592
|
};
|
|
1575
1593
|
;;
|
|
1576
1594
|
|
|
@@ -1662,7 +1680,7 @@ var Popover = Class.extend({
|
|
|
1662
1680
|
|
|
1663
1681
|
|
|
1664
1682
|
// Hides and unregisters any handlers
|
|
1665
|
-
|
|
1683
|
+
removeElement: function() {
|
|
1666
1684
|
this.hide();
|
|
1667
1685
|
|
|
1668
1686
|
if (this.el) {
|
|
@@ -1774,6 +1792,7 @@ var GridCoordMap = Class.extend({
|
|
|
1774
1792
|
|
|
1775
1793
|
// Queries the grid for the coordinates of all the cells
|
|
1776
1794
|
build: function() {
|
|
1795
|
+
this.grid.build();
|
|
1777
1796
|
this.rowCoords = this.grid.computeRowCoords();
|
|
1778
1797
|
this.colCoords = this.grid.computeColCoords();
|
|
1779
1798
|
this.computeBounds();
|
|
@@ -1782,6 +1801,7 @@ var GridCoordMap = Class.extend({
|
|
|
1782
1801
|
|
|
1783
1802
|
// Clears the coordinates data to free up memory
|
|
1784
1803
|
clear: function() {
|
|
1804
|
+
this.grid.clear();
|
|
1785
1805
|
this.rowCoords = null;
|
|
1786
1806
|
this.colCoords = null;
|
|
1787
1807
|
},
|
|
@@ -2549,7 +2569,7 @@ var MouseFollower = Class.extend({
|
|
|
2549
2569
|
|
|
2550
2570
|
function complete() {
|
|
2551
2571
|
this.isAnimating = false;
|
|
2552
|
-
_this.
|
|
2572
|
+
_this.removeElement();
|
|
2553
2573
|
|
|
2554
2574
|
this.top0 = this.left0 = null; // reset state for future updatePosition calls
|
|
2555
2575
|
|
|
@@ -2607,7 +2627,7 @@ var MouseFollower = Class.extend({
|
|
|
2607
2627
|
|
|
2608
2628
|
|
|
2609
2629
|
// Removes the tracking element if it has already been created
|
|
2610
|
-
|
|
2630
|
+
removeElement: function() {
|
|
2611
2631
|
if (this.el) {
|
|
2612
2632
|
this.el.remove();
|
|
2613
2633
|
this.el = null;
|
|
@@ -2787,8 +2807,6 @@ var Grid = fc.Grid = RowRenderer.extend({
|
|
|
2787
2807
|
|
|
2788
2808
|
rowCnt: 0, // number of rows
|
|
2789
2809
|
colCnt: 0, // number of cols
|
|
2790
|
-
rowData: null, // array of objects, holding misc data for each row
|
|
2791
|
-
colData: null, // array of objects, holding misc data for each column
|
|
2792
2810
|
|
|
2793
2811
|
el: null, // the containing element
|
|
2794
2812
|
coordMap: null, // a GridCoordMap that converts pixel values to datetimes
|
|
@@ -2854,18 +2872,27 @@ var Grid = fc.Grid = RowRenderer.extend({
|
|
|
2854
2872
|
------------------------------------------------------------------------------------------------------------------*/
|
|
2855
2873
|
|
|
2856
2874
|
|
|
2857
|
-
// Tells the grid about what period of time to display.
|
|
2875
|
+
// Tells the grid about what period of time to display.
|
|
2876
|
+
// Any date-related cell system internal data should be generated.
|
|
2858
2877
|
setRange: function(range) {
|
|
2859
|
-
var view = this.view;
|
|
2860
|
-
var displayEventTime;
|
|
2861
|
-
var displayEventEnd;
|
|
2862
|
-
|
|
2863
2878
|
this.start = range.start.clone();
|
|
2864
2879
|
this.end = range.end.clone();
|
|
2865
2880
|
|
|
2866
|
-
this.
|
|
2867
|
-
this.
|
|
2868
|
-
|
|
2881
|
+
this.rangeUpdated();
|
|
2882
|
+
this.processRangeOptions();
|
|
2883
|
+
},
|
|
2884
|
+
|
|
2885
|
+
|
|
2886
|
+
// Called when internal variables that rely on the range should be updated
|
|
2887
|
+
rangeUpdated: function() {
|
|
2888
|
+
},
|
|
2889
|
+
|
|
2890
|
+
|
|
2891
|
+
// Updates values that rely on options and also relate to range
|
|
2892
|
+
processRangeOptions: function() {
|
|
2893
|
+
var view = this.view;
|
|
2894
|
+
var displayEventTime;
|
|
2895
|
+
var displayEventEnd;
|
|
2869
2896
|
|
|
2870
2897
|
// Populate option-derived settings. Look for override first, then compute if necessary.
|
|
2871
2898
|
this.colHeadFormat = view.opt('columnFormat') || this.computeColHeadFormat();
|
|
@@ -2890,9 +2917,15 @@ var Grid = fc.Grid = RowRenderer.extend({
|
|
|
2890
2917
|
},
|
|
2891
2918
|
|
|
2892
2919
|
|
|
2893
|
-
//
|
|
2894
|
-
|
|
2895
|
-
|
|
2920
|
+
// Called before the grid's coordinates will need to be queried for cells.
|
|
2921
|
+
// Any non-date-related cell system internal data should be built.
|
|
2922
|
+
build: function() {
|
|
2923
|
+
},
|
|
2924
|
+
|
|
2925
|
+
|
|
2926
|
+
// Called after the grid's coordinates are done being relied upon.
|
|
2927
|
+
// Any non-date-related cell system internal data should be cleared.
|
|
2928
|
+
clear: function() {
|
|
2896
2929
|
},
|
|
2897
2930
|
|
|
2898
2931
|
|
|
@@ -2964,13 +2997,13 @@ var Grid = fc.Grid = RowRenderer.extend({
|
|
|
2964
2997
|
|
|
2965
2998
|
// Retrieves misc data about the given row
|
|
2966
2999
|
getRowData: function(row) {
|
|
2967
|
-
return
|
|
3000
|
+
return {};
|
|
2968
3001
|
},
|
|
2969
3002
|
|
|
2970
3003
|
|
|
2971
3004
|
// Retrieves misc data baout the given column
|
|
2972
3005
|
getColData: function(col) {
|
|
2973
|
-
return
|
|
3006
|
+
return {};
|
|
2974
3007
|
},
|
|
2975
3008
|
|
|
2976
3009
|
|
|
@@ -3067,7 +3100,7 @@ var Grid = fc.Grid = RowRenderer.extend({
|
|
|
3067
3100
|
|
|
3068
3101
|
|
|
3069
3102
|
// Removes the grid's container element from the DOM. Undoes any other DOM-related attachments.
|
|
3070
|
-
// DOES NOT remove any content
|
|
3103
|
+
// DOES NOT remove any content beforehand (doesn't clear events or call unrenderDates), unlike View
|
|
3071
3104
|
removeElement: function() {
|
|
3072
3105
|
this.unbindGlobalHandlers();
|
|
3073
3106
|
|
|
@@ -3091,7 +3124,7 @@ var Grid = fc.Grid = RowRenderer.extend({
|
|
|
3091
3124
|
|
|
3092
3125
|
|
|
3093
3126
|
// Unrenders the grid's date-related content
|
|
3094
|
-
|
|
3127
|
+
unrenderDates: function() {
|
|
3095
3128
|
// subclasses should implement
|
|
3096
3129
|
},
|
|
3097
3130
|
|
|
@@ -3146,12 +3179,12 @@ var Grid = fc.Grid = RowRenderer.extend({
|
|
|
3146
3179
|
cellOut: function(cell) {
|
|
3147
3180
|
dayClickCell = null;
|
|
3148
3181
|
selectionRange = null;
|
|
3149
|
-
_this.
|
|
3182
|
+
_this.unrenderSelection();
|
|
3150
3183
|
enableCursor();
|
|
3151
3184
|
},
|
|
3152
3185
|
listenStop: function(ev) {
|
|
3153
3186
|
if (dayClickCell) {
|
|
3154
|
-
view.
|
|
3187
|
+
view.triggerDayClick(dayClickCell, _this.getCellDayEl(dayClickCell), ev);
|
|
3155
3188
|
}
|
|
3156
3189
|
if (selectionRange) {
|
|
3157
3190
|
// the selection will already have been rendered. just report it
|
|
@@ -3208,7 +3241,7 @@ var Grid = fc.Grid = RowRenderer.extend({
|
|
|
3208
3241
|
|
|
3209
3242
|
|
|
3210
3243
|
// Unrenders a mock event
|
|
3211
|
-
|
|
3244
|
+
unrenderHelper: function() {
|
|
3212
3245
|
// subclasses must implement
|
|
3213
3246
|
},
|
|
3214
3247
|
|
|
@@ -3219,13 +3252,13 @@ var Grid = fc.Grid = RowRenderer.extend({
|
|
|
3219
3252
|
|
|
3220
3253
|
// Renders a visual indication of a selection. Will highlight by default but can be overridden by subclasses.
|
|
3221
3254
|
renderSelection: function(range) {
|
|
3222
|
-
this.renderHighlight(range);
|
|
3255
|
+
this.renderHighlight(this.selectionRangeToSegs(range));
|
|
3223
3256
|
},
|
|
3224
3257
|
|
|
3225
3258
|
|
|
3226
3259
|
// Unrenders any visual indications of a selection. Will unrender a highlight by default.
|
|
3227
|
-
|
|
3228
|
-
this.
|
|
3260
|
+
unrenderSelection: function() {
|
|
3261
|
+
this.unrenderHighlight();
|
|
3229
3262
|
},
|
|
3230
3263
|
|
|
3231
3264
|
|
|
@@ -3256,19 +3289,24 @@ var Grid = fc.Grid = RowRenderer.extend({
|
|
|
3256
3289
|
},
|
|
3257
3290
|
|
|
3258
3291
|
|
|
3292
|
+
selectionRangeToSegs: function(range) {
|
|
3293
|
+
return this.rangeToSegs(range);
|
|
3294
|
+
},
|
|
3295
|
+
|
|
3296
|
+
|
|
3259
3297
|
/* Highlight
|
|
3260
3298
|
------------------------------------------------------------------------------------------------------------------*/
|
|
3261
3299
|
|
|
3262
3300
|
|
|
3263
|
-
// Renders an emphasis on the given date range.
|
|
3264
|
-
renderHighlight: function(
|
|
3265
|
-
this.renderFill('highlight',
|
|
3301
|
+
// Renders an emphasis on the given date range. Given an array of segments.
|
|
3302
|
+
renderHighlight: function(segs) {
|
|
3303
|
+
this.renderFill('highlight', segs);
|
|
3266
3304
|
},
|
|
3267
3305
|
|
|
3268
3306
|
|
|
3269
3307
|
// Unrenders the emphasis on a date range
|
|
3270
|
-
|
|
3271
|
-
this.
|
|
3308
|
+
unrenderHighlight: function() {
|
|
3309
|
+
this.unrenderFill('highlight');
|
|
3272
3310
|
},
|
|
3273
3311
|
|
|
3274
3312
|
|
|
@@ -3283,7 +3321,7 @@ var Grid = fc.Grid = RowRenderer.extend({
|
|
|
3283
3321
|
|
|
3284
3322
|
|
|
3285
3323
|
// Renders a set of rectangles over the given segments of time.
|
|
3286
|
-
//
|
|
3324
|
+
// MUST RETURN a subset of segs, the segs that were actually rendered.
|
|
3287
3325
|
// Responsible for populating this.elsByFill. TODO: better API for expressing this requirement
|
|
3288
3326
|
renderFill: function(type, segs) {
|
|
3289
3327
|
// subclasses must implement
|
|
@@ -3291,7 +3329,7 @@ var Grid = fc.Grid = RowRenderer.extend({
|
|
|
3291
3329
|
|
|
3292
3330
|
|
|
3293
3331
|
// Unrenders a specific type of fill that is currently rendered on the grid
|
|
3294
|
-
|
|
3332
|
+
unrenderFill: function(type) {
|
|
3295
3333
|
var el = this.elsByFill[type];
|
|
3296
3334
|
|
|
3297
3335
|
if (el) {
|
|
@@ -3484,11 +3522,11 @@ Grid.mixin({
|
|
|
3484
3522
|
|
|
3485
3523
|
|
|
3486
3524
|
// Unrenders all events currently rendered on the grid
|
|
3487
|
-
|
|
3525
|
+
unrenderEvents: function() {
|
|
3488
3526
|
this.triggerSegMouseout(); // trigger an eventMouseout if user's mouse is over an event
|
|
3489
3527
|
|
|
3490
|
-
this.
|
|
3491
|
-
this.
|
|
3528
|
+
this.unrenderFgSegs();
|
|
3529
|
+
this.unrenderBgSegs();
|
|
3492
3530
|
|
|
3493
3531
|
this.segs = null;
|
|
3494
3532
|
},
|
|
@@ -3511,7 +3549,7 @@ Grid.mixin({
|
|
|
3511
3549
|
|
|
3512
3550
|
|
|
3513
3551
|
// Unrenders all currently rendered foreground segments
|
|
3514
|
-
|
|
3552
|
+
unrenderFgSegs: function() {
|
|
3515
3553
|
// subclasses must implement
|
|
3516
3554
|
},
|
|
3517
3555
|
|
|
@@ -3568,8 +3606,8 @@ Grid.mixin({
|
|
|
3568
3606
|
|
|
3569
3607
|
|
|
3570
3608
|
// Unrenders all the currently rendered background event segments
|
|
3571
|
-
|
|
3572
|
-
this.
|
|
3609
|
+
unrenderBgSegs: function() {
|
|
3610
|
+
this.unrenderFill('bgEvent');
|
|
3573
3611
|
},
|
|
3574
3612
|
|
|
3575
3613
|
|
|
@@ -3749,7 +3787,7 @@ Grid.mixin({
|
|
|
3749
3787
|
}
|
|
3750
3788
|
},
|
|
3751
3789
|
cellOut: function() { // called before mouse moves to a different cell OR moved out of all cells
|
|
3752
|
-
view.
|
|
3790
|
+
view.unrenderDrag(); // unrender whatever was done in renderDrag
|
|
3753
3791
|
mouseFollower.show(); // show in case we are moving out of all cells
|
|
3754
3792
|
dropLocation = null;
|
|
3755
3793
|
},
|
|
@@ -3759,7 +3797,7 @@ Grid.mixin({
|
|
|
3759
3797
|
dragStop: function(ev) {
|
|
3760
3798
|
// do revert animation if hasn't changed. calls a callback when finished (whether animation or not)
|
|
3761
3799
|
mouseFollower.stop(!dropLocation, function() {
|
|
3762
|
-
view.
|
|
3800
|
+
view.unrenderDrag();
|
|
3763
3801
|
view.showEvent(event);
|
|
3764
3802
|
_this.segDragStop(seg, ev);
|
|
3765
3803
|
|
|
@@ -3903,11 +3941,11 @@ Grid.mixin({
|
|
|
3903
3941
|
},
|
|
3904
3942
|
cellOut: function() {
|
|
3905
3943
|
dropLocation = null; // signal unsuccessful
|
|
3906
|
-
_this.
|
|
3944
|
+
_this.unrenderDrag();
|
|
3907
3945
|
enableCursor();
|
|
3908
3946
|
},
|
|
3909
3947
|
dragStop: function() {
|
|
3910
|
-
_this.
|
|
3948
|
+
_this.unrenderDrag();
|
|
3911
3949
|
enableCursor();
|
|
3912
3950
|
|
|
3913
3951
|
if (dropLocation) { // element was dropped on a valid date/time cell
|
|
@@ -3964,7 +4002,7 @@ Grid.mixin({
|
|
|
3964
4002
|
|
|
3965
4003
|
|
|
3966
4004
|
// Unrenders a visual indication of an event or external element being dragged
|
|
3967
|
-
|
|
4005
|
+
unrenderDrag: function() {
|
|
3968
4006
|
// subclasses must implement
|
|
3969
4007
|
},
|
|
3970
4008
|
|
|
@@ -4019,7 +4057,7 @@ Grid.mixin({
|
|
|
4019
4057
|
resizeLocation = null;
|
|
4020
4058
|
},
|
|
4021
4059
|
cellDone: function() { // resets the rendering to show the original event
|
|
4022
|
-
_this.
|
|
4060
|
+
_this.unrenderEventResize();
|
|
4023
4061
|
view.showEvent(event);
|
|
4024
4062
|
enableCursor();
|
|
4025
4063
|
},
|
|
@@ -4118,7 +4156,7 @@ Grid.mixin({
|
|
|
4118
4156
|
|
|
4119
4157
|
|
|
4120
4158
|
// Unrenders a visual indication of an event being resized.
|
|
4121
|
-
|
|
4159
|
+
unrenderEventResize: function() {
|
|
4122
4160
|
// subclasses must implement
|
|
4123
4161
|
},
|
|
4124
4162
|
|
|
@@ -4334,6 +4372,8 @@ Grid.mixin({
|
|
|
4334
4372
|
var segs;
|
|
4335
4373
|
var i, seg;
|
|
4336
4374
|
|
|
4375
|
+
eventRange = this.view.calendar.ensureVisibleEventRange(eventRange);
|
|
4376
|
+
|
|
4337
4377
|
if (rangeToSegsFunc) {
|
|
4338
4378
|
segs = rangeToSegsFunc(eventRange);
|
|
4339
4379
|
}
|
|
@@ -4513,8 +4553,8 @@ var DayGrid = Grid.extend({
|
|
|
4513
4553
|
},
|
|
4514
4554
|
|
|
4515
4555
|
|
|
4516
|
-
|
|
4517
|
-
this.
|
|
4556
|
+
unrenderDates: function() {
|
|
4557
|
+
this.removeSegPopover();
|
|
4518
4558
|
},
|
|
4519
4559
|
|
|
4520
4560
|
|
|
@@ -4598,8 +4638,7 @@ var DayGrid = Grid.extend({
|
|
|
4598
4638
|
------------------------------------------------------------------------------------------------------------------*/
|
|
4599
4639
|
|
|
4600
4640
|
|
|
4601
|
-
|
|
4602
|
-
updateCells: function() {
|
|
4641
|
+
rangeUpdated: function() {
|
|
4603
4642
|
var cellDates;
|
|
4604
4643
|
var firstDay;
|
|
4605
4644
|
var rowCnt;
|
|
@@ -4782,9 +4821,7 @@ var DayGrid = Grid.extend({
|
|
|
4782
4821
|
renderDrag: function(dropLocation, seg) {
|
|
4783
4822
|
|
|
4784
4823
|
// always render a highlight underneath
|
|
4785
|
-
this.renderHighlight(
|
|
4786
|
-
this.view.calendar.ensureVisibleEventRange(dropLocation) // needs to be a proper range
|
|
4787
|
-
);
|
|
4824
|
+
this.renderHighlight(this.eventRangeToSegs(dropLocation));
|
|
4788
4825
|
|
|
4789
4826
|
// if a segment from the same calendar but another component is being dragged, render a helper event
|
|
4790
4827
|
if (seg && !seg.el.closest(this.el).length) {
|
|
@@ -4798,9 +4835,9 @@ var DayGrid = Grid.extend({
|
|
|
4798
4835
|
|
|
4799
4836
|
|
|
4800
4837
|
// Unrenders any visual indication of a hovering event
|
|
4801
|
-
|
|
4802
|
-
this.
|
|
4803
|
-
this.
|
|
4838
|
+
unrenderDrag: function() {
|
|
4839
|
+
this.unrenderHighlight();
|
|
4840
|
+
this.unrenderHelper();
|
|
4804
4841
|
},
|
|
4805
4842
|
|
|
4806
4843
|
|
|
@@ -4810,15 +4847,15 @@ var DayGrid = Grid.extend({
|
|
|
4810
4847
|
|
|
4811
4848
|
// Renders a visual indication of an event being resized
|
|
4812
4849
|
renderEventResize: function(range, seg) {
|
|
4813
|
-
this.renderHighlight(range);
|
|
4850
|
+
this.renderHighlight(this.eventRangeToSegs(range));
|
|
4814
4851
|
this.renderRangeHelper(range, seg);
|
|
4815
4852
|
},
|
|
4816
4853
|
|
|
4817
4854
|
|
|
4818
4855
|
// Unrenders a visual indication of an event being resized
|
|
4819
|
-
|
|
4820
|
-
this.
|
|
4821
|
-
this.
|
|
4856
|
+
unrenderEventResize: function() {
|
|
4857
|
+
this.unrenderHighlight();
|
|
4858
|
+
this.unrenderHelper();
|
|
4822
4859
|
},
|
|
4823
4860
|
|
|
4824
4861
|
|
|
@@ -4862,7 +4899,7 @@ var DayGrid = Grid.extend({
|
|
|
4862
4899
|
|
|
4863
4900
|
|
|
4864
4901
|
// Unrenders any visual indication of a mock helper event
|
|
4865
|
-
|
|
4902
|
+
unrenderHelper: function() {
|
|
4866
4903
|
if (this.helperEls) {
|
|
4867
4904
|
this.helperEls.remove();
|
|
4868
4905
|
this.helperEls = null;
|
|
@@ -4946,9 +4983,9 @@ DayGrid.mixin({
|
|
|
4946
4983
|
|
|
4947
4984
|
|
|
4948
4985
|
// Unrenders all events currently rendered on the grid
|
|
4949
|
-
|
|
4950
|
-
this.
|
|
4951
|
-
Grid.prototype.
|
|
4986
|
+
unrenderEvents: function() {
|
|
4987
|
+
this.removeSegPopover(); // removes the "more.." events popover
|
|
4988
|
+
Grid.prototype.unrenderEvents.apply(this, arguments); // calls the super-method
|
|
4952
4989
|
},
|
|
4953
4990
|
|
|
4954
4991
|
|
|
@@ -4993,7 +5030,7 @@ DayGrid.mixin({
|
|
|
4993
5030
|
|
|
4994
5031
|
|
|
4995
5032
|
// Unrenders all currently rendered foreground event segments
|
|
4996
|
-
|
|
5033
|
+
unrenderFgSegs: function() {
|
|
4997
5034
|
var rowStructs = this.rowStructs || [];
|
|
4998
5035
|
var rowStruct;
|
|
4999
5036
|
|
|
@@ -5265,9 +5302,9 @@ DayGrid.mixin({
|
|
|
5265
5302
|
popoverSegs: null, // an array of segment objects that the segPopover holds. null when not visible
|
|
5266
5303
|
|
|
5267
5304
|
|
|
5268
|
-
|
|
5305
|
+
removeSegPopover: function() {
|
|
5269
5306
|
if (this.segPopover) {
|
|
5270
|
-
this.segPopover.hide(); //
|
|
5307
|
+
this.segPopover.hide(); // in handler, will call segPopover's removeElement
|
|
5271
5308
|
}
|
|
5272
5309
|
},
|
|
5273
5310
|
|
|
@@ -5502,8 +5539,8 @@ DayGrid.mixin({
|
|
|
5502
5539
|
autoHide: true, // when the user clicks elsewhere, hide the popover
|
|
5503
5540
|
viewportConstrain: view.opt('popoverViewportConstrain'),
|
|
5504
5541
|
hide: function() {
|
|
5505
|
-
//
|
|
5506
|
-
_this.segPopover.
|
|
5542
|
+
// kill everything when the popover is hidden
|
|
5543
|
+
_this.segPopover.removeElement();
|
|
5507
5544
|
_this.segPopover = null;
|
|
5508
5545
|
_this.popoverSegs = null;
|
|
5509
5546
|
}
|
|
@@ -5633,10 +5670,9 @@ var TimeGrid = Grid.extend({
|
|
|
5633
5670
|
|
|
5634
5671
|
slotDuration: null, // duration of a "slot", a distinct time segment on given day, visualized by lines
|
|
5635
5672
|
snapDuration: null, // granularity of time for dragging and selecting
|
|
5636
|
-
|
|
5637
5673
|
minTime: null, // Duration object that denotes the first visible time of any given day
|
|
5638
5674
|
maxTime: null, // Duration object that denotes the exclusive visible end time of any given day
|
|
5639
|
-
|
|
5675
|
+
colDates: null, // whole-day dates for each column. left to right
|
|
5640
5676
|
axisFormat: null, // formatting string for times running along vertical axis
|
|
5641
5677
|
|
|
5642
5678
|
dayEls: null, // cells elements in the day-row background
|
|
@@ -5784,36 +5820,37 @@ var TimeGrid = Grid.extend({
|
|
|
5784
5820
|
------------------------------------------------------------------------------------------------------------------*/
|
|
5785
5821
|
|
|
5786
5822
|
|
|
5787
|
-
|
|
5788
|
-
updateCells: function() {
|
|
5823
|
+
rangeUpdated: function() {
|
|
5789
5824
|
var view = this.view;
|
|
5790
|
-
var
|
|
5825
|
+
var colDates = [];
|
|
5791
5826
|
var date;
|
|
5792
5827
|
|
|
5793
5828
|
date = this.start.clone();
|
|
5794
5829
|
while (date.isBefore(this.end)) {
|
|
5795
|
-
|
|
5796
|
-
day: date.clone()
|
|
5797
|
-
});
|
|
5830
|
+
colDates.push(date.clone());
|
|
5798
5831
|
date.add(1, 'day');
|
|
5799
5832
|
date = view.skipHiddenDays(date);
|
|
5800
5833
|
}
|
|
5801
5834
|
|
|
5802
5835
|
if (this.isRTL) {
|
|
5803
|
-
|
|
5836
|
+
colDates.reverse();
|
|
5804
5837
|
}
|
|
5805
5838
|
|
|
5806
|
-
this.
|
|
5807
|
-
this.colCnt =
|
|
5839
|
+
this.colDates = colDates;
|
|
5840
|
+
this.colCnt = colDates.length;
|
|
5808
5841
|
this.rowCnt = Math.ceil((this.maxTime - this.minTime) / this.snapDuration); // # of vertical snaps
|
|
5809
5842
|
},
|
|
5810
5843
|
|
|
5811
5844
|
|
|
5812
5845
|
// Given a cell object, generates its start date. Returns a reference-free copy.
|
|
5813
5846
|
computeCellDate: function(cell) {
|
|
5847
|
+
var date = this.colDates[cell.col];
|
|
5814
5848
|
var time = this.computeSnapTime(cell.row);
|
|
5815
5849
|
|
|
5816
|
-
|
|
5850
|
+
date = this.view.calendar.rezoneDate(date); // give it a 00:00 time
|
|
5851
|
+
date.time(time);
|
|
5852
|
+
|
|
5853
|
+
return date;
|
|
5817
5854
|
},
|
|
5818
5855
|
|
|
5819
5856
|
|
|
@@ -5849,7 +5886,7 @@ var TimeGrid = Grid.extend({
|
|
|
5849
5886
|
};
|
|
5850
5887
|
|
|
5851
5888
|
for (col = 0; col < colCnt; col++) {
|
|
5852
|
-
colDate = this.
|
|
5889
|
+
colDate = this.colDates[col]; // will be ambig time/timezone
|
|
5853
5890
|
colRange = {
|
|
5854
5891
|
start: colDate.clone().time(this.minTime),
|
|
5855
5892
|
end: colDate.clone().time(this.maxTime)
|
|
@@ -5971,17 +6008,15 @@ var TimeGrid = Grid.extend({
|
|
|
5971
6008
|
}
|
|
5972
6009
|
else {
|
|
5973
6010
|
// otherwise, just render a highlight
|
|
5974
|
-
this.renderHighlight(
|
|
5975
|
-
this.view.calendar.ensureVisibleEventRange(dropLocation) // needs to be a proper range
|
|
5976
|
-
);
|
|
6011
|
+
this.renderHighlight(this.eventRangeToSegs(dropLocation));
|
|
5977
6012
|
}
|
|
5978
6013
|
},
|
|
5979
6014
|
|
|
5980
6015
|
|
|
5981
6016
|
// Unrenders any visual indication of an event being dragged
|
|
5982
|
-
|
|
5983
|
-
this.
|
|
5984
|
-
this.
|
|
6017
|
+
unrenderDrag: function() {
|
|
6018
|
+
this.unrenderHelper();
|
|
6019
|
+
this.unrenderHighlight();
|
|
5985
6020
|
},
|
|
5986
6021
|
|
|
5987
6022
|
|
|
@@ -5996,8 +6031,8 @@ var TimeGrid = Grid.extend({
|
|
|
5996
6031
|
|
|
5997
6032
|
|
|
5998
6033
|
// Unrenders any visual indication of an event being resized
|
|
5999
|
-
|
|
6000
|
-
this.
|
|
6034
|
+
unrenderEventResize: function() {
|
|
6035
|
+
this.unrenderHelper();
|
|
6001
6036
|
},
|
|
6002
6037
|
|
|
6003
6038
|
|
|
@@ -6036,7 +6071,7 @@ var TimeGrid = Grid.extend({
|
|
|
6036
6071
|
|
|
6037
6072
|
|
|
6038
6073
|
// Unrenders any mock helper event
|
|
6039
|
-
|
|
6074
|
+
unrenderHelper: function() {
|
|
6040
6075
|
if (this.helperEl) {
|
|
6041
6076
|
this.helperEl.remove();
|
|
6042
6077
|
this.helperEl = null;
|
|
@@ -6054,15 +6089,15 @@ var TimeGrid = Grid.extend({
|
|
|
6054
6089
|
this.renderRangeHelper(range);
|
|
6055
6090
|
}
|
|
6056
6091
|
else {
|
|
6057
|
-
this.renderHighlight(range);
|
|
6092
|
+
this.renderHighlight(this.selectionRangeToSegs(range));
|
|
6058
6093
|
}
|
|
6059
6094
|
},
|
|
6060
6095
|
|
|
6061
6096
|
|
|
6062
6097
|
// Unrenders any visual indication of a selection
|
|
6063
|
-
|
|
6064
|
-
this.
|
|
6065
|
-
this.
|
|
6098
|
+
unrenderSelection: function() {
|
|
6099
|
+
this.unrenderHelper();
|
|
6100
|
+
this.unrenderHighlight();
|
|
6066
6101
|
},
|
|
6067
6102
|
|
|
6068
6103
|
|
|
@@ -6101,7 +6136,7 @@ var TimeGrid = Grid.extend({
|
|
|
6101
6136
|
|
|
6102
6137
|
if (colSegs.length) {
|
|
6103
6138
|
containerEl = $('<div class="fc-' + className + '-container"/>').appendTo(tdEl);
|
|
6104
|
-
dayDate = this.
|
|
6139
|
+
dayDate = this.colDates[col];
|
|
6105
6140
|
|
|
6106
6141
|
for (i = 0; i < colSegs.length; i++) {
|
|
6107
6142
|
seg = colSegs[i];
|
|
@@ -6150,7 +6185,7 @@ TimeGrid.mixin({
|
|
|
6150
6185
|
|
|
6151
6186
|
|
|
6152
6187
|
// Unrenders all currently rendered foreground event segments
|
|
6153
|
-
|
|
6188
|
+
unrenderFgSegs: function(segs) {
|
|
6154
6189
|
if (this.eventSkeletonEl) {
|
|
6155
6190
|
this.eventSkeletonEl.remove();
|
|
6156
6191
|
this.eventSkeletonEl = null;
|
|
@@ -6557,7 +6592,7 @@ var View = fc.View = Class.extend({
|
|
|
6557
6592
|
coordMap: null, // a CoordMap object for converting pixel regions to dates
|
|
6558
6593
|
el: null, // the view's containing element. set by Calendar
|
|
6559
6594
|
|
|
6560
|
-
|
|
6595
|
+
displaying: null, // a promise representing the state of rendering. null if no render requested
|
|
6561
6596
|
isSkeletonRendered: false,
|
|
6562
6597
|
isEventsRendered: false,
|
|
6563
6598
|
|
|
@@ -6572,6 +6607,7 @@ var View = fc.View = Class.extend({
|
|
|
6572
6607
|
intervalDuration: null,
|
|
6573
6608
|
intervalUnit: null, // name of largest unit being displayed, like "month" or "week"
|
|
6574
6609
|
|
|
6610
|
+
isRTL: false,
|
|
6575
6611
|
isSelected: false, // boolean whether a range of time is user-selected or not
|
|
6576
6612
|
|
|
6577
6613
|
// subclasses can optionally use a scroll container
|
|
@@ -6601,6 +6637,7 @@ var View = fc.View = Class.extend({
|
|
|
6601
6637
|
this.nextDayThreshold = moment.duration(this.opt('nextDayThreshold'));
|
|
6602
6638
|
this.initThemingProps();
|
|
6603
6639
|
this.initHiddenDays();
|
|
6640
|
+
this.isRTL = this.opt('isRTL');
|
|
6604
6641
|
|
|
6605
6642
|
this.documentMousedownProxy = proxy(this, 'documentMousedown');
|
|
6606
6643
|
|
|
@@ -6790,7 +6827,7 @@ var View = fc.View = Class.extend({
|
|
|
6790
6827
|
|
|
6791
6828
|
// clean up the skeleton
|
|
6792
6829
|
if (this.isSkeletonRendered) {
|
|
6793
|
-
this.
|
|
6830
|
+
this.unrenderSkeleton();
|
|
6794
6831
|
this.isSkeletonRendered = false;
|
|
6795
6832
|
}
|
|
6796
6833
|
|
|
@@ -6799,62 +6836,83 @@ var View = fc.View = Class.extend({
|
|
|
6799
6836
|
this.el.remove();
|
|
6800
6837
|
|
|
6801
6838
|
// NOTE: don't null-out this.el in case the View was destroyed within an API callback.
|
|
6802
|
-
// We don't null-out the View's other jQuery element references upon destroy,
|
|
6839
|
+
// We don't null-out the View's other jQuery element references upon destroy,
|
|
6840
|
+
// so we shouldn't kill this.el either.
|
|
6803
6841
|
},
|
|
6804
6842
|
|
|
6805
6843
|
|
|
6806
6844
|
// Does everything necessary to display the view centered around the given date.
|
|
6807
6845
|
// Does every type of rendering EXCEPT rendering events.
|
|
6846
|
+
// Is asychronous and returns a promise.
|
|
6808
6847
|
display: function(date) {
|
|
6848
|
+
var _this = this;
|
|
6809
6849
|
var scrollState = null;
|
|
6810
6850
|
|
|
6811
|
-
if (this.
|
|
6851
|
+
if (this.displaying) {
|
|
6812
6852
|
scrollState = this.queryScroll();
|
|
6813
6853
|
}
|
|
6814
6854
|
|
|
6815
|
-
this.clear()
|
|
6816
|
-
|
|
6817
|
-
|
|
6818
|
-
|
|
6819
|
-
|
|
6820
|
-
|
|
6821
|
-
|
|
6822
|
-
|
|
6823
|
-
|
|
6824
|
-
|
|
6825
|
-
this.triggerRender();
|
|
6855
|
+
return this.clear().then(function() { // clear the content first (async)
|
|
6856
|
+
return (
|
|
6857
|
+
_this.displaying =
|
|
6858
|
+
$.when(_this.displayView(date)) // displayView might return a promise
|
|
6859
|
+
.then(function() {
|
|
6860
|
+
_this.forceScroll(_this.computeInitialScroll(scrollState));
|
|
6861
|
+
_this.triggerRender();
|
|
6862
|
+
})
|
|
6863
|
+
);
|
|
6864
|
+
});
|
|
6826
6865
|
},
|
|
6827
6866
|
|
|
6828
6867
|
|
|
6829
6868
|
// Does everything necessary to clear the content of the view.
|
|
6830
6869
|
// Clears dates and events. Does not clear the skeleton.
|
|
6831
|
-
|
|
6832
|
-
|
|
6833
|
-
|
|
6834
|
-
|
|
6835
|
-
|
|
6836
|
-
|
|
6837
|
-
|
|
6838
|
-
|
|
6870
|
+
// Is asychronous and returns a promise.
|
|
6871
|
+
clear: function() {
|
|
6872
|
+
var _this = this;
|
|
6873
|
+
var displaying = this.displaying;
|
|
6874
|
+
|
|
6875
|
+
if (displaying) { // previously displayed, or in the process of being displayed?
|
|
6876
|
+
return displaying.then(function() { // wait for the display to finish
|
|
6877
|
+
_this.displaying = null;
|
|
6878
|
+
_this.clearEvents();
|
|
6879
|
+
return _this.clearView(); // might return a promise. chain it
|
|
6880
|
+
});
|
|
6881
|
+
}
|
|
6882
|
+
else {
|
|
6883
|
+
return $.when(); // an immediately-resolved promise
|
|
6839
6884
|
}
|
|
6840
6885
|
},
|
|
6841
6886
|
|
|
6842
6887
|
|
|
6843
|
-
//
|
|
6844
|
-
|
|
6888
|
+
// Displays the view's non-event content, such as date-related content or anything required by events.
|
|
6889
|
+
// Renders the view's non-content skeleton if necessary.
|
|
6890
|
+
// Can be asynchronous and return a promise.
|
|
6891
|
+
displayView: function(date) {
|
|
6845
6892
|
if (!this.isSkeletonRendered) {
|
|
6846
6893
|
this.renderSkeleton();
|
|
6847
6894
|
this.isSkeletonRendered = true;
|
|
6848
6895
|
}
|
|
6896
|
+
this.setDate(date);
|
|
6897
|
+
if (this.render) {
|
|
6898
|
+
this.render(); // TODO: deprecate
|
|
6899
|
+
}
|
|
6849
6900
|
this.renderDates();
|
|
6901
|
+
this.updateSize();
|
|
6902
|
+
this.renderBusinessHours(); // might need coordinates, so should go after updateSize()
|
|
6850
6903
|
},
|
|
6851
6904
|
|
|
6852
6905
|
|
|
6853
|
-
// Unrenders the view
|
|
6854
|
-
//
|
|
6855
|
-
|
|
6856
|
-
|
|
6857
|
-
this.
|
|
6906
|
+
// Unrenders the view content that was rendered in displayView.
|
|
6907
|
+
// Can be asynchronous and return a promise.
|
|
6908
|
+
clearView: function() {
|
|
6909
|
+
this.unselect();
|
|
6910
|
+
this.triggerUnrender();
|
|
6911
|
+
this.unrenderBusinessHours();
|
|
6912
|
+
this.unrenderDates();
|
|
6913
|
+
if (this.destroy) {
|
|
6914
|
+
this.destroy(); // TODO: deprecate
|
|
6915
|
+
}
|
|
6858
6916
|
},
|
|
6859
6917
|
|
|
6860
6918
|
|
|
@@ -6865,7 +6923,7 @@ var View = fc.View = Class.extend({
|
|
|
6865
6923
|
|
|
6866
6924
|
|
|
6867
6925
|
// Unrenders the basic structure of the view
|
|
6868
|
-
|
|
6926
|
+
unrenderSkeleton: function() {
|
|
6869
6927
|
// subclasses should implement
|
|
6870
6928
|
},
|
|
6871
6929
|
|
|
@@ -6878,7 +6936,7 @@ var View = fc.View = Class.extend({
|
|
|
6878
6936
|
|
|
6879
6937
|
|
|
6880
6938
|
// Unrenders the view's date-related content
|
|
6881
|
-
|
|
6939
|
+
unrenderDates: function() {
|
|
6882
6940
|
// subclasses should override
|
|
6883
6941
|
},
|
|
6884
6942
|
|
|
@@ -6890,7 +6948,7 @@ var View = fc.View = Class.extend({
|
|
|
6890
6948
|
|
|
6891
6949
|
|
|
6892
6950
|
// Unrenders previously-rendered business-hours
|
|
6893
|
-
|
|
6951
|
+
unrenderBusinessHours: function() {
|
|
6894
6952
|
// subclasses should implement
|
|
6895
6953
|
},
|
|
6896
6954
|
|
|
@@ -6902,7 +6960,7 @@ var View = fc.View = Class.extend({
|
|
|
6902
6960
|
|
|
6903
6961
|
|
|
6904
6962
|
// Signals that the view's content is about to be unrendered
|
|
6905
|
-
|
|
6963
|
+
triggerUnrender: function() {
|
|
6906
6964
|
this.trigger('viewDestroy', this, this, this.el);
|
|
6907
6965
|
},
|
|
6908
6966
|
|
|
@@ -6941,8 +6999,8 @@ var View = fc.View = Class.extend({
|
|
|
6941
6999
|
scrollState = this.queryScroll();
|
|
6942
7000
|
}
|
|
6943
7001
|
|
|
6944
|
-
this.updateHeight();
|
|
6945
|
-
this.updateWidth();
|
|
7002
|
+
this.updateHeight(isResize);
|
|
7003
|
+
this.updateWidth(isResize);
|
|
6946
7004
|
|
|
6947
7005
|
if (isResize) {
|
|
6948
7006
|
this.setScroll(scrollState);
|
|
@@ -6951,13 +7009,13 @@ var View = fc.View = Class.extend({
|
|
|
6951
7009
|
|
|
6952
7010
|
|
|
6953
7011
|
// Refreshes the horizontal dimensions of the calendar
|
|
6954
|
-
updateWidth: function() {
|
|
7012
|
+
updateWidth: function(isResize) {
|
|
6955
7013
|
// subclasses should implement
|
|
6956
7014
|
},
|
|
6957
7015
|
|
|
6958
7016
|
|
|
6959
7017
|
// Refreshes the vertical dimensions of the calendar
|
|
6960
|
-
updateHeight: function() {
|
|
7018
|
+
updateHeight: function(isResize) {
|
|
6961
7019
|
var calendar = this.calendar; // we poll the calendar for height information
|
|
6962
7020
|
|
|
6963
7021
|
this.setHeight(
|
|
@@ -7052,8 +7110,11 @@ var View = fc.View = Class.extend({
|
|
|
7052
7110
|
// Does everything necessary to clear the view's currently-rendered events
|
|
7053
7111
|
clearEvents: function() {
|
|
7054
7112
|
if (this.isEventsRendered) {
|
|
7055
|
-
this.
|
|
7056
|
-
this.destroyEvents
|
|
7113
|
+
this.triggerEventUnrender();
|
|
7114
|
+
if (this.destroyEvents) {
|
|
7115
|
+
this.destroyEvents(); // TODO: deprecate
|
|
7116
|
+
}
|
|
7117
|
+
this.unrenderEvents();
|
|
7057
7118
|
this.isEventsRendered = false;
|
|
7058
7119
|
}
|
|
7059
7120
|
},
|
|
@@ -7066,7 +7127,7 @@ var View = fc.View = Class.extend({
|
|
|
7066
7127
|
|
|
7067
7128
|
|
|
7068
7129
|
// Removes event elements from the view.
|
|
7069
|
-
|
|
7130
|
+
unrenderEvents: function() {
|
|
7070
7131
|
// subclasses should implement
|
|
7071
7132
|
},
|
|
7072
7133
|
|
|
@@ -7081,7 +7142,7 @@ var View = fc.View = Class.extend({
|
|
|
7081
7142
|
|
|
7082
7143
|
|
|
7083
7144
|
// Signals that all event elements are about to be removed
|
|
7084
|
-
|
|
7145
|
+
triggerEventUnrender: function() {
|
|
7085
7146
|
this.renderedEventSegEach(function(seg) {
|
|
7086
7147
|
this.trigger('eventDestroy', seg.event, seg.event, seg.el);
|
|
7087
7148
|
});
|
|
@@ -7230,7 +7291,7 @@ var View = fc.View = Class.extend({
|
|
|
7230
7291
|
|
|
7231
7292
|
|
|
7232
7293
|
// Unrenders a visual indication of an event or external-element being dragged.
|
|
7233
|
-
|
|
7294
|
+
unrenderDrag: function() {
|
|
7234
7295
|
// subclasses must implement
|
|
7235
7296
|
},
|
|
7236
7297
|
|
|
@@ -7308,6 +7369,12 @@ var View = fc.View = Class.extend({
|
|
|
7308
7369
|
// Called when a new selection is made. Updates internal state and triggers handlers.
|
|
7309
7370
|
reportSelection: function(range, ev) {
|
|
7310
7371
|
this.isSelected = true;
|
|
7372
|
+
this.triggerSelect(range, ev);
|
|
7373
|
+
},
|
|
7374
|
+
|
|
7375
|
+
|
|
7376
|
+
// Triggers handlers to 'select'
|
|
7377
|
+
triggerSelect: function(range, ev) {
|
|
7311
7378
|
this.trigger('select', null, range.start, range.end, ev);
|
|
7312
7379
|
},
|
|
7313
7380
|
|
|
@@ -7317,14 +7384,17 @@ var View = fc.View = Class.extend({
|
|
|
7317
7384
|
unselect: function(ev) {
|
|
7318
7385
|
if (this.isSelected) {
|
|
7319
7386
|
this.isSelected = false;
|
|
7320
|
-
this.destroySelection
|
|
7387
|
+
if (this.destroySelection) {
|
|
7388
|
+
this.destroySelection(); // TODO: deprecate
|
|
7389
|
+
}
|
|
7390
|
+
this.unrenderSelection();
|
|
7321
7391
|
this.trigger('unselect', null, ev);
|
|
7322
7392
|
}
|
|
7323
7393
|
},
|
|
7324
7394
|
|
|
7325
7395
|
|
|
7326
7396
|
// Unrenders a visual indication of selection
|
|
7327
|
-
|
|
7397
|
+
unrenderSelection: function() {
|
|
7328
7398
|
// subclasses should implement
|
|
7329
7399
|
},
|
|
7330
7400
|
|
|
@@ -7345,6 +7415,16 @@ var View = fc.View = Class.extend({
|
|
|
7345
7415
|
},
|
|
7346
7416
|
|
|
7347
7417
|
|
|
7418
|
+
/* Day Click
|
|
7419
|
+
------------------------------------------------------------------------------------------------------------------*/
|
|
7420
|
+
|
|
7421
|
+
|
|
7422
|
+
// Triggers handlers to 'dayClick'
|
|
7423
|
+
triggerDayClick: function(cell, dayEl, ev) {
|
|
7424
|
+
this.trigger('dayClick', dayEl, cell.start, ev);
|
|
7425
|
+
},
|
|
7426
|
+
|
|
7427
|
+
|
|
7348
7428
|
/* Date Utils
|
|
7349
7429
|
------------------------------------------------------------------------------------------------------------------*/
|
|
7350
7430
|
|
|
@@ -7443,7 +7523,7 @@ var View = fc.View = Class.extend({
|
|
|
7443
7523
|
|
|
7444
7524
|
;;
|
|
7445
7525
|
|
|
7446
|
-
var Calendar = fc.Calendar =
|
|
7526
|
+
var Calendar = fc.Calendar = Class.extend({
|
|
7447
7527
|
|
|
7448
7528
|
dirDefaults: null, // option defaults related to LTR or RTL
|
|
7449
7529
|
langDefaults: null, // option defaults related to current locale
|
|
@@ -7452,6 +7532,7 @@ var Calendar = fc.Calendar = fc.CalendarBase = Class.extend({
|
|
|
7452
7532
|
viewSpecCache: null, // cache of view definitions
|
|
7453
7533
|
view: null, // current View object
|
|
7454
7534
|
header: null,
|
|
7535
|
+
loadingLevel: 0, // number of simultaneous loading tasks
|
|
7455
7536
|
|
|
7456
7537
|
|
|
7457
7538
|
// a lot of this class' OOP logic is scoped within this constructor function,
|
|
@@ -7459,6 +7540,11 @@ var Calendar = fc.Calendar = fc.CalendarBase = Class.extend({
|
|
|
7459
7540
|
constructor: Calendar_constructor,
|
|
7460
7541
|
|
|
7461
7542
|
|
|
7543
|
+
// Subclasses can override this for initialization logic after the constructor has been called
|
|
7544
|
+
initialize: function() {
|
|
7545
|
+
},
|
|
7546
|
+
|
|
7547
|
+
|
|
7462
7548
|
// Initializes `this.options` and other important options-related objects
|
|
7463
7549
|
initOptions: function(overrides) {
|
|
7464
7550
|
var lang, langDefaults;
|
|
@@ -7485,12 +7571,12 @@ var Calendar = fc.Calendar = fc.CalendarBase = Class.extend({
|
|
|
7485
7571
|
this.dirDefaults = dirDefaults;
|
|
7486
7572
|
this.langDefaults = langDefaults;
|
|
7487
7573
|
this.overrides = overrides;
|
|
7488
|
-
this.options = mergeOptions( // merge defaults and overrides. lowest to highest precedence
|
|
7574
|
+
this.options = mergeOptions([ // merge defaults and overrides. lowest to highest precedence
|
|
7489
7575
|
Calendar.defaults, // global defaults
|
|
7490
7576
|
dirDefaults,
|
|
7491
7577
|
langDefaults,
|
|
7492
7578
|
overrides
|
|
7493
|
-
);
|
|
7579
|
+
]);
|
|
7494
7580
|
populateInstanceComputableOptions(this.options);
|
|
7495
7581
|
|
|
7496
7582
|
this.viewSpecCache = {}; // somewhat unrelated
|
|
@@ -7535,43 +7621,48 @@ var Calendar = fc.Calendar = fc.CalendarBase = Class.extend({
|
|
|
7535
7621
|
// Builds an object with information on how to create a given view
|
|
7536
7622
|
buildViewSpec: function(requestedViewType) {
|
|
7537
7623
|
var viewOverrides = this.overrides.views || {};
|
|
7624
|
+
var specChain = []; // for the view. lowest to highest priority
|
|
7538
7625
|
var defaultsChain = []; // for the view. lowest to highest priority
|
|
7539
7626
|
var overridesChain = []; // for the view. lowest to highest priority
|
|
7540
7627
|
var viewType = requestedViewType;
|
|
7541
|
-
var
|
|
7542
|
-
var defaults; // for the view
|
|
7628
|
+
var spec; // for the view
|
|
7543
7629
|
var overrides; // for the view
|
|
7544
7630
|
var duration;
|
|
7545
7631
|
var unit;
|
|
7546
|
-
var spec;
|
|
7547
7632
|
|
|
7548
7633
|
// iterate from the specific view definition to a more general one until we hit an actual View class
|
|
7549
|
-
while (viewType
|
|
7550
|
-
|
|
7551
|
-
overrides = viewOverrides[viewType]
|
|
7552
|
-
|
|
7553
|
-
viewType = overrides.type || defaults.type; // for next iteration
|
|
7634
|
+
while (viewType) {
|
|
7635
|
+
spec = fcViews[viewType];
|
|
7636
|
+
overrides = viewOverrides[viewType];
|
|
7637
|
+
viewType = null; // clear. might repopulate for another iteration
|
|
7554
7638
|
|
|
7555
|
-
if (typeof
|
|
7556
|
-
|
|
7557
|
-
defaultsChain.unshift(viewClass.defaults || {});
|
|
7639
|
+
if (typeof spec === 'function') { // TODO: deprecate
|
|
7640
|
+
spec = { 'class': spec };
|
|
7558
7641
|
}
|
|
7559
|
-
|
|
7560
|
-
|
|
7642
|
+
|
|
7643
|
+
if (spec) {
|
|
7644
|
+
specChain.unshift(spec);
|
|
7645
|
+
defaultsChain.unshift(spec.defaults || {});
|
|
7646
|
+
duration = duration || spec.duration;
|
|
7647
|
+
viewType = viewType || spec.type;
|
|
7648
|
+
}
|
|
7649
|
+
|
|
7650
|
+
if (overrides) {
|
|
7651
|
+
overridesChain.unshift(overrides); // view-specific option hashes have options at zero-level
|
|
7652
|
+
duration = duration || overrides.duration;
|
|
7653
|
+
viewType = viewType || overrides.type;
|
|
7561
7654
|
}
|
|
7562
|
-
overridesChain.unshift(overrides);
|
|
7563
7655
|
}
|
|
7564
7656
|
|
|
7565
|
-
|
|
7566
|
-
|
|
7657
|
+
spec = mergeProps(specChain);
|
|
7658
|
+
spec.type = requestedViewType;
|
|
7659
|
+
if (!spec['class']) {
|
|
7660
|
+
return false;
|
|
7661
|
+
}
|
|
7567
7662
|
|
|
7568
|
-
|
|
7569
|
-
|
|
7570
|
-
|
|
7571
|
-
duration = null;
|
|
7572
|
-
}
|
|
7573
|
-
}
|
|
7574
|
-
if (duration) {
|
|
7663
|
+
if (duration) {
|
|
7664
|
+
duration = moment.duration(duration);
|
|
7665
|
+
if (duration.valueOf()) { // valid?
|
|
7575
7666
|
spec.duration = duration;
|
|
7576
7667
|
unit = computeIntervalUnit(duration);
|
|
7577
7668
|
|
|
@@ -7582,29 +7673,28 @@ var Calendar = fc.Calendar = fc.CalendarBase = Class.extend({
|
|
|
7582
7673
|
overridesChain.unshift(viewOverrides[unit] || {});
|
|
7583
7674
|
}
|
|
7584
7675
|
}
|
|
7676
|
+
}
|
|
7585
7677
|
|
|
7586
|
-
|
|
7587
|
-
|
|
7588
|
-
spec.overrides = mergeOptions.apply(null, overridesChain);
|
|
7678
|
+
spec.defaults = mergeOptions(defaultsChain);
|
|
7679
|
+
spec.overrides = mergeOptions(overridesChain);
|
|
7589
7680
|
|
|
7590
|
-
|
|
7591
|
-
|
|
7681
|
+
this.buildViewSpecOptions(spec);
|
|
7682
|
+
this.buildViewSpecButtonText(spec, requestedViewType);
|
|
7592
7683
|
|
|
7593
|
-
|
|
7594
|
-
}
|
|
7684
|
+
return spec;
|
|
7595
7685
|
},
|
|
7596
7686
|
|
|
7597
7687
|
|
|
7598
7688
|
// Builds and assigns a view spec's options object from its already-assigned defaults and overrides
|
|
7599
7689
|
buildViewSpecOptions: function(spec) {
|
|
7600
|
-
spec.options = mergeOptions( // lowest to highest priority
|
|
7690
|
+
spec.options = mergeOptions([ // lowest to highest priority
|
|
7601
7691
|
Calendar.defaults, // global defaults
|
|
7602
7692
|
spec.defaults, // view's defaults (from ViewSubclass.defaults)
|
|
7603
7693
|
this.dirDefaults,
|
|
7604
7694
|
this.langDefaults, // locale and dir take precedence over view's defaults!
|
|
7605
7695
|
this.overrides, // calendar's overrides (options given to constructor)
|
|
7606
7696
|
spec.overrides // view's overrides (view-specific options)
|
|
7607
|
-
);
|
|
7697
|
+
]);
|
|
7608
7698
|
populateInstanceComputableOptions(spec.options);
|
|
7609
7699
|
},
|
|
7610
7700
|
|
|
@@ -7647,6 +7737,40 @@ var Calendar = fc.Calendar = fc.CalendarBase = Class.extend({
|
|
|
7647
7737
|
// Returns a boolean about whether the view is okay to instantiate at some point
|
|
7648
7738
|
isValidViewType: function(viewType) {
|
|
7649
7739
|
return Boolean(this.getViewSpec(viewType));
|
|
7740
|
+
},
|
|
7741
|
+
|
|
7742
|
+
|
|
7743
|
+
// Should be called when any type of async data fetching begins
|
|
7744
|
+
pushLoading: function() {
|
|
7745
|
+
if (!(this.loadingLevel++)) {
|
|
7746
|
+
this.trigger('loading', null, true, this.view);
|
|
7747
|
+
}
|
|
7748
|
+
},
|
|
7749
|
+
|
|
7750
|
+
|
|
7751
|
+
// Should be called when any type of async data fetching completes
|
|
7752
|
+
popLoading: function() {
|
|
7753
|
+
if (!(--this.loadingLevel)) {
|
|
7754
|
+
this.trigger('loading', null, false, this.view);
|
|
7755
|
+
}
|
|
7756
|
+
},
|
|
7757
|
+
|
|
7758
|
+
|
|
7759
|
+
// Given arguments to the select method in the API, returns a range
|
|
7760
|
+
buildSelectRange: function(start, end) {
|
|
7761
|
+
|
|
7762
|
+
start = this.moment(start);
|
|
7763
|
+
if (end) {
|
|
7764
|
+
end = this.moment(end);
|
|
7765
|
+
}
|
|
7766
|
+
else if (start.hasTime()) {
|
|
7767
|
+
end = start.clone().add(this.defaultTimedEventDuration);
|
|
7768
|
+
}
|
|
7769
|
+
else {
|
|
7770
|
+
end = start.clone().add(this.defaultAllDayEventDuration);
|
|
7771
|
+
}
|
|
7772
|
+
|
|
7773
|
+
return { start: start, end: end };
|
|
7650
7774
|
}
|
|
7651
7775
|
|
|
7652
7776
|
});
|
|
@@ -7930,7 +8054,7 @@ function Calendar_constructor(element, overrides) {
|
|
|
7930
8054
|
// It is still the "current" view, just not rendered.
|
|
7931
8055
|
}
|
|
7932
8056
|
|
|
7933
|
-
header.
|
|
8057
|
+
header.removeElement();
|
|
7934
8058
|
content.remove();
|
|
7935
8059
|
element.removeClass('fc fc-ltr fc-rtl fc-unthemed ui-widget');
|
|
7936
8060
|
|
|
@@ -7955,7 +8079,7 @@ function Calendar_constructor(element, overrides) {
|
|
|
7955
8079
|
function renderView(viewType) {
|
|
7956
8080
|
ignoreWindowResize++;
|
|
7957
8081
|
|
|
7958
|
-
// if viewType is changing,
|
|
8082
|
+
// if viewType is changing, remove the old view's rendering
|
|
7959
8083
|
if (currentView && viewType && currentView.type !== viewType) {
|
|
7960
8084
|
header.deactivateButton(currentView.type);
|
|
7961
8085
|
freezeContentHeight(); // prevent a scroll jump when view element is removed
|
|
@@ -7982,14 +8106,14 @@ function Calendar_constructor(element, overrides) {
|
|
|
7982
8106
|
|
|
7983
8107
|
// render or rerender the view
|
|
7984
8108
|
if (
|
|
7985
|
-
!currentView.
|
|
8109
|
+
!currentView.displaying ||
|
|
7986
8110
|
!date.isWithin(currentView.intervalStart, currentView.intervalEnd) // implicit date window change
|
|
7987
8111
|
) {
|
|
7988
8112
|
if (elementVisible()) {
|
|
7989
8113
|
|
|
7990
8114
|
freezeContentHeight();
|
|
7991
8115
|
currentView.display(date);
|
|
7992
|
-
unfreezeContentHeight();
|
|
8116
|
+
unfreezeContentHeight(); // immediately unfreeze regardless of whether display is async
|
|
7993
8117
|
|
|
7994
8118
|
// need to do this after View::render, so dates are calculated
|
|
7995
8119
|
updateHeaderTitle();
|
|
@@ -8157,19 +8281,9 @@ function Calendar_constructor(element, overrides) {
|
|
|
8157
8281
|
|
|
8158
8282
|
|
|
8159
8283
|
function select(start, end) {
|
|
8160
|
-
|
|
8161
|
-
|
|
8162
|
-
|
|
8163
|
-
end = t.moment(end);
|
|
8164
|
-
}
|
|
8165
|
-
else if (start.hasTime()) {
|
|
8166
|
-
end = start.clone().add(t.defaultTimedEventDuration);
|
|
8167
|
-
}
|
|
8168
|
-
else {
|
|
8169
|
-
end = start.clone().add(t.defaultAllDayEventDuration);
|
|
8170
|
-
}
|
|
8171
|
-
|
|
8172
|
-
currentView.select({ start: start, end: end }); // accepts a range
|
|
8284
|
+
currentView.select(
|
|
8285
|
+
t.buildSelectRange.apply(t, arguments)
|
|
8286
|
+
);
|
|
8173
8287
|
}
|
|
8174
8288
|
|
|
8175
8289
|
|
|
@@ -8304,6 +8418,7 @@ function Calendar_constructor(element, overrides) {
|
|
|
8304
8418
|
}
|
|
8305
8419
|
}
|
|
8306
8420
|
|
|
8421
|
+
t.initialize();
|
|
8307
8422
|
}
|
|
8308
8423
|
|
|
8309
8424
|
;;
|
|
@@ -8333,6 +8448,8 @@ Calendar.defaults = {
|
|
|
8333
8448
|
weekNumberCalculation: 'local',
|
|
8334
8449
|
|
|
8335
8450
|
//editable: false,
|
|
8451
|
+
|
|
8452
|
+
scrollTime: '06:00:00',
|
|
8336
8453
|
|
|
8337
8454
|
// event ajax
|
|
8338
8455
|
lazyFetching: true,
|
|
@@ -8475,7 +8592,7 @@ fc.lang = function(langCode, newFcOptions) {
|
|
|
8475
8592
|
|
|
8476
8593
|
// provided new options for this language? merge them in
|
|
8477
8594
|
if (newFcOptions) {
|
|
8478
|
-
fcOptions = langOptionHash[langCode] = mergeOptions(fcOptions, newFcOptions);
|
|
8595
|
+
fcOptions = langOptionHash[langCode] = mergeOptions([ fcOptions, newFcOptions ]);
|
|
8479
8596
|
}
|
|
8480
8597
|
|
|
8481
8598
|
// compute language options that weren't defined.
|
|
@@ -8631,7 +8748,7 @@ function Header(calendar, options) {
|
|
|
8631
8748
|
|
|
8632
8749
|
// exports
|
|
8633
8750
|
t.render = render;
|
|
8634
|
-
t.
|
|
8751
|
+
t.removeElement = removeElement;
|
|
8635
8752
|
t.updateTitle = updateTitle;
|
|
8636
8753
|
t.activateButton = activateButton;
|
|
8637
8754
|
t.deactivateButton = deactivateButton;
|
|
@@ -8662,8 +8779,9 @@ function Header(calendar, options) {
|
|
|
8662
8779
|
}
|
|
8663
8780
|
|
|
8664
8781
|
|
|
8665
|
-
function
|
|
8782
|
+
function removeElement() {
|
|
8666
8783
|
el.remove();
|
|
8784
|
+
el = $();
|
|
8667
8785
|
}
|
|
8668
8786
|
|
|
8669
8787
|
|
|
@@ -8884,8 +9002,6 @@ function EventManager(options) { // assumed to be a calendar
|
|
|
8884
9002
|
|
|
8885
9003
|
|
|
8886
9004
|
// imports
|
|
8887
|
-
var trigger = t.trigger;
|
|
8888
|
-
var getView = t.getView;
|
|
8889
9005
|
var reportEvents = t.reportEvents;
|
|
8890
9006
|
|
|
8891
9007
|
|
|
@@ -8895,7 +9011,6 @@ function EventManager(options) { // assumed to be a calendar
|
|
|
8895
9011
|
var rangeStart, rangeEnd;
|
|
8896
9012
|
var currentFetchID = 0;
|
|
8897
9013
|
var pendingSourceCnt = 0;
|
|
8898
|
-
var loadingLevel = 0;
|
|
8899
9014
|
var cache = []; // holds events that have already been expanded
|
|
8900
9015
|
|
|
8901
9016
|
|
|
@@ -9002,7 +9117,7 @@ function EventManager(options) { // assumed to be a calendar
|
|
|
9002
9117
|
var events = source.events;
|
|
9003
9118
|
if (events) {
|
|
9004
9119
|
if ($.isFunction(events)) {
|
|
9005
|
-
pushLoading();
|
|
9120
|
+
t.pushLoading();
|
|
9006
9121
|
events.call(
|
|
9007
9122
|
t, // this, the Calendar object
|
|
9008
9123
|
rangeStart.clone(),
|
|
@@ -9010,7 +9125,7 @@ function EventManager(options) { // assumed to be a calendar
|
|
|
9010
9125
|
options.timezone,
|
|
9011
9126
|
function(events) {
|
|
9012
9127
|
callback(events);
|
|
9013
|
-
popLoading();
|
|
9128
|
+
t.popLoading();
|
|
9014
9129
|
}
|
|
9015
9130
|
);
|
|
9016
9131
|
}
|
|
@@ -9056,7 +9171,7 @@ function EventManager(options) { // assumed to be a calendar
|
|
|
9056
9171
|
data[timezoneParam] = options.timezone;
|
|
9057
9172
|
}
|
|
9058
9173
|
|
|
9059
|
-
pushLoading();
|
|
9174
|
+
t.pushLoading();
|
|
9060
9175
|
$.ajax($.extend({}, ajaxDefaults, source, {
|
|
9061
9176
|
data: data,
|
|
9062
9177
|
success: function(events) {
|
|
@@ -9073,7 +9188,7 @@ function EventManager(options) { // assumed to be a calendar
|
|
|
9073
9188
|
},
|
|
9074
9189
|
complete: function() {
|
|
9075
9190
|
applyAll(complete, this, arguments);
|
|
9076
|
-
popLoading();
|
|
9191
|
+
t.popLoading();
|
|
9077
9192
|
}
|
|
9078
9193
|
}));
|
|
9079
9194
|
}else{
|
|
@@ -9288,25 +9403,6 @@ function EventManager(options) { // assumed to be a calendar
|
|
|
9288
9403
|
|
|
9289
9404
|
|
|
9290
9405
|
|
|
9291
|
-
/* Loading State
|
|
9292
|
-
-----------------------------------------------------------------------------*/
|
|
9293
|
-
|
|
9294
|
-
|
|
9295
|
-
function pushLoading() {
|
|
9296
|
-
if (!(loadingLevel++)) {
|
|
9297
|
-
trigger('loading', null, true, getView());
|
|
9298
|
-
}
|
|
9299
|
-
}
|
|
9300
|
-
|
|
9301
|
-
|
|
9302
|
-
function popLoading() {
|
|
9303
|
-
if (!(--loadingLevel)) {
|
|
9304
|
-
trigger('loading', null, false, getView());
|
|
9305
|
-
}
|
|
9306
|
-
}
|
|
9307
|
-
|
|
9308
|
-
|
|
9309
|
-
|
|
9310
9406
|
/* Event Normalization
|
|
9311
9407
|
-----------------------------------------------------------------------------*/
|
|
9312
9408
|
|
|
@@ -9991,7 +10087,7 @@ function backupEventDates(event) {
|
|
|
9991
10087
|
// It is a manager for a DayGrid subcomponent, which does most of the heavy lifting.
|
|
9992
10088
|
// It is responsible for managing width/height.
|
|
9993
10089
|
|
|
9994
|
-
var BasicView =
|
|
10090
|
+
var BasicView = View.extend({
|
|
9995
10091
|
|
|
9996
10092
|
dayGrid: null, // the main subcomponent that does most of the heavy lifting
|
|
9997
10093
|
|
|
@@ -10039,7 +10135,7 @@ var BasicView = fcViews.basic = View.extend({
|
|
|
10039
10135
|
|
|
10040
10136
|
|
|
10041
10137
|
// Renders the view into `this.el`, which should already be assigned
|
|
10042
|
-
|
|
10138
|
+
renderDates: function() {
|
|
10043
10139
|
|
|
10044
10140
|
this.dayNumbersVisible = this.dayGrid.rowCnt > 1; // TODO: make grid responsible
|
|
10045
10141
|
this.weekNumbersVisible = this.opt('weekNumbers');
|
|
@@ -10059,8 +10155,8 @@ var BasicView = fcViews.basic = View.extend({
|
|
|
10059
10155
|
|
|
10060
10156
|
// Unrenders the content of the view. Since we haven't separated skeleton rendering from date rendering,
|
|
10061
10157
|
// always completely kill the dayGrid's rendering.
|
|
10062
|
-
|
|
10063
|
-
this.dayGrid.
|
|
10158
|
+
unrenderDates: function() {
|
|
10159
|
+
this.dayGrid.unrenderDates();
|
|
10064
10160
|
this.dayGrid.removeElement();
|
|
10065
10161
|
},
|
|
10066
10162
|
|
|
@@ -10203,7 +10299,7 @@ var BasicView = fcViews.basic = View.extend({
|
|
|
10203
10299
|
unsetScroller(this.scrollerEl);
|
|
10204
10300
|
uncompensateScroll(this.headRowEl);
|
|
10205
10301
|
|
|
10206
|
-
this.dayGrid.
|
|
10302
|
+
this.dayGrid.removeSegPopover(); // kill the "more" popover if displayed
|
|
10207
10303
|
|
|
10208
10304
|
// is the event limit a constant level number?
|
|
10209
10305
|
if (eventLimit && typeof eventLimit === 'number') {
|
|
@@ -10259,8 +10355,8 @@ var BasicView = fcViews.basic = View.extend({
|
|
|
10259
10355
|
|
|
10260
10356
|
|
|
10261
10357
|
// Unrenders all event elements and clears internal segment data
|
|
10262
|
-
|
|
10263
|
-
this.dayGrid.
|
|
10358
|
+
unrenderEvents: function() {
|
|
10359
|
+
this.dayGrid.unrenderEvents();
|
|
10264
10360
|
|
|
10265
10361
|
// we DON'T need to call updateHeight() because:
|
|
10266
10362
|
// A) a renderEvents() call always happens after this, which will eventually call updateHeight()
|
|
@@ -10278,8 +10374,8 @@ var BasicView = fcViews.basic = View.extend({
|
|
|
10278
10374
|
},
|
|
10279
10375
|
|
|
10280
10376
|
|
|
10281
|
-
|
|
10282
|
-
this.dayGrid.
|
|
10377
|
+
unrenderDrag: function() {
|
|
10378
|
+
this.dayGrid.unrenderDrag();
|
|
10283
10379
|
},
|
|
10284
10380
|
|
|
10285
10381
|
|
|
@@ -10294,8 +10390,8 @@ var BasicView = fcViews.basic = View.extend({
|
|
|
10294
10390
|
|
|
10295
10391
|
|
|
10296
10392
|
// Unrenders a visual indications of a selection
|
|
10297
|
-
|
|
10298
|
-
this.dayGrid.
|
|
10393
|
+
unrenderSelection: function() {
|
|
10394
|
+
this.dayGrid.unrenderSelection();
|
|
10299
10395
|
}
|
|
10300
10396
|
|
|
10301
10397
|
});
|
|
@@ -10305,7 +10401,7 @@ var BasicView = fcViews.basic = View.extend({
|
|
|
10305
10401
|
/* A month view with day cells running in rows (one-per-week) and columns
|
|
10306
10402
|
----------------------------------------------------------------------------------------------------------------------*/
|
|
10307
10403
|
|
|
10308
|
-
var MonthView =
|
|
10404
|
+
var MonthView = BasicView.extend({
|
|
10309
10405
|
|
|
10310
10406
|
// Produces information about what range to display
|
|
10311
10407
|
computeRange: function(date) {
|
|
@@ -10347,28 +10443,28 @@ var MonthView = fcViews.month = BasicView.extend({
|
|
|
10347
10443
|
|
|
10348
10444
|
});
|
|
10349
10445
|
|
|
10350
|
-
|
|
10446
|
+
;;
|
|
10351
10447
|
|
|
10352
|
-
|
|
10353
|
-
|
|
10448
|
+
fcViews.basic = {
|
|
10449
|
+
'class': BasicView
|
|
10354
10450
|
};
|
|
10355
|
-
;;
|
|
10356
10451
|
|
|
10357
|
-
|
|
10358
|
-
|
|
10452
|
+
fcViews.basicDay = {
|
|
10453
|
+
type: 'basic',
|
|
10454
|
+
duration: { days: 1 }
|
|
10455
|
+
};
|
|
10359
10456
|
|
|
10360
10457
|
fcViews.basicWeek = {
|
|
10361
10458
|
type: 'basic',
|
|
10362
10459
|
duration: { weeks: 1 }
|
|
10363
10460
|
};
|
|
10364
|
-
;;
|
|
10365
|
-
|
|
10366
|
-
/* A view with a single simple day cell
|
|
10367
|
-
----------------------------------------------------------------------------------------------------------------------*/
|
|
10368
10461
|
|
|
10369
|
-
fcViews.
|
|
10370
|
-
|
|
10371
|
-
duration: {
|
|
10462
|
+
fcViews.month = {
|
|
10463
|
+
'class': MonthView,
|
|
10464
|
+
duration: { months: 1 }, // important for prev/next
|
|
10465
|
+
defaults: {
|
|
10466
|
+
fixedWeekCount: true
|
|
10467
|
+
}
|
|
10372
10468
|
};
|
|
10373
10469
|
;;
|
|
10374
10470
|
|
|
@@ -10377,19 +10473,7 @@ fcViews.basicDay = {
|
|
|
10377
10473
|
// Is a manager for the TimeGrid subcomponent and possibly the DayGrid subcomponent (if allDaySlot is on).
|
|
10378
10474
|
// Responsible for managing width/height.
|
|
10379
10475
|
|
|
10380
|
-
var
|
|
10381
|
-
allDaySlot: true,
|
|
10382
|
-
allDayText: 'all-day',
|
|
10383
|
-
scrollTime: '06:00:00',
|
|
10384
|
-
slotDuration: '00:30:00',
|
|
10385
|
-
minTime: '00:00:00',
|
|
10386
|
-
maxTime: '24:00:00',
|
|
10387
|
-
slotEventOverlap: true // a bad name. confused with overlap/constraint system
|
|
10388
|
-
};
|
|
10389
|
-
|
|
10390
|
-
var AGENDA_ALL_DAY_EVENT_LIMIT = 5;
|
|
10391
|
-
|
|
10392
|
-
var AgendaView = fcViews.agenda = View.extend({
|
|
10476
|
+
var AgendaView = View.extend({
|
|
10393
10477
|
|
|
10394
10478
|
timeGrid: null, // the main time-grid subcomponent of this view
|
|
10395
10479
|
dayGrid: null, // the "all-day" subcomponent. if all-day is turned off, this will be null
|
|
@@ -10437,7 +10521,7 @@ var AgendaView = fcViews.agenda = View.extend({
|
|
|
10437
10521
|
|
|
10438
10522
|
|
|
10439
10523
|
// Renders the view into `this.el`, which has already been assigned
|
|
10440
|
-
|
|
10524
|
+
renderDates: function() {
|
|
10441
10525
|
|
|
10442
10526
|
this.el.addClass('fc-agenda-view').html(this.renderHtml());
|
|
10443
10527
|
|
|
@@ -10466,12 +10550,12 @@ var AgendaView = fcViews.agenda = View.extend({
|
|
|
10466
10550
|
|
|
10467
10551
|
// Unrenders the content of the view. Since we haven't separated skeleton rendering from date rendering,
|
|
10468
10552
|
// always completely kill each grid's rendering.
|
|
10469
|
-
|
|
10470
|
-
this.timeGrid.
|
|
10553
|
+
unrenderDates: function() {
|
|
10554
|
+
this.timeGrid.unrenderDates();
|
|
10471
10555
|
this.timeGrid.removeElement();
|
|
10472
10556
|
|
|
10473
10557
|
if (this.dayGrid) {
|
|
10474
|
-
this.dayGrid.
|
|
10558
|
+
this.dayGrid.unrenderDates();
|
|
10475
10559
|
this.dayGrid.removeElement();
|
|
10476
10560
|
}
|
|
10477
10561
|
},
|
|
@@ -10610,7 +10694,7 @@ var AgendaView = fcViews.agenda = View.extend({
|
|
|
10610
10694
|
|
|
10611
10695
|
// limit number of events in the all-day area
|
|
10612
10696
|
if (this.dayGrid) {
|
|
10613
|
-
this.dayGrid.
|
|
10697
|
+
this.dayGrid.removeSegPopover(); // kill the "more" popover if displayed
|
|
10614
10698
|
|
|
10615
10699
|
eventLimit = this.opt('eventLimit');
|
|
10616
10700
|
if (eventLimit && typeof eventLimit !== 'number') {
|
|
@@ -10701,12 +10785,12 @@ var AgendaView = fcViews.agenda = View.extend({
|
|
|
10701
10785
|
|
|
10702
10786
|
|
|
10703
10787
|
// Unrenders all event elements and clears internal segment data
|
|
10704
|
-
|
|
10788
|
+
unrenderEvents: function() {
|
|
10705
10789
|
|
|
10706
|
-
//
|
|
10707
|
-
this.timeGrid.
|
|
10790
|
+
// unrender the events in the subcomponents
|
|
10791
|
+
this.timeGrid.unrenderEvents();
|
|
10708
10792
|
if (this.dayGrid) {
|
|
10709
|
-
this.dayGrid.
|
|
10793
|
+
this.dayGrid.unrenderEvents();
|
|
10710
10794
|
}
|
|
10711
10795
|
|
|
10712
10796
|
// we DON'T need to call updateHeight() because:
|
|
@@ -10730,10 +10814,10 @@ var AgendaView = fcViews.agenda = View.extend({
|
|
|
10730
10814
|
},
|
|
10731
10815
|
|
|
10732
10816
|
|
|
10733
|
-
|
|
10734
|
-
this.timeGrid.
|
|
10817
|
+
unrenderDrag: function() {
|
|
10818
|
+
this.timeGrid.unrenderDrag();
|
|
10735
10819
|
if (this.dayGrid) {
|
|
10736
|
-
this.dayGrid.
|
|
10820
|
+
this.dayGrid.unrenderDrag();
|
|
10737
10821
|
}
|
|
10738
10822
|
},
|
|
10739
10823
|
|
|
@@ -10754,35 +10838,40 @@ var AgendaView = fcViews.agenda = View.extend({
|
|
|
10754
10838
|
|
|
10755
10839
|
|
|
10756
10840
|
// Unrenders a visual indications of a selection
|
|
10757
|
-
|
|
10758
|
-
this.timeGrid.
|
|
10841
|
+
unrenderSelection: function() {
|
|
10842
|
+
this.timeGrid.unrenderSelection();
|
|
10759
10843
|
if (this.dayGrid) {
|
|
10760
|
-
this.dayGrid.
|
|
10844
|
+
this.dayGrid.unrenderSelection();
|
|
10761
10845
|
}
|
|
10762
10846
|
}
|
|
10763
10847
|
|
|
10764
10848
|
});
|
|
10765
10849
|
|
|
10766
|
-
AgendaView.defaults = AGENDA_DEFAULTS;
|
|
10767
|
-
|
|
10768
10850
|
;;
|
|
10769
10851
|
|
|
10770
|
-
|
|
10771
|
-
----------------------------------------------------------------------------------------------------------------------*/
|
|
10852
|
+
var AGENDA_ALL_DAY_EVENT_LIMIT = 5;
|
|
10772
10853
|
|
|
10773
|
-
fcViews.
|
|
10774
|
-
|
|
10775
|
-
|
|
10854
|
+
fcViews.agenda = {
|
|
10855
|
+
'class': AgendaView,
|
|
10856
|
+
defaults: {
|
|
10857
|
+
allDaySlot: true,
|
|
10858
|
+
allDayText: 'all-day',
|
|
10859
|
+
slotDuration: '00:30:00',
|
|
10860
|
+
minTime: '00:00:00',
|
|
10861
|
+
maxTime: '24:00:00',
|
|
10862
|
+
slotEventOverlap: true // a bad name. confused with overlap/constraint system
|
|
10863
|
+
}
|
|
10776
10864
|
};
|
|
10777
|
-
;;
|
|
10778
|
-
|
|
10779
|
-
/* A day view with an all-day cell area at the top, and a time grid below
|
|
10780
|
-
----------------------------------------------------------------------------------------------------------------------*/
|
|
10781
10865
|
|
|
10782
10866
|
fcViews.agendaDay = {
|
|
10783
10867
|
type: 'agenda',
|
|
10784
10868
|
duration: { days: 1 }
|
|
10785
10869
|
};
|
|
10870
|
+
|
|
10871
|
+
fcViews.agendaWeek = {
|
|
10872
|
+
type: 'agenda',
|
|
10873
|
+
duration: { weeks: 1 }
|
|
10874
|
+
};
|
|
10786
10875
|
;;
|
|
10787
10876
|
|
|
10788
10877
|
return fc; // export for Node/CommonJS
|