diff -r e293b7ceaadd -r 48092a18c2c0 src/ztfy/myams/resources/js/myams.js --- a/src/ztfy/myams/resources/js/myams.js Mon Jun 04 12:33:03 2018 +0200 +++ b/src/ztfy/myams/resources/js/myams.js Fri Jun 29 15:09:46 2018 +0200 @@ -37,6 +37,16 @@ return (this.substr(slen-dlen) === str); }; + String.prototype.unserialize = function(str) { + var str = decodeURIComponent(this); + var chunks = str.split('&'), + obj = {}; + for (var c = 0; c < chunks.length; c++) { + var split = chunks[c].split('=', 2); + obj[split[0]] = split[1]; + } + return obj; + }; /** * Array prototype extensions @@ -822,7 +832,7 @@ if (response.contentType === 'json') { ams.ajax.handleJSON(response.data); } else { - var title = event.statusText || event.type; + var title = error || event.statusText || event.type; var message = response.responseText; ams.skin.messageBox('error', { title: ams.i18n.ERROR_OCCURED, @@ -970,6 +980,19 @@ }, /** + * Post data to given URL and handle result as JSON + */ + getJSON: function() { + return function(options) { + var url = options.url; + delete options.url; + ams.ajax.post(url, options, function(result, status, request) { + ams.ajax.handleJSON(result); + }); + } + }, + + /** * Post data to given URL */ post: function(url, data, options, callback) { @@ -2624,7 +2647,10 @@ } else { target.empty(); } - }); + }) + .fail(function() { + target.empty(); + }); break; case 'json-rpc': target.html('
'); @@ -2702,6 +2728,15 @@ $('.datepicker, .timepicker, .datetimepicker', this).datetimepicker('destroy'); }, + /** Clear search form target when query is empty */ + clearSearchTarget: function() { + var input = $(this); + if (!input.val()) { + var form = $(input).parents('form').first(); + $(form.data('ams-form-submit-target')).empty(); + } + }, + /** Set SEO status */ setSEOStatus: function() { var input = $(this); @@ -3001,6 +3036,22 @@ enabled: { /** + * SVG containers + */ + svg: function(element) { + var svgs = $('.svg-container', element); + if (svgs.length > 0) { + svgs.each(function() { + var container = $(this); + var svg = $('svg', container); + svg.get(0).setAttribute('viewBox', '0 0 ' + Math.round(svg.attr('width')) + ' ' + Math.round(svg.attr('height'))); + svg.attr('width', '100%') + .attr('height', 'auto'); + }) + } + }, + + /** * Label hints */ hint: function(element) { @@ -5259,6 +5310,33 @@ } }, + switchCellContent: function(element) { + var source = $(this); + var switcher = $('i.switch', source); + var td = source.parents('td'); + var innerdiv = $(source.data('ams-switch-target') || '.inner-table-form', td); + var datatype = source.parents('tr'); + if (switcher.hasClass('fa-plus-square-o')) { + var container = datatype.parents('table'); + innerdiv.html('

'); + MyAMS.ajax.post(container.data('ams-location') + '/' + source.data('ams-switch-handler'), + {object_name: datatype.data('ams-element-name')}, + function(result) { + innerdiv.html(result); + if (result) { + MyAMS.initContent(innerdiv); + switcher.removeClass('fa-plus-square-o') + .addClass('fa-minus-square-o'); + } + }); + } else { + MyAMS.skin.cleanContainer(innerdiv); + innerdiv.empty(); + switcher.removeClass('fa-minus-square-o') + .addClass('fa-plus-square-o'); + } + }, + /** * Initialize desktop and mobile widgets */ @@ -5921,13 +5999,25 @@ } e.preventDefault(); e.stopPropagation(); - var hrefGetter = ams.getFunctionByName(href); + + var url, + target, + params; + if (href.indexOf('?') >= 0) { + url = href.split('?'); + target = url[0]; + params = url[1].unserialize(); + } else { + target = href; + params = undefined; + } + var hrefGetter = ams.getFunctionByName(target); if (typeof(hrefGetter) === 'function') { - href = hrefGetter.call(link); + href = hrefGetter.call(link, params); } if (typeof(href) === 'function') { // Javascript function call - href.call(link); + href.call(link, params); } else { // Standard AJAX or browser URL call // Convert %23 chars to # @@ -6027,9 +6117,12 @@ if (data.amsClickKeepDefault !== true) { event.preventDefault(); } - var callback = ams.getFunctionByName(data.amsClickHandler); - if (callback !== undefined) { - callback.call(source, event, data.amsClickHandlerOptions); + var clickHandlers = data.amsClickHandler.split(/\s+/); + for (var index=0; index < clickHandlers.length; index++) { + var callback = ams.getFunctionByName(clickHandlers[index]); + if (callback !== undefined) { + callback.call(source, event, data.amsClickHandlerOptions); + } } } }); @@ -6054,9 +6147,12 @@ if (data.amsChangeKeepDefault !== true) { event.preventDefault(); } - var callback = ams.getFunctionByName(data.amsChangeHandler); - if (callback !== undefined) { - callback.call(source, event, data.amsChangeHandlerOptions); + var changeHandlers = data.amsChangeHandler.split(/\s+/); + for (var index=0; index < changeHandlers.length; index++) { + var callback = ams.getFunctionByName(changeHandlers[index]); + if (callback !== undefined) { + callback.call(source, event, data.amsChangeHandlerOptions); + } } } }); @@ -6169,7 +6265,7 @@ link = $('a[href]', link); } var data = link.data(); - if (data.amsUrl) { + if (data && data.amsUrl) { if (data.amsTabLoaded) { return; }