/*! jQuery UI integration for DataTables' Editor * ©2015 SpryMedia Ltd - datatables.net/license */ (function( factory ){ if ( typeof define === 'function' && define.amd ) { // AMD define( ['jquery', 'datatables.net-ju', 'datatables.net-editor'], function ( $ ) { return factory( $, window, document ); } ); } else if ( typeof exports === 'object' ) { // CommonJS module.exports = function (root, $) { if ( ! root ) { // CommonJS environments without a window global must pass a // root. This will give an error otherwise root = window; } if ( ! $ ) { $ = typeof window !== 'undefined' ? // jQuery's factory checks for a global window require('jquery') : require('jquery')( root ); } if ( ! $.fn.dataTable ) { require('datatables.net-ju')(root, $); } if ( ! $.fn.dataTable ) { require('datatables.net-editor')(root, $); } return factory( $, root, root.document ); }; } else { // Browser factory( jQuery, window, document ); } }(function( $, window, document, undefined ) { 'use strict'; var DataTable = $.fn.dataTable; (function( factory ){ if ( typeof define === 'function' && define.amd ) { // AMD define( ['jquery', 'datatables.net-jqui', 'datatables.net-editor'], function ( $ ) { return factory( $, window, document ); } ); } else if ( typeof exports === 'object' ) { // CommonJS module.exports = function (root, $) { if ( ! root ) { root = window; } if ( ! $ || ! $.fn.dataTable ) { $ = require('datatables.net-jqui')(root, $).$; } if ( ! $.fn.dataTable.Editor ) { require('datatables.net-editor')(root, $); } return factory( $, root, root.document ); }; } else { // Browser factory( jQuery, window, document ); } }(function( $, window, document, undefined ) { 'use strict'; var DataTable = $.fn.dataTable; var Editor = DataTable.Editor; var doingClose = false; /* * Set the default display controller to be our foundation control */ Editor.defaults.display = "jqueryui"; /* * Change the default classes from Editor to be classes for Bootstrap */ var buttonClass = "btn ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"; $.extend( true, $.fn.dataTable.Editor.classes, { form: { button: buttonClass, buttonInternal: buttonClass } } ); var dialouge; var shown = false; /* * jQuery UI display controller - this is effectively a proxy to the jQuery UI * modal control. */ Editor.display.jqueryui = $.extend( true, {}, Editor.models.displayController, { init: function ( dte ) { if (! dialouge) { dialouge = $('
') .css('display', 'none') .appendTo('body') .dialog( $.extend( true, Editor.display.jqueryui.modalOptions, { autoOpen: false, buttons: { "A": function () {} }, // fake button so the button container is created closeOnEscape: false // allow editor's escape function to run } ) ); } return Editor.display.jqueryui; }, open: function ( dte, append, callback ) { dialouge .children() .detach(); dialouge .append( append ) .dialog( 'open' ); $(dte.dom.formError).appendTo( dialouge.parent().find('div.ui-dialog-buttonpane') ); dialouge.parent().find('.ui-dialog-title').html( dte.dom.header.innerHTML ); dialouge.parent().addClass('DTED'); // Modify the Editor buttons to be jQuery UI suitable var buttons = $(dte.dom.buttons) .children() .addClass( 'ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only' ) .each( function () { $(this).wrapInner( '' ); } ); // Move the buttons into the jQuery UI button set dialouge.parent().find('div.ui-dialog-buttonset') .children() .detach(); dialouge.parent().find('div.ui-dialog-buttonset') .append( buttons.parent() ); dialouge .parent() .find('button.ui-dialog-titlebar-close') .off('click.dte-ju') .on('click.dte-ju', function () { dte.close('icon'); }); // Need to know when the dialogue is closed using its own trigger // so we can reset the form $(dialouge) .off( 'dialogclose.dte-ju' ) .on( 'dialogclose.dte-ju', function (e) { if ( ! doingClose ) { dte.close(); } } ); shown = true; if ( callback ) { callback(); } }, close: function ( dte, callback ) { if ( dialouge ) { // Don't want to trigger a close() call from dialogclose! doingClose = true; dialouge.dialog( 'close' ); doingClose = false; } shown = false; if ( callback ) { callback(); } }, node: function ( dte ) { return dialouge[0]; }, // jQuery UI dialogues perform their own focus capture captureFocus: false } ); Editor.display.jqueryui.modalOptions = { width: 600, modal: true }; return DataTable.Editor; })); return Editor; }));