src/pyams_skin/resources/js/myams-init.js
changeset 536 d1742b03d5a7
parent 490 135a744a7732
equal deleted inserted replaced
535:618ff34bcd7c 536:d1742b03d5a7
   354 		$(document).on('click', 'button[type="submit"], button.submit', function() {
   354 		$(document).on('click', 'button[type="submit"], button.submit', function() {
   355 			var button = $(this);
   355 			var button = $(this);
   356 			$(button.get(0).form).data('ams-submit-button', button);
   356 			$(button.get(0).form).data('ams-submit-button', button);
   357 		});
   357 		});
   358 
   358 
   359 		// Cancel clicks on readonly checkbox
   359 		// Initialize main event handlers
   360 		$(document).on('click', 'input[type="checkbox"][readonly]', function() {
   360 		ams.initHandlers(document);
   361 			return false;
       
   362 		});
       
   363 
       
   364 		// Initialize custom click handlers
       
   365 		$(document).on('click', '[data-ams-click-handler]', function(event) {
       
   366 			var source = $(this);
       
   367 			var handlers = source.data('ams-disabled-handlers');
       
   368 			if ((handlers === true) || (handlers === 'click') || (handlers === 'all')) {
       
   369 				return;
       
   370 			}
       
   371 			var data = source.data();
       
   372 			if (data.amsClickHandler) {
       
   373 				if ((data.amsStopPropagation === true) || (data.amsClickStopPropagation === true)) {
       
   374 					event.stopPropagation();
       
   375 				}
       
   376 				if (data.amsClickKeepDefault !== true) {
       
   377 					event.preventDefault();
       
   378 				}
       
   379 				var clickHandlers = data.amsClickHandler.split(/\s+/);
       
   380 				for (var index=0; index < clickHandlers.length; index++) {
       
   381 					var callback = ams.getFunctionByName(clickHandlers[index]);
       
   382 					if (callback !== undefined) {
       
   383 						callback.call(source, event, data.amsClickHandlerOptions);
       
   384 					}
       
   385 				}
       
   386 			}
       
   387 		});
       
   388 
       
   389 		// Initialize custom change handlers
       
   390 		$(document).on('change', '[data-ams-change-handler]', function(event) {
       
   391 			var source = $(this);
       
   392 			// Disable change handlers for readonly inputs
       
   393 			// These change handlers are activated by IE!!!
       
   394 			if (source.prop('readonly')) {
       
   395 				return;
       
   396 			}
       
   397 			var handlers = source.data('ams-disabled-handlers');
       
   398 			if ((handlers === true) || (handlers === 'change') || (handlers === 'all')) {
       
   399 				return;
       
   400 			}
       
   401 			var data = source.data();
       
   402 			if (data.amsChangeHandler) {
       
   403 				if ((data.amsStopPropagation === true) || (data.amsChangeStopPropagation === true)) {
       
   404 					event.stopPropagation();
       
   405 				}
       
   406 				if (data.amsChangeKeepDefault !== true) {
       
   407 					event.preventDefault();
       
   408 				}
       
   409 				var changeHandlers = data.amsChangeHandler.split(/\s+/);
       
   410 				for (var index=0; index < changeHandlers.length; index++) {
       
   411 					var callback = ams.getFunctionByName(changeHandlers[index]);
       
   412 					if (callback !== undefined) {
       
   413 						callback.call(source, event, data.amsChangeHandlerOptions);
       
   414 					}
       
   415 				}
       
   416 			}
       
   417 		});
       
   418 
   361 
   419 		// Submit form when CTRL+Enter key is pressed in textarea
   362 		// Submit form when CTRL+Enter key is pressed in textarea
   420 		$(document).on('keydown', 'textarea', function(e) {
   363 		$(document).on('keydown', 'textarea', function(e) {
   421 			if ((e.keyCode === 10 || e.keyCode === 13) && (e.ctrlKey || e.metaKey)) {
   364 			if ((e.keyCode === 10 || e.keyCode === 13) && (e.ctrlKey || e.metaKey)) {
   422 				$(this).closest('form').submit();
   365 				$(this).closest('form').submit();
   423 			}
   366 			}
   424 		});
       
   425 
       
   426 		// Notify reset to update Select2 widgets
       
   427 		$(document).on('reset', 'form', function(e) {
       
   428 			var form = $(this);
       
   429 			setTimeout(function() {
       
   430 				$('.alert-danger, SPAN.state-error', form).not('.persistent').remove();
       
   431 				$('LABEL.state-error', form).removeClass('state-error');
       
   432 				$('INPUT.select2[type="hidden"]', form).each(function() {
       
   433 					var input = $(this);
       
   434 					var select = input.data('select2');
       
   435 					var value = input.data('ams-select2-input-value');
       
   436 					if (value) {
       
   437 						input.select2('val', value.split(select.opts.separator));
       
   438 					}
       
   439 				});
       
   440 				form.find('.select2').trigger('change');
       
   441 				$('[data-ams-reset-callback]', form).each(function() {
       
   442 					var element = $(this);
       
   443 					var data = element.data();
       
   444 					var callback = ams.getFunctionByName(data.amsResetCallback);
       
   445 					if (callback !== undefined) {
       
   446 						callback.call(form, element, data.amsResetCallbackOptions);
       
   447 					}
       
   448 				});
       
   449 			}, 10);
       
   450 			ams.form && ams.form.setFocus(form);
       
   451 		});
       
   452 
       
   453 		// Initialize custom reset handlers
       
   454 		$(document).on('reset', '[data-ams-reset-handler]', function(e) {
       
   455 			var form = $(this);
       
   456 			var data = form.data();
       
   457 			if (data.amsResetHandler) {
       
   458 				if (data.amsResetKeepDefault !== true) {
       
   459 					e.preventDefault();
       
   460 				}
       
   461 				var callback = ams.getFunctionByName(data.amsResetHandler);
       
   462 				if (callback !== undefined) {
       
   463 					callback.call(form, data.amsResetHandlerOptions);
       
   464 				}
       
   465 			}
       
   466 		});
       
   467 
       
   468 		// Initialize custom event on click
       
   469 		$(document).on('click', '[data-ams-click-event]', function(e) {
       
   470 			var source = $(this);
       
   471 			$(e.target).trigger(source.data('ams-click-event'), source.data('ams-click-event-options'));
       
   472 		});
   367 		});
   473 
   368 
   474 		// Handle update on file upload placeholder
   369 		// Handle update on file upload placeholder
   475 		$(document).on('change', 'input[type="file"]', function(e) {
   370 		$(document).on('change', 'input[type="file"]', function(e) {
   476 			e.preventDefault();
   371 			e.preventDefault();