src/ztfy/myams/resources/js/myams.js
changeset 178 2c3ba8d90123
parent 174 8d81f90f1d08
child 180 172ddcb92995
equal deleted inserted replaced
177:88ada40a3fa4 178:2c3ba8d90123
  1398 						   function() {
  1398 						   function() {
  1399 
  1399 
  1400 								function _submitAjaxForm(form, options) {
  1400 								function _submitAjaxForm(form, options) {
  1401 
  1401 
  1402 									var button,
  1402 									var button,
  1403 										button_data;
  1403 										button_data,
       
  1404 										button_target;
  1404 									var data = form.data();
  1405 									var data = form.data();
  1405 									var form_options = data.amsFormOptions;
  1406 									var form_options = data.amsFormOptions;
  1406 									var form_data;
  1407 									var form_data;
  1407 									var form_data_callback;
  1408 									var form_data_callback;
  1408 
  1409 
  1478 
  1479 
  1479 									// Check submit button for custom action handler and target
  1480 									// Check submit button for custom action handler and target
  1480 									button = $(form.data('ams-submit-button'));
  1481 									button = $(form.data('ams-submit-button'));
  1481 									if (button && button.exists()) {
  1482 									if (button && button.exists()) {
  1482 										button_data = button.data();
  1483 										button_data = button.data();
       
  1484 										button_target = button_data.amsFormSubmitTarget;
  1483 									} else {
  1485 									} else {
  1484 										button_data = {};
  1486 										button_data = {};
  1485 									}
  1487 									}
  1486 
  1488 
  1487 									// Check action URL
  1489 									// Check action URL
  1507 									var target = null;
  1509 									var target = null;
  1508 									if (submit_options && submit_options.initSubmitTarget) {
  1510 									if (submit_options && submit_options.initSubmitTarget) {
  1509 										ams.executeFunctionByName(submit_options.initSubmitTarget, form);
  1511 										ams.executeFunctionByName(submit_options.initSubmitTarget, form);
  1510 									} else {
  1512 									} else {
  1511 										if (data.amsFormInitSubmitTarget) {
  1513 										if (data.amsFormInitSubmitTarget) {
  1512 											target = $(buttonTarget || data.amsFormSubmitTarget || '#content');
  1514 											target = $(button_target || data.amsFormSubmitTarget || '#content');
  1513 											ams.executeFunctionByName(data.amsFormInitSubmit || 'MyAMS.form.initSubmit', form, target);
  1515 											ams.executeFunctionByName(data.amsFormInitSubmit || 'MyAMS.form.initSubmit', form, target);
  1514 										} else if (!data.amsFormHideSubmitFooter) {
  1516 										} else if (!data.amsFormHideSubmitFooter) {
  1515 											ams.executeFunctionByName(data.amsFormInitSubmit || 'MyAMS.form.initSubmitFooter', form);
  1517 											ams.executeFunctionByName(data.amsFormInitSubmit || 'MyAMS.form.initSubmitFooter', form);
  1516 										}
  1518 										}
  1517 									}
  1519 									}
  1520 									if (submit_options) {
  1522 									if (submit_options) {
  1521 										form_data = $.extend({}, form_data, submit_options.form_data);
  1523 										form_data = $.extend({}, form_data, submit_options.form_data);
  1522 									}
  1524 									}
  1523 
  1525 
  1524 									// Check progress handler
  1526 									// Check progress handler
       
  1527 									var hasUpload;
  1525 									if (progress_handler) {
  1528 									if (progress_handler) {
  1526 										form_data.progress_id = ams.generateUUID();
  1529 										form_data.progress_id = ams.generateUUID();
  1527 									} else {
  1530 									} else {
  1528 										// Check progress meter via Apache progress module
  1531 										// Check progress meter via Apache progress module
  1529 										var hasUpload = typeof(options.uuid) !== 'undefined';
  1532 										hasUpload = typeof(options.uuid) !== 'undefined';
  1530 										if (hasUpload) {
  1533 										if (hasUpload) {
  1531 											if (url.indexOf('X-Progress-ID') < 0) {
  1534 											if (url.indexOf('X-Progress-ID') < 0) {
  1532 												url += "?X-Progress-ID=" + options.uuid;
  1535 												url += "?X-Progress-ID=" + options.uuid;
  1533 											}
  1536 											}
  1534 											delete options.uuid;
  1537 											delete options.uuid;
  1552 										},
  1555 										},
  1553 										error: function(request, status, error, form) {
  1556 										error: function(request, status, error, form) {
  1554 											if (target) {
  1557 											if (target) {
  1555 												ams.executeFunctionByName(data.amsFormSubmitError || 'MyAMS.form.finalizeSubmitOnError', form, target);
  1558 												ams.executeFunctionByName(data.amsFormSubmitError || 'MyAMS.form.finalizeSubmitOnError', form, target);
  1556 											}
  1559 											}
  1557 											if (form.is(':visible')) {
  1560 											ams.form.resetAfterSubmit(form);
  1558 												var button = form.data('ams-submit-button');
       
  1559 												if (button) {
       
  1560 													button.button('reset');
       
  1561 												}
       
  1562 												ams.form.finalizeSubmitFooter.call(form);
       
  1563 											}
       
  1564 											form.data('submitted', false);
       
  1565 											form.removeData('ams-submit-button');
       
  1566 										},
  1561 										},
  1567 										iframe: hasUpload
  1562 										iframe: hasUpload
  1568 									};
  1563 									};
  1569 
  1564 
  1570 									// Initialize IFrame for custom download target
  1565 									// Initialize IFrame for custom download target
  1593 														callback = ams.getFunctionByName(data.amsFormSubmitCallback) || ams.form._submitCallback;
  1588 														callback = ams.getFunctionByName(data.amsFormSubmitCallback) || ams.form._submitCallback;
  1594 													}
  1589 													}
  1595 													try {
  1590 													try {
  1596 														callback.call(form, result, status, request, form);
  1591 														callback.call(form, result, status, request, form);
  1597 													} finally {
  1592 													} finally {
  1598 														if (form.is(':visible') && button) {
  1593 														ams.form.resetAfterSubmit(form);
  1599 															button.button('reset');
       
  1600 														}
       
  1601 														form.data('submitted', false);
       
  1602 														form.removeData('ams-submit-button');
       
  1603 														ams.form.resetChanged(form);
  1594 														ams.form.resetChanged(form);
  1604 													}
  1595 													}
  1605 												}
  1596 												}
  1606 											}
  1597 											}
  1607 										});
  1598 										});
  1609 										defaults = $.extend({}, defaults, {
  1600 										defaults = $.extend({}, defaults, {
  1610 											error: function(request, status, error, form) {
  1601 											error: function(request, status, error, form) {
  1611 												if (target) {
  1602 												if (target) {
  1612 													ams.executeFunctionByName(data.amsFormSubmitError || 'MyAMS.form.finalizeSubmitOnError', form, target);
  1603 													ams.executeFunctionByName(data.amsFormSubmitError || 'MyAMS.form.finalizeSubmitOnError', form, target);
  1613 												}
  1604 												}
  1614 												if (form.is(':visible')) {
  1605 												ams.form.resetAfterSubmit(form);
  1615 													var button = form.data('ams-submit-button');
       
  1616 													if (button) {
       
  1617 														button.button('reset');
       
  1618 													}
       
  1619 													ams.form.finalizeSubmitFooter.call(form);
       
  1620 												}
       
  1621 												form.data('submitted', false);
       
  1622 												form.removeData('ams-submit-button');
       
  1623 											},
  1606 											},
  1624 											success: function(result, status, request, form) {
  1607 											success: function(result, status, request, form) {
  1625 												var callback;
  1608 												var callback;
  1626 												var button = form.data('ams-submit-button');
  1609 												var button = form.data('ams-submit-button');
  1627 												if (button) {
  1610 												if (button) {
  1631 													callback = ams.getFunctionByName(data.amsFormSubmitCallback) || ams.form._submitCallback;
  1614 													callback = ams.getFunctionByName(data.amsFormSubmitCallback) || ams.form._submitCallback;
  1632 												}
  1615 												}
  1633 												try {
  1616 												try {
  1634 													callback.call(form, result, status, request, form);
  1617 													callback.call(form, result, status, request, form);
  1635 												} finally {
  1618 												} finally {
  1636 													if (form.is(':visible') && button) {
  1619 													ams.form.resetAfterSubmit(form);
  1637 														button.button('reset');
       
  1638 													}
       
  1639 													form.data('submitted', false);
       
  1640 													form.removeData('ams-submit-button');
       
  1641 													ams.form.resetChanged(form);
  1620 													ams.form.resetChanged(form);
  1642 												}
  1621 												}
  1643 											},
  1622 											},
  1644 											iframe: hasUpload
  1623 											iframe: hasUpload
  1645 										});
  1624 										});
  1655 									$(form).ajaxSubmit(settings);
  1634 									$(form).ajaxSubmit(settings);
  1656 
  1635 
  1657 									// If external download target is specified, reset form submit button and footer
  1636 									// If external download target is specified, reset form submit button and footer
  1658 									if (download_target) {
  1637 									if (download_target) {
  1659 										var modal = $(form).parents('.modal-dialog');
  1638 										var modal = $(form).parents('.modal-dialog');
  1660 										var keep_modal = modal.exists() && button && button.data('ams-keep-modal');
  1639 										var keep_modal = modal.exists() && button.exists() && button.data('ams-keep-modal');
  1661 										if (keep_modal !== true) {
  1640 										if (modal.exists() && (keep_modal !== true)) {
  1662 											ams.dialog.close(form);
  1641 											ams.dialog.close(form);
  1663 										} else {
  1642 										} else {
  1664 											setTimeout(function() {
  1643 											setTimeout(function() {
  1665 												ams.form.finalizeSubmitFooter.call(form);
  1644 												ams.form.resetAfterSubmit(form, button);
  1666 												if (button) {
       
  1667 													button.button('reset');
       
  1668 												}
       
  1669 												form.data('submitted', false);
       
  1670 												form.removeData('ams-submit-button');
       
  1671 												ams.form.resetChanged(form);
  1645 												ams.form.resetChanged(form);
  1672 											}, button.data('ams-form-reset-timeout') || 2000);
  1646 											}, button.data('ams-form-reset-timeout') || 2000);
  1673 										}
  1647 										}
  1674 									}
  1648 									}
  1675 								}
  1649 								}
  1713 			$(target).html('<div class="row margin-20"><div class="text-center">' + spin + '</div></div>');
  1687 			$(target).html('<div class="row margin-20"><div class="text-center">' + spin + '</div></div>');
  1714 			$(target).parents('.hidden').removeClass('hidden');
  1688 			$(target).parents('.hidden').removeClass('hidden');
  1715 		},
  1689 		},
  1716 
  1690 
  1717 		/**
  1691 		/**
       
  1692 		 * Reset form status after submit
       
  1693 		 *
       
  1694 		 * @param form: the submitted form
       
  1695 		 */
       
  1696 		resetAfterSubmit: function(form) {
       
  1697 			if (form.is(':visible')) {
       
  1698 				var button = form.data('ams-submit-button');
       
  1699 				if (button) {
       
  1700 					button.button('reset');
       
  1701 				}
       
  1702 				ams.form.finalizeSubmitFooter.call(form);
       
  1703 			}
       
  1704 			form.data('submitted', false);
       
  1705 			form.removeData('ams-submit-button');
       
  1706 		},
       
  1707 
       
  1708 		/**
  1718 		 * Finalize AJAX submit call
  1709 		 * Finalize AJAX submit call
  1719 		 *
  1710 		 *
  1720 		 * @param target: the form submit container target
  1711 		 * @param target: the form submit container target
  1721 		 */
  1712 		 */
  1722 		finalizeSubmitOnError: function(target) {
  1713 		finalizeSubmitOnError: function(target) {
  1816 				case 'html':
  1807 				case 'html':
  1817 					/* falls through */
  1808 					/* falls through */
  1818 				case 'text':
  1809 				case 'text':
  1819 					/* falls through */
  1810 					/* falls through */
  1820 				default:
  1811 				default:
       
  1812 					ams.form.resetChanged(form);
  1821 					if (button && (button.data('ams-keep-modal') !== true)) {
  1813 					if (button && (button.data('ams-keep-modal') !== true)) {
  1822 						ams.dialog.close(form);
  1814 						ams.dialog.close(form);
  1823 					}
  1815 					}
  1824 					if (!target.exists()) {
  1816 					if (!target.exists()) {
  1825 						target = $('body');
  1817 						target = $('body');
  2107 																  .append(content)
  2099 																  .append(content)
  2108 																  .modal(settings)
  2100 																  .modal(settings)
  2109 																  .on('shown', ams.dialog.shown)
  2101 																  .on('shown', ams.dialog.shown)
  2110 																  .on('hidden', ams.dialog.hidden);
  2102 																  .on('hidden', ams.dialog.hidden);
  2111 														ams.initContent(content);
  2103 														ams.initContent(content);
       
  2104 														if (source_data.amsLogEvent !== false) {
       
  2105 															ams.stats.logPageview(url);
       
  2106 														}
  2112 												}
  2107 												}
  2113 											}
  2108 											}
  2114 										});
  2109 										});
  2115 									}
  2110 									}
  2116 								});
  2111 								});
  4453 								ams.form.setFocus(container);
  4448 								ams.form.setFocus(container);
  4454 						}
  4449 						}
  4455 						if (options && options.afterLoadCallback) {
  4450 						if (options && options.afterLoadCallback) {
  4456 							ams.executeFunctionByName(options.afterLoadCallback, this);
  4451 							ams.executeFunctionByName(options.afterLoadCallback, this);
  4457 						}
  4452 						}
       
  4453 						ams.stats.logPageview();
  4458 					}
  4454 					}
  4459 				},
  4455 				},
  4460 				error: function(request, options, error) {
  4456 				error: function(request, options, error) {
  4461 					container.html('<h3 class="error"><i class="fa fa-warning txt-color-orangeDark"></i> ' +
  4457 					container.html('<h3 class="error"><i class="fa fa-warning txt-color-orangeDark"></i> ' +
  4462 								   ams.i18n.ERROR + error + '</h3>' +
  4458 								   ams.i18n.ERROR + error + '</h3>' +
  4501 
  4497 
  4502 	/**
  4498 	/**
  4503 	 * Statistics management
  4499 	 * Statistics management
  4504 	 */
  4500 	 */
  4505 	MyAMS.stats = {
  4501 	MyAMS.stats = {
       
  4502 
       
  4503 		/**
       
  4504 		 * Log current or specified page load
       
  4505 		 */
       
  4506 		logPageview: function(url) {
       
  4507 			if (typeof(globals._gaq) === 'undefined') {
       
  4508 				return;
       
  4509 			}
       
  4510 			var location = globals.window.location;
       
  4511 			globals._gaq.push(['_trackPageview', url || location.pathname + location.hash]);
       
  4512 		},
  4506 
  4513 
  4507 		/**
  4514 		/**
  4508 		 * Send event to Google Analytics platform
  4515 		 * Send event to Google Analytics platform
  4509 		 *
  4516 		 *
  4510 		 * @param category
  4517 		 * @param category
  4780 					}
  4787 					}
  4781 				}
  4788 				}
  4782 			});
  4789 			});
  4783 			$(document).on('click', 'a[target="_blank"]', function(e) {
  4790 			$(document).on('click', 'a[target="_blank"]', function(e) {
  4784 				e.preventDefault();
  4791 				e.preventDefault();
  4785 				window.open($(e.currentTarget).attr('href'));
  4792 				var target = $(e.currentTarget);
       
  4793 				window.open(target.attr('href'));
       
  4794 				ams.stats.logEvent(target.data('ams-stats-category') || 'Navigation',
       
  4795 								   target.data('ams-stats-action') || 'External',
       
  4796 								   target.data('ams-stats-label') || target.attr('href'));
  4786 			});
  4797 			});
  4787 			$(document).on('click', 'a[target="_top"]', function(e) {
  4798 			$(document).on('click', 'a[target="_top"]', function(e) {
  4788 				e.preventDefault();
  4799 				e.preventDefault();
  4789 				ams.form.confirmChangedForm(function() {
  4800 				ams.form.confirmChangedForm(function() {
  4790 					window.location = $(e.currentTarget).attr('href');
  4801 					window.location = $(e.currentTarget).attr('href');