Pārlūkot izejas kodu

Merge branch 'master' of https://github.com/Rouche/fullcalendar

Adam Shaw 9 gadi atpakaļ
vecāks
revīzija
c206378266

+ 8 - 0
src/common/DayGrid.limit.js

@@ -247,6 +247,14 @@ DayGrid.mixin({
 			viewportConstrain: view.opt('popoverViewportConstrain'),
 			hide: function() {
 				// kill everything when the popover is hidden
+				// notify events to be removed
+				if (_this.popoverSegs) {
+					var seg;
+					for (var i = 0; i < _this.popoverSegs.length; ++i) {
+						seg = _this.popoverSegs[i];
+						view.trigger('eventDestroy', seg.event, seg.event, seg.el);
+					}
+				}
 				_this.segPopover.removeElement();
 				_this.segPopover = null;
 				_this.popoverSegs = null;

+ 2 - 2
tasks/locale.js

@@ -72,7 +72,7 @@ gulp.task('locale:each:data', function() {
 	return gulp.src('node_modules/moment/locale/*.js')
 		.pipe(modify({
 			fileModifier: function(file, momentContent) {
-				var localeCode = file.path.match(/([^\/]*)\.js$/)[1];
+				var localeCode = file.path.match(/([^\/\\]*)\.js$/)[1];
 				var js = getLocaleJs(localeCode, momentContent);
 
 				if (js) {
@@ -183,7 +183,7 @@ function extractMomentLocaleJS(js) {
 
 	// remove the UMD wrap
 	js = js.replace(
-		/\(\s*function[\S\s]*?function\s*\(\s*moment\s*\)\s*\{([\S\s]*)\}\)\);?/,
+		/\(\s*function[\S\s]*?function\s*\(\s*moment\s*\)\s*\{([\S\s]*)\}\)\)\)?;?/,
 		function(m0, body) {
 			return body;
 		}

+ 81 - 0
tests/automated/eventLimit-popoverDestroy.js

@@ -0,0 +1,81 @@
+
+describe('eventLimit popover', function() {
+
+	var options;
+
+	beforeEach(function() {
+		affix('#cal');
+		options = {
+			defaultView: 'month',
+			defaultDate: '2014-08-01',
+			eventLimit: 3,
+			events: [
+				{ title: 'event1', start: '2014-07-28', end: '2014-07-30', className: 'event1' },
+				{ title: 'event2', start: '2014-07-29', end: '2014-07-31', className: 'event2' },
+				{ title: 'event3', start: '2014-07-29', className: 'event3' },
+				{ title: 'event4', start: '2014-07-29', className: 'event4' }
+			],
+			popoverViewportConstrain: false, // because PhantomJS window is small, don't do smart repositioning
+			handleWindowResize: false // because showing the popover causes scrollbars and fires resize
+		};
+	});
+
+	function init() {
+		$('.fc-more').simulate('click');
+	}
+
+	it('closes when user clicks the X and trigger eventDestroy for every render', function() {
+		var eventsRendered = {};
+		var renderCount = 0;
+		var activated = false;
+		options.eventRender = function(eventObject, element, view) {
+			if (activated) {
+				eventsRendered[eventObject.title] = eventObject;
+				++renderCount;
+			}
+		};
+		options.eventDestroy = function(eventObject, element, view) {
+			delete eventsRendered[eventObject.title];
+			--renderCount;
+		};
+		//Create calendar
+		$('#cal').fullCalendar(options);
+		//Activate flags and pop event limit popover
+		activated = true;
+		$('.fc-more').simulate('click');
+
+		expect($('.fc-more-popover')).toBeVisible();
+		$('.fc-more-popover .fc-close')
+			.simulate('click');
+		expect($('.fc-more-popover')).not.toBeVisible();
+		expect(Object.keys(eventsRendered).length).toEqual(0);
+		expect(renderCount).toEqual(0);
+	});
+
+	it('closes when user clicks outside of the popover and trigger eventDestroy for every render', function() {
+		var eventsRendered = {};
+		var renderCount = 0;
+		var activated = false;
+		options.eventRender = function(eventObject, element, view) {
+			if (activated) {
+				eventsRendered[eventObject.title] = eventObject;
+				++renderCount;
+			}
+		};
+		options.eventDestroy = function(eventObject, element, view) {
+			delete eventsRendered[eventObject.title];
+			--renderCount;
+		};
+		//Create calendar
+		$('#cal').fullCalendar(options);
+		//Activate flags and pop event limit popover
+		activated = true;
+		$('.fc-more').simulate('click');
+
+		expect($('.fc-more-popover')).toBeVisible();
+		$('body').simulate('mousedown').simulate('click');
+		expect($('.fc-more-popover')).not.toBeVisible();
+		expect(Object.keys(eventsRendered).length).toEqual(0);
+		expect(renderCount).toEqual(0);
+	});
+});