diff --git a/otterdog/webapp/static/assets/package.json b/otterdog/webapp/static/assets/package.json index 96aaa9e4..edbfba7a 100644 --- a/otterdog/webapp/static/assets/package.json +++ b/otterdog/webapp/static/assets/package.json @@ -54,21 +54,6 @@ "bs-stepper": "^1.7.0", "chart.js": "^2.9.4", "codemirror": "^5.62.3", - "datatables.net": "^1.11.1", - "datatables.net-autofill-bs4": "^2.3.9", - "datatables.net-bs4": "^1.11.1", - "datatables.net-buttons-bs4": "^1.7.1", - "datatables.net-colreorder-bs4": "^1.5.4", - "datatables.net-fixedcolumns-bs4": "^3.3.3", - "datatables.net-fixedheader-bs4": "^3.1.9", - "datatables.net-keytable-bs4": "^2.6.4", - "datatables.net-responsive-bs4": "^2.2.9", - "datatables.net-rowgroup-bs4": "^1.1.3", - "datatables.net-rowreorder-bs4": "^1.2.8", - "datatables.net-scroller-bs4": "^2.0.5", - "datatables.net-searchbuilder-bs4": "^1.2.0", - "datatables.net-searchpanes-bs4": "^1.4.0", - "datatables.net-select-bs4": "^1.3.3", "daterangepicker": "^3.1.0", "dropzone": "^5.9.2", "ekko-lightbox": "^5.3.0", diff --git a/otterdog/webapp/static/assets/plugins/datatables-autofill/css/autoFill.bootstrap4.css b/otterdog/webapp/static/assets/plugins/datatables-autofill/css/autoFill.bootstrap4.css deleted file mode 100644 index 6abac442..00000000 --- a/otterdog/webapp/static/assets/plugins/datatables-autofill/css/autoFill.bootstrap4.css +++ /dev/null @@ -1,91 +0,0 @@ -div.dt-autofill-handle { - position: absolute; - height: 8px; - width: 8px; - z-index: 102; - box-sizing: border-box; - background: #0275d8; - cursor: pointer; -} - -div.dtk-focus-alt div.dt-autofill-handle { - background: #ff8b33; -} - -div.dt-autofill-select { - position: absolute; - z-index: 1001; - background-color: #0275d8; - background-image: repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(255, 255, 255, 0.5) 5px, rgba(255, 255, 255, 0.5) 10px); -} -div.dt-autofill-select.top, div.dt-autofill-select.bottom { - height: 3px; - margin-top: -1px; -} -div.dt-autofill-select.left, div.dt-autofill-select.right { - width: 3px; - margin-left: -1px; -} - -div.dt-autofill-list { - position: fixed; - top: 50%; - left: 50%; - width: 500px; - margin-left: -250px; - background-color: white; - border-radius: 6px; - box-shadow: 0 0 5px #555; - border: 2px solid #444; - z-index: 11; - box-sizing: border-box; - padding: 1.5em 2em; -} -div.dt-autofill-list ul { - display: table; - margin: 0; - padding: 0; - list-style: none; - width: 100%; -} -div.dt-autofill-list ul li { - display: table-row; -} -div.dt-autofill-list ul li:last-child div.dt-autofill-question, div.dt-autofill-list ul li:last-child div.dt-autofill-button { - border-bottom: none; -} -div.dt-autofill-list ul li:hover { - background-color: #f6f6f6; -} -div.dt-autofill-list div.dt-autofill-question { - display: table-cell; - padding: 0.5em 0; - border-bottom: 1px solid #ccc; -} -div.dt-autofill-list div.dt-autofill-question input[type=number] { - padding: 6px; - width: 30px; - margin: -2px 0; -} -div.dt-autofill-list div.dt-autofill-button { - display: table-cell; - padding: 0.5em 0; - border-bottom: 1px solid #ccc; -} - -div.dt-autofill-background { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: rgba(0, 0, 0, 0.7); - background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); - z-index: 10; -} - -div.dt-autofill-list div.dt-autofill-question input[type=number] { - padding: 6px; - width: 60px; - margin: -2px 0; -} diff --git a/otterdog/webapp/static/assets/plugins/datatables-autofill/css/autoFill.bootstrap4.min.css b/otterdog/webapp/static/assets/plugins/datatables-autofill/css/autoFill.bootstrap4.min.css deleted file mode 100644 index c40c1f98..00000000 --- a/otterdog/webapp/static/assets/plugins/datatables-autofill/css/autoFill.bootstrap4.min.css +++ /dev/null @@ -1 +0,0 @@ -div.dt-autofill-handle{position:absolute;height:8px;width:8px;z-index:102;box-sizing:border-box;background:#0275d8;cursor:pointer}div.dtk-focus-alt div.dt-autofill-handle{background:#ff8b33}div.dt-autofill-select{position:absolute;z-index:1001;background-color:#0275d8;background-image:repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(255,255,255,0.5) 5px, rgba(255,255,255,0.5) 10px)}div.dt-autofill-select.top,div.dt-autofill-select.bottom{height:3px;margin-top:-1px}div.dt-autofill-select.left,div.dt-autofill-select.right{width:3px;margin-left:-1px}div.dt-autofill-list{position:fixed;top:50%;left:50%;width:500px;margin-left:-250px;background-color:white;border-radius:6px;box-shadow:0 0 5px #555;border:2px solid #444;z-index:11;box-sizing:border-box;padding:1.5em 2em}div.dt-autofill-list ul{display:table;margin:0;padding:0;list-style:none;width:100%}div.dt-autofill-list ul li{display:table-row}div.dt-autofill-list ul li:last-child div.dt-autofill-question,div.dt-autofill-list ul li:last-child div.dt-autofill-button{border-bottom:none}div.dt-autofill-list ul li:hover{background-color:#f6f6f6}div.dt-autofill-list div.dt-autofill-question{display:table-cell;padding:0.5em 0;border-bottom:1px solid #ccc}div.dt-autofill-list div.dt-autofill-question input[type=number]{padding:6px;width:30px;margin:-2px 0}div.dt-autofill-list div.dt-autofill-button{display:table-cell;padding:0.5em 0;border-bottom:1px solid #ccc}div.dt-autofill-background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.7);background:radial-gradient(ellipse farthest-corner at center, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);z-index:10}div.dt-autofill-list div.dt-autofill-question input[type=number]{padding:6px;width:60px;margin:-2px 0} diff --git a/otterdog/webapp/static/assets/plugins/datatables-autofill/js/autoFill.bootstrap4.js b/otterdog/webapp/static/assets/plugins/datatables-autofill/js/autoFill.bootstrap4.js deleted file mode 100644 index a73cf983..00000000 --- a/otterdog/webapp/static/assets/plugins/datatables-autofill/js/autoFill.bootstrap4.js +++ /dev/null @@ -1,43 +0,0 @@ -/*! Bootstrap integration for DataTables' AutoFill - * ©2015 SpryMedia Ltd - datatables.net/license - */ - -(function( factory ){ - if ( typeof define === 'function' && define.amd ) { - // AMD - define( ['jquery', 'datatables.net-bs4', 'datatables.net-autofill'], 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-bs4')(root, $).$; - } - - if ( ! $.fn.dataTable.AutoFill ) { - require('datatables.net-autofill')(root, $); - } - - return factory( $, root, root.document ); - }; - } - else { - // Browser - factory( jQuery, window, document ); - } -}(function( $, window, document, undefined ) { -'use strict'; -var DataTable = $.fn.dataTable; - - -DataTable.AutoFill.classes.btn = 'btn btn-primary'; - - -return DataTable; -})); diff --git a/otterdog/webapp/static/assets/plugins/datatables-autofill/js/autoFill.bootstrap4.min.js b/otterdog/webapp/static/assets/plugins/datatables-autofill/js/autoFill.bootstrap4.min.js deleted file mode 100644 index 87ea58cd..00000000 --- a/otterdog/webapp/static/assets/plugins/datatables-autofill/js/autoFill.bootstrap4.min.js +++ /dev/null @@ -1,5 +0,0 @@ -/*! - Bootstrap integration for DataTables' AutoFill - ©2015 SpryMedia Ltd - datatables.net/license -*/ -(function(a){"function"===typeof define&&define.amd?define(["jquery","datatables.net-bs4","datatables.net-autofill"],function(b){return a(b,window,document)}):"object"===typeof exports?module.exports=function(b,c){b||(b=window);if(!c||!c.fn.dataTable)c=require("datatables.net-bs4")(b,c).$;c.fn.dataTable.AutoFill||require("datatables.net-autofill")(b,c);return a(c,b,b.document)}:a(jQuery,window,document)})(function(a){a=a.fn.dataTable;a.AutoFill.classes.btn="btn btn-primary";return a}); diff --git a/otterdog/webapp/static/assets/plugins/datatables-autofill/js/dataTables.autoFill.js b/otterdog/webapp/static/assets/plugins/datatables-autofill/js/dataTables.autoFill.js deleted file mode 100644 index f85a033d..00000000 --- a/otterdog/webapp/static/assets/plugins/datatables-autofill/js/dataTables.autoFill.js +++ /dev/null @@ -1,1212 +0,0 @@ -/*! AutoFill 2.3.5 - * ©2008-2020 SpryMedia Ltd - datatables.net/license - */ - -/** - * @summary AutoFill - * @description Add Excel like click and drag auto-fill options to DataTables - * @version 2.3.5 - * @file dataTables.autoFill.js - * @author SpryMedia Ltd (www.sprymedia.co.uk) - * @contact www.sprymedia.co.uk/contact - * @copyright Copyright 2010-2020 SpryMedia Ltd. - * - * This source file is free software, available under the following license: - * MIT license - http://datatables.net/license/mit - * - * This source file is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. - * - * For details please refer to: http://www.datatables.net - */ -(function( factory ){ - if ( typeof define === 'function' && define.amd ) { - // AMD - define( ['jquery', 'datatables.net'], 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')(root, $).$; - } - - return factory( $, root, root.document ); - }; - } - else { - // Browser - factory( jQuery, window, document ); - } -}(function( $, window, document, undefined ) { -'use strict'; -var DataTable = $.fn.dataTable; - - -var _instance = 0; - -/** - * AutoFill provides Excel like auto-fill features for a DataTable - * - * @class AutoFill - * @constructor - * @param {object} oTD DataTables settings object - * @param {object} oConfig Configuration object for AutoFill - */ -var AutoFill = function( dt, opts ) -{ - if ( ! DataTable.versionCheck || ! DataTable.versionCheck( '1.10.8' ) ) { - throw( "Warning: AutoFill requires DataTables 1.10.8 or greater"); - } - - // User and defaults configuration object - this.c = $.extend( true, {}, - DataTable.defaults.autoFill, - AutoFill.defaults, - opts - ); - - /** - * @namespace Settings object which contains customisable information for AutoFill instance - */ - this.s = { - /** @type {DataTable.Api} DataTables' API instance */ - dt: new DataTable.Api( dt ), - - /** @type {String} Unique namespace for events attached to the document */ - namespace: '.autoFill'+(_instance++), - - /** @type {Object} Cached dimension information for use in the mouse move event handler */ - scroll: {}, - - /** @type {integer} Interval object used for smooth scrolling */ - scrollInterval: null, - - handle: { - height: 0, - width: 0 - }, - - /** - * Enabled setting - * @type {Boolean} - */ - enabled: false - }; - - - /** - * @namespace Common and useful DOM elements for the class instance - */ - this.dom = { - /** @type {jQuery} AutoFill handle */ - handle: $('
'), - - /** - * @type {Object} Selected cells outline - Need to use 4 elements, - * otherwise the mouse over if you back into the selected rectangle - * will be over that element, rather than the cells! - */ - select: { - top: $('
'), - right: $('
'), - bottom: $('
'), - left: $('
') - }, - - /** @type {jQuery} Fill type chooser background */ - background: $('
'), - - /** @type {jQuery} Fill type chooser */ - list: $('
'+this.s.dt.i18n('autoFill.info', '')+'
    '), - - /** @type {jQuery} DataTables scrolling container */ - dtScroll: null, - - /** @type {jQuery} Offset parent element */ - offsetParent: null - }; - - - /* Constructor logic */ - this._constructor(); -}; - - - -$.extend( AutoFill.prototype, { - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Public methods (exposed via the DataTables API below) - */ - enabled: function () - { - return this.s.enabled; - }, - - - enable: function ( flag ) - { - var that = this; - - if ( flag === false ) { - return this.disable(); - } - - this.s.enabled = true; - - this._focusListener(); - - this.dom.handle.on( 'mousedown', function (e) { - that._mousedown( e ); - return false; - } ); - - return this; - }, - - disable: function () - { - this.s.enabled = false; - - this._focusListenerRemove(); - - return this; - }, - - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Constructor - */ - - /** - * Initialise the RowReorder instance - * - * @private - */ - _constructor: function () - { - var that = this; - var dt = this.s.dt; - var dtScroll = $('div.dataTables_scrollBody', this.s.dt.table().container()); - - // Make the instance accessible to the API - dt.settings()[0].autoFill = this; - - if ( dtScroll.length ) { - this.dom.dtScroll = dtScroll; - - // Need to scroll container to be the offset parent - if ( dtScroll.css('position') === 'static' ) { - dtScroll.css( 'position', 'relative' ); - } - } - - if ( this.c.enable !== false ) { - this.enable(); - } - - dt.on( 'destroy.autoFill', function () { - that._focusListenerRemove(); - } ); - }, - - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Private methods - */ - - /** - * Display the AutoFill drag handle by appending it to a table cell. This - * is the opposite of the _detach method. - * - * @param {node} node TD/TH cell to insert the handle into - * @private - */ - _attach: function ( node ) - { - var dt = this.s.dt; - var idx = dt.cell( node ).index(); - var handle = this.dom.handle; - var handleDim = this.s.handle; - - if ( ! idx || dt.columns( this.c.columns ).indexes().indexOf( idx.column ) === -1 ) { - this._detach(); - return; - } - - if ( ! this.dom.offsetParent ) { - // We attach to the table's offset parent - this.dom.offsetParent = $( dt.table().node() ).offsetParent(); - } - - if ( ! handleDim.height || ! handleDim.width ) { - // Append to document so we can get its size. Not expecting it to - // change during the life time of the page - handle.appendTo( 'body' ); - handleDim.height = handle.outerHeight(); - handleDim.width = handle.outerWidth(); - } - - // Might need to go through multiple offset parents - var offset = this._getPosition( node, this.dom.offsetParent ); - - this.dom.attachedTo = node; - handle - .css( { - top: offset.top + node.offsetHeight - handleDim.height, - left: offset.left + node.offsetWidth - handleDim.width - } ) - .appendTo( this.dom.offsetParent ); - }, - - - /** - * Determine can the fill type should be. This can be automatic, or ask the - * end user. - * - * @param {array} cells Information about the selected cells from the key - * up function - * @private - */ - _actionSelector: function ( cells ) - { - var that = this; - var dt = this.s.dt; - var actions = AutoFill.actions; - var available = []; - - // "Ask" each plug-in if it wants to handle this data - $.each( actions, function ( key, action ) { - if ( action.available( dt, cells ) ) { - available.push( key ); - } - } ); - - if ( available.length === 1 && this.c.alwaysAsk === false ) { - // Only one action available - enact it immediately - var result = actions[ available[0] ].execute( dt, cells ); - this._update( result, cells ); - } - else if ( available.length > 1 ) { - // Multiple actions available - ask the end user what they want to do - var list = this.dom.list.children('ul').empty(); - - // Add a cancel option - available.push( 'cancel' ); - - $.each( available, function ( i, name ) { - list.append( $('
  • ') - .append( - '
    '+ - actions[ name ].option( dt, cells )+ - '
    ' - ) - .append( $('
    ' ) - .append( $('') - .on( 'click', function () { - var result = actions[ name ].execute( - dt, cells, $(this).closest('li') - ); - that._update( result, cells ); - - that.dom.background.remove(); - that.dom.list.remove(); - } ) - ) - ) - ); - } ); - - this.dom.background.appendTo( 'body' ); - this.dom.list.appendTo( 'body' ); - - this.dom.list.css( 'margin-top', this.dom.list.outerHeight()/2 * -1 ); - } - }, - - - /** - * Remove the AutoFill handle from the document - * - * @private - */ - _detach: function () - { - this.dom.attachedTo = null; - this.dom.handle.detach(); - }, - - - /** - * Draw the selection outline by calculating the range between the start - * and end cells, then placing the highlighting elements to draw a rectangle - * - * @param {node} target End cell - * @param {object} e Originating event - * @private - */ - _drawSelection: function ( target, e ) - { - // Calculate boundary for start cell to this one - var dt = this.s.dt; - var start = this.s.start; - var startCell = $(this.dom.start); - var end = { - row: this.c.vertical ? - dt.rows( { page: 'current' } ).nodes().indexOf( target.parentNode ) : - start.row, - column: this.c.horizontal ? - $(target).index() : - start.column - }; - var colIndx = dt.column.index( 'toData', end.column ); - var endRow = dt.row( ':eq('+end.row+')', { page: 'current' } ); // Workaround for M581 - var endCell = $( dt.cell( endRow.index(), colIndx ).node() ); - - // Be sure that is a DataTables controlled cell - if ( ! dt.cell( endCell ).any() ) { - return; - } - - // if target is not in the columns available - do nothing - if ( dt.columns( this.c.columns ).indexes().indexOf( colIndx ) === -1 ) { - return; - } - - this.s.end = end; - - var top, bottom, left, right, height, width; - - top = start.row < end.row ? startCell : endCell; - bottom = start.row < end.row ? endCell : startCell; - left = start.column < end.column ? startCell : endCell; - right = start.column < end.column ? endCell : startCell; - - top = this._getPosition( top.get(0) ).top; - left = this._getPosition( left.get(0) ).left; - height = this._getPosition( bottom.get(0) ).top + bottom.outerHeight() - top; - width = this._getPosition( right.get(0) ).left + right.outerWidth() - left; - - var select = this.dom.select; - select.top.css( { - top: top, - left: left, - width: width - } ); - - select.left.css( { - top: top, - left: left, - height: height - } ); - - select.bottom.css( { - top: top + height, - left: left, - width: width - } ); - - select.right.css( { - top: top, - left: left + width, - height: height - } ); - }, - - - /** - * Use the Editor API to perform an update based on the new data for the - * cells - * - * @param {array} cells Information about the selected cells from the key - * up function - * @private - */ - _editor: function ( cells ) - { - var dt = this.s.dt; - var editor = this.c.editor; - - if ( ! editor ) { - return; - } - - // Build the object structure for Editor's multi-row editing - var idValues = {}; - var nodes = []; - var fields = editor.fields(); - - for ( var i=0, ien=cells.length ; i=end ; i-- ) { - out.push( i ); - } - } - - return out; - }, - - - /** - * Move the window and DataTables scrolling during a drag to scroll new - * content into view. This is done by proximity to the edge of the scrolling - * container of the mouse - for example near the top edge of the window - * should scroll up. This is a little complicated as there are two elements - * that can be scrolled - the window and the DataTables scrolling view port - * (if scrollX and / or scrollY is enabled). - * - * @param {object} e Mouse move event object - * @private - */ - _shiftScroll: function ( e ) - { - var that = this; - var dt = this.s.dt; - var scroll = this.s.scroll; - var runInterval = false; - var scrollSpeed = 5; - var buffer = 65; - var - windowY = e.pageY - document.body.scrollTop, - windowX = e.pageX - document.body.scrollLeft, - windowVert, windowHoriz, - dtVert, dtHoriz; - - // Window calculations - based on the mouse position in the window, - // regardless of scrolling - if ( windowY < buffer ) { - windowVert = scrollSpeed * -1; - } - else if ( windowY > scroll.windowHeight - buffer ) { - windowVert = scrollSpeed; - } - - if ( windowX < buffer ) { - windowHoriz = scrollSpeed * -1; - } - else if ( windowX > scroll.windowWidth - buffer ) { - windowHoriz = scrollSpeed; - } - - // DataTables scrolling calculations - based on the table's position in - // the document and the mouse position on the page - if ( scroll.dtTop !== null && e.pageY < scroll.dtTop + buffer ) { - dtVert = scrollSpeed * -1; - } - else if ( scroll.dtTop !== null && e.pageY > scroll.dtTop + scroll.dtHeight - buffer ) { - dtVert = scrollSpeed; - } - - if ( scroll.dtLeft !== null && e.pageX < scroll.dtLeft + buffer ) { - dtHoriz = scrollSpeed * -1; - } - else if ( scroll.dtLeft !== null && e.pageX > scroll.dtLeft + scroll.dtWidth - buffer ) { - dtHoriz = scrollSpeed; - } - - // This is where it gets interesting. We want to continue scrolling - // without requiring a mouse move, so we need an interval to be - // triggered. The interval should continue until it is no longer needed, - // but it must also use the latest scroll commands (for example consider - // that the mouse might move from scrolling up to scrolling left, all - // with the same interval running. We use the `scroll` object to "pass" - // this information to the interval. Can't use local variables as they - // wouldn't be the ones that are used by an already existing interval! - if ( windowVert || windowHoriz || dtVert || dtHoriz ) { - scroll.windowVert = windowVert; - scroll.windowHoriz = windowHoriz; - scroll.dtVert = dtVert; - scroll.dtHoriz = dtHoriz; - runInterval = true; - } - else if ( this.s.scrollInterval ) { - // Don't need to scroll - remove any existing timer - clearInterval( this.s.scrollInterval ); - this.s.scrollInterval = null; - } - - // If we need to run the interval to scroll and there is no existing - // interval (if there is an existing one, it will continue to run) - if ( ! this.s.scrollInterval && runInterval ) { - this.s.scrollInterval = setInterval( function () { - // Don't need to worry about setting scroll <0 or beyond the - // scroll bound as the browser will just reject that. - if ( scroll.windowVert ) { - document.body.scrollTop += scroll.windowVert; - } - if ( scroll.windowHoriz ) { - document.body.scrollLeft += scroll.windowHoriz; - } - - // DataTables scrolling - if ( scroll.dtVert || scroll.dtHoriz ) { - var scroller = that.dom.dtScroll[0]; - - if ( scroll.dtVert ) { - scroller.scrollTop += scroll.dtVert; - } - if ( scroll.dtHoriz ) { - scroller.scrollLeft += scroll.dtHoriz; - } - } - }, 20 ); - } - }, - - - /** - * Update the DataTable after the user has selected what they want to do - * - * @param {false|undefined} result Return from the `execute` method - can - * be false internally to do nothing. This is not documented for plug-ins - * and is used only by the cancel option. - * @param {array} cells Information about the selected cells from the key - * up function, argumented with the set values - * @private - */ - _update: function ( result, cells ) - { - // Do nothing on `false` return from an execute function - if ( result === false ) { - return; - } - - var dt = this.s.dt; - var cell; - var columns = dt.columns( this.c.columns ).indexes(); - - // Potentially allow modifications to the cells matrix - this._emitEvent( 'preAutoFill', [ dt, cells ] ); - - this._editor( cells ); - - // Automatic updates are not performed if `update` is null and the - // `editor` parameter is passed in - the reason being that Editor will - // update the data once submitted - var update = this.c.update !== null ? - this.c.update : - this.c.editor ? - false : - true; - - if ( update ) { - for ( var i=0, ien=cells.length ; i' - ); - }, - - execute: function ( dt, cells, node ) { - var value = cells[0][0].data * 1; - var increment = $('input', node).val() * 1; - - for ( var i=0, ien=cells.length ; i'+cells[0][0].label+'' ); - }, - - execute: function ( dt, cells, node ) { - var value = cells[0][0].data; - - for ( var i=0, ien=cells.length ; i 1 && cells[0].length > 1; - }, - - option: function ( dt, cells ) { - return dt.i18n('autoFill.fillHorizontal', 'Fill cells horizontally' ); - }, - - execute: function ( dt, cells, node ) { - for ( var i=0, ien=cells.length ; i 1; - }, - - option: function ( dt, cells ) { - return dt.i18n('autoFill.fillVertical', 'Fill cells vertically' ); - }, - - execute: function ( dt, cells, node ) { - for ( var i=0, ien=cells.length ; i'),select:{top:e('
    '),right:e('
    '),bottom:e('
    '),left:e('
    ')},background:e('
    '),list:e('
    '+this.s.dt.i18n("autoFill.info", -"")+"
      "),dtScroll:null,offsetParent:null};this._constructor()};e.extend(k.prototype,{enabled:function(){return this.s.enabled},enable:function(b){var c=this;if(!1===b)return this.disable();this.s.enabled=!0;this._focusListener();this.dom.handle.on("mousedown",function(a){c._mousedown(a);return!1});return this},disable:function(){this.s.enabled=!1;this._focusListenerRemove();return this},_constructor:function(){var b=this,c=this.s.dt,a=e("div.dataTables_scrollBody",this.s.dt.table().container()); -c.settings()[0].autoFill=this;a.length&&(this.dom.dtScroll=a,"static"===a.css("position")&&a.css("position","relative"));!1!==this.c.enable&&this.enable();c.on("destroy.autoFill",function(){b._focusListenerRemove()})},_attach:function(b){var c=this.s.dt,a=c.cell(b).index(),d=this.dom.handle,f=this.s.handle;if(!a||-1===c.columns(this.c.columns).indexes().indexOf(a.column))this._detach();else{this.dom.offsetParent||(this.dom.offsetParent=e(c.table().node()).offsetParent());if(!f.height||!f.width)d.appendTo("body"), -f.height=d.outerHeight(),f.width=d.outerWidth();c=this._getPosition(b,this.dom.offsetParent);this.dom.attachedTo=b;d.css({top:c.top+b.offsetHeight-f.height,left:c.left+b.offsetWidth-f.width}).appendTo(this.dom.offsetParent)}},_actionSelector:function(b){var c=this,a=this.s.dt,d=k.actions,f=[];e.each(d,function(c,d){d.available(a,b)&&f.push(c)});if(1===f.length&&!1===this.c.alwaysAsk){var j=d[f[0]].execute(a,b);this._update(j,b)}else if(1").append('
      '+d[j].option(a,b)+"
      ").append(e('
      ').append(e('").on("click",function(){var f=d[j].execute(a,b,e(this).closest("li"));c._update(f,b);c.dom.background.remove();c.dom.list.remove()}))))});this.dom.background.appendTo("body");this.dom.list.appendTo("body");this.dom.list.css("margin-top",-1*(this.dom.list.outerHeight()/ -2))}},_detach:function(){this.dom.attachedTo=null;this.dom.handle.detach()},_drawSelection:function(b){var c=this.s.dt,a=this.s.start,d=e(this.dom.start),f={row:this.c.vertical?c.rows({page:"current"}).nodes().indexOf(b.parentNode):a.row,column:this.c.horizontal?e(b).index():a.column},b=c.column.index("toData",f.column),j=c.row(":eq("+f.row+")",{page:"current"}),j=e(c.cell(j.index(),b).node());if(c.cell(j).any()&&-1!==c.columns(this.c.columns).indexes().indexOf(b)){this.s.end=f;var h,c=a.row=c;d--)a.push(d);return a},_shiftScroll:function(b){var c=this,a=this.s.scroll,d=!1,f=b.pageY-i.body.scrollTop,e=b.pageX-i.body.scrollLeft,h,g,k,l;65>f?h=-5:f>a.windowHeight-65&&(h=5);65>e?g=-5:e>a.windowWidth-65&&(g=5);null!==a.dtTop&&b.pageYa.dtTop+a.dtHeight-65&&(k=5);null!==a.dtLeft&&b.pageXa.dtLeft+a.dtWidth-65&&(l=5);h||g||k||l?(a.windowVert=h,a.windowHoriz=g,a.dtVert=k,a.dtHoriz=l,d=!0):this.s.scrollInterval&&(clearInterval(this.s.scrollInterval),this.s.scrollInterval=null);!this.s.scrollInterval&&d&&(this.s.scrollInterval=setInterval(function(){if(a.windowVert)i.body.scrollTop=i.body.scrollTop+a.windowVert;if(a.windowHoriz)i.body.scrollLeft=i.body.scrollLeft+a.windowHoriz;if(a.dtVert||a.dtHoriz){var b=c.dom.dtScroll[0];if(a.dtVert)b.scrollTop=b.scrollTop+ -a.dtVert;if(a.dtHoriz)b.scrollLeft=b.scrollLeft+a.dtHoriz}},20))},_update:function(b,c){if(!1!==b){var a=this.s.dt,d,f=a.columns(this.c.columns).indexes();this._emitEvent("preAutoFill",[a,c]);this._editor(c);if(null!==this.c.update?this.c.update:!this.c.editor){for(var e=0,h=c.length;e')},execute:function(b,c,a){for(var b=1*c[0][0].data,a=1*e("input",a).val(),d=0,f=c.length;d"+c[0][0].label+"")},execute:function(b,c){for(var a=c[0][0].data,d=0,f=c.length;d< -f;d++)for(var e=0,g=c[d].length;e tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting, -table.dataTable thead > tr > td.sorting_asc, -table.dataTable thead > tr > td.sorting_desc, -table.dataTable thead > tr > td.sorting { - padding-right: 30px; -} -table.dataTable thead > tr > th:active, -table.dataTable thead > tr > td:active { - outline: none; -} -table.dataTable thead .sorting, -table.dataTable thead .sorting_asc, -table.dataTable thead .sorting_desc, -table.dataTable thead .sorting_asc_disabled, -table.dataTable thead .sorting_desc_disabled { - cursor: pointer; - position: relative; -} -table.dataTable thead .sorting:before, table.dataTable thead .sorting:after, -table.dataTable thead .sorting_asc:before, -table.dataTable thead .sorting_asc:after, -table.dataTable thead .sorting_desc:before, -table.dataTable thead .sorting_desc:after, -table.dataTable thead .sorting_asc_disabled:before, -table.dataTable thead .sorting_asc_disabled:after, -table.dataTable thead .sorting_desc_disabled:before, -table.dataTable thead .sorting_desc_disabled:after { - position: absolute; - bottom: 0.9em; - display: block; - opacity: 0.3; -} -table.dataTable thead .sorting:before, -table.dataTable thead .sorting_asc:before, -table.dataTable thead .sorting_desc:before, -table.dataTable thead .sorting_asc_disabled:before, -table.dataTable thead .sorting_desc_disabled:before { - right: 1em; - content: "\2191"; -} -table.dataTable thead .sorting:after, -table.dataTable thead .sorting_asc:after, -table.dataTable thead .sorting_desc:after, -table.dataTable thead .sorting_asc_disabled:after, -table.dataTable thead .sorting_desc_disabled:after { - right: 0.5em; - content: "\2193"; -} -table.dataTable thead .sorting_asc:before, -table.dataTable thead .sorting_desc:after { - opacity: 1; -} -table.dataTable thead .sorting_asc_disabled:before, -table.dataTable thead .sorting_desc_disabled:after { - opacity: 0; -} - -div.dataTables_scrollHead table.dataTable { - margin-bottom: 0 !important; -} - -div.dataTables_scrollBody table { - border-top: none; - margin-top: 0 !important; - margin-bottom: 0 !important; -} -div.dataTables_scrollBody table thead .sorting:before, -div.dataTables_scrollBody table thead .sorting_asc:before, -div.dataTables_scrollBody table thead .sorting_desc:before, -div.dataTables_scrollBody table thead .sorting:after, -div.dataTables_scrollBody table thead .sorting_asc:after, -div.dataTables_scrollBody table thead .sorting_desc:after { - display: none; -} -div.dataTables_scrollBody table tbody tr:first-child th, -div.dataTables_scrollBody table tbody tr:first-child td { - border-top: none; -} - -div.dataTables_scrollFoot > .dataTables_scrollFootInner { - box-sizing: content-box; -} -div.dataTables_scrollFoot > .dataTables_scrollFootInner > table { - margin-top: 0 !important; - border-top: none; -} - -@media screen and (max-width: 767px) { - div.dataTables_wrapper div.dataTables_length, - div.dataTables_wrapper div.dataTables_filter, - div.dataTables_wrapper div.dataTables_info, - div.dataTables_wrapper div.dataTables_paginate { - text-align: center; - } - div.dataTables_wrapper div.dataTables_paginate ul.pagination { - justify-content: center !important; - } -} -table.dataTable.table-sm > thead > tr > th :not(.sorting_disabled) { - padding-right: 20px; -} -table.dataTable.table-sm .sorting:before, -table.dataTable.table-sm .sorting_asc:before, -table.dataTable.table-sm .sorting_desc:before { - top: 5px; - right: 0.85em; -} -table.dataTable.table-sm .sorting:after, -table.dataTable.table-sm .sorting_asc:after, -table.dataTable.table-sm .sorting_desc:after { - top: 5px; -} - -table.table-bordered.dataTable { - border-right-width: 0; -} -table.table-bordered.dataTable th, -table.table-bordered.dataTable td { - border-left-width: 0; -} -table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child, -table.table-bordered.dataTable td:last-child, -table.table-bordered.dataTable td:last-child { - border-right-width: 1px; -} -table.table-bordered.dataTable tbody th, -table.table-bordered.dataTable tbody td { - border-bottom-width: 0; -} - -div.dataTables_scrollHead table.table-bordered { - border-bottom-width: 0; -} - -div.table-responsive > div.dataTables_wrapper > div.row { - margin: 0; -} -div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:first-child { - padding-left: 0; -} -div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:last-child { - padding-right: 0; -} diff --git a/otterdog/webapp/static/assets/plugins/datatables-bs4/css/dataTables.bootstrap4.min.css b/otterdog/webapp/static/assets/plugins/datatables-bs4/css/dataTables.bootstrap4.min.css deleted file mode 100644 index 047788ee..00000000 --- a/otterdog/webapp/static/assets/plugins/datatables-bs4/css/dataTables.bootstrap4.min.css +++ /dev/null @@ -1 +0,0 @@ -table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important;border-collapse:separate !important;border-spacing:0}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:auto;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:0.85em;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap;justify-content:flex-end}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:before,table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{position:absolute;bottom:0.9em;display:block;opacity:0.3}table.dataTable thead .sorting:before,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:before{right:1em;content:"\2191"}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{right:0.5em;content:"\2193"}table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:after{opacity:1}table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{opacity:0}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table thead .sorting:before,div.dataTables_scrollBody table thead .sorting_asc:before,div.dataTables_scrollBody table thead .sorting_desc:before,div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot>.dataTables_scrollFootInner{box-sizing:content-box}div.dataTables_scrollFoot>.dataTables_scrollFootInner>table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}div.dataTables_wrapper div.dataTables_paginate ul.pagination{justify-content:center !important}}table.dataTable.table-sm>thead>tr>th :not(.sorting_disabled){padding-right:20px}table.dataTable.table-sm .sorting:before,table.dataTable.table-sm .sorting_asc:before,table.dataTable.table-sm .sorting_desc:before{top:5px;right:0.85em}table.dataTable.table-sm .sorting:after,table.dataTable.table-sm .sorting_asc:after,table.dataTable.table-sm .sorting_desc:after{top:5px}table.table-bordered.dataTable{border-right-width:0}table.table-bordered.dataTable th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child{border-right-width:1px}table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:last-child{padding-right:0} diff --git a/otterdog/webapp/static/assets/plugins/datatables-bs4/js/dataTables.bootstrap4.js b/otterdog/webapp/static/assets/plugins/datatables-bs4/js/dataTables.bootstrap4.js deleted file mode 100644 index 69e87554..00000000 --- a/otterdog/webapp/static/assets/plugins/datatables-bs4/js/dataTables.bootstrap4.js +++ /dev/null @@ -1,184 +0,0 @@ -/*! DataTables Bootstrap 4 integration - * ©2011-2017 SpryMedia Ltd - datatables.net/license - */ - -/** - * DataTables integration for Bootstrap 4. This requires Bootstrap 4 and - * DataTables 1.10 or newer. - * - * This file sets the defaults and adds options to DataTables to style its - * controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap - * for further information. - */ -(function( factory ){ - if ( typeof define === 'function' && define.amd ) { - // AMD - define( ['jquery', 'datatables.net'], function ( $ ) { - return factory( $, window, document ); - } ); - } - else if ( typeof exports === 'object' ) { - // CommonJS - module.exports = function (root, $) { - if ( ! root ) { - root = window; - } - - if ( ! $ || ! $.fn.dataTable ) { - // Require DataTables, which attaches to jQuery, including - // jQuery if needed and have a $ property so we can access the - // jQuery object that is used - $ = require('datatables.net')(root, $).$; - } - - return factory( $, root, root.document ); - }; - } - else { - // Browser - factory( jQuery, window, document ); - } -}(function( $, window, document, undefined ) { -'use strict'; -var DataTable = $.fn.dataTable; - - -/* Set the defaults for DataTables initialisation */ -$.extend( true, DataTable.defaults, { - dom: - "<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" + - "<'row'<'col-sm-12'tr>>" + - "<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>", - renderer: 'bootstrap' -} ); - - -/* Default class modification */ -$.extend( DataTable.ext.classes, { - sWrapper: "dataTables_wrapper dt-bootstrap4", - sFilterInput: "form-control form-control-sm", - sLengthSelect: "custom-select custom-select-sm form-control form-control-sm", - sProcessing: "dataTables_processing card", - sPageButton: "paginate_button page-item" -} ); - - -/* Bootstrap paging button renderer */ -DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) { - var api = new DataTable.Api( settings ); - var classes = settings.oClasses; - var lang = settings.oLanguage.oPaginate; - var aria = settings.oLanguage.oAria.paginate || {}; - var btnDisplay, btnClass, counter=0; - - var attach = function( container, buttons ) { - var i, ien, node, button; - var clickHandler = function ( e ) { - e.preventDefault(); - if ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) { - api.page( e.data.action ).draw( 'page' ); - } - }; - - for ( i=0, ien=buttons.length ; i 0 ? - '' : ' disabled'); - break; - - case 'previous': - btnDisplay = lang.sPrevious; - btnClass = button + (page > 0 ? - '' : ' disabled'); - break; - - case 'next': - btnDisplay = lang.sNext; - btnClass = button + (page < pages-1 ? - '' : ' disabled'); - break; - - case 'last': - btnDisplay = lang.sLast; - btnClass = button + (page < pages-1 ? - '' : ' disabled'); - break; - - default: - btnDisplay = button + 1; - btnClass = page === button ? - 'active' : ''; - break; - } - - if ( btnDisplay ) { - node = $('
    • ', { - 'class': classes.sPageButton+' '+btnClass, - 'id': idx === 0 && typeof button === 'string' ? - settings.sTableId +'_'+ button : - null - } ) - .append( $('', { - 'href': '#', - 'aria-controls': settings.sTableId, - 'aria-label': aria[ button ], - 'data-dt-idx': counter, - 'tabindex': settings.iTabIndex, - 'class': 'page-link' - } ) - .html( btnDisplay ) - ) - .appendTo( container ); - - settings.oApi._fnBindAction( - node, {action: button}, clickHandler - ); - - counter++; - } - } - } - }; - - // IE9 throws an 'unknown error' if document.activeElement is used - // inside an iframe or frame. - var activeEl; - - try { - // Because this approach is destroying and recreating the paging - // elements, focus is lost on the select button which is bad for - // accessibility. So we want to restore focus once the draw has - // completed - activeEl = $(host).find(document.activeElement).data('dt-idx'); - } - catch (e) {} - - attach( - $(host).empty().html('