1839 bottom.show(); |
1853 bottom.show(); |
1840 } |
1854 } |
1841 |
1855 |
1842 var modal = e.target; |
1856 var modal = e.target; |
1843 var viewport = $('.modal-viewport', modal); |
1857 var viewport = $('.modal-viewport', modal); |
1844 if (viewport.length == 0) |
1858 if (viewport.exists()) { |
1845 return; |
1859 var maxHeight = parseInt(viewport.css('max-height')); |
1846 var maxHeight = parseInt(viewport.css('max-height')); |
1860 var barWidth = $.scrollbarWidth(); |
1847 var barWidth = $.scrollbarWidth(); |
1861 if (viewport.height() == maxHeight) { |
1848 if (viewport.height() == maxHeight) { |
1862 $('<div></div>').addClass('scrollmarker') |
1849 $('<div></div>').addClass('scrollmarker') |
1863 .addClass('top') |
1850 .addClass('top') |
1864 .css('top', 0) |
1851 .css('top', 0) |
1865 .css('width', viewport.width() - barWidth) |
1852 .css('width', viewport.width() - barWidth) |
1866 .hide() |
1853 .hide() |
1867 .appendTo(viewport); |
1854 .appendTo(viewport); |
1868 $('<div></div>').addClass('scrollmarker') |
1855 $('<div></div>').addClass('scrollmarker') |
1869 .addClass('bottom') |
1856 .addClass('bottom') |
1870 .css('top', maxHeight - 20) |
1857 .css('top', maxHeight - 20) |
1871 .css('width', viewport.width() - barWidth) |
1858 .css('width', viewport.width() - barWidth) |
1872 .appendTo(viewport); |
1859 .appendTo(viewport); |
1873 viewport.scroll(resetViewport); |
1860 viewport.scroll(resetViewport); |
1874 viewport.off('resize') |
1861 viewport.off('resize') |
|
1862 .on('resize', resetViewport); |
1875 .on('resize', resetViewport); |
1863 } else { |
1876 } else { |
1864 $('.scrollmarker', viewport).remove(); |
1877 $('.scrollmarker', viewport).remove(); |
|
1878 } |
1865 } |
1879 } |
1866 |
1880 |
1867 // Call shown callbacks registered for this dialog |
1881 // Call shown callbacks registered for this dialog |
1868 var callbacks = $('.modal-dialog', modal).data('shown-callbacks'); |
1882 var callbacks = $('.modal-dialog', modal).data('shown-callbacks'); |
1869 if (callbacks) { |
1883 if (callbacks) { |
2965 var tables = $('.datatable', element); |
2979 var tables = $('.datatable', element); |
2966 if (tables.length > 0) { |
2980 if (tables.length > 0) { |
2967 ams.ajax.check($.fn.dataTable, |
2981 ams.ajax.check($.fn.dataTable, |
2968 ams.baseURL + 'ext/jquery-dataTables-1.9.4' + ams.devext + '.js', |
2982 ams.baseURL + 'ext/jquery-dataTables-1.9.4' + ams.devext + '.js', |
2969 function(first_load) { |
2983 function(first_load) { |
2970 if (first_load) { |
|
2971 $.fn.dataTableExt.oSort['numeric-comma-asc'] = function(a, b) { |
|
2972 var x = a.replace(/,/, ".").replace(/ /g, ''); |
|
2973 var y = b.replace(/,/, ".").replace(/ /g, ''); |
|
2974 x = parseFloat(x); |
|
2975 y = parseFloat(y); |
|
2976 return ((x < y) ? -1 : ((x > y) ? 1 : 0)); |
|
2977 }; |
|
2978 $.fn.dataTableExt.oSort['numeric-comma-desc'] = function(a, b) { |
|
2979 var x = a.replace(/,/, ".").replace(/ /g, ''); |
|
2980 var y = b.replace(/,/, ".").replace(/ /g, ''); |
|
2981 x = parseFloat(x); |
|
2982 y = parseFloat(y); |
|
2983 return ((x < y) ? 1 : ((x > y) ? -1 : 0)); |
|
2984 }; |
|
2985 } |
|
2986 $(tables).each(function() { |
2984 $(tables).each(function() { |
2987 ams.ajax.check($.fn.dataTableExt.oPagination['bootstrap_full'], |
2985 ams.ajax.check($.fn.dataTableExt.oPagination['bootstrap_full'], |
2988 ams.baseURL + 'myams-dataTables' + ams.devext + '.js'); |
2986 ams.baseURL + 'myams-dataTables' + ams.devext + '.js'); |
2989 var table = $(this); |
2987 var table = $(this); |
2990 var data = table.data(); |
2988 var data = table.data(); |
2991 var extensions = (data.amsDatatableExtensions || '').split(/\s+/); |
2989 var extensions = (data.amsDatatableExtensions || '').split(/\s+/); |
|
2990 // Check DOM elements |
2992 var sDom = data.amsDatatableSdom || |
2991 var sDom = data.amsDatatableSdom || |
2993 "W" + |
2992 "W" + |
2994 ((extensions.indexOf('colreorder') >= 0 || |
2993 ((extensions.indexOf('colreorder') >= 0 || |
2995 extensions.indexOf('colreorderwithresize') >= 0) ? 'R' : '') + |
2994 extensions.indexOf('colreorderwithresize') >= 0) ? 'R' : '') + |
2996 "<'dt-top-row'" + |
2995 "<'dt-top-row'" + |
3001 ">r<'dt-wrapper't" + |
3000 ">r<'dt-wrapper't" + |
3002 (extensions.indexOf('scroller') >= 0 ? 'S' : '') + |
3001 (extensions.indexOf('scroller') >= 0 ? 'S' : '') + |
3003 "><'dt-row dt-bottom-row'<'row'<'col-sm-6'" + |
3002 "><'dt-row dt-bottom-row'<'row'<'col-sm-6'" + |
3004 (data.amsDatatableInformation === false ? '': 'i') + |
3003 (data.amsDatatableInformation === false ? '': 'i') + |
3005 "><'col-sm-6 text-right'p>>"; |
3004 "><'col-sm-6 text-right'p>>"; |
|
3005 var index; |
|
3006 // Check initial sorting |
|
3007 var sorting = data.amsDatatableSorting; |
|
3008 if (typeof(sorting) === 'string') { |
|
3009 var sortings = sorting.split(';'); |
|
3010 sorting = []; |
|
3011 for (index in sortings) { |
|
3012 var col_sorting = sortings[index].split(','); |
|
3013 col_sorting[0] = parseInt(col_sorting[0]); |
|
3014 sorting.push(col_sorting); |
|
3015 } |
|
3016 } |
|
3017 // Check columns types |
|
3018 var columns = []; |
|
3019 var sort_types = $('th', table).listattr('data-ams-datatable-stype'); |
|
3020 for (index in sort_types) { |
|
3021 var sort_type = sort_types[index]; |
|
3022 if (sort_type) { |
|
3023 var column = columns[index] || {}; |
|
3024 column.sType = sort_type; |
|
3025 columns[index] = column; |
|
3026 } |
|
3027 } |
|
3028 // Set options |
3006 var data_options = { |
3029 var data_options = { |
3007 bJQueryUI: false, |
3030 bJQueryUI: false, |
3008 bFilter: data.amsDatatableGlobalFilter !== false, |
3031 bFilter: data.amsDatatableGlobalFilter !== false, |
3009 bPaginate: data.amsDatatablePagination !== false, |
3032 bPaginate: data.amsDatatablePagination !== false, |
3010 bInfo: data.amsDatatableInfo !== false, |
3033 bInfo: data.amsDatatableInfo !== false, |
3011 bSort: data.amsDatatableSort !== false, |
3034 bSort: data.amsDatatableSort !== false, |
3012 aaSorting: data.amsDatatableSorting, |
3035 aaSorting: sorting, |
|
3036 aoColumns: columns.length > 0 ? columns : undefined, |
3013 bDeferRender: true, |
3037 bDeferRender: true, |
3014 bAutoWidth: false, |
3038 bAutoWidth: false, |
3015 iDisplayLength: data.amsDatatableDisplayLength || 25, |
3039 iDisplayLength: data.amsDatatableDisplayLength || 25, |
3016 sPaginationType: data.amsDatatablePaginationType || 'bootstrap_full', |
3040 sPaginationType: data.amsDatatablePaginationType || 'bootstrap_full', |
3017 sDom: sDom, |
3041 sDom: sDom, |
3085 break; |
3108 break; |
3086 } |
3109 } |
3087 } |
3110 } |
3088 } |
3111 } |
3089 settings = ams.executeFunctionByName(data.amsDatatableInitCallback, table, settings) || settings; |
3112 settings = ams.executeFunctionByName(data.amsDatatableInitCallback, table, settings) || settings; |
3090 var plugin = table.dataTable(settings); |
3113 try { // Some settings can easilly generate DataTables exceptions... |
3091 ams.executeFunctionByName(data.amsDatatableAfterInitCallback, table, plugin, settings); |
3114 var plugin = table.dataTable(settings); |
3092 if (extensions.length > 0) { |
3115 ams.executeFunctionByName(data.amsDatatableAfterInitCallback, table, plugin, settings); |
3093 for (index in extensions) { |
3116 if (extensions.length > 0) { |
3094 switch (extensions[index]) { |
3117 for (index in extensions) { |
3095 case 'autofill': |
3118 switch (extensions[index]) { |
3096 var af_settings = $.extend({}, data.amsDatatableAutofillOptions, settings.autofill); |
3119 case 'autofill': |
3097 af_settings = ams.executeFunctionByName(data.amsDatatableAutofillInitCallback, table, af_settings) || af_settings; |
3120 var af_settings = $.extend({}, data.amsDatatableAutofillOptions, settings.autofill); |
3098 table.data('ams-autofill', data.amsDatatableAutofillConstructor === undefined |
3121 af_settings = ams.executeFunctionByName(data.amsDatatableAutofillInitCallback, table, af_settings) || af_settings; |
3099 ? new $.fn.dataTable.AutoFill(table, af_settings) |
3122 table.data('ams-autofill', data.amsDatatableAutofillConstructor === undefined |
3100 : ams.executeFunctionByName(data.amsDatatableAutofillConstructor, table, plugin, af_settings)); |
3123 ? new $.fn.dataTable.AutoFill(table, af_settings) |
3101 break; |
3124 : ams.executeFunctionByName(data.amsDatatableAutofillConstructor, table, plugin, af_settings)); |
3102 case 'columnfilter': |
3125 break; |
3103 var cf_default = { |
3126 case 'columnfilter': |
3104 sPlaceHolder: 'head:after' |
3127 var cf_default = { |
3105 }; |
3128 sPlaceHolder: 'head:after' |
3106 var cf_settings = $.extend({}, cf_default, data.amsDatatableColumnfilterOptions, settings.columnfilter); |
3129 }; |
3107 cf_settings = ams.executeFunctionByName(data.amsDatatableColumnfilterInitCallback, table, cf_settings) || cf_settings; |
3130 var cf_settings = $.extend({}, cf_default, data.amsDatatableColumnfilterOptions, settings.columnfilter); |
3108 table.data('ams-columnfilter', data.amsDatatableColumnfilterConstructor === undefined |
3131 cf_settings = ams.executeFunctionByName(data.amsDatatableColumnfilterInitCallback, table, cf_settings) || cf_settings; |
3109 ? plugin.columnFilter(cf_settings) |
3132 table.data('ams-columnfilter', data.amsDatatableColumnfilterConstructor === undefined |
3110 : ams.executeFunctionByName(data.amsDatatableColumnfilterConstructor, table, plugin, cf_settings)); |
3133 ? plugin.columnFilter(cf_settings) |
3111 break; |
3134 : ams.executeFunctionByName(data.amsDatatableColumnfilterConstructor, table, plugin, cf_settings)); |
3112 case 'editable': |
3135 break; |
3113 var ed_settings = $.extend({}, data.amsDatatableEditableOptions, settings.editable); |
3136 case 'editable': |
3114 ed_settings = ams.executeFunctionByName(data.amsDatatableEditableInitCallback, table, ed_settings) || ed_settings; |
3137 var ed_settings = $.extend({}, data.amsDatatableEditableOptions, settings.editable); |
3115 table.data('ams-editable', data.amsDatatableEditableConstructor === undefined |
3138 ed_settings = ams.executeFunctionByName(data.amsDatatableEditableInitCallback, table, ed_settings) || ed_settings; |
3116 ? table.makeEditable(ed_settings) |
3139 table.data('ams-editable', data.amsDatatableEditableConstructor === undefined |
3117 : ams.executeFunctionByName(data.amsDatatableEditableConstructor, table, plugin, ed_settings)); |
3140 ? table.makeEditable(ed_settings) |
3118 break; |
3141 : ams.executeFunctionByName(data.amsDatatableEditableConstructor, table, plugin, ed_settings)); |
3119 case 'fixedcolumns': |
3142 break; |
3120 var fc_settings = $.extend({}, data.amsDatatableFixedcolumnsOptions, settings.fixedcolumns); |
3143 case 'fixedcolumns': |
3121 fc_settings = ams.executeFunctionByName(data.amsDatatableFixedcolumnsInitCallback, table, fc_settings) || fc_settings; |
3144 var fc_settings = $.extend({}, data.amsDatatableFixedcolumnsOptions, settings.fixedcolumns); |
3122 table.data('ams-fixedcolumns', data.amsDatatableFixedcolumnsConstructor === undefined |
3145 fc_settings = ams.executeFunctionByName(data.amsDatatableFixedcolumnsInitCallback, table, fc_settings) || fc_settings; |
3123 ? new $.fn.dataTable.FixedColumns(table, fc_settings) |
3146 table.data('ams-fixedcolumns', data.amsDatatableFixedcolumnsConstructor === undefined |
3124 : ams.executeFunctionByName(data.amsDatatableFixedcolumnsConstructor, table, plugin, fc_settings)); |
3147 ? new $.fn.dataTable.FixedColumns(table, fc_settings) |
3125 break; |
3148 : ams.executeFunctionByName(data.amsDatatableFixedcolumnsConstructor, table, plugin, fc_settings)); |
3126 case 'fixedheader': |
3149 break; |
3127 var fh_settings = $.extend({}, data.amsDatatableFixedheaderOptions, settings.fixedheader); |
3150 case 'fixedheader': |
3128 fh_settings = ams.executeFunctionByName(data.amsDatatableFixedheadeInitCallback, table, fh_settings) || fh_settings; |
3151 var fh_settings = $.extend({}, data.amsDatatableFixedheaderOptions, settings.fixedheader); |
3129 table.data('ams-fixedheader', data.amsDatatableFixedheaderConstructor === undefined |
3152 fh_settings = ams.executeFunctionByName(data.amsDatatableFixedheadeInitCallback, table, fh_settings) || fh_settings; |
3130 ? new $.fn.dataTable.FixedHeader(table, fh_settings) |
3153 table.data('ams-fixedheader', data.amsDatatableFixedheaderConstructor === undefined |
3131 : ams.executeFunctionByName(data.amsDatatableFixedheaderConstructor, table, plugin, fh_settings)); |
3154 ? new $.fn.dataTable.FixedHeader(table, fh_settings) |
3132 break; |
3155 : ams.executeFunctionByName(data.amsDatatableFixedheaderConstructor, table, plugin, fh_settings)); |
3133 case 'keytable': |
3156 break; |
3134 var kt_default = { |
3157 case 'keytable': |
3135 table: table.get(0), |
3158 var kt_default = { |
3136 datatable: plugin |
3159 table: table.get(0), |
3137 }; |
3160 datatable: plugin |
3138 var kt_settings = $.extend({}, kt_default, data.amsDatatableKeytableOptions, settings.keytable); |
3161 }; |
3139 kt_settings = ams.executeFunctionByName(data.amsDatatableKeytableInitCallback, table, kt_settings) || kt_settings; |
3162 var kt_settings = $.extend({}, kt_default, data.amsDatatableKeytableOptions, settings.keytable); |
3140 table.data('ams-keytable', data.amsDatatableKeytableConstructor === undefined |
3163 kt_settings = ams.executeFunctionByName(data.amsDatatableKeytableInitCallback, table, kt_settings) || kt_settings; |
3141 ? new KeyTable(kt_settings) |
3164 table.data('ams-keytable', data.amsDatatableKeytableConstructor === undefined |
3142 : ams.executeFunctionByName(data.amsDatatableKeytableConstructor, table, plugin, kt_settings)); |
3165 ? new KeyTable(kt_settings) |
3143 break; |
3166 : ams.executeFunctionByName(data.amsDatatableKeytableConstructor, table, plugin, kt_settings)); |
3144 case 'rowgrouping': |
3167 break; |
3145 var rg_settings = $.extend({}, data.amsDatatableRowgroupingOptions, settings.rowgrouping); |
3168 case 'rowgrouping': |
3146 rg_settings = ams.executeFunctionByName(data.amsDatatableRowgroupingInitCallback, table, rg_settings) || rg_settings; |
3169 var rg_settings = $.extend({}, data.amsDatatableRowgroupingOptions, settings.rowgrouping); |
3147 table.data('ams-rowgrouping', data.amsDatatableRowgroupingConstructor === undefined |
3170 rg_settings = ams.executeFunctionByName(data.amsDatatableRowgroupingInitCallback, table, rg_settings) || rg_settings; |
3148 ? table.rowGrouping(rg_settings) |
3171 table.data('ams-rowgrouping', data.amsDatatableRowgroupingConstructor === undefined |
3149 : ams.executeFunctionByName(data.amsDatatableRowgroupingConstructor, table, plugin, rg_settings)); |
3172 ? table.rowGrouping(rg_settings) |
3150 break; |
3173 : ams.executeFunctionByName(data.amsDatatableRowgroupingConstructor, table, plugin, rg_settings)); |
3151 case 'rowreordering': |
3174 break; |
3152 var rr_settings = $.extend({}, data.amsDatatableRowreorderingOptions, settings.rowreordering); |
3175 case 'rowreordering': |
3153 rr_settings = ams.executeFunctionByName(data.amsDatatableRowreorderingInitCallback, table, rr_settings) || rr_settings; |
3176 var rr_settings = $.extend({}, data.amsDatatableRowreorderingOptions, settings.rowreordering); |
3154 table.data('ams-rowreordering', data.amsDatatableRowreorderingConstructor === undefined |
3177 rr_settings = ams.executeFunctionByName(data.amsDatatableRowreorderingInitCallback, table, rr_settings) || rr_settings; |
3155 ? table.rowReordering(rr_settings) |
3178 table.data('ams-rowreordering', data.amsDatatableRowreorderingConstructor === undefined |
3156 : ams.executeFunctionByName(data.amsDatatableRowreorderingConstructor, table, plugin, rr_settings)); |
3179 ? table.rowReordering(rr_settings) |
3157 break; |
3180 : ams.executeFunctionByName(data.amsDatatableRowreorderingConstructor, table, plugin, rr_settings)); |
3158 default: |
3181 break; |
3159 break; |
3182 default: |
|
3183 break; |
|
3184 } |
|
3185 } |
|
3186 } |
|
3187 var finalizers = (data.amsDatatableFinalizeCallback || '').split(/\s+/); |
|
3188 if (finalizers.length > 0) { |
|
3189 for (index in finalizers) { |
|
3190 ams.executeFunctionByName(finalizers[index], table, plugin, settings); |
3160 } |
3191 } |
3161 } |
3192 } |
3162 } |
3193 } |
3163 var finalizers = (data.amsDatatableFinalizeCallback || '').split(/\s+/); |
3194 catch (e) {} |
3164 if (finalizers.length > 0) { |
|
3165 for (index in finalizers) { |
|
3166 ams.executeFunctionByName(finalizers[index], table, plugin, settings); |
|
3167 } |
|
3168 } |
|
3169 }); |
3195 }); |
3170 }); |
3196 }); |
3171 } |
3197 } |
3172 }, |
3198 }, |
3173 |
3199 |
3391 var settings = $.extend({}, data_options, data.amsFancyboxOptions); |
3417 var settings = $.extend({}, data_options, data.amsFancyboxOptions); |
3392 settings = ams.executeFunctionByName(data.amsFancyboxInitCallback, fancybox, settings) || settings; |
3418 settings = ams.executeFunctionByName(data.amsFancyboxInitCallback, fancybox, settings) || settings; |
3393 var plugin = fancybox.fancybox(settings); |
3419 var plugin = fancybox.fancybox(settings); |
3394 ams.executeFunctionByName(data.amsFancyboxAfterInitCallback, fancybox, plugin, settings); |
3420 ams.executeFunctionByName(data.amsFancyboxAfterInitCallback, fancybox, plugin, settings); |
3395 }); |
3421 }); |
|
3422 }); |
|
3423 } |
|
3424 }, |
|
3425 |
|
3426 /** |
|
3427 * Flot charts |
|
3428 */ |
|
3429 chart: function(element) { |
|
3430 var charts = $('.chart', element); |
|
3431 if (charts.length > 0) { |
|
3432 ams.ajax.check($.fn.plot, |
|
3433 ams.baseURL + 'flot/jquery.flot' + ams.devext + '.js', |
|
3434 function() { |
|
3435 charts.each(function() { |
|
3436 |
|
3437 function checkPlugin(plugin) { |
|
3438 for (var index in $.plot.plugins) { |
|
3439 var plugin_info = $.plot.plugins[index]; |
|
3440 if (plugin_info.name == plugin) { |
|
3441 return plugin_info; |
|
3442 } |
|
3443 } |
|
3444 return null; |
|
3445 } |
|
3446 |
|
3447 var chart = $(this); |
|
3448 var data = chart.data(); |
|
3449 var data_options = {}; |
|
3450 var plugins = (data.amsChartPlugins || '').split(/\s+/); |
|
3451 if (plugins.length > 0) { |
|
3452 for (var index in plugins) { |
|
3453 var plugin_name = plugins[index]; |
|
3454 if (!checkPlugin(plugin_name)) { |
|
3455 ams.getScript(ams.baseURL + 'flot/jquery.flot.' + plugin_name + ams.devext + '.js'); |
|
3456 } |
|
3457 } |
|
3458 } |
|
3459 var settings = $.extend({}, data_options, data.amsChartOptions); |
|
3460 settings = ams.executeFunctionByName(data.amsChartInitCallback, chart, settings) || settings; |
|
3461 var chart_data = data.amsChartData; |
|
3462 chart_data = ams.executeFunctionByName(data.amsChartInitData, chart, chart_data) || chart_data; |
|
3463 var plugin = chart.plot(chart_data, settings); |
|
3464 ams.executeFunctionByName(data.amsChartAfterInitCallback, chart, plugin, settings); |
|
3465 }) |
3396 }); |
3466 }); |
3397 } |
3467 } |
3398 }, |
3468 }, |
3399 |
3469 |
3400 /** |
3470 /** |