35 return false; |
35 return false; |
36 } |
36 } |
37 return (this.substr(slen-dlen) === str); |
37 return (this.substr(slen-dlen) === str); |
38 }; |
38 }; |
39 |
39 |
|
40 String.prototype.unserialize = function(str) { |
|
41 var str = decodeURIComponent(this); |
|
42 var chunks = str.split('&'), |
|
43 obj = {}; |
|
44 for (var c = 0; c < chunks.length; c++) { |
|
45 var split = chunks[c].split('=', 2); |
|
46 obj[split[0]] = split[1]; |
|
47 } |
|
48 return obj; |
|
49 }; |
40 |
50 |
41 /** |
51 /** |
42 * Array prototype extensions |
52 * Array prototype extensions |
43 */ |
53 */ |
44 if (!Array.prototype.indexOf) { |
54 if (!Array.prototype.indexOf) { |
820 } |
830 } |
821 response = ams.ajax.getResponse(response); |
831 response = ams.ajax.getResponse(response); |
822 if (response.contentType === 'json') { |
832 if (response.contentType === 'json') { |
823 ams.ajax.handleJSON(response.data); |
833 ams.ajax.handleJSON(response.data); |
824 } else { |
834 } else { |
825 var title = event.statusText || event.type; |
835 var title = error || event.statusText || event.type; |
826 var message = response.responseText; |
836 var message = response.responseText; |
827 ams.skin.messageBox('error', { |
837 ams.skin.messageBox('error', { |
828 title: ams.i18n.ERROR_OCCURED, |
838 title: ams.i18n.ERROR_OCCURED, |
829 content: '<h4>' + title + '</h4><p>' + (message || '') + '</p>', |
839 content: '<h4>' + title + '</h4><p>' + (message || '') + '</p>', |
830 icon: 'fa fa-warning animated shake', |
840 icon: 'fa fa-warning animated shake', |
964 if (event.loaded >= event.total) { |
974 if (event.loaded >= event.total) { |
965 return; |
975 return; |
966 } |
976 } |
967 if (console) { |
977 if (console) { |
968 console.log && console.log(parseInt((event.loaded / event.total * 100), 10) + "%"); |
978 console.log && console.log(parseInt((event.loaded / event.total * 100), 10) + "%"); |
|
979 } |
|
980 }, |
|
981 |
|
982 /** |
|
983 * Post data to given URL and handle result as JSON |
|
984 */ |
|
985 getJSON: function() { |
|
986 return function(options) { |
|
987 var url = options.url; |
|
988 delete options.url; |
|
989 ams.ajax.post(url, options, function(result, status, request) { |
|
990 ams.ajax.handleJSON(result); |
|
991 }); |
969 } |
992 } |
970 }, |
993 }, |
971 |
994 |
972 /** |
995 /** |
973 * Post data to given URL |
996 * Post data to given URL |
2622 target.html(result); |
2645 target.html(result); |
2623 ams.initContent(target); |
2646 ams.initContent(target); |
2624 } else { |
2647 } else { |
2625 target.empty(); |
2648 target.empty(); |
2626 } |
2649 } |
2627 }); |
2650 }) |
|
2651 .fail(function() { |
|
2652 target.empty(); |
|
2653 }); |
2628 break; |
2654 break; |
2629 case 'json-rpc': |
2655 case 'json-rpc': |
2630 target.html('<div class="text-center"><i class="fa fa-2x fa-gear fa-spin"></i></div>'); |
2656 target.html('<div class="text-center"><i class="fa fa-2x fa-gear fa-spin"></i></div>'); |
2631 ams.jsonrpc.post(data.amsSelect2HelperMethod, |
2657 ams.jsonrpc.post(data.amsSelect2HelperMethod, |
2632 {value: source.val()}, |
2658 {value: source.val()}, |
2700 /** Datetimepicker dialog cleaner callback */ |
2726 /** Datetimepicker dialog cleaner callback */ |
2701 datetimepickerDialogHiddenCallback: function() { |
2727 datetimepickerDialogHiddenCallback: function() { |
2702 $('.datepicker, .timepicker, .datetimepicker', this).datetimepicker('destroy'); |
2728 $('.datepicker, .timepicker, .datetimepicker', this).datetimepicker('destroy'); |
2703 }, |
2729 }, |
2704 |
2730 |
|
2731 /** Clear search form target when query is empty */ |
|
2732 clearSearchTarget: function() { |
|
2733 var input = $(this); |
|
2734 if (!input.val()) { |
|
2735 var form = $(input).parents('form').first(); |
|
2736 $(form.data('ams-form-submit-target')).empty(); |
|
2737 } |
|
2738 }, |
|
2739 |
2705 /** Set SEO status */ |
2740 /** Set SEO status */ |
2706 setSEOStatus: function() { |
2741 setSEOStatus: function() { |
2707 var input = $(this); |
2742 var input = $(this); |
2708 var progress = input.siblings('.progress').children('.progress-bar'); |
2743 var progress = input.siblings('.progress').children('.progress-bar'); |
2709 var length = Math.min(input.val().length, 100); |
2744 var length = Math.min(input.val().length, 100); |
2997 * Another callback can also be provided to be called after plug-in initialization. |
3032 * Another callback can also be provided to be called after plug-in initialization. |
2998 * |
3033 * |
2999 * You can also register plug-ins using the 'register' function |
3034 * You can also register plug-ins using the 'register' function |
3000 */ |
3035 */ |
3001 enabled: { |
3036 enabled: { |
|
3037 |
|
3038 /** |
|
3039 * SVG containers |
|
3040 */ |
|
3041 svg: function(element) { |
|
3042 var svgs = $('.svg-container', element); |
|
3043 if (svgs.length > 0) { |
|
3044 svgs.each(function() { |
|
3045 var container = $(this); |
|
3046 var svg = $('svg', container); |
|
3047 svg.get(0).setAttribute('viewBox', '0 0 ' + Math.round(svg.attr('width')) + ' ' + Math.round(svg.attr('height'))); |
|
3048 svg.attr('width', '100%') |
|
3049 .attr('height', 'auto'); |
|
3050 }) |
|
3051 } |
|
3052 }, |
3002 |
3053 |
3003 /** |
3054 /** |
3004 * Label hints |
3055 * Label hints |
3005 */ |
3056 */ |
3006 hint: function(element) { |
3057 hint: function(element) { |
5257 cell.html(changes.cell); |
5308 cell.html(changes.cell); |
5258 MyAMS.initContent(cell); |
5309 MyAMS.initContent(cell); |
5259 } |
5310 } |
5260 }, |
5311 }, |
5261 |
5312 |
|
5313 switchCellContent: function(element) { |
|
5314 var source = $(this); |
|
5315 var switcher = $('i.switch', source); |
|
5316 var td = source.parents('td'); |
|
5317 var innerdiv = $(source.data('ams-switch-target') || '.inner-table-form', td); |
|
5318 var datatype = source.parents('tr'); |
|
5319 if (switcher.hasClass('fa-plus-square-o')) { |
|
5320 var container = datatype.parents('table'); |
|
5321 innerdiv.html('<h1 class="loading"><i class="fa fa-gear fa-spin"></i></h1>'); |
|
5322 MyAMS.ajax.post(container.data('ams-location') + '/' + source.data('ams-switch-handler'), |
|
5323 {object_name: datatype.data('ams-element-name')}, |
|
5324 function(result) { |
|
5325 innerdiv.html(result); |
|
5326 if (result) { |
|
5327 MyAMS.initContent(innerdiv); |
|
5328 switcher.removeClass('fa-plus-square-o') |
|
5329 .addClass('fa-minus-square-o'); |
|
5330 } |
|
5331 }); |
|
5332 } else { |
|
5333 MyAMS.skin.cleanContainer(innerdiv); |
|
5334 innerdiv.empty(); |
|
5335 switcher.removeClass('fa-minus-square-o') |
|
5336 .addClass('fa-plus-square-o'); |
|
5337 } |
|
5338 }, |
|
5339 |
5262 /** |
5340 /** |
5263 * Initialize desktop and mobile widgets |
5341 * Initialize desktop and mobile widgets |
5264 */ |
5342 */ |
5265 _initDesktopWidgets: function(element) { |
5343 _initDesktopWidgets: function(element) { |
5266 if (ams.enableWidgets) { |
5344 if (ams.enableWidgets) { |
5919 if (!href || href.startsWith('javascript') || link.attr('target') || (link.data('ams-context-menu') === true)) { |
5997 if (!href || href.startsWith('javascript') || link.attr('target') || (link.data('ams-context-menu') === true)) { |
5920 return; |
5998 return; |
5921 } |
5999 } |
5922 e.preventDefault(); |
6000 e.preventDefault(); |
5923 e.stopPropagation(); |
6001 e.stopPropagation(); |
5924 var hrefGetter = ams.getFunctionByName(href); |
6002 |
|
6003 var url, |
|
6004 target, |
|
6005 params; |
|
6006 if (href.indexOf('?') >= 0) { |
|
6007 url = href.split('?'); |
|
6008 target = url[0]; |
|
6009 params = url[1].unserialize(); |
|
6010 } else { |
|
6011 target = href; |
|
6012 params = undefined; |
|
6013 } |
|
6014 var hrefGetter = ams.getFunctionByName(target); |
5925 if (typeof(hrefGetter) === 'function') { |
6015 if (typeof(hrefGetter) === 'function') { |
5926 href = hrefGetter.call(link); |
6016 href = hrefGetter.call(link, params); |
5927 } |
6017 } |
5928 if (typeof(href) === 'function') { |
6018 if (typeof(href) === 'function') { |
5929 // Javascript function call |
6019 // Javascript function call |
5930 href.call(link); |
6020 href.call(link, params); |
5931 } else { |
6021 } else { |
5932 // Standard AJAX or browser URL call |
6022 // Standard AJAX or browser URL call |
5933 // Convert %23 chars to # |
6023 // Convert %23 chars to # |
5934 href = href.replace(/\%23/, '#'); |
6024 href = href.replace(/\%23/, '#'); |
5935 if (e.ctrlKey) { |
6025 if (e.ctrlKey) { |
6025 event.stopPropagation(); |
6115 event.stopPropagation(); |
6026 } |
6116 } |
6027 if (data.amsClickKeepDefault !== true) { |
6117 if (data.amsClickKeepDefault !== true) { |
6028 event.preventDefault(); |
6118 event.preventDefault(); |
6029 } |
6119 } |
6030 var callback = ams.getFunctionByName(data.amsClickHandler); |
6120 var clickHandlers = data.amsClickHandler.split(/\s+/); |
6031 if (callback !== undefined) { |
6121 for (var index=0; index < clickHandlers.length; index++) { |
6032 callback.call(source, event, data.amsClickHandlerOptions); |
6122 var callback = ams.getFunctionByName(clickHandlers[index]); |
|
6123 if (callback !== undefined) { |
|
6124 callback.call(source, event, data.amsClickHandlerOptions); |
|
6125 } |
6033 } |
6126 } |
6034 } |
6127 } |
6035 }); |
6128 }); |
6036 |
6129 |
6037 // Initialize custom change handlers |
6130 // Initialize custom change handlers |
6052 event.stopPropagation(); |
6145 event.stopPropagation(); |
6053 } |
6146 } |
6054 if (data.amsChangeKeepDefault !== true) { |
6147 if (data.amsChangeKeepDefault !== true) { |
6055 event.preventDefault(); |
6148 event.preventDefault(); |
6056 } |
6149 } |
6057 var callback = ams.getFunctionByName(data.amsChangeHandler); |
6150 var changeHandlers = data.amsChangeHandler.split(/\s+/); |
6058 if (callback !== undefined) { |
6151 for (var index=0; index < changeHandlers.length; index++) { |
6059 callback.call(source, event, data.amsChangeHandlerOptions); |
6152 var callback = ams.getFunctionByName(changeHandlers[index]); |
|
6153 if (callback !== undefined) { |
|
6154 callback.call(source, event, data.amsChangeHandlerOptions); |
|
6155 } |
6060 } |
6156 } |
6061 } |
6157 } |
6062 }); |
6158 }); |
6063 |
6159 |
6064 // Submit form when CTRL+Enter key is pressed in textarea |
6160 // Submit form when CTRL+Enter key is pressed in textarea |
6167 var link = $(e.target); |
6263 var link = $(e.target); |
6168 if (link.exists() && (link.get(0).tagName !== 'A')) { |
6264 if (link.exists() && (link.get(0).tagName !== 'A')) { |
6169 link = $('a[href]', link); |
6265 link = $('a[href]', link); |
6170 } |
6266 } |
6171 var data = link.data(); |
6267 var data = link.data(); |
6172 if (data.amsUrl) { |
6268 if (data && data.amsUrl) { |
6173 if (data.amsTabLoaded) { |
6269 if (data.amsTabLoaded) { |
6174 return; |
6270 return; |
6175 } |
6271 } |
6176 link.append('<i class="fa fa-spin fa-cog margin-left-5"></i>'); |
6272 link.append('<i class="fa fa-spin fa-cog margin-left-5"></i>'); |
6177 ams.skin.loadURL(data.amsUrl, link.attr('href'), { |
6273 ams.skin.loadURL(data.amsUrl, link.attr('href'), { |