Bladeren bron

bugfixes and minor enhancements for 1.4.2

- eventAfterRender
- getView
- displaying in iframe (also added tests)
- render method now adjusts calendar's size too
- day-of-week classnames fixed when firstDay=1
- leave more space on side event events in agenda views
- "T" optional in ISO8601 events
Adam Shaw 16 jaren geleden
bovenliggende
commit
dbdbafd35d

+ 1 - 0
.gitignore

@@ -1,3 +1,4 @@
 build/fullcalendar
 build/fullcalendar
 build/fullcalendar-*
 build/fullcalendar-*
 dist
 dist
+docs/build

+ 2 - 2
docs/index.txt

@@ -210,7 +210,7 @@ Time & Date Formatting
 			agenda: 'h:mm{ - h:mm}', // 5:00 - 6:30
 			agenda: 'h:mm{ - h:mm}', // 5:00 - 6:30
 			
 			
 			// for all other views
 			// for all other views
-			'': 'h(:mm)t'            // 7pm
+			'': 'h(:mm)t'            // 7p
 		}
 		}
 	
 	
 **axisFormat**: String, *Default*: ``h(:mm)tt``
 **axisFormat**: String, *Default*: ``h(:mm)tt``
@@ -260,4 +260,4 @@ It can contain any of the following properties::
 	
 	
 Currently the only options that support View Hashes are
 Currently the only options that support View Hashes are
 ``dragOpacity``, ``titleFormat``, ``columnFormat``, and ``timeFormat``.
 ``dragOpacity``, ``titleFormat``, ``columnFormat``, and ``timeFormat``.
-	
+	

+ 1 - 1
examples/default.html

@@ -106,4 +106,4 @@
 <body>
 <body>
 <div id='calendar'></div>
 <div id='calendar'></div>
 </body>
 </body>
-</html>
+</html>

+ 5 - 2
src/agenda.js

@@ -195,7 +195,7 @@ function Agenda(element, options, methods) {
 				"<table style='width:100%;height:100%'><tr class='fc-first'>";
 				"<table style='width:100%;height:100%'><tr class='fc-first'>";
 			for (i=0; i<colCnt; i++) {
 			for (i=0; i<colCnt; i++) {
 				s += "<td class='fc-" +
 				s += "<td class='fc-" +
-					dayIDs[i] + ' ' + // needs to be first
+					dayIDs[d.getDay()] + ' ' + // needs to be first
 					tm + '-state-default ' +
 					tm + '-state-default ' +
 					(i==0 ? 'fc-leftmost ' : '') +
 					(i==0 ? 'fc-leftmost ' : '') +
 					(+d == +today ? tm + '-state-highlight fc-today' : 'fc-not-today') +
 					(+d == +today ? tm + '-state-highlight fc-today' : 'fc-not-today') +
@@ -461,6 +461,7 @@ function Agenda(element, options, methods) {
 							}
 							}
 						}
 						}
 						view.reportEventElement(event, eventElement);
 						view.reportEventElement(event, eventElement);
+						view.trigger('eventAfterRender', event, event, eventElement);
 						levelHeight = Math.max(levelHeight, eventElement.outerHeight(true));
 						levelHeight = Math.max(levelHeight, eventElement.outerHeight(true));
 					}
 					}
 				}
 				}
@@ -500,6 +501,7 @@ function Agenda(element, options, methods) {
 					bottom = timePosition(seg.start, seg.end);
 					bottom = timePosition(seg.start, seg.end);
 					tdInner = bg.find('td:eq(' + (colI*dis + dit) + ') div div');
 					tdInner = bg.find('td:eq(' + (colI*dis + dit) + ') div div');
 					availWidth = tdInner.width();
 					availWidth = tdInner.width();
+					availWidth = Math.min(availWidth-6, availWidth*.95); // TODO: move this to CSS
 					if (levelI) {
 					if (levelI) {
 						// indented and thin
 						// indented and thin
 						width = availWidth / (levelI + forward + 1);
 						width = availWidth / (levelI + forward + 1);
@@ -509,7 +511,7 @@ function Agenda(element, options, methods) {
 							width = ((availWidth / (forward + 1)) - (12/2)) * 2; // 12 is the predicted width of resizer =
 							width = ((availWidth / (forward + 1)) - (12/2)) * 2; // 12 is the predicted width of resizer =
 						}else{
 						}else{
 							// can be entire width, aligned left
 							// can be entire width, aligned left
-							width = availWidth * .96;
+							width = availWidth;
 						}
 						}
 					}
 					}
 					left = axisWidth + tdInner.position().left +       // leftmost possible
 					left = axisWidth + tdInner.position().left +       // leftmost possible
@@ -560,6 +562,7 @@ function Agenda(element, options, methods) {
 						}
 						}
 					}
 					}
 					view.reportEventElement(event, eventElement);
 					view.reportEventElement(event, eventElement);
+					view.trigger('eventAfterRender', event, event, eventElement);
 				}
 				}
 			}
 			}
 		}
 		}

+ 1 - 1
src/css/agenda.css

@@ -152,4 +152,4 @@
 	cursor: s-resize;
 	cursor: s-resize;
 	}
 	}
 	
 	
-	
+	

+ 1 - 0
src/grid.js

@@ -478,6 +478,7 @@ function Grid(element, options, methods) {
 							}
 							}
 						}
 						}
 						view.reportEventElement(event, eventElement);
 						view.reportEventElement(event, eventElement);
+						view.trigger('eventAfterRender', event, event, eventElement);
 						levelHeight = Math.max(levelHeight, eventElement.outerHeight(true));
 						levelHeight = Math.max(levelHeight, eventElement.outerHeight(true));
 					}
 					}
 				}
 				}

+ 30 - 18
src/main.js

@@ -210,7 +210,7 @@ $.fn.fullCalendar = function(options) {
 			}
 			}
 		}
 		}
 		
 		
-		function render(inc) {
+		function render(inc, updateSize) {
 			if (_element.offsetWidth !== 0) { // visible on the screen
 			if (_element.offsetWidth !== 0) { // visible on the screen
 				if (inc || !view.date || +view.date != +date) { // !view.date means it hasn't been rendered yet
 				if (inc || !view.date || +view.date != +date) { // !view.date means it hasn't been rendered yet
 					fixContentSize();
 					fixContentSize();
@@ -225,7 +225,7 @@ $.fn.fullCalendar = function(options) {
 					unfixContentSize();
 					unfixContentSize();
 					view.date = cloneDate(date);
 					view.date = cloneDate(date);
 				}
 				}
-				else if (view.sizeDirty) {
+				else if (view.sizeDirty || updateSize) {
 					view.updateSize();
 					view.updateSize();
 					view.rerenderEvents();
 					view.rerenderEvents();
 				}
 				}
@@ -366,9 +366,16 @@ $.fn.fullCalendar = function(options) {
 		
 		
 		var publicMethods = {
 		var publicMethods = {
 		
 		
-			render: render,
+			render: function() {
+				render(0, true); // true forces size to updated
+			},
+			
 			changeView: changeView,
 			changeView: changeView,
 			
 			
+			getView: function() {
+				return view;
+			},
+			
 			//
 			//
 			// Navigation
 			// Navigation
 			//
 			//
@@ -688,22 +695,27 @@ $.fn.fullCalendar = function(options) {
 		}
 		}
 		
 		
 		$(window).resize(function() {
 		$(window).resize(function() {
-			if (!contentSizeFixed && view.date) { // view.date means the view has been rendered
-				var rcnt = ++resizeCnt; // add a delay
-				setTimeout(function() {
-					if (rcnt == resizeCnt && !contentSizeFixed) {
-						var newWidth = element.width();
-						if (newWidth != elementWidth) {
-							elementWidth = newWidth;
-							fixContentSize();
-							view.updateSize();
-							unfixContentSize();
-							view.rerenderEvents(true);
-							sizesDirtyExcept(view);
-							view.trigger('windowResize', _element);
+			if (!contentSizeFixed) {
+				if (view.date) { // view has already been rendered
+					var rcnt = ++resizeCnt; // add a delay
+					setTimeout(function() {
+						if (rcnt == resizeCnt && !contentSizeFixed) {
+							var newWidth = element.width();
+							if (newWidth != elementWidth) {
+								elementWidth = newWidth;
+								fixContentSize();
+								view.updateSize();
+								unfixContentSize();
+								view.rerenderEvents(true);
+								sizesDirtyExcept(view);
+								view.trigger('windowResize', _element);
+							}
 						}
 						}
-					}
-				}, 200);
+					}, 200);
+				}else{
+					render(); // render for first time
+					// was probably in a 0x0 iframe that has just been resized
+				}
 			}
 			}
 		});
 		});
 		
 		

+ 1 - 1
src/util.js

@@ -108,7 +108,7 @@ var parseDate = fc.parseDate = function(s) {
 
 
 var parseISO8601 = fc.parseISO8601 = function(s, ignoreTimezone) {
 var parseISO8601 = fc.parseISO8601 = function(s, ignoreTimezone) {
 	// derived from http://delete.me.uk/2005/03/iso8601.html
 	// derived from http://delete.me.uk/2005/03/iso8601.html
-	var d = s.match(/^([0-9]{4})(-([0-9]{2})(-([0-9]{2})(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?$/);
+	var d = s.match(/^([0-9]{4})(-([0-9]{2})(-([0-9]{2})([T ]([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?$/);
 	if (!d) return null;
 	if (!d) return null;
 	var offset = 0;
 	var offset = 0;
 	var date = new Date(d[1], 0, 1);
 	var date = new Date(d[1], 0, 1);

BIN
tests/fancybox/fancy_closebox.png


BIN
tests/fancybox/fancy_left.png


BIN
tests/fancybox/fancy_progress.png


BIN
tests/fancybox/fancy_right.png


BIN
tests/fancybox/fancy_shadow_e.png


BIN
tests/fancybox/fancy_shadow_n.png


BIN
tests/fancybox/fancy_shadow_ne.png


BIN
tests/fancybox/fancy_shadow_nw.png


BIN
tests/fancybox/fancy_shadow_s.png


BIN
tests/fancybox/fancy_shadow_se.png


BIN
tests/fancybox/fancy_shadow_sw.png


BIN
tests/fancybox/fancy_shadow_w.png


BIN
tests/fancybox/fancy_title_left.png


BIN
tests/fancybox/fancy_title_main.png


BIN
tests/fancybox/fancy_title_right.png


+ 283 - 0
tests/fancybox/jquery.fancybox-1.2.6.css

@@ -0,0 +1,283 @@
+div#fancy_overlay {
+	position: fixed;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+	display: none;
+	z-index: 30;
+}
+
+div#fancy_loading {
+	position: absolute;
+	height: 40px;
+	width: 40px;
+	cursor: pointer;
+	display: none;
+	overflow: hidden;
+	background: transparent;
+	z-index: 100;
+}
+
+div#fancy_loading div {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 40px;
+	height: 480px;
+	background: transparent url('fancy_progress.png') no-repeat;
+}
+
+div#fancy_outer {
+	position: absolute;
+    top: 0;
+    left: 0;
+    z-index: 90;
+    padding: 20px 20px 40px 20px;
+    margin: 0;
+    background: transparent;
+    display: none;
+}
+
+div#fancy_inner {
+	position: relative;
+	width:100%;
+	height:100%;
+	background: #FFF;
+}
+
+div#fancy_content {
+	margin: 0;
+	z-index: 100;
+	position: absolute;
+}
+
+div#fancy_div {
+	background: #000;
+	color: #FFF;
+	height: 100%;
+	width: 100%;
+	z-index: 100;
+}
+
+img#fancy_img {
+	position: absolute;
+	top: 0;
+	left: 0;
+	border:0; 
+	padding: 0; 
+	margin: 0;
+	z-index: 100;
+	width: 100%;
+	height: 100%;
+}
+
+div#fancy_close {
+	position: absolute;
+	top: -12px;
+	right: -15px;
+	height: 30px;
+	width: 30px;
+	background: url('fancy_closebox.png') top left no-repeat;
+	cursor: pointer;
+	z-index: 181;
+	display: none;
+}
+
+#fancy_frame {
+	position: relative;
+	width: 100%;
+	height: 100%;
+	display: none;
+}
+
+#fancy_ajax {
+	width: 100%;
+	height: 100%;
+	overflow: auto;
+}
+
+a#fancy_left, a#fancy_right {
+	position: absolute; 
+	bottom: 0px; 
+	height: 100%; 
+	width: 35%; 
+	cursor: pointer;
+	z-index: 111; 
+	display: none;
+	background-image: url("data:image/gif;base64,AAAA");
+	outline: none;
+	overflow: hidden;
+}
+
+a#fancy_left {
+	left: 0px; 
+}
+
+a#fancy_right {
+	right: 0px; 
+}
+
+span.fancy_ico {
+	position: absolute; 
+	top: 50%;
+	margin-top: -15px;
+	width: 30px;
+	height: 30px;
+	z-index: 112; 
+	cursor: pointer;
+	display: block;
+}
+
+span#fancy_left_ico {
+	left: -9999px;
+	background: transparent url('fancy_left.png') no-repeat;
+}
+
+span#fancy_right_ico {
+	right: -9999px;
+	background: transparent url('fancy_right.png') no-repeat;
+}
+
+a#fancy_left:hover, a#fancy_right:hover {
+	visibility: visible;
+	background-color: transparent;
+}
+
+a#fancy_left:hover span {
+	left: 20px; 
+}
+
+a#fancy_right:hover span {
+	right: 20px; 
+}
+
+#fancy_bigIframe {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+	background: transparent;
+}
+
+div#fancy_bg {
+	position: absolute;
+	top: 0; left: 0;
+	width: 100%;
+	height: 100%;
+	z-index: 70;
+	border: 0;
+	padding: 0;
+	margin: 0;
+}
+	
+div.fancy_bg {
+	position: absolute;
+	display: block;
+	z-index: 70;
+	border: 0;
+	padding: 0;
+	margin: 0;
+}
+
+div#fancy_bg_n {
+	top: -20px;
+	left: 0;
+	width: 100%;
+	height: 20px;
+	background: transparent url('fancy_shadow_n.png') repeat-x;
+}
+
+div#fancy_bg_ne {
+	top: -20px;
+	right: -20px;
+	width: 20px;
+	height: 20px;
+	background: transparent url('fancy_shadow_ne.png') no-repeat;
+}
+
+div#fancy_bg_e {
+	right: -20px;
+	height: 100%;
+	width: 20px;
+	background: transparent url('fancy_shadow_e.png') repeat-y;
+}
+
+div#fancy_bg_se {
+	bottom: -20px;
+	right: -20px;
+	width: 20px;
+	height: 20px;
+	background: transparent url('fancy_shadow_se.png') no-repeat;
+}
+
+div#fancy_bg_s {
+	bottom: -20px;
+	left: 0;
+	width: 100%;
+	height: 20px;
+	background: transparent url('fancy_shadow_s.png') repeat-x;
+}
+
+div#fancy_bg_sw {
+	bottom: -20px;
+	left: -20px;
+	width: 20px;
+	height: 20px;
+	background: transparent url('fancy_shadow_sw.png') no-repeat;
+}
+
+div#fancy_bg_w {
+	left: -20px;
+	height: 100%;
+	width: 20px;
+	background: transparent url('fancy_shadow_w.png') repeat-y;
+}
+
+div#fancy_bg_nw {
+	top: -20px;
+	left: -20px;
+	width: 20px;
+	height: 20px;
+	background: transparent url('fancy_shadow_nw.png') no-repeat;
+}
+
+div#fancy_title {
+	position: absolute;
+	z-index: 100;
+	display: none;
+}
+
+div#fancy_title div {
+	color: #FFF;
+	font: bold 12px Arial;
+	padding-bottom: 3px;
+	white-space: nowrap;
+}
+
+div#fancy_title table {
+	margin: 0 auto;
+}
+
+div#fancy_title table td {
+	padding: 0;
+	vertical-align: middle;
+}
+
+td#fancy_title_left {
+	height: 32px;
+	width: 15px;
+	background: transparent url('fancy_title_left.png') repeat-x;
+}
+
+td#fancy_title_main {
+	height: 32px;
+	background: transparent url('fancy_title_main.png') repeat-x;
+}
+
+td#fancy_title_right {
+	height: 32px;
+	width: 15px;
+	background: transparent url('fancy_title_right.png') repeat-x;
+}

+ 620 - 0
tests/fancybox/jquery.fancybox-1.2.6.js

@@ -0,0 +1,620 @@
+/*
+ * FancyBox - jQuery Plugin
+ * simple and fancy lightbox alternative
+ *
+ * Copyright (c) 2009 Janis Skarnelis
+ * Examples and documentation at: http://fancybox.net
+ * 
+ * Version: 1.2.6 (16/11/2009)
+ * Requires: jQuery v1.3+
+ * 
+ * Dual licensed under the MIT and GPL licenses:
+ *   http://www.opensource.org/licenses/mit-license.php
+ *   http://www.gnu.org/licenses/gpl.html
+ */
+
+;(function($) {
+	$.fn.fixPNG = function() {
+		return this.each(function () {
+			var image = $(this).css('backgroundImage');
+
+			if (image.match(/^url\(["']?(.*\.png)["']?\)$/i)) {
+				image = RegExp.$1;
+				$(this).css({
+					'backgroundImage': 'none',
+					'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=" + ($(this).css('backgroundRepeat') == 'no-repeat' ? 'crop' : 'scale') + ", src='" + image + "')"
+				}).each(function () {
+					var position = $(this).css('position');
+					if (position != 'absolute' && position != 'relative')
+						$(this).css('position', 'relative');
+				});
+			}
+		});
+	};
+
+	var elem, opts, busy = false, imagePreloader = new Image, loadingTimer, loadingFrame = 1, imageRegExp = /\.(jpg|gif|png|bmp|jpeg)(.*)?$/i;
+	var ieQuirks = null, IE6 = $.browser.msie && $.browser.version.substr(0,1) == 6 && !window.XMLHttpRequest, oldIE = IE6 || ($.browser.msie && $.browser.version.substr(0,1) == 7);
+
+	$.fn.fancybox = function(o) {
+		var settings		= $.extend({}, $.fn.fancybox.defaults, o);
+		var matchedGroup	= this;
+
+		function _initialize() {
+			elem = this;
+			opts = $.extend({}, settings);
+
+			_start();
+
+			return false;
+		};
+
+		function _start() {
+			if (busy) return;
+
+			if ($.isFunction(opts.callbackOnStart)) {
+				opts.callbackOnStart();
+			}
+
+			opts.itemArray		= [];
+			opts.itemCurrent	= 0;
+
+			if (settings.itemArray.length > 0) {
+				opts.itemArray = settings.itemArray;
+
+			} else {
+				var item = {};
+
+				if (!elem.rel || elem.rel == '') {
+					var item = {href: elem.href, title: elem.title};
+
+					if ($(elem).children("img:first").length) {
+						item.orig = $(elem).children("img:first");
+					} else {
+						item.orig = $(elem);
+					}
+
+					if (item.title == '' || typeof item.title == 'undefined') {
+						item.title = item.orig.attr('alt');
+					}
+					
+					opts.itemArray.push( item );
+
+				} else {
+					var subGroup = $(matchedGroup).filter("a[rel=" + elem.rel + "]");
+					var item = {};
+
+					for (var i = 0; i < subGroup.length; i++) {
+						item = {href: subGroup[i].href, title: subGroup[i].title};
+
+						if ($(subGroup[i]).children("img:first").length) {
+							item.orig = $(subGroup[i]).children("img:first");
+						} else {
+							item.orig = $(subGroup[i]);
+						}
+
+						if (item.title == '' || typeof item.title == 'undefined') {
+							item.title = item.orig.attr('alt');
+						}
+
+						opts.itemArray.push( item );
+					}
+				}
+			}
+
+			while ( opts.itemArray[ opts.itemCurrent ].href != elem.href ) {
+				opts.itemCurrent++;
+			}
+
+			if (opts.overlayShow) {
+				if (IE6) {
+					$('embed, object, select').css('visibility', 'hidden');
+					$("#fancy_overlay").css('height', $(document).height());
+				}
+
+				$("#fancy_overlay").css({
+					'background-color'	: opts.overlayColor,
+					'opacity'			: opts.overlayOpacity
+				}).show();
+			}
+			
+			$(window).bind("resize.fb scroll.fb", $.fn.fancybox.scrollBox);
+
+			_change_item();
+		};
+
+		function _change_item() {
+			$("#fancy_right, #fancy_left, #fancy_close, #fancy_title").hide();
+
+			var href = opts.itemArray[ opts.itemCurrent ].href;
+
+			if (href.match("iframe") || elem.className.indexOf("iframe") >= 0) {
+				$.fn.fancybox.showLoading();
+				_set_content('<iframe id="fancy_frame" onload="jQuery.fn.fancybox.showIframe()" name="fancy_iframe' + Math.round(Math.random()*1000) + '" frameborder="0" hspace="0" src="' + href + '"></iframe>', opts.frameWidth, opts.frameHeight);
+
+			} else if (href.match(/#/)) {
+				var target = window.location.href.split('#')[0]; target = href.replace(target, ''); target = target.substr(target.indexOf('#'));
+
+				_set_content('<div id="fancy_div">' + $(target).html() + '</div>', opts.frameWidth, opts.frameHeight);
+
+			} else if (href.match(imageRegExp)) {
+				imagePreloader = new Image; imagePreloader.src = href;
+
+				if (imagePreloader.complete) {
+					_proceed_image();
+
+				} else {
+					$.fn.fancybox.showLoading();
+					$(imagePreloader).unbind().bind('load', function() {
+						$("#fancy_loading").hide();
+
+						_proceed_image();
+					});
+				}
+			} else {
+				$.fn.fancybox.showLoading();
+				$.get(href, function(data) {
+					$("#fancy_loading").hide();
+					_set_content( '<div id="fancy_ajax">' + data + '</div>', opts.frameWidth, opts.frameHeight );
+				});
+			}
+		};
+
+		function _proceed_image() {
+			var width	= imagePreloader.width;
+			var height	= imagePreloader.height;
+
+			var horizontal_space	= (opts.padding * 2) + 40;
+			var vertical_space		= (opts.padding * 2) + 60;
+
+			var w = $.fn.fancybox.getViewport();
+			
+			if (opts.imageScale && (width > (w[0] - horizontal_space) || height > (w[1] - vertical_space))) {
+				var ratio = Math.min(Math.min(w[0] - horizontal_space, width) / width, Math.min(w[1] - vertical_space, height) / height);
+
+				width	= Math.round(ratio * width);
+				height	= Math.round(ratio * height);
+			}
+
+			_set_content('<img alt="" id="fancy_img" src="' + imagePreloader.src + '" />', width, height);
+		};
+
+		function _preload_neighbor_images() {
+			if ((opts.itemArray.length -1) > opts.itemCurrent) {
+				var href = opts.itemArray[opts.itemCurrent + 1].href || false;
+
+				if (href && href.match(imageRegExp)) {
+					objNext = new Image();
+					objNext.src = href;
+				}
+			}
+
+			if (opts.itemCurrent > 0) {
+				var href = opts.itemArray[opts.itemCurrent -1].href || false;
+
+				if (href && href.match(imageRegExp)) {
+					objNext = new Image();
+					objNext.src = href;
+				}
+			}
+		};
+
+		function _set_content(value, width, height) {
+			busy = true;
+
+			var pad = opts.padding;
+
+			if (oldIE || ieQuirks) {
+				$("#fancy_content")[0].style.removeExpression("height");
+				$("#fancy_content")[0].style.removeExpression("width");
+			}
+
+			if (pad > 0) {
+				width	+= pad * 2;
+				height	+= pad * 2;
+
+				$("#fancy_content").css({
+					'top'		: pad + 'px',
+					'right'		: pad + 'px',
+					'bottom'	: pad + 'px',
+					'left'		: pad + 'px',
+					'width'		: 'auto',
+					'height'	: 'auto'
+				});
+
+				if (oldIE || ieQuirks) {
+					$("#fancy_content")[0].style.setExpression('height',	'(this.parentNode.clientHeight - '	+ pad * 2 + ')');
+					$("#fancy_content")[0].style.setExpression('width',		'(this.parentNode.clientWidth - '	+ pad * 2 + ')');
+				}
+			} else {
+				$("#fancy_content").css({
+					'top'		: 0,
+					'right'		: 0,
+					'bottom'	: 0,
+					'left'		: 0,
+					'width'		: '100%',
+					'height'	: '100%'
+				});
+			}
+
+			if ($("#fancy_outer").is(":visible") && width == $("#fancy_outer").width() && height == $("#fancy_outer").height()) {
+				$("#fancy_content").fadeOut('fast', function() {
+					$("#fancy_content").empty().append($(value)).fadeIn("normal", function() {
+						_finish();
+					});
+				});
+
+				return;
+			}
+
+			var w = $.fn.fancybox.getViewport();
+
+			var itemTop		= (height	+ 60) > w[1] ? w[3] : (w[3] + Math.round((w[1] - height	- 60) * 0.5));
+			var itemLeft	= (width	+ 40) > w[0] ? w[2] : (w[2] + Math.round((w[0] - width	- 40) * 0.5));
+
+			var itemOpts = {
+				'left':		itemLeft,
+				'top':		itemTop,
+				'width':	width + 'px',
+				'height':	height + 'px'
+			};
+
+			if ($("#fancy_outer").is(":visible")) {
+				$("#fancy_content").fadeOut("normal", function() {
+					$("#fancy_content").empty();
+					$("#fancy_outer").animate(itemOpts, opts.zoomSpeedChange, opts.easingChange, function() {
+						$("#fancy_content").append($(value)).fadeIn("normal", function() {
+							_finish();
+						});
+					});
+				});
+
+			} else {
+
+				if (opts.zoomSpeedIn > 0 && opts.itemArray[opts.itemCurrent].orig !== undefined) {
+					$("#fancy_content").empty().append($(value));
+
+					var orig_item	= opts.itemArray[opts.itemCurrent].orig;
+					var orig_pos	= $.fn.fancybox.getPosition(orig_item);
+
+					$("#fancy_outer").css({
+						'left':		(orig_pos.left	- 20 - opts.padding) + 'px',
+						'top':		(orig_pos.top	- 20 - opts.padding) + 'px',
+						'width':	$(orig_item).width() + (opts.padding * 2),
+						'height':	$(orig_item).height() + (opts.padding * 2)
+					});
+
+					if (opts.zoomOpacity) {
+						itemOpts.opacity = 'show';
+					}
+
+					$("#fancy_outer").animate(itemOpts, opts.zoomSpeedIn, opts.easingIn, function() {
+						_finish();
+					});
+
+				} else {
+
+					$("#fancy_content").hide().empty().append($(value)).show();
+					$("#fancy_outer").css(itemOpts).fadeIn("normal", function() {
+						_finish();
+					});
+				}
+			}
+		};
+
+		function _set_navigation() {
+			if (opts.itemCurrent !== 0) {
+				$("#fancy_left, #fancy_left_ico").unbind().bind("click", function(e) {
+					e.stopPropagation();
+
+					opts.itemCurrent--;
+					_change_item();
+
+					return false;
+				});
+
+				$("#fancy_left").show();
+			}
+
+			if (opts.itemCurrent != ( opts.itemArray.length -1)) {
+				$("#fancy_right, #fancy_right_ico").unbind().bind("click", function(e) {
+					e.stopPropagation();
+
+					opts.itemCurrent++;
+					_change_item();
+
+					return false;
+				});
+
+				$("#fancy_right").show();
+			}
+		};
+
+		function _finish() {
+			if ($.browser.msie) {
+				$("#fancy_content")[0].style.removeAttribute('filter');
+				$("#fancy_outer")[0].style.removeAttribute('filter');
+			}
+
+			_set_navigation();
+
+			_preload_neighbor_images();
+
+			$(document).bind("keydown.fb", function(e) {
+				if (e.keyCode == 27 && opts.enableEscapeButton) {
+					$.fn.fancybox.close();
+
+				} else if(e.keyCode == 37 && opts.itemCurrent !== 0) {
+					$(document).unbind("keydown.fb");
+					opts.itemCurrent--;
+					_change_item();
+					
+
+				} else if(e.keyCode == 39 && opts.itemCurrent != (opts.itemArray.length - 1)) {
+					$(document).unbind("keydown.fb");
+					opts.itemCurrent++;
+					_change_item();
+				}
+			});
+
+			if (opts.hideOnContentClick) {
+				$("#fancy_content").click($.fn.fancybox.close);
+			}
+
+			if (opts.overlayShow && opts.hideOnOverlayClick) {
+				$("#fancy_overlay").bind("click", $.fn.fancybox.close);
+			}
+
+			if (opts.showCloseButton) {
+				$("#fancy_close").bind("click", $.fn.fancybox.close).show();
+			}
+
+			if (typeof opts.itemArray[ opts.itemCurrent ].title !== 'undefined' && opts.itemArray[ opts.itemCurrent ].title.length > 0) {
+				var pos = $("#fancy_outer").position();
+
+				$('#fancy_title div').text( opts.itemArray[ opts.itemCurrent ].title).html();
+
+				$('#fancy_title').css({
+					'top'	: pos.top + $("#fancy_outer").outerHeight() - 32,
+					'left'	: pos.left + (($("#fancy_outer").outerWidth() * 0.5) - ($('#fancy_title').width() * 0.5))
+				}).show();
+			}
+
+			if (opts.overlayShow && IE6) {
+				$('embed, object, select', $('#fancy_content')).css('visibility', 'visible');
+			}
+
+			if ($.isFunction(opts.callbackOnShow)) {
+				opts.callbackOnShow( opts.itemArray[ opts.itemCurrent ] );
+			}
+
+			if ($.browser.msie) {
+				$("#fancy_outer")[0].style.removeAttribute('filter'); 
+				$("#fancy_content")[0].style.removeAttribute('filter'); 
+			}
+			
+			busy = false;
+		};
+
+		return this.unbind('click.fb').bind('click.fb', _initialize);
+	};
+
+	$.fn.fancybox.scrollBox = function() {
+		var w = $.fn.fancybox.getViewport();
+		
+		if (opts.centerOnScroll && $("#fancy_outer").is(':visible')) {
+			var ow	= $("#fancy_outer").outerWidth();
+			var oh	= $("#fancy_outer").outerHeight();
+
+			var pos	= {
+				'top'	: (oh > w[1] ? w[3] : w[3] + Math.round((w[1] - oh) * 0.5)),
+				'left'	: (ow > w[0] ? w[2] : w[2] + Math.round((w[0] - ow) * 0.5))
+			};
+
+			$("#fancy_outer").css(pos);
+
+			$('#fancy_title').css({
+				'top'	: pos.top	+ oh - 32,
+				'left'	: pos.left	+ ((ow * 0.5) - ($('#fancy_title').width() * 0.5))
+			});
+		}
+		
+		if (IE6 && $("#fancy_overlay").is(':visible')) {
+			$("#fancy_overlay").css({
+				'height' : $(document).height()
+			});
+		}
+		
+		if ($("#fancy_loading").is(':visible')) {
+			$("#fancy_loading").css({'left': ((w[0] - 40) * 0.5 + w[2]), 'top': ((w[1] - 40) * 0.5 + w[3])});
+		}
+	};
+
+	$.fn.fancybox.getNumeric = function(el, prop) {
+		return parseInt($.curCSS(el.jquery?el[0]:el,prop,true))||0;
+	};
+
+	$.fn.fancybox.getPosition = function(el) {
+		var pos = el.offset();
+
+		pos.top	+= $.fn.fancybox.getNumeric(el, 'paddingTop');
+		pos.top	+= $.fn.fancybox.getNumeric(el, 'borderTopWidth');
+
+		pos.left += $.fn.fancybox.getNumeric(el, 'paddingLeft');
+		pos.left += $.fn.fancybox.getNumeric(el, 'borderLeftWidth');
+
+		return pos;
+	};
+
+	$.fn.fancybox.showIframe = function() {
+		$("#fancy_loading").hide();
+		$("#fancy_frame").show();
+	};
+
+	$.fn.fancybox.getViewport = function() {
+		return [$(window).width(), $(window).height(), $(document).scrollLeft(), $(document).scrollTop() ];
+	};
+
+	$.fn.fancybox.animateLoading = function() {
+		if (!$("#fancy_loading").is(':visible')){
+			clearInterval(loadingTimer);
+			return;
+		}
+
+		$("#fancy_loading > div").css('top', (loadingFrame * -40) + 'px');
+
+		loadingFrame = (loadingFrame + 1) % 12;
+	};
+
+	$.fn.fancybox.showLoading = function() {
+		clearInterval(loadingTimer);
+
+		var w = $.fn.fancybox.getViewport();
+
+		$("#fancy_loading").css({'left': ((w[0] - 40) * 0.5 + w[2]), 'top': ((w[1] - 40) * 0.5 + w[3])}).show();
+		$("#fancy_loading").bind('click', $.fn.fancybox.close);
+
+		loadingTimer = setInterval($.fn.fancybox.animateLoading, 66);
+	};
+
+	$.fn.fancybox.close = function() {
+		busy = true;
+
+		$(imagePreloader).unbind();
+
+		$(document).unbind("keydown.fb");
+		$(window).unbind("resize.fb scroll.fb");
+
+		$("#fancy_overlay, #fancy_content, #fancy_close").unbind();
+
+		$("#fancy_close, #fancy_loading, #fancy_left, #fancy_right, #fancy_title").hide();
+
+		__cleanup = function() {
+			if ($("#fancy_overlay").is(':visible')) {
+				$("#fancy_overlay").fadeOut("fast");
+			}
+
+			$("#fancy_content").empty();
+			
+			if (opts.centerOnScroll) {
+				$(window).unbind("resize.fb scroll.fb");
+			}
+
+			if (IE6) {
+				$('embed, object, select').css('visibility', 'visible');
+			}
+
+			if ($.isFunction(opts.callbackOnClose)) {
+				opts.callbackOnClose();
+			}
+
+			busy = false;
+		};
+
+		if ($("#fancy_outer").is(":visible") !== false) {
+			if (opts.zoomSpeedOut > 0 && opts.itemArray[opts.itemCurrent].orig !== undefined) {
+				var orig_item	= opts.itemArray[opts.itemCurrent].orig;
+				var orig_pos	= $.fn.fancybox.getPosition(orig_item);
+
+				var itemOpts = {
+					'left':		(orig_pos.left	- 20 - opts.padding) + 'px',
+					'top': 		(orig_pos.top	- 20 - opts.padding) + 'px',
+					'width':	$(orig_item).width() + (opts.padding * 2),
+					'height':	$(orig_item).height() + (opts.padding * 2)
+				};
+
+				if (opts.zoomOpacity) {
+					itemOpts.opacity = 'hide';
+				}
+
+				$("#fancy_outer").stop(false, true).animate(itemOpts, opts.zoomSpeedOut, opts.easingOut, __cleanup);
+
+			} else {
+				$("#fancy_outer").stop(false, true).fadeOut('fast', __cleanup);
+			}
+
+		} else {
+			__cleanup();
+		}
+
+		return false;
+	};
+
+	$.fn.fancybox.build = function() {
+		var html = '';
+
+		html += '<div id="fancy_overlay"></div>';
+		html += '<div id="fancy_loading"><div></div></div>';
+
+		html += '<div id="fancy_outer">';
+		html += '<div id="fancy_inner">';
+
+		html += '<div id="fancy_close"></div>';
+
+		html += '<div id="fancy_bg"><div class="fancy_bg" id="fancy_bg_n"></div><div class="fancy_bg" id="fancy_bg_ne"></div><div class="fancy_bg" id="fancy_bg_e"></div><div class="fancy_bg" id="fancy_bg_se"></div><div class="fancy_bg" id="fancy_bg_s"></div><div class="fancy_bg" id="fancy_bg_sw"></div><div class="fancy_bg" id="fancy_bg_w"></div><div class="fancy_bg" id="fancy_bg_nw"></div></div>';
+
+		html += '<a href="javascript:;" id="fancy_left"><span class="fancy_ico" id="fancy_left_ico"></span></a><a href="javascript:;" id="fancy_right"><span class="fancy_ico" id="fancy_right_ico"></span></a>';
+
+		html += '<div id="fancy_content"></div>';
+
+		html += '</div>';
+		html += '</div>';
+		
+		html += '<div id="fancy_title"></div>';
+		
+		$(html).appendTo("body");
+
+		$('<table cellspacing="0" cellpadding="0" border="0"><tr><td class="fancy_title" id="fancy_title_left"></td><td class="fancy_title" id="fancy_title_main"><div></div></td><td class="fancy_title" id="fancy_title_right"></td></tr></table>').appendTo('#fancy_title');
+
+		if ($.browser.msie) {
+			$(".fancy_bg").fixPNG();
+		}
+
+		if (IE6) {
+			$("div#fancy_overlay").css("position", "absolute");
+			$("#fancy_loading div, #fancy_close, .fancy_title, .fancy_ico").fixPNG();
+
+			$("#fancy_inner").prepend('<iframe id="fancy_bigIframe" src="javascript:false;" scrolling="no" frameborder="0"></iframe>');
+
+			// Get rid of the 'false' text introduced by the URL of the iframe
+			var frameDoc = $('#fancy_bigIframe')[0].contentWindow.document;
+			frameDoc.open();
+			frameDoc.close();
+			
+		}
+	};
+
+	$.fn.fancybox.defaults = {
+		padding				:	10,
+		imageScale			:	true,
+		zoomOpacity			:	true,
+		zoomSpeedIn			:	0,
+		zoomSpeedOut		:	0,
+		zoomSpeedChange		:	300,
+		easingIn			:	'swing',
+		easingOut			:	'swing',
+		easingChange		:	'swing',
+		frameWidth			:	560,
+		frameHeight			:	340,
+		overlayShow			:	true,
+		overlayOpacity		:	0.3,
+		overlayColor		:	'#666',
+		enableEscapeButton	:	true,
+		showCloseButton		:	true,
+		hideOnOverlayClick	:	true,
+		hideOnContentClick	:	true,
+		centerOnScroll		:	true,
+		itemArray			:	[],
+		callbackOnStart		:	null,
+		callbackOnShow		:	null,
+		callbackOnClose		:	null
+	};
+
+	$(document).ready(function() {
+		ieQuirks = $.browser.msie && !$.boxModel;
+
+		if ($("#fancy_outer").length < 1) {
+			$.fn.fancybox.build();
+		}
+	});
+
+})(jQuery);

File diff suppressed because it is too large
+ 15 - 0
tests/fancybox/jquery.fancybox-1.2.6.pack.js


+ 31 - 0
tests/iframe.html

@@ -0,0 +1,31 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+	<meta http-equiv="imagetoolbar" content="no" />
+	<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
+	<link rel="stylesheet" type="text/css" href="fancybox/jquery.fancybox-1.2.6.css" media="screen" />
+	<script type="text/javascript" src="fancybox/jquery.fancybox-1.2.6.pack.js"></script>
+	<script type="text/javascript">
+	
+		$(document).ready(function() {
+			$('#fullcalendar-link').fancybox({
+				frameWidth: 1100,
+				frameHeight: 800
+			});
+		});
+		
+	</script>
+</head>
+<body>
+<div id="content">
+
+	<h1>FancyBox <em>v1.2.6</em></h1>
+	
+	<p>
+	<a id='fullcalendar-link' class="iframe" href="plain.html">Open a FullCalendar</a>
+	</p>
+
+</div>
+</body>
+</html>

+ 7 - 1
tests/locale.html

@@ -1,6 +1,12 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html>
 <html>
 <head>
 <head>
+<style>
+
+/* http://code.google.com/p/fullcalendar/issues/detail?id=193 */
+.fc .fc-agenda td.fc-sat, .fc .fc-agenda td.fc-sun { background-color:red }
+
+</style>
 <script type='text/javascript' src='loader.js'></script>
 <script type='text/javascript' src='loader.js'></script>
 <script type='text/javascript'>
 <script type='text/javascript'>
 
 
@@ -107,4 +113,4 @@
 <body style='font-size:12px'>
 <body style='font-size:12px'>
 <div id='calendar' style='width:900px;margin:20px auto 0;font-family:arial'></div>
 <div id='calendar' style='width:900px;margin:20px auto 0;font-family:arial'></div>
 </body>
 </body>
-</html>
+</html>

+ 11 - 4
tests/methods.html

@@ -14,7 +14,7 @@
 	$(document).ready(function() {
 	$(document).ready(function() {
 		cal = $('#calendar').fullCalendar({
 		cal = $('#calendar').fullCalendar({
 			editable: true,
 			editable: true,
-			weekends: false,
+			//weekends: false,
 			header: {
 			header: {
 				left: 'prev,next today',
 				left: 'prev,next today',
 				center: 'title',
 				center: 'title',
@@ -106,6 +106,11 @@
 		}, stick);
 		}, stick);
 	}
 	}
 	
 	
+	function getView() {
+		var view = cal.fullCalendar('getView');
+		console.log(view.start + ' --- ' + view.end + ' "' + view.title + '"');
+	}
+	
 	var gcalFeed = $.fullCalendar.gcalFeed("http://www.google.com/calendar/feeds/usa__en%40holiday.calendar.google.com/public/basic");
 	var gcalFeed = $.fullCalendar.gcalFeed("http://www.google.com/calendar/feeds/usa__en%40holiday.calendar.google.com/public/basic");
 	
 	
 	var jsonFeed = "../examples/json-events.php";
 	var jsonFeed = "../examples/json-events.php";
@@ -151,17 +156,19 @@
 <button onclick="cal.fullCalendar('addEventSource', jsonFeed)">+ json</button>
 <button onclick="cal.fullCalendar('addEventSource', jsonFeed)">+ json</button>
 <button onclick="cal.fullCalendar('removeEventSource', jsonFeed)">- json</button>
 <button onclick="cal.fullCalendar('removeEventSource', jsonFeed)">- json</button>
 
 
-<button onclick="cal.fullCalendar('rerenderEvents')">rerender</button>
-<button onclick="cal.fullCalendar('refetchEvents')">refetch</button>
+<button onclick="cal.fullCalendar('rerenderEvents')">rerender events</button>
+<button onclick="cal.fullCalendar('refetchEvents')">refetch events</button>
 <br />
 <br />
 
 
 <button onclick="cal.fullCalendar('changeView', 'month')">change to month</button>
 <button onclick="cal.fullCalendar('changeView', 'month')">change to month</button>
 <button onclick="cal.fullCalendar('changeView', 'basicWeek')">change to basicWeek</button>
 <button onclick="cal.fullCalendar('changeView', 'basicWeek')">change to basicWeek</button>
 <button onclick="cal.fullCalendar('changeView', 'basicDay')">change to basicDay</button>
 <button onclick="cal.fullCalendar('changeView', 'basicDay')">change to basicDay</button>
+<button onclick="getView()">view info</button>
+<button onclick="cal.width(1100)" onclick=''>change size</button>
 <button onclick="cal.fullCalendar('render')">render</button>
 <button onclick="cal.fullCalendar('render')">render</button>
 
 
 </p>
 </p>
 <div id='loading' style='position:absolute;display:none'>loading...</div>
 <div id='loading' style='position:absolute;display:none'>loading...</div>
 <div id='calendar' style='width:900px;margin:20px auto 0;font-family:arial'></div>
 <div id='calendar' style='width:900px;margin:20px auto 0;font-family:arial'></div>
 </body>
 </body>
-</html>
+</html>

+ 0 - 0
tests/default.html → tests/plain.html


+ 11 - 1
tests/sources.html

@@ -25,6 +25,16 @@
 			start: new Date(y, m, d-5),
 			start: new Date(y, m, d-5),
 			end: new Date(y, m, d-2)
 			end: new Date(y, m, d-2)
 		},
 		},
+		{
+			title: 'T event',
+			start: y + '-06-06T10:20:00',
+			allDay: false
+		},
+		{
+			title: 'No T event',
+			start: y + '-06-06 11:30:00',
+			allDay: false
+		},
 		{
 		{
 			id: 999,
 			id: 999,
 			title: 'Repeating Event',
 			title: 'Repeating Event',
@@ -137,4 +147,4 @@
 </p>
 </p>
 <div id='calendar' style='width:900px;margin:20px auto 0;font-family:arial'></div>
 <div id='calendar' style='width:900px;margin:20px auto 0;font-family:arial'></div>
 </body>
 </body>
-</html>
+</html>

+ 7 - 2
tests/triggers.html

@@ -11,7 +11,7 @@
 
 
 	$(document).ready(function() {
 	$(document).ready(function() {
 		$('#calendar').fullCalendar({
 		$('#calendar').fullCalendar({
-			weekends: false,
+			//weekends: false,
 			
 			
 			header: {
 			header: {
 				left: 'prev,next today',
 				left: 'prev,next today',
@@ -56,6 +56,11 @@
 				}
 				}
 			},
 			},
 			
 			
+			eventAfterRender: function(event, element, view) {
+				console.log('after render for "' + event.title + '":');
+				console.log(element);
+			},
+			
 			eventClick: function(event, jsEvent, view) {
 			eventClick: function(event, jsEvent, view) {
 				console.log('EVENT CLICK ' + event.title);
 				console.log('EVENT CLICK ' + event.title);
 				//console.log(jsEvent);
 				//console.log(jsEvent);
@@ -177,4 +182,4 @@
 <body style='font-size:12px'>
 <body style='font-size:12px'>
 <div id='calendar' style='width:75%;margin:20px auto 0;font-family:arial'></div>
 <div id='calendar' style='width:75%;margin:20px auto 0;font-family:arial'></div>
 </body>
 </body>
-</html>
+</html>

+ 1 - 1
version.txt

@@ -1 +1 @@
-1.4.1
+1.4.2

Some files were not shown because too many files changed in this diff