diff -r 35776420c332 -r c9495342d92c src/pyams_skin/resources/js/myams.js --- a/src/pyams_skin/resources/js/myams.js Wed Jun 07 10:10:48 2017 +0200 +++ b/src/pyams_skin/resources/js/myams.js Wed Jun 07 10:11:58 2017 +0200 @@ -2,7 +2,7 @@ * MyAMS * « My Application Management Skin » * - * $Tag$ (rev. 23) + * $Tag$ (rev. 1) * A bootstrap based application/administration skin * * Custom administration and application skin tools @@ -506,6 +506,28 @@ /** + * Get an object given by name + */ + MyAMS.getObject = function(objectName, context) { + if (!objectName) { + return undefined; + } + if (typeof(objectName) !== 'string') { + return objectName; + } + var namespaces = objectName.split("."); + context = (context === undefined || context === null) ? window : context; + for (var i=0; i < namespaces.length; i++) { + try { + context = context[namespaces[i]]; + } catch (e) { + return undefined; + } + } + return context; + }; + + /** * Get and execute a function given by name * Small piece of code by Jason Bunting */ @@ -687,10 +709,10 @@ * Default JQuery AJAX error handler */ ajax: function(event, response, request, error) { - if (response.statusText === 'OK') { + if (response && response.statusText && response.statusText.toUpperCase() === 'OK') { return; } - var response = ams.ajax.getResponse(response); + response = ams.ajax.getResponse(response); if (response.contentType === 'json') { ams.ajax.handleJSON(response.data); } else { @@ -698,7 +720,7 @@ var message = response.responseText; ams.skin.messageBox('error', { title: ams.i18n.ERROR_OCCURED, - content: '

' + title + '

' + message + '

', + content: '

' + title + '

' + (message || '') + '

', icon: 'fa fa-warning animated shake', timeout: 10000 }); @@ -751,9 +773,27 @@ * @options: callback options */ check: function(checker, source, callback, options) { - if (typeof(callback) === 'object') { - options = callback; - callback = undefined; + + function callCallbacks(firstLoad, options) { + if (callback === undefined) { + return; + } + if (!(callback instanceof Array)) { + callback = [callback]; + } + for (var index=0; index < callback.length; index++) { + var cb = ams.getFunctionByName(callback[index]); + if (typeof(cb) === 'function') { + cb(firstLoad, options); + } + } + } + + if (!(callback instanceof Array)) { + if (typeof(callback) === 'object') { + options = callback; + callback = undefined; + } } var defaults = { async: typeof(callback) === 'function' @@ -768,25 +808,19 @@ } if (deferred.length > 0) { $.when.apply($, deferred).then(function () { - if (typeof(callback) === 'function') { - callback(true, options); - } + callCallbacks(true, options); }); - } else if (typeof(callback) === 'function') { - callback(false, options); + } else { + callCallbacks(false, options); } } else if (checker === undefined) { if (typeof(source) === 'string') { ams.getScript(source, function () { - if (typeof(callback) === 'function') { - callback(true, options); - } + callCallbacks(true, options); }, settings); } } else { - if (typeof(callback) === 'function') { - callback(false, options); - } + callCallbacks(false, options); } }, @@ -3525,230 +3559,288 @@ ams.ajax.check($.fn.dataTable, ams.baseURL + 'ext/jquery-dataTables-1.9.4' + ams.devext + '.js', function(first_load) { - $(tables).each(function() { - ams.ajax.check($.fn.dataTableExt.oPagination.bootstrap_full, - ams.baseURL + 'myams-dataTables' + ams.devext + '.js'); - var table = $(this); - var data = table.data(); - var extensions = (data.amsDatatableExtensions || '').split(/\s+/); - // Check DOM elements - var sDom = data.amsDatatableSdom || - "W" + - ((extensions.indexOf('colreorder') >= 0 || - extensions.indexOf('colreorderwithresize') >= 0) ? 'R' : '') + - "<'dt-top-row'" + - (extensions.indexOf('colvis') >= 0 ? 'C' : '') + - ((data.amsDatatablePagination === false || - data.amsDatatablePaginationSize === false) ? '' : 'L') + - (data.amsDatatableGlobalFilter === false ? '' : 'F') + - ">r<'dt-wrapper't" + - (extensions.indexOf('scroller') >= 0 ? 'S' : '') + - "><'dt-row dt-bottom-row'<'row'<'col-sm-6'" + - (data.amsDatatableInformation === false ? '': 'i') + - "><'col-sm-6 text-right'p>>"; - - var index; - // Check initial sorting - var sorting = data.amsDatatableSorting; - if (typeof(sorting) === 'string') { - var sortings = sorting.split(';'); - sorting = []; - for (index=0; index < sortings.length; index++) { - var colSorting = sortings[index].split(','); - colSorting[0] = parseInt(colSorting[0]); - sorting.push(colSorting); - } - } - // Check columns sortings - var columns = []; - var column; - var sortables = $('th', table).listattr('data-ams-datatable-sortable'); - for (index=0; index < sortables.length; index++) { - var sortable = sortables[index]; - if (sortable !== undefined) { - column = columns[index] || {}; - column.bSortable = sortable; - columns[index] = column; - } - } - // Check columns types - var sortTypes = $('th', table).listattr('data-ams-datatable-stype'); - for (index=0; index < sortTypes.length; index++) { - var sortType = sortTypes[index]; - if (sortType) { - column = columns[index] || {}; - column.sType = sortType; - columns[index] = column; - } - } - // Set options + ams.ajax.check($.fn.dataTableExt.oPagination.bootstrap_full, + ams.baseURL + 'myams-dataTables' + ams.devext + '.js', + function() { + $(tables).each(function () { + var table = $(this); + var data = table.data(); + var extensions = (data.amsDatatableExtensions || '').split(/\s+/); + // Check DOM elements + var sDom = data.amsDatatableSdom || + "W" + + ((extensions.indexOf('colreorder') >= 0 || + extensions.indexOf('colreorderwithresize') >= 0) ? 'R' : '') + + "<'dt-top-row'" + + (extensions.indexOf('colvis') >= 0 ? 'C' : '') + + ((data.amsDatatablePagination === false || + data.amsDatatablePaginationSize === false) ? '' : 'L') + + (data.amsDatatableGlobalFilter === false ? '' : 'F') + + ">r<'dt-wrapper't" + + (extensions.indexOf('scroller') >= 0 ? 'S' : '') + + "><'dt-row dt-bottom-row'<'row'<'col-sm-6'" + + (data.amsDatatableInformation === false ? '' : 'i') + + "><'col-sm-6 text-right'p>>"; + + var index; + // Check initial sorting + var sorting = data.amsDatatableSorting; + if (typeof(sorting) === 'string') { + var sortings = sorting.split(';'); + sorting = []; + for (index = 0; index < sortings.length; index++) { + var colSorting = sortings[index].split(','); + colSorting[0] = parseInt(colSorting[0]); + sorting.push(colSorting); + } + } + // Check columns sortings + var columns = []; + var column; + var sortables = $('th', table).listattr('data-ams-datatable-sortable'); + for (index = 0; index < sortables.length; index++) { + var sortable = sortables[index]; + if (sortable !== undefined) { + column = columns[index] || {}; + column.bSortable = sortable; + columns[index] = column; + } + } + // Check columns types + var sortTypes = $('th', table).listattr('data-ams-datatable-stype'); + for (index = 0; index < sortTypes.length; index++) { + var sortType = sortTypes[index]; + if (sortType) { + column = columns[index] || {}; + column.sType = sortType; + columns[index] = column; + } + } + // Set options + var dataOptions = { + bJQueryUI: false, + bFilter: data.amsDatatableGlobalFilter !== false || extensions.indexOf('columnfilter') >= 0, + bPaginate: data.amsDatatablePagination !== false, + bInfo: data.amsDatatableInfo !== false, + bSort: data.amsDatatableSort !== false, + aaSorting: sorting, + aoColumns: columns.length > 0 ? columns : undefined, + bDeferRender: true, + bAutoWidth: false, + iDisplayLength: data.amsDatatableDisplayLength || 25, + sPaginationType: data.amsDatatablePaginationType || 'bootstrap_full', + sDom: sDom, + oLanguage: ams.plugins.i18n.datatables, + fnInitComplete: function (oSettings, json) { + $('.ColVis_Button').addClass('btn btn-default btn-sm') + .html((ams.plugins.i18n.datatables.sColumns || "Columns") + + ' '); + } + }; + var settings = $.extend({}, dataOptions, data.amsDatatableOptions); + var checkers = []; + var sources = []; + var callbacks = []; + if (extensions.length > 0) { + for (index = 0; index < extensions.length; index++) { + switch (extensions[index]) { + case 'autofill': + checkers.push($.fn.dataTable.AutoFill); + sources.push(ams.baseURL + 'ext/jquery-dataTables-autoFill' + ams.devext + '.js'); + break; + case 'columnfilter': + checkers.push($.fn.columnFilter); + sources.push(ams.baseURL + 'ext/jquery-dataTables-columnFilter' + ams.devext + '.js'); + break; + case 'colreorder': + checkers.push($.fn.dataTable.ColReorder); + sources.push(ams.baseURL + 'ext/jquery-dataTables-colReorder' + ams.devext + '.js'); + break; + case 'colreorderwithresize': + checkers.push(window.ColReorder); + sources.push(ams.baseURL + 'ext/jquery-dataTables-colReorderWithResize' + ams.devext + '.js'); + break; + case 'colvis': + checkers.push($.fn.dataTable.ColVis); + sources.push(ams.baseURL + 'ext/jquery-dataTables-colVis' + ams.devext + '.js'); + callbacks.push(function () { + var cvDefault = { + activate: 'click', + sAlign: 'right' + }; + settings.oColVis = $.extend({}, cvDefault, data.amsDatatableColvisOptions); + }); + break; + case 'editable': + checkers.push($.fn.editable); + sources.push(ams.baseURL + 'ext/jquery-jeditable' + ams.devext + '.js'); + checkers.push($.fn.makeEditable); + sources.push(ams.baseURL + 'ext/jquery-dataTables-editable' + ams.devext + '.js'); + break; + case 'fixedcolumns': + checkers.push($.fn.dataTable.FixedColumns); + sources.push(ams.baseURL + 'ext/jquery-dataTables-fixedColumns' + ams.devext + '.js'); + break; + case 'fixedheader': + checkers.push($.fn.dataTable.Fixedheader); + sources.push(ams.baseURL + 'ext/jquery-dataTables-fixedHeader' + ams.devext + '.js'); + break; + case 'keytable': + checkers.push(window.keyTable); + sources.push(ams.baseURL + 'ext/jquery-dataTables-keyTable' + ams.devext + '.js'); + break; + case 'rowgrouping': + checkers.push($.fn.rowGrouping()); + sources.push(ams.baseURL + 'ext/jquery-dataTables-rowGrouping' + ams.devext + '.js'); + break; + case 'rowreordering': + checkers.push($.fn.rowReordering); + sources.push(ams.baseURL + 'ext/jquery-dataTables-rowReordering' + ams.devext + '.js'); + break; + case 'scroller': + checkers.push($.fn.dataTable.Scroller); + sources.push(ams.baseURL + 'ext/jquery-dataTables-scroller' + ams.devext + '.js'); + break; + default: + break; + } + } + } + + function initTable() { + settings = ams.executeFunctionByName(data.amsDatatableInitCallback, table, settings) || settings; + try { // Some settings can easily generate DataTables exceptions... + var plugin = table.dataTable(settings); + ams.executeFunctionByName(data.amsDatatableAfterInitCallback, table, plugin, settings); + if (extensions.length > 0) { + for (index = 0; index < extensions.length; index++) { + switch (extensions[index]) { + case 'autofill': + var afSettings = $.extend({}, data.amsDatatableAutofillOptions, settings.autofill); + afSettings = ams.executeFunctionByName(data.amsDatatableAutofillInitCallback, table, afSettings) || afSettings; + table.data('ams-autofill', data.amsDatatableAutofillConstructor === undefined ? + new $.fn.dataTable.AutoFill(table, afSettings) + : ams.executeFunctionByName(data.amsDatatableAutofillConstructor, table, plugin, afSettings)); + break; + case 'columnfilter': + var cfDefault = { + sPlaceHolder: 'head:after' + }; + var cfSettings = $.extend({}, cfDefault, data.amsDatatableColumnfilterOptions, settings.columnfilter); + cfSettings = ams.executeFunctionByName(data.amsDatatableColumnfilterInitCallback, table, cfSettings) || cfSettings; + table.data('ams-columnfilter', data.amsDatatableColumnfilterConstructor === undefined ? + plugin.columnFilter(cfSettings) + : ams.executeFunctionByName(data.amsDatatableColumnfilterConstructor, table, plugin, cfSettings)); + break; + case 'editable': + var edSettings = $.extend({}, data.amsDatatableEditableOptions, settings.editable); + edSettings = ams.executeFunctionByName(data.amsDatatableEditableInitCallback, table, edSettings) || edSettings; + table.data('ams-editable', data.amsDatatableEditableConstructor === undefined ? + table.makeEditable(edSettings) + : ams.executeFunctionByName(data.amsDatatableEditableConstructor, table, plugin, edSettings)); + break; + case 'fixedcolumns': + var fcSettings = $.extend({}, data.amsDatatableFixedcolumnsOptions, settings.fixedcolumns); + fcSettings = ams.executeFunctionByName(data.amsDatatableFixedcolumnsInitCallback, table, fcSettings) || fcSettings; + table.data('ams-fixedcolumns', data.amsDatatableFixedcolumnsConstructor === undefined ? + new $.fn.dataTable.FixedColumns(table, fcSettings) + : ams.executeFunctionByName(data.amsDatatableFixedcolumnsConstructor, table, plugin, fcSettings)); + break; + case 'fixedheader': + var fhSettings = $.extend({}, data.amsDatatableFixedheaderOptions, settings.fixedheader); + fhSettings = ams.executeFunctionByName(data.amsDatatableFixedheadeInitCallback, table, fhSettings) || fhSettings; + table.data('ams-fixedheader', data.amsDatatableFixedheaderConstructor === undefined ? + new $.fn.dataTable.FixedHeader(table, fhSettings) + : ams.executeFunctionByName(data.amsDatatableFixedheaderConstructor, table, plugin, fhSettings)); + break; + case 'keytable': + var ktDefault = { + table: table.get(0), + datatable: plugin + }; + var ktSettings = $.extend({}, ktDefault, data.amsDatatableKeytableOptions, settings.keytable); + ktSettings = ams.executeFunctionByName(data.amsDatatableKeytableInitCallback, table, ktSettings) || ktSettings; + table.data('ams-keytable', data.amsDatatableKeytableConstructor === undefined ? + new KeyTable(ktSettings) + : ams.executeFunctionByName(data.amsDatatableKeytableConstructor, table, plugin, ktSettings)); + break; + case 'rowgrouping': + var rgSettings = $.extend({}, data.amsDatatableRowgroupingOptions, settings.rowgrouping); + rgSettings = ams.executeFunctionByName(data.amsDatatableRowgroupingInitCallback, table, rgSettings) || rgSettings; + table.data('ams-rowgrouping', data.amsDatatableRowgroupingConstructor === undefined ? + table.rowGrouping(rgSettings) + : ams.executeFunctionByName(data.amsDatatableRowgroupingConstructor, table, plugin, rgSettings)); + break; + case 'rowreordering': + var rrSettings = $.extend({}, data.amsDatatableRowreorderingOptions, settings.rowreordering); + rrSettings = ams.executeFunctionByName(data.amsDatatableRowreorderingInitCallback, table, rrSettings) || rrSettings; + table.data('ams-rowreordering', data.amsDatatableRowreorderingConstructor === undefined ? + table.rowReordering(rrSettings) + : ams.executeFunctionByName(data.amsDatatableRowreorderingConstructor, table, plugin, rrSettings)); + break; + default: + break; + } + } + } + if (data.amsDatatableFinalizeCallback) { + var finalizers = data.amsDatatableFinalizeCallback.split(/\s+/); + if (finalizers.length > 0) { + for (index = 0; index < finalizers.length; index++) { + ams.executeFunctionByName(finalizers[index], table, plugin, settings); + } + } + } + } + catch (e) { + } + } + + callbacks.push(initTable); + ams.ajax.check(checkers, sources, callbacks); + }); + }); + }); + } + }, + + /** + * Wizard plug-in + */ + wizard: function(element) { + var wizards = $('.wizard', element); + if (wizards.length > 0) { + ams.ajax.check($, + ams.baseURL + 'ext/bootstrap-wizard-1.4.2' + ams.devext + '.js', + function(first_load) { + wizards.each(function() { + var wizard = $(this); + var data = wizard.data(); var dataOptions = { - bJQueryUI: false, - bFilter: data.amsDatatableGlobalFilter !== false || extensions.indexOf('columnfilter') >= 0, - bPaginate: data.amsDatatablePagination !== false, - bInfo: data.amsDatatableInfo !== false, - bSort: data.amsDatatableSort !== false, - aaSorting: sorting, - aoColumns: columns.length > 0 ? columns : undefined, - bDeferRender: true, - bAutoWidth: false, - iDisplayLength: data.amsDatatableDisplayLength || 25, - sPaginationType: data.amsDatatablePaginationType || 'bootstrap_full', - sDom: sDom, - oLanguage: ams.plugins.i18n.datatables, - fnInitComplete: function(oSettings, json) { - $('.ColVis_Button').addClass('btn btn-default btn-sm') - .html((ams.plugins.i18n.datatables.sColumns || "Columns") + - ' '); - } + withVisible: data.amsWizardWithVisible === undefined ? true : data.amsWizardWithVisible, + tabClass: data.amsWizardTabClass, + firstSelector: data.amsWizardFirstSelector, + previousSelector: data.amsWizardPreviousSelector, + nextSelector: data.amsWizardNextSelector, + lastSelector: data.amsWizardLastSelector, + finishSelector: data.amsWizardFinishSelector, + backSelector: data.amsWizardBackSelector, + onInit: ams.getFunctionByName(data.amsWizardInit), + onShow: ams.getFunctionByName(data.amsWizardShow), + onNext: ams.getFunctionByName(data.amsWizardNext), + onPrevious: ams.getFunctionByName(data.amsWizardPrevious), + onFirst: ams.getFunctionByName(data.amsWizardFirst), + onLast: ams.getFunctionByName(data.amsWizardLast), + onBack: ams.getFunctionByName(data.amsWizardBack), + onFinish: ams.getFunctionByName(data.amsWizardFinish), + onTabChange: ams.getFunctionByName(data.amsWizardTabChange), + onTabClick: ams.getFunctionByName(data.amsWizardTabClick), + onTabShow: ams.getFunctionByName(data.amsWizardTabShow) }; - var settings = $.extend({}, dataOptions, data.amsDatatableOptions); - if (extensions.length > 0) { - for (index=0; index < extensions.length; index++) { - switch (extensions[index]) { - case 'autofill': - ams.ajax.check($.fn.dataTable.AutoFill, - ams.baseURL + 'ext/jquery-dataTables-autoFill' + ams.devext + '.js'); - break; - case 'columnfilter': - ams.ajax.check($.fn.columnFilter, - ams.baseURL + 'ext/jquery-dataTables-columnFilter' + ams.devext + '.js'); - break; - case 'colreorder': - ams.ajax.check($.fn.dataTable.ColReorder, - ams.baseURL + 'ext/jquery-dataTables-colReorder' + ams.devext + '.js'); - break; - case 'colreorderwithresize': - ams.ajax.check($.fn.dataTable.ColReorder, - ams.baseURL + 'ext/jquery-dataTables-colReorderWithResize' + ams.devext + '.js'); - break; - case 'colvis': - ams.ajax.check($.fn.dataTable.ColVis, - ams.baseURL + 'ext/jquery-dataTables-colVis' + ams.devext + '.js'); - var cvDefault = { - activate: 'click', - sAlign: 'right' - }; - settings.oColVis = $.extend({}, cvDefault, data.amsDatatableColvisOptions); - break; - case 'editable': - ams.ajax.check($.fn.editable, - ams.baseURL + 'ext/jquery-jeditable' + ams.devext + '.js'); - ams.ajax.check($.fn.makeEditable, - ams.baseURL + 'ext/jquery-dataTables-editable' + ams.devext + '.js'); - break; - case 'fixedcolumns': - ams.ajax.check($.fn.dataTable.FixedColumns, - ams.baseURL + 'ext/jquery-dataTables-fixedColumns' + ams.devext + '.js'); - break; - case 'fixedheader': - ams.ajax.check($.fn.dataTable.FixedHeader, - ams.baseURL + 'ext/jquery-dataTables-fixedHeader' + ams.devext + '.js'); - break; - case 'keytable': - ams.ajax.check(window.KeyTable, - ams.baseURL + 'ext/jquery-dataTables-keyTable' + ams.devext + '.js'); - break; - case 'rowgrouping': - ams.ajax.check($.fn.rowGrouping, - ams.baseURL + 'ext/jquery-dataTables-rowGrouping' + ams.devext + '.js'); - break; - case 'rowreordering': - ams.ajax.check($.fn.rowReordering, - ams.baseURL + 'ext/jquery-dataTables-rowReordering' + ams.devext + '.js'); - break; - case 'scroller': - ams.ajax.check($.fn.dataTable.Scroller, - ams.baseURL + 'ext/jquery-dataTables-scroller' + ams.devext + '.js'); - break; - default: - break; - } - } - } - settings = ams.executeFunctionByName(data.amsDatatableInitCallback, table, settings) || settings; - try { // Some settings can easily generate DataTables exceptions... - var plugin = table.dataTable(settings); - ams.executeFunctionByName(data.amsDatatableAfterInitCallback, table, plugin, settings); - if (extensions.length > 0) { - for (index=0; index < extensions.length; index++) { - switch (extensions[index]) { - case 'autofill': - var afSettings = $.extend({}, data.amsDatatableAutofillOptions, settings.autofill); - afSettings = ams.executeFunctionByName(data.amsDatatableAutofillInitCallback, table, afSettings) || afSettings; - table.data('ams-autofill', data.amsDatatableAutofillConstructor === undefined ? - new $.fn.dataTable.AutoFill(table, afSettings) - : ams.executeFunctionByName(data.amsDatatableAutofillConstructor, table, plugin, afSettings)); - break; - case 'columnfilter': - var cfDefault = { - sPlaceHolder: 'head:after' - }; - var cfSettings = $.extend({}, cfDefault, data.amsDatatableColumnfilterOptions, settings.columnfilter); - cfSettings = ams.executeFunctionByName(data.amsDatatableColumnfilterInitCallback, table, cfSettings) || cfSettings; - table.data('ams-columnfilter', data.amsDatatableColumnfilterConstructor === undefined ? - plugin.columnFilter(cfSettings) - : ams.executeFunctionByName(data.amsDatatableColumnfilterConstructor, table, plugin, cfSettings)); - break; - case 'editable': - var edSettings = $.extend({}, data.amsDatatableEditableOptions, settings.editable); - edSettings = ams.executeFunctionByName(data.amsDatatableEditableInitCallback, table, edSettings) || edSettings; - table.data('ams-editable', data.amsDatatableEditableConstructor === undefined ? - table.makeEditable(edSettings) - : ams.executeFunctionByName(data.amsDatatableEditableConstructor, table, plugin, edSettings)); - break; - case 'fixedcolumns': - var fcSettings = $.extend({}, data.amsDatatableFixedcolumnsOptions, settings.fixedcolumns); - fcSettings = ams.executeFunctionByName(data.amsDatatableFixedcolumnsInitCallback, table, fcSettings) || fcSettings; - table.data('ams-fixedcolumns', data.amsDatatableFixedcolumnsConstructor === undefined ? - new $.fn.dataTable.FixedColumns(table, fcSettings) - : ams.executeFunctionByName(data.amsDatatableFixedcolumnsConstructor, table, plugin, fcSettings)); - break; - case 'fixedheader': - var fhSettings = $.extend({}, data.amsDatatableFixedheaderOptions, settings.fixedheader); - fhSettings = ams.executeFunctionByName(data.amsDatatableFixedheadeInitCallback, table, fhSettings) || fhSettings; - table.data('ams-fixedheader', data.amsDatatableFixedheaderConstructor === undefined ? - new $.fn.dataTable.FixedHeader(table, fhSettings) - : ams.executeFunctionByName(data.amsDatatableFixedheaderConstructor, table, plugin, fhSettings)); - break; - case 'keytable': - var ktDefault = { - table: table.get(0), - datatable: plugin - }; - var ktSettings = $.extend({}, ktDefault, data.amsDatatableKeytableOptions, settings.keytable); - ktSettings = ams.executeFunctionByName(data.amsDatatableKeytableInitCallback, table, ktSettings) || ktSettings; - table.data('ams-keytable', data.amsDatatableKeytableConstructor === undefined ? - new KeyTable(ktSettings) - : ams.executeFunctionByName(data.amsDatatableKeytableConstructor, table, plugin, ktSettings)); - break; - case 'rowgrouping': - var rgSettings = $.extend({}, data.amsDatatableRowgroupingOptions, settings.rowgrouping); - rgSettings = ams.executeFunctionByName(data.amsDatatableRowgroupingInitCallback, table, rgSettings) || rgSettings; - table.data('ams-rowgrouping', data.amsDatatableRowgroupingConstructor === undefined ? - table.rowGrouping(rgSettings) - : ams.executeFunctionByName(data.amsDatatableRowgroupingConstructor, table, plugin, rgSettings)); - break; - case 'rowreordering': - var rrSettings = $.extend({}, data.amsDatatableRowreorderingOptions, settings.rowreordering); - rrSettings = ams.executeFunctionByName(data.amsDatatableRowreorderingInitCallback, table, rrSettings) || rrSettings; - table.data('ams-rowreordering', data.amsDatatableRowreorderingConstructor === undefined ? - table.rowReordering(rrSettings) - : ams.executeFunctionByName(data.amsDatatableRowreorderingConstructor, table, plugin, rrSettings)); - break; - default: - break; - } - } - } - var finalizers = (data.amsDatatableFinalizeCallback || '').split(/\s+/); - if (finalizers.length > 0) { - for (index=0; index < finalizers.length; index++) { - ams.executeFunctionByName(finalizers[index], table, plugin, settings); - } - } - } - catch (e) {} + var settings = $.extend({}, dataOptions, data.amsWizardOptions); + settings = ams.executeFunctionByName(data.amsWizardInitCallback, wizard, settings) || settings; + var plugin = wizard.bootstrapWizard(settings); + ams.executeFunctionByName(data.amsWizardAfterInitCallback, wizard, plugin, settings); }); }); } @@ -5137,6 +5229,14 @@ var form = $(this); setTimeout(function() { form.find('.select2').trigger('change'); + $('[data-ams-reset-callback]', form).each(function() { + var element = $(this); + var data = element.data(); + var callback = ams.getFunctionByName(data.amsResetCallback); + if (callback !== undefined) { + callback.call(form, element, data.amsResetCallbackOptions); + } + }); }, 10); ams.form.setFocus(form); }); @@ -5281,6 +5381,7 @@ WAIT: "Please wait!", FORM_SUBMITTED: "This form was already submitted...", NO_SERVER_RESPONSE: "No response from server!", + ERROR_OCCURED: "An error occured!", ERRORS_OCCURED: "Some errors occured!",