';
$(selector + ' .modal-body').append(message);
},
/**
* Default callback for insertion: mock webservice, always success.
*/
onAddRow: function(dt, rowdata, success, error) {
console.log("Missing AJAX configuration for INSERT");
success(rowdata);
},
/**
* Default callback for editing: mock webservice, always success.
*/
onEditRow: function(dt, rowdata, success, error) {
console.log("Missing AJAX configuration for UPDATE");
success(rowdata);
},
/**
* Default callback for deletion: mock webservice, always success.
*/
onDeleteRow: function(dt, rowdata, success, error) {
console.log("Missing AJAX configuration for DELETE");
success(rowdata);
},
/**
* Open a dialog using available framework
*/
internalOpenDialog(selector, onopen) {
var $sel = $(selector);
if ($sel.modal) {
// Bootstrap
$sel.on('show.bs.modal', onopen);
$sel.modal('show');
}
else if ($sel.foundation){
// Foundation
$sel.on('open.zf.reveal', onopen);
$sel.on('closed.zf.reveal', function() { $('.reveal-overlay').hide(); });
var popup = new Foundation.Reveal($sel);
popup.open();
}
else {
console.error('You must load Bootstrap or Foundation in order to open modal dialogs');
return;
}
},
/**
* Close a dialog using available framework
*/
internalCloseDialog(selector) {
var $sel = $(selector);
if ($sel.modal) {
// Bootstrap
$sel.modal('hide');
} else if ($sel.foundation){
// Foundation
var popup = new Foundation.Reveal($sel);
popup.close();
$('.reveal-overlay').hide();
} else {
console.error('You must load Bootstrap or Foundation in order to open modal dialogs');
return;
}
},
/**
* Dinamically reload options in SELECT menu
*/
reloadOptions: function($select, options) {
var oldValue = $select.val();
$select.empty(); // remove old options
if (options.length > 0) {
// array-style select or select2
$.each(options, function(key, value) {
$select.append($("")
.attr("value", value).text(value));
});
}
else {
// object-style select or select2
$.each(options, function(key, value) {
$select.append($("")
.attr("value", value).text(key));
});
}
$select.val(oldValue); // if still present, of course
$select.trigger('change');
},
/**
* Convert file to Base 64 form
* @see https://stackoverflow.com/questions/36280818
*/
getBase64: function(file, onSuccess, onError) {
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function () {
if (onSuccess) onSuccess(reader.result);
};
reader.onerror = function (error) {
console.log('Error: ', error);
if (onError) onError(error);
};
},
/**
* Sanitizes input for use in HTML
* @param s
* @param preserveCR
* @returns {string}
* @private
*/
_quoteattr: function (s, preserveCR) {
if (s == null) {
return "";
}
preserveCR = preserveCR ? '
' : '\n';
if (Array.isArray(s)) {
// for MULTIPLE SELECT
var newArray = [];
var x;
for (x in s) newArray.push(s[x]);
return newArray;
}
return ('' + s) /* Forces the conversion to string. */
.replace(/&/g, '&') /* This MUST be the 1st replacement. */
.replace(/'/g, ''') /* The 4 other predefined entities, required. */
.replace(/"/g, '"')
.replace(//g, '>')
.replace(/\r\n/g, preserveCR) /* Must be before the next replacement. */
.replace(/[\r\n]/g, preserveCR);
},
});
/**
* altEditor version
*
* @static
* @type String
*/
altEditor.version = '2.0';
/**
* altEditor defaults
*
* @namespace
*/
altEditor.defaults = {
/**
* @type {Boolean} Ask user what they want to do, even for a single
* option
*/
alwaysAsk: false,
/** @type {string|null} What will trigger a focus */
focus: null, // focus, click, hover
/** @type {column-selector} Columns to provide auto fill for */
columns: '', // all
/** @type {boolean|null} Update the cells after a drag */
update: null, // false is editor given, true otherwise
/** @type {DataTable.Editor} Editor instance for automatic submission */
editor: null
};
/**
* Classes used by altEditor that are configurable
*
* @namespace
*/
altEditor.classes = {
/** @type {String} Class used by the selection button */
btn: 'btn'
};
// Attach a listener to the document which listens for DataTables
// initialisation
// events so we can automatically initialise
$(document).on('preInit.dt.altEditor', function (e, settings, json) {
if (e.namespace !== 'dt') {
return;
}
var init = settings.oInit.altEditor;
var defaults = DataTable.defaults.altEditor;
if (init || defaults) {
var opts = $.extend({}, init, defaults);
if (init !== false) {
var editor = new altEditor(settings, opts);
// e is a jQuery event object
// e.target is the underlying jQuery object, e.g. $('#mytable')
// so that you can retrieve the altEditor object later
e.target.altEditor = editor;
}
}
});
// Alias for access
DataTable.altEditor = altEditor;
return altEditor;
});