From 49182ffbe442826c4b5d69e150ecff695581be25 Mon Sep 17 00:00:00 2001 From: Kartik Visweswaran Date: Sun, 23 Jul 2023 14:10:28 +0530 Subject: [PATCH] Enhance resizable columns and grid export fix #1065 fix #1066 fix #1067 --- CHANGE.md | 4 +- src/assets/js/jquery.resizableColumns.js | 432 ++++++++++--------- src/assets/js/jquery.resizableColumns.min.js | 2 +- src/assets/js/kv-grid-export.js | 2 +- src/assets/js/kv-grid-export.min.js | 3 +- 5 files changed, 233 insertions(+), 210 deletions(-) diff --git a/CHANGE.md b/CHANGE.md index 97baee1f..4aa1231e 100755 --- a/CHANGE.md +++ b/CHANGE.md @@ -5,6 +5,8 @@ Change Log: `yii2-grid` **Date:** 23-Jul-2023 +- (enh #1066, #1067): Enhance resizable columns plugin with new `visibilityWaitTimeout` setting. +- (enh #1065): Add back `kv-export-form` class to export form. - (enh #1057): Persist resize uniq column ids. - (enh #1056): Enhance GridView layout parts rendering for preventing wrong Bootstrap 5 plugin initializations. - (enh #1054): Update Dutch Translations. @@ -15,7 +17,7 @@ Change Log: `yii2-grid` - (bug #1036): Correct usage of `layout` property in `GridView`. - (enh #1031, #1032, #1033, #1034): Update Uzbek Translations. - (enh #1019): Update Arabic Translations. -- ability to set custom "resizable-colimn-id" for resizable colums +- Ability to set custom "resizable-column-id" for resizable colums - set via column's `headerOptions['data-resizable-column-id']` property ## Version 3.5.0 diff --git a/src/assets/js/jquery.resizableColumns.js b/src/assets/js/jquery.resizableColumns.js index 6cd14ac4..475361ed 100644 --- a/src/assets/js/jquery.resizableColumns.js +++ b/src/assets/js/jquery.resizableColumns.js @@ -1,231 +1,251 @@ /* jQuery Resizable Columns v0.1.0 | http://dobtco.github.io/jquery-resizable-columns/ | Licensed MIT | Built Fri Dec 05 2015 22:21:04 */ -var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, - __slice = [].slice; - -(function($, window) { - var ResizableColumns, parseWidth, pointerX, setWidth; - parseWidth = function(node) { - return parseFloat(node.style.width.replace('%', '')); - }; - setWidth = function(node, width) { - width = width.toFixed(2); - width = width > 0 ? width : 0; - return node.style.width = "" + width + "%"; - }; - pointerX = function(e) { - if (e.type.indexOf('touch') === 0) { - return (e.originalEvent.touches[0] || e.originalEvent.changedTouches[0]).pageX; - } - return e.pageX; - }; - ResizableColumns = (function() { - ResizableColumns.prototype.defaults = { - selector: 'tr th:visible', - store: window.store, - syncHandlers: true, - resizeFromBody: true, - maxWidth: null, - minWidth: null - }; - - function ResizableColumns($table, options) { - this.pointerdown = __bind(this.pointerdown, this); - this.constrainWidth = __bind(this.constrainWidth, this); - this.options = $.extend({}, this.defaults, options); - this.$table = $table; - this.setHeaders(); - this.restoreColumnWidths(); - this.syncHandleWidths(); - $(window).on('resize.rc', ((function(_this) { - return function() { - return _this.syncHandleWidths(); +var __bind = function (fn, me) { + return function () { + return fn.apply(me, arguments); }; - })(this))); - if (this.options.start) { - this.$table.bind('column:resize:start.rc', this.options.start); - } - if (this.options.resize) { - this.$table.bind('column:resize.rc', this.options.resize); - } - if (this.options.stop) { - this.$table.bind('column:resize:stop.rc', this.options.stop); - } - } - - ResizableColumns.prototype.triggerEvent = function(type, args, original) { - var event; - event = $.Event(type); - event.originalEvent = $.extend({}, original); - return this.$table.trigger(event, [this].concat(args || [])); - }; + }, + __slice = [].slice; - ResizableColumns.prototype.getColumnId = function($el) { - return this.$table.data('resizable-columns-id') + '-' + $el.data('resizable-column-id'); +(function ($, window) { + var ResizableColumns, parseWidth, pointerX, setWidth; + parseWidth = function (node) { + return parseFloat(node.style.width.replace('%', '')); }; - - ResizableColumns.prototype.setHeaders = function() { - this.$tableHeaders = this.$table.find(this.options.selector); - this.assignPercentageWidths(); - return this.createHandles(); + setWidth = function (node, width) { + width = width.toFixed(2); + width = width > 0 ? width : 0; + return node.style.width = "" + width + "%"; }; - - ResizableColumns.prototype.destroy = function() { - this.$handleContainer.remove(); - this.$table.removeData('resizableColumns'); - return this.$table.add(window).off('.rc'); + pointerX = function (e) { + if (e.type.indexOf('touch') === 0) { + return (e.originalEvent.touches[0] || e.originalEvent.changedTouches[0]).pageX; + } + return e.pageX; }; + ResizableColumns = (function () { + ResizableColumns.prototype.defaults = { + selector: 'tr th:visible', + store: window.store, + syncHandlers: true, + resizeFromBody: true, + maxWidth: null, + minWidth: null, + visibilityWaitTimeout: 0 + }; + + ResizableColumns.prototype.initTable = function () { + if (this.visibilityWaitTimeout && this.$table && !this.$table.is(":visible")) { + let _this = this; + setTimeout(function () { + _this.initTable() + }, this.options.visibilityWaitTimeout); + return; + } + this.setHeaders(); + this.restoreColumnWidths(); + this.syncHandleWidths(); + $(window).on('resize.rc', ((function (_this) { + return function () { + return _this.syncHandleWidths(); + }; + })(this))); + if (this.options.start) { + this.$table.bind('column:resize:start.rc', this.options.start); + } + if (this.options.resize) { + this.$table.bind('column:resize.rc', this.options.resize); + } + if (this.options.stop) { + this.$table.bind('column:resize:stop.rc', this.options.stop); + } + } - ResizableColumns.prototype.assignPercentageWidths = function() { - return this.$tableHeaders.each((function(_this) { - return function(_, el) { - var $el; - $el = $(el); - return setWidth($el[0], $el.outerWidth() / _this.$table.width() * 100); + function ResizableColumns($table, options) { + this.pointerdown = __bind(this.pointerdown, this); + this.constrainWidth = __bind(this.constrainWidth, this); + this.options = $.extend({}, this.defaults, options); + this.$table = $table; + if (options === 'destroy') { + this.destroy(); + } else { + this.initTable(); + } + } + + ResizableColumns.prototype.triggerEvent = function (type, args, original) { + var event; + event = $.Event(type); + event.originalEvent = $.extend({}, original); + return this.$table.trigger(event, [this].concat(args || [])); }; - })(this)); - }; - ResizableColumns.prototype.createHandles = function() { - var _ref; - if ((_ref = this.$handleContainer) != null) { - _ref.remove(); - } - this.$table.before((this.$handleContainer = $("
"))); - this.$tableHeaders.each((function(_this) { - return function(i, el) { - var $handle; - if (_this.$tableHeaders.eq(i + 1).length === 0 || (_this.$tableHeaders.eq(i).attr('data-noresize') != null) || (_this.$tableHeaders.eq(i + 1).attr('data-noresize') != null)) { - return; - } - $handle = $("
"); - $handle.data('th', $(el)); - return $handle.appendTo(_this.$handleContainer); + ResizableColumns.prototype.getColumnId = function ($el) { + return this.$table.data('resizable-columns-id') + '-' + $el.data('resizable-column-id'); }; - })(this)); - return this.$handleContainer.on('mousedown touchstart', '.rc-handle', this.pointerdown); - }; - ResizableColumns.prototype.syncHandleWidths = function() { - return this.$handleContainer.width(this.$table.width()).find('.rc-handle').each((function(_this) { - return function(_, el) { - var $el; - $el = $(el); - return $el.css({ - left: $el.data('th').outerWidth() + ($el.data('th').offset().left - _this.$handleContainer.offset().left), - height: _this.options.resizeFromBody ? _this.$table.height() : _this.$table.find('thead').height() - }); + ResizableColumns.prototype.setHeaders = function () { + this.$tableHeaders = this.$table.find(this.options.selector); + this.assignPercentageWidths(); + return this.createHandles(); + }; + + ResizableColumns.prototype.destroy = function () { + if (this.$handleContainer) this.$handleContainer.remove(); + this.$table.removeData('resizableColumns'); + return this.$table.add(window).off('.rc'); + }; + + ResizableColumns.prototype.assignPercentageWidths = function () { + return this.$tableHeaders.each((function (_this) { + return function (_, el) { + var $el; + $el = $(el); + return setWidth($el[0], $el.outerWidth() / _this.$table.width() * 100); + }; + })(this)); }; - })(this)); - }; - ResizableColumns.prototype.saveColumnWidths = function() { - return this.$tableHeaders.each((function(_this) { - return function(_, el) { - var $el; - $el = $(el); - if ($el.attr('data-noresize') == null) { - if (_this.options.store != null) { - return _this.options.store.set(_this.getColumnId($el), parseWidth($el[0])); + ResizableColumns.prototype.createHandles = function () { + var _ref; + if ((_ref = this.$handleContainer) != null) { + _ref.remove(); } - } + this.$table.before((this.$handleContainer = $("
"))); + this.$tableHeaders.each((function (_this) { + return function (i, el) { + var $handle; + if (_this.$tableHeaders.eq(i + 1).length === 0 || (_this.$tableHeaders.eq(i).attr('data-noresize') != null) || (_this.$tableHeaders.eq(i + 1).attr('data-noresize') != null)) { + return; + } + $handle = $("
"); + $handle.data('th', $(el)); + return $handle.appendTo(_this.$handleContainer); + }; + })(this)); + return this.$handleContainer.on('mousedown touchstart', '.rc-handle', this.pointerdown); }; - })(this)); - }; - ResizableColumns.prototype.restoreColumnWidths = function() { - return this.$tableHeaders.each((function(_this) { - return function(_, el) { - var $el, width; - $el = $(el); - if ((_this.options.store != null) && (width = _this.options.store.get(_this.getColumnId($el)))) { - return setWidth($el[0], width); - } + ResizableColumns.prototype.syncHandleWidths = function () { + return this.$handleContainer.width(this.$table.width()).find('.rc-handle').each((function (_this) { + return function (_, el) { + var $el; + $el = $(el); + return $el.css({ + left: $el.data('th').outerWidth() + ($el.data('th').offset().left - _this.$handleContainer.offset().left), + height: _this.options.resizeFromBody ? _this.$table.height() : _this.$table.find('thead').height() + }); + }; + })(this)); }; - })(this)); - }; - ResizableColumns.prototype.totalColumnWidths = function() { - var total; - total = 0; - this.$tableHeaders.each((function(_this) { - return function(_, el) { - return total += parseFloat($(el)[0].style.width.replace('%', '')); + ResizableColumns.prototype.saveColumnWidths = function () { + return this.$tableHeaders.each((function (_this) { + return function (_, el) { + var $el; + $el = $(el); + if ($el.attr('data-noresize') == null) { + if (_this.options.store != null) { + return _this.options.store.set(_this.getColumnId($el), parseWidth($el[0])); + } + } + }; + })(this)); }; - })(this)); - return total; - }; - ResizableColumns.prototype.constrainWidth = function(width) { - if (this.options.minWidth != null) { - width = Math.max(this.options.minWidth, width); - } - if (this.options.maxWidth != null) { - width = Math.min(this.options.maxWidth, width); - } - return width; - }; + ResizableColumns.prototype.restoreColumnWidths = function () { + return this.$tableHeaders.each((function (_this) { + return function (_, el) { + var $el, width; + $el = $(el); + if ((_this.options.store != null) && (width = _this.options.store.get(_this.getColumnId($el)))) { + return setWidth($el[0], width); + } + }; + })(this)); + }; + + ResizableColumns.prototype.totalColumnWidths = function () { + var total; + total = 0; + this.$tableHeaders.each((function (_this) { + return function (_, el) { + return total += parseFloat($(el)[0].style.width.replace('%', '')); + }; + })(this)); + return total; + }; - ResizableColumns.prototype.pointerdown = function(e) { - var $currentGrip, $leftColumn, $ownerDocument, $rightColumn, newWidths, startPosition, widths; - e.preventDefault(); - $ownerDocument = $(e.currentTarget.ownerDocument); - startPosition = pointerX(e); - $currentGrip = $(e.currentTarget); - $leftColumn = $currentGrip.data('th'); - $rightColumn = this.$tableHeaders.eq(this.$tableHeaders.index($leftColumn) + 1); - widths = { - left: parseWidth($leftColumn[0]), - right: parseWidth($rightColumn[0]) - }; - newWidths = { - left: widths.left, - right: widths.right - }; - this.$handleContainer.add(this.$table).addClass('rc-table-resizing'); - $leftColumn.add($rightColumn).add($currentGrip).addClass('rc-column-resizing'); - this.triggerEvent('column:resize:start', [$leftColumn, $rightColumn, newWidths.left, newWidths.right], e); - $ownerDocument.on('mousemove.rc touchmove.rc', (function(_this) { - return function(e) { - var difference; - difference = (pointerX(e) - startPosition) / _this.$table.width() * 100; - setWidth($leftColumn[0], newWidths.left = _this.constrainWidth(widths.left + difference)); - setWidth($rightColumn[0], newWidths.right = _this.constrainWidth(widths.right - difference)); - if (_this.options.syncHandlers != null) { - _this.syncHandleWidths(); - } - return _this.triggerEvent('column:resize', [$leftColumn, $rightColumn, newWidths.left, newWidths.right], e); + ResizableColumns.prototype.constrainWidth = function (width) { + if (this.options.minWidth != null) { + width = Math.max(this.options.minWidth, width); + } + if (this.options.maxWidth != null) { + width = Math.min(this.options.maxWidth, width); + } + return width; }; - })(this)); - return $ownerDocument.one('mouseup touchend', (function(_this) { - return function() { - $ownerDocument.off('mousemove.rc touchmove.rc'); - _this.$handleContainer.add(_this.$table).removeClass('rc-table-resizing'); - $leftColumn.add($rightColumn).add($currentGrip).removeClass('rc-column-resizing'); - _this.syncHandleWidths(); - _this.saveColumnWidths(); - return _this.triggerEvent('column:resize:stop', [$leftColumn, $rightColumn, newWidths.left, newWidths.right], e); + + ResizableColumns.prototype.pointerdown = function (e) { + var $currentGrip, $leftColumn, $ownerDocument, $rightColumn, newWidths, startPosition, widths; + e.preventDefault(); + $ownerDocument = $(e.currentTarget.ownerDocument); + startPosition = pointerX(e); + $currentGrip = $(e.currentTarget); + $leftColumn = $currentGrip.data('th'); + $rightColumn = this.$tableHeaders.eq(this.$tableHeaders.index($leftColumn) + 1); + widths = { + left: parseWidth($leftColumn[0]), + right: parseWidth($rightColumn[0]) + }; + newWidths = { + left: widths.left, + right: widths.right + }; + this.$handleContainer.add(this.$table).addClass('rc-table-resizing'); + $leftColumn.add($rightColumn).add($currentGrip).addClass('rc-column-resizing'); + this.triggerEvent('column:resize:start', [$leftColumn, $rightColumn, newWidths.left, newWidths.right], e); + $ownerDocument.on('mousemove.rc touchmove.rc', (function (_this) { + return function (e) { + var difference; + difference = (pointerX(e) - startPosition) / _this.$table.width() * 100; + setWidth($leftColumn[0], newWidths.left = _this.constrainWidth(widths.left + difference)); + setWidth($rightColumn[0], newWidths.right = _this.constrainWidth(widths.right - difference)); + if (_this.options.syncHandlers != null) { + _this.syncHandleWidths(); + } + return _this.triggerEvent('column:resize', [$leftColumn, $rightColumn, newWidths.left, newWidths.right], e); + }; + })(this)); + return $ownerDocument.one('mouseup touchend', (function (_this) { + return function () { + $ownerDocument.off('mousemove.rc touchmove.rc'); + _this.$handleContainer.add(_this.$table).removeClass('rc-table-resizing'); + $leftColumn.add($rightColumn).add($currentGrip).removeClass('rc-column-resizing'); + _this.syncHandleWidths(); + _this.saveColumnWidths(); + return _this.triggerEvent('column:resize:stop', [$leftColumn, $rightColumn, newWidths.left, newWidths.right], e); + }; + })(this)); }; - })(this)); - }; - return ResizableColumns; - - })(); - return $.fn.extend({ - resizableColumns: function() { - var args, option; - option = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : []; - return this.each(function() { - var $table, data; - $table = $(this); - data = $table.data('resizableColumns'); - if (!data) { - $table.data('resizableColumns', (data = new ResizableColumns($table, option))); - } - if (typeof option === 'string') { - return data[option].apply(data, args); + return ResizableColumns; + + })(); + return $.fn.extend({ + resizableColumns: function () { + var args, option; + option = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : []; + return this.each(function () { + var $table, data; + $table = $(this); + data = $table.data('resizableColumns'); + if (!data) { + $table.data('resizableColumns', (data = new ResizableColumns($table, option))); + } + if (typeof option === 'string') { + return data[option].apply(data, args); + } + }); } - }); - } - }); -})(window.jQuery, window); + }); +})(window.jQuery, window); \ No newline at end of file diff --git a/src/assets/js/jquery.resizableColumns.min.js b/src/assets/js/jquery.resizableColumns.min.js index 9754672f..e8054e54 100644 --- a/src/assets/js/jquery.resizableColumns.min.js +++ b/src/assets/js/jquery.resizableColumns.min.js @@ -1,2 +1,2 @@ /* jQuery Resizable Columns v0.1.0 | http://dobtco.github.io/jquery-resizable-columns/ | Licensed MIT | Built Fri Dec 05 2015 22:21:04 */ -var __bind=function(a,b){return function(){return a.apply(b,arguments)}},__slice=[].slice;!function(a,b){var c,d,e,f;return d=function(a){return parseFloat(a.style.width.replace("%",""))},f=function(a,b){return b=b.toFixed(2),b=b>0?b:0,a.style.width=""+b+"%"},e=function(a){return 0===a.type.indexOf("touch")?(a.originalEvent.touches[0]||a.originalEvent.changedTouches[0]).pageX:a.pageX},c=function(){function c(c,d){this.pointerdown=__bind(this.pointerdown,this),this.constrainWidth=__bind(this.constrainWidth,this),this.options=a.extend({},this.defaults,d),this.$table=c,this.setHeaders(),this.restoreColumnWidths(),this.syncHandleWidths(),a(b).on("resize.rc",function(a){return function(){return a.syncHandleWidths()}}(this)),this.options.start&&this.$table.bind("column:resize:start.rc",this.options.start),this.options.resize&&this.$table.bind("column:resize.rc",this.options.resize),this.options.stop&&this.$table.bind("column:resize:stop.rc",this.options.stop)}return c.prototype.defaults={selector:"tr th:visible",store:b.store,syncHandlers:!0,resizeFromBody:!0,maxWidth:null,minWidth:null},c.prototype.triggerEvent=function(b,c,d){var e;return e=a.Event(b),e.originalEvent=a.extend({},d),this.$table.trigger(e,[this].concat(c||[]))},c.prototype.getColumnId=function(a){return this.$table.data("resizable-columns-id")+"-"+a.data("resizable-column-id")},c.prototype.setHeaders=function(){return this.$tableHeaders=this.$table.find(this.options.selector),this.assignPercentageWidths(),this.createHandles()},c.prototype.destroy=function(){return this.$handleContainer.remove(),this.$table.removeData("resizableColumns"),this.$table.add(b).off(".rc")},c.prototype.assignPercentageWidths=function(){return this.$tableHeaders.each(function(b){return function(c,d){var e;return e=a(d),f(e[0],e.outerWidth()/b.$table.width()*100)}}(this))},c.prototype.createHandles=function(){var b;return null!=(b=this.$handleContainer)&&b.remove(),this.$table.before(this.$handleContainer=a("
")),this.$tableHeaders.each(function(b){return function(c,d){var e;if(0!==b.$tableHeaders.eq(c+1).length&&null==b.$tableHeaders.eq(c).attr("data-noresize")&&null==b.$tableHeaders.eq(c+1).attr("data-noresize"))return e=a("
"),e.data("th",a(d)),e.appendTo(b.$handleContainer)}}(this)),this.$handleContainer.on("mousedown touchstart",".rc-handle",this.pointerdown)},c.prototype.syncHandleWidths=function(){return this.$handleContainer.width(this.$table.width()).find(".rc-handle").each(function(b){return function(c,d){var e;return e=a(d),e.css({left:e.data("th").outerWidth()+(e.data("th").offset().left-b.$handleContainer.offset().left),height:b.options.resizeFromBody?b.$table.height():b.$table.find("thead").height()})}}(this))},c.prototype.saveColumnWidths=function(){return this.$tableHeaders.each(function(b){return function(c,e){var f;return f=a(e),null==f.attr("data-noresize")&&null!=b.options.store?b.options.store.set(b.getColumnId(f),d(f[0])):void 0}}(this))},c.prototype.restoreColumnWidths=function(){return this.$tableHeaders.each(function(b){return function(c,d){var e,g;return e=a(d),null!=b.options.store&&(g=b.options.store.get(b.getColumnId(e)))?f(e[0],g):void 0}}(this))},c.prototype.totalColumnWidths=function(){var b;return b=0,this.$tableHeaders.each(function(){return function(c,d){return b+=parseFloat(a(d)[0].style.width.replace("%",""))}}(this)),b},c.prototype.constrainWidth=function(a){return null!=this.options.minWidth&&(a=Math.max(this.options.minWidth,a)),null!=this.options.maxWidth&&(a=Math.min(this.options.maxWidth,a)),a},c.prototype.pointerdown=function(b){var c,g,h,i,j,k,l;return b.preventDefault(),h=a(b.currentTarget.ownerDocument),k=e(b),c=a(b.currentTarget),g=c.data("th"),i=this.$tableHeaders.eq(this.$tableHeaders.index(g)+1),l={left:d(g[0]),right:d(i[0])},j={left:l.left,right:l.right},this.$handleContainer.add(this.$table).addClass("rc-table-resizing"),g.add(i).add(c).addClass("rc-column-resizing"),this.triggerEvent("column:resize:start",[g,i,j.left,j.right],b),h.on("mousemove.rc touchmove.rc",function(a){return function(b){var c;return c=(e(b)-k)/a.$table.width()*100,f(g[0],j.left=a.constrainWidth(l.left+c)),f(i[0],j.right=a.constrainWidth(l.right-c)),null!=a.options.syncHandlers&&a.syncHandleWidths(),a.triggerEvent("column:resize",[g,i,j.left,j.right],b)}}(this)),h.one("mouseup touchend",function(a){return function(){return h.off("mousemove.rc touchmove.rc"),a.$handleContainer.add(a.$table).removeClass("rc-table-resizing"),g.add(i).add(c).removeClass("rc-column-resizing"),a.syncHandleWidths(),a.saveColumnWidths(),a.triggerEvent("column:resize:stop",[g,i,j.left,j.right],b)}}(this))},c}(),a.fn.extend({resizableColumns:function(){var b,d;return d=arguments[0],b=2<=arguments.length?__slice.call(arguments,1):[],this.each(function(){var e,f;return e=a(this),f=e.data("resizableColumns"),f||e.data("resizableColumns",f=new c(e,d)),"string"==typeof d?f[d].apply(f,b):void 0})}})}(window.jQuery,window); \ No newline at end of file +var __bind=function(t,e){return function(){return t.apply(e,arguments)}},__slice=[].slice;!function(t,e){var i,n,r,s;n=function(t){return parseFloat(t.style.width.replace("%",""))},s=function(t,e){return e=(e=e.toFixed(2))>0?e:0,t.style.width=e+"%"},r=function(t){return 0===t.type.indexOf("touch")?(t.originalEvent.touches[0]||t.originalEvent.changedTouches[0]).pageX:t.pageX},i=function(){function i(e,i){this.pointerdown=__bind(this.pointerdown,this),this.constrainWidth=__bind(this.constrainWidth,this),this.options=t.extend({},this.defaults,i),this.$table=e,"destroy"===i?this.destroy():this.initTable()}return i.prototype.defaults={selector:"tr th:visible",store:e.store,syncHandlers:!0,resizeFromBody:!0,maxWidth:null,minWidth:null,visibilityWaitTimeout:0},i.prototype.initTable=function(){if(this.visibilityWaitTimeout&&this.$table&&!this.$table.is(":visible")){let t=this;setTimeout(function(){t.initTable()},this.options.visibilityWaitTimeout)}else{var i;this.setHeaders(),this.restoreColumnWidths(),this.syncHandleWidths(),t(e).on("resize.rc",(i=this,function(){return i.syncHandleWidths()})),this.options.start&&this.$table.bind("column:resize:start.rc",this.options.start),this.options.resize&&this.$table.bind("column:resize.rc",this.options.resize),this.options.stop&&this.$table.bind("column:resize:stop.rc",this.options.stop)}},i.prototype.triggerEvent=function(e,i,n){var r;return(r=t.Event(e)).originalEvent=t.extend({},n),this.$table.trigger(r,[this].concat(i||[]))},i.prototype.getColumnId=function(t){return this.$table.data("resizable-columns-id")+"-"+t.data("resizable-column-id")},i.prototype.setHeaders=function(){return this.$tableHeaders=this.$table.find(this.options.selector),this.assignPercentageWidths(),this.createHandles()},i.prototype.destroy=function(){return this.$handleContainer&&this.$handleContainer.remove(),this.$table.removeData("resizableColumns"),this.$table.add(e).off(".rc")},i.prototype.assignPercentageWidths=function(){return this.$tableHeaders.each((e=this,function(i,n){var r;return r=t(n),s(r[0],r.outerWidth()/e.$table.width()*100)}));var e},i.prototype.createHandles=function(){var e,i;return null!=(e=this.$handleContainer)&&e.remove(),this.$table.before(this.$handleContainer=t("
")),this.$tableHeaders.each((i=this,function(e,n){var r;if(0!==i.$tableHeaders.eq(e+1).length&&null==i.$tableHeaders.eq(e).attr("data-noresize")&&null==i.$tableHeaders.eq(e+1).attr("data-noresize"))return(r=t("
")).data("th",t(n)),r.appendTo(i.$handleContainer)})),this.$handleContainer.on("mousedown touchstart",".rc-handle",this.pointerdown)},i.prototype.syncHandleWidths=function(){return this.$handleContainer.width(this.$table.width()).find(".rc-handle").each((e=this,function(i,n){var r;return(r=t(n)).css({left:r.data("th").outerWidth()+(r.data("th").offset().left-e.$handleContainer.offset().left),height:e.options.resizeFromBody?e.$table.height():e.$table.find("thead").height()})}));var e},i.prototype.saveColumnWidths=function(){return this.$tableHeaders.each((e=this,function(i,r){var s;if(null==(s=t(r)).attr("data-noresize")&&null!=e.options.store)return e.options.store.set(e.getColumnId(s),n(s[0]))}));var e},i.prototype.restoreColumnWidths=function(){return this.$tableHeaders.each((e=this,function(i,n){var r,o;if(r=t(n),null!=e.options.store&&(o=e.options.store.get(e.getColumnId(r))))return s(r[0],o)}));var e},i.prototype.totalColumnWidths=function(){var e;return e=0,this.$tableHeaders.each(function(i,n){return e+=parseFloat(t(n)[0].style.width.replace("%",""))}),e},i.prototype.constrainWidth=function(t){return null!=this.options.minWidth&&(t=Math.max(this.options.minWidth,t)),null!=this.options.maxWidth&&(t=Math.min(this.options.maxWidth,t)),t},i.prototype.pointerdown=function(e){var i,o,a,l,h,d,u,c;return e.preventDefault(),a=t(e.currentTarget.ownerDocument),d=r(e),i=t(e.currentTarget),o=i.data("th"),l=this.$tableHeaders.eq(this.$tableHeaders.index(o)+1),u={left:n(o[0]),right:n(l[0])},h={left:u.left,right:u.right},this.$handleContainer.add(this.$table).addClass("rc-table-resizing"),o.add(l).add(i).addClass("rc-column-resizing"),this.triggerEvent("column:resize:start",[o,l,h.left,h.right],e),a.on("mousemove.rc touchmove.rc",(c=this,function(t){var e;return e=(r(t)-d)/c.$table.width()*100,s(o[0],h.left=c.constrainWidth(u.left+e)),s(l[0],h.right=c.constrainWidth(u.right-e)),null!=c.options.syncHandlers&&c.syncHandleWidths(),c.triggerEvent("column:resize",[o,l,h.left,h.right],t)})),a.one("mouseup touchend",function(t){return function(){return a.off("mousemove.rc touchmove.rc"),t.$handleContainer.add(t.$table).removeClass("rc-table-resizing"),o.add(l).add(i).removeClass("rc-column-resizing"),t.syncHandleWidths(),t.saveColumnWidths(),t.triggerEvent("column:resize:stop",[o,l,h.left,h.right],e)}}(this))},i}(),t.fn.extend({resizableColumns:function(){var e,n;return n=arguments[0],e=2<=arguments.length?__slice.call(arguments,1):[],this.each(function(){var r,s;if((s=(r=t(this)).data("resizableColumns"))||r.data("resizableColumns",s=new i(r,n)),"string"==typeof n)return s[n].apply(s,e)})}})}(window.jQuery,window); \ No newline at end of file diff --git a/src/assets/js/kv-grid-export.js b/src/assets/js/kv-grid-export.js index 9b49b5a4..95e852e5 100644 --- a/src/assets/js/kv-grid-export.js +++ b/src/assets/js/kv-grid-export.js @@ -308,7 +308,7 @@ self.popup.focus(); self.setPopupAlert(self.messages.downloadProgress); } - $('
', {'action': self.action, 'target': target, 'method': 'post', css: {'display': 'none'}}) + $('', {'action': self.action, class: 'kv-export-form', 'target': target, 'method': 'post', css: {'display': 'none'}}) .append(getInput('export_filetype', type), getInput('export_filename', self.filename)) .append(getInput('export_encoding', self.encoding), getInput('export_bom', self.bom ? 1 : 0)) .append(getInput('export_content', content), getInput('module_id', self.module), $csrf) diff --git a/src/assets/js/kv-grid-export.min.js b/src/assets/js/kv-grid-export.min.js index a2056a76..d2b6d49f 100644 --- a/src/assets/js/kv-grid-export.min.js +++ b/src/assets/js/kv-grid-export.min.js @@ -11,4 +11,5 @@ * Copyright: 2014 - 2023, Kartik Visweswaran, Krajee.com * For more JQuery plugins visit http://plugins.krajee.com * For more Yii related demos visit http://demos.krajee.com - */!function(e){"use strict";var t,o,n="urn:schemas-microsoft-com:office:",r="http://www.w3.org/TR/REC-html40";t={replaceAll:function(e,t,o){return e.split(t).join(o)},isEmpty:function(t,o){return null===t||void 0===t||0===t.length||o&&""===e.trim(t)},popupDialog:function(e,t,o,n){var r=screen.width/2-o/2,i=60,a=window.open("",t,"",!0);return a.close(),window.open(e,t,"toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width="+o+", height="+n+", top="+i+", left="+r)},slug:function(e){return e.toLowerCase().replace(/[^\w ]+/g,"").replace(/ +/g,"-")},templates:{html:'{css}{data}',pdf:"{before}\n{data}\n{after}",excel:'{css}{data}',popup:'Grid Export - © Krajee{msg}'}},o=function(t,o){var n=this,r=o.gridOpts,i=o.genOpts;n.$element=e(t),n.gridId=r.gridId,n.$grid=e("#"+n.gridId),n.dialogLib=o.dialogLib,n.messages=r.messages,n.target=r.target,n.exportConversions=r.exportConversions,n.skipExportElements=r.skipExportElements,n.showConfirmAlert=r.showConfirmAlert,n.action=r.action,n.bom=r.bom,n.encoding=r.encoding,n.module=r.module,n.filename=i.filename,n.expHash=i.expHash,n.showHeader=i.showHeader,n.showFooter=i.showFooter,n.showPageSummary=i.showPageSummary,n.$table=n.$grid.find(".kv-grid-table:first"),n.columns=n.showHeader?"td,th":"td",n.alertMsg=o.alertMsg,n.config=o.config,n.popup="",n.listen()},o.prototype={constructor:o,getArray:function(o){var n=this,r=n.clean(o),i=[],a={};return void 0!==n.config.colHeads&&n.config.colHeads.length>0?i=n.config.colHeads:r.find("thead tr th").each(function(o){var r=e(this).text().trim(),a=t.slug(r);i[o]=!n.config.slugColHeads||t.isEmpty(a)?"col_"+o:a}),r.find('tbody tr:has("td")').each(function(t){a[t]={},e(this).children("td").each(function(o){var n=i[o];a[t][n]=e(this).text().trim()})}),a},setPopupAlert:function(e){var o=this;if(void 0!==o.popup.document)if(arguments.length&&arguments[1]){var n=o.popup.document.getElementsByTagName("body");setTimeout(function(){n[0].innerHTML=e},1200)}else{var r=t.templates.popup.replace("{msg}",e);o.popup.document.write(r)}},processExport:function(e,o){var n=this;setTimeout(function(){t.isEmpty(o)?n[e]():n[e](o)},100)},listenClick:function(e){var o=this,n=arguments.length>1?arguments[1]:"",r=window[o.dialogLib];o.$element.off("click.gridexport").on("click.gridexport",function(i){if(i.stopPropagation(),i.preventDefault(),!o.showConfirmAlert)return void o.processExport(e,n);var a=o.messages,s=t.isEmpty(o.alertMsg)?"":o.alertMsg,l=t.isEmpty(a.allowPopups)?"":a.allowPopups,c=t.isEmpty(a.confirmDownload)?"":a.confirmDownload,p="";return p=s.length&&l.length?s+"\n\n"+l:!s.length&&l.length?l:s.length&&!l.length?s:"",c.length&&(p=p+"\n\n"+c),t.isEmpty(p)?void 0:(r.confirm(p,function(t){t&&o.processExport(e,n),i.preventDefault()}),!1)})},listen:function(){var e=this;e.$element.hasClass("export-csv")&&e.listenClick("exportTEXT","csv"),e.$element.hasClass("export-txt")&&e.listenClick("exportTEXT","txt"),e.$element.hasClass("export-html")&&e.listenClick("exportHTML"),e.$element.hasClass("export-xls")&&e.listenClick("exportEXCEL"),e.$element.hasClass("export-json")&&e.listenClick("exportJSON"),e.$element.hasClass("export-pdf")&&e.listenClick("exportPDF")},clean:function(t){var o,n=this,r=n.$table.clone(),i=n.$element.data("cssStyles")||{},a=n.$table.closest(".kv-grid-container"),s=n.skipExportElements,l=function(e){r.find(e+"."+n.gridId).remove()};s.length&&e.each(s,function(e,t){r.find(t).remove()}),"html"===t&&r.find(".kv-grid-boolean").remove(),o=a.hasClass("kv-grid-wrapper")?a.closest(".floatThead-wrapper").find(".kv-thead-float thead"):a.find(".kv-thead-float thead"),o.length&&(o=o.clone(),r.find("thead").before(o).remove()),r.find("tr.filters").remove(),r.find("th").removeAttr("rowspan"),r.find("th").find("a").each(function(){e(this).contents().unwrap()}),r.find("form,input,textarea,select,script").remove(),r.find("[onclick]").removeAttr("onclick"),r.find('a[href*="javascript"]').attr("href","#"),n.showHeader||r.children("thead").remove(),n.showPageSummary||l(".kv-page-summary-container"),n.showFooter||l(".kv-footer-container"),n.showCaption||l(".kv-caption-container"),r.find(".skip-export").remove(),r.find(".skip-export-"+t).remove(),r.find(".strip-tags-export").each(function(){var t=e(this),o=t.text();t.html(o)});var c=r.html();return c=n.preProcess(c,t),r.html(c),e.each(i,function(t,o){r.find(t).each(function(){var t=e(this),n=t.attr("style")||"";e.each(o,function(e,t){n+=e+":"+t+";"}),n&&t.attr("style",n)})}),r},preProcess:function(e,o){var n,r,i,a=this,s=a.exportConversions,l=s.length,c=e,p="from_"+o,d="to_"+o;if(l>0)for(var f=0;l>f;f++)n=s[f],r=void 0!==n[p]?n[p]:void 0!==n.from?n.from:"",i=void 0!==n[d]?n[d]:void 0!==n.to?n.to:"",r.length&&i.length&&(c=t.replaceAll(c,r,i));return c},download:function(o,n){var r,i,a=this,s=a.$element,l=s.attr("data-mime")||"text/plain",c=window.yii,p=s.attr("data-hash")||"",d=s.attr("data-hash-export-config"),f=t.isEmpty(a.config)?{}:a.config,h=a.target,m=function(t,o){return e("