Handy setStyle method to update style tag on the fly, resize column using style tag
This commit is contained in:
parent
cdb6bd55d7
commit
f4acd08b43
@ -237,7 +237,10 @@ var ReGrid = function () {
|
|||||||
|
|
||||||
|
|
||||||
if (this.addSerialNoColumn) {
|
if (this.addSerialNoColumn) {
|
||||||
var serialNoColumn = 'Sr. No';
|
var serialNoColumn = {
|
||||||
|
content: 'Sr. No',
|
||||||
|
resizable: false
|
||||||
|
};
|
||||||
|
|
||||||
columns = [serialNoColumn].concat(columns);
|
columns = [serialNoColumn].concat(columns);
|
||||||
|
|
||||||
@ -363,7 +366,8 @@ var ReGrid = function () {
|
|||||||
|
|
||||||
this.header.on('mousedown', '.data-table-col', function (e) {
|
this.header.on('mousedown', '.data-table-col', function (e) {
|
||||||
$currCell = (0, _jQuery2.default)(this);
|
$currCell = (0, _jQuery2.default)(this);
|
||||||
var col = self.getColumn($currCell.attr('data-col-index'));
|
var colIndex = $currCell.attr('data-col-index');
|
||||||
|
var col = self.getColumn(colIndex);
|
||||||
|
|
||||||
if (col && col.resizable === false) {
|
if (col && col.resizable === false) {
|
||||||
return;
|
return;
|
||||||
@ -377,13 +381,13 @@ var ReGrid = function () {
|
|||||||
(0, _jQuery2.default)('body').on('mouseup', function (e) {
|
(0, _jQuery2.default)('body').on('mouseup', function (e) {
|
||||||
if (!$currCell) return;
|
if (!$currCell) return;
|
||||||
isDragging = false;
|
isDragging = false;
|
||||||
var colIndex = $currCell.attr('data-col-index');
|
// const colIndex = $currCell.attr('data-col-index');
|
||||||
|
|
||||||
if ($currCell) {
|
if ($currCell) {
|
||||||
var width = $currCell.find('.content').css('width');
|
// const width = $currCell.find('.content').css('width');
|
||||||
|
|
||||||
self.setColumnWidth(colIndex, width);
|
// self.setColumnWidth(colIndex, width);
|
||||||
self.setBodyWidth();
|
// self.setBodyWidth();
|
||||||
$currCell = null;
|
$currCell = null;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -391,8 +395,11 @@ var ReGrid = function () {
|
|||||||
(0, _jQuery2.default)('body').on('mousemove', function (e) {
|
(0, _jQuery2.default)('body').on('mousemove', function (e) {
|
||||||
if (!isDragging) return;
|
if (!isDragging) return;
|
||||||
var finalWidth = startWidth + (e.pageX - startX);
|
var finalWidth = startWidth + (e.pageX - startX);
|
||||||
|
var colIndex = $currCell.attr('data-col-index');
|
||||||
|
|
||||||
self.setColumnHeaderWidth($currCell, finalWidth);
|
self.setStyle('[data-col-index="' + colIndex + '"] .content', 'width: ' + finalWidth + 'px;');
|
||||||
|
self.setBodyWidth();
|
||||||
|
// self.setColumnHeaderWidth($currCell, finalWidth);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
@ -469,6 +476,7 @@ var ReGrid = function () {
|
|||||||
}, {
|
}, {
|
||||||
key: 'setColumnHeaderWidth',
|
key: 'setColumnHeaderWidth',
|
||||||
value: function setColumnHeaderWidth(colIndex, width) {
|
value: function setColumnHeaderWidth(colIndex, width) {
|
||||||
|
colIndex = +colIndex;
|
||||||
var $cell = void 0;
|
var $cell = void 0;
|
||||||
|
|
||||||
if (typeof colIndex === 'number') {
|
if (typeof colIndex === 'number') {
|
||||||
@ -527,9 +535,33 @@ var ReGrid = function () {
|
|||||||
styles += style;
|
styles += style;
|
||||||
$style.html(styles);
|
$style.html(styles);
|
||||||
}
|
}
|
||||||
|
}, {
|
||||||
|
key: 'setStyle',
|
||||||
|
value: function setStyle(rule, style) {
|
||||||
|
var $style = this.wrapper.find('style[data-id="regrid"]');
|
||||||
|
|
||||||
|
if ($style.length === 0) {
|
||||||
|
$style = (0, _jQuery2.default)('<style data-id="regrid"></style>').prependTo(this.wrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
var styles = $style.text();
|
||||||
|
var patternStr = (0, _utils.escapeRegExp)(rule) + ' {([^}]*)}';
|
||||||
|
var pattern = new RegExp(patternStr, 'g');
|
||||||
|
|
||||||
|
var property = style.split(':')[0];
|
||||||
|
var propPattern = new RegExp((0, _utils.escapeRegExp)(property) + '[^;]*;');
|
||||||
|
|
||||||
|
styles = styles.replace(pattern, function (match, p1) {
|
||||||
|
var replacer = rule + ' {' + p1.trim() + style + '}';
|
||||||
|
|
||||||
|
return replacer.replace(propPattern, '');
|
||||||
|
});
|
||||||
|
$style.html(styles);
|
||||||
|
}
|
||||||
}, {
|
}, {
|
||||||
key: 'getColumn',
|
key: 'getColumn',
|
||||||
value: function getColumn(colIndex) {
|
value: function getColumn(colIndex) {
|
||||||
|
colIndex = +colIndex;
|
||||||
return this.data.columns.find(function (col) {
|
return this.data.columns.find(function (col) {
|
||||||
return col.colIndex === colIndex;
|
return col.colIndex === colIndex;
|
||||||
});
|
});
|
||||||
@ -537,6 +569,7 @@ var ReGrid = function () {
|
|||||||
}, {
|
}, {
|
||||||
key: 'getRow',
|
key: 'getRow',
|
||||||
value: function getRow(rowIndex) {
|
value: function getRow(rowIndex) {
|
||||||
|
rowIndex = +rowIndex;
|
||||||
return this.data.rows.find(function (row) {
|
return this.data.rows.find(function (row) {
|
||||||
return row[0].rowIndex === rowIndex;
|
return row[0].rowIndex === rowIndex;
|
||||||
});
|
});
|
||||||
@ -544,6 +577,7 @@ var ReGrid = function () {
|
|||||||
}, {
|
}, {
|
||||||
key: 'getColumnHeaderElement',
|
key: 'getColumnHeaderElement',
|
||||||
value: function getColumnHeaderElement(colIndex) {
|
value: function getColumnHeaderElement(colIndex) {
|
||||||
|
colIndex = +colIndex;
|
||||||
if (colIndex < 0) return null;
|
if (colIndex < 0) return null;
|
||||||
return this.wrapper.find('.data-table-col[data-is-header][data-col-index="' + colIndex + '"]');
|
return this.wrapper.find('.data-table-col[data-is-header][data-col-index="' + colIndex + '"]');
|
||||||
}
|
}
|
||||||
@ -669,6 +703,11 @@ function getDefault(a, b) {
|
|||||||
return a !== undefined ? a : b;
|
return a !== undefined ? a : b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function escapeRegExp(str) {
|
||||||
|
// https://stackoverflow.com/a/6969486
|
||||||
|
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&');
|
||||||
|
}
|
||||||
|
|
||||||
exports.default = {
|
exports.default = {
|
||||||
getHeaderHTML: getHeaderHTML,
|
getHeaderHTML: getHeaderHTML,
|
||||||
getBodyHTML: getBodyHTML,
|
getBodyHTML: getBodyHTML,
|
||||||
@ -677,7 +716,8 @@ exports.default = {
|
|||||||
prepareRowHeader: prepareRowHeader,
|
prepareRowHeader: prepareRowHeader,
|
||||||
prepareRows: prepareRows,
|
prepareRows: prepareRows,
|
||||||
makeDataAttributeString: makeDataAttributeString,
|
makeDataAttributeString: makeDataAttributeString,
|
||||||
getDefault: getDefault
|
getDefault: getDefault,
|
||||||
|
escapeRegExp: escapeRegExp
|
||||||
};
|
};
|
||||||
module.exports = exports['default'];
|
module.exports = exports['default'];
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@ -5,7 +5,8 @@ import {
|
|||||||
getColumnHTML,
|
getColumnHTML,
|
||||||
prepareRowHeader,
|
prepareRowHeader,
|
||||||
prepareRows,
|
prepareRows,
|
||||||
getDefault
|
getDefault,
|
||||||
|
escapeRegExp
|
||||||
} from './utils.js';
|
} from './utils.js';
|
||||||
import $ from 'jQuery';
|
import $ from 'jQuery';
|
||||||
import Clusterize from 'clusterize.js';
|
import Clusterize from 'clusterize.js';
|
||||||
@ -125,7 +126,10 @@ export default class ReGrid {
|
|||||||
let { columns, rows } = data;
|
let { columns, rows } = data;
|
||||||
|
|
||||||
if (this.addSerialNoColumn) {
|
if (this.addSerialNoColumn) {
|
||||||
const serialNoColumn = 'Sr. No';
|
const serialNoColumn = {
|
||||||
|
content: 'Sr. No',
|
||||||
|
resizable: false
|
||||||
|
};
|
||||||
|
|
||||||
columns = [serialNoColumn].concat(columns);
|
columns = [serialNoColumn].concat(columns);
|
||||||
|
|
||||||
@ -248,7 +252,8 @@ export default class ReGrid {
|
|||||||
|
|
||||||
this.header.on('mousedown', '.data-table-col', function (e) {
|
this.header.on('mousedown', '.data-table-col', function (e) {
|
||||||
$currCell = $(this);
|
$currCell = $(this);
|
||||||
const col = self.getColumn($currCell.attr('data-col-index'));
|
const colIndex = $currCell.attr('data-col-index');
|
||||||
|
const col = self.getColumn(colIndex);
|
||||||
|
|
||||||
if (col && col.resizable === false) {
|
if (col && col.resizable === false) {
|
||||||
return;
|
return;
|
||||||
@ -262,13 +267,13 @@ export default class ReGrid {
|
|||||||
$('body').on('mouseup', function (e) {
|
$('body').on('mouseup', function (e) {
|
||||||
if (!$currCell) return;
|
if (!$currCell) return;
|
||||||
isDragging = false;
|
isDragging = false;
|
||||||
const colIndex = $currCell.attr('data-col-index');
|
// const colIndex = $currCell.attr('data-col-index');
|
||||||
|
|
||||||
if ($currCell) {
|
if ($currCell) {
|
||||||
const width = $currCell.find('.content').css('width');
|
// const width = $currCell.find('.content').css('width');
|
||||||
|
|
||||||
self.setColumnWidth(colIndex, width);
|
// self.setColumnWidth(colIndex, width);
|
||||||
self.setBodyWidth();
|
// self.setBodyWidth();
|
||||||
$currCell = null;
|
$currCell = null;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -276,8 +281,11 @@ export default class ReGrid {
|
|||||||
$('body').on('mousemove', function (e) {
|
$('body').on('mousemove', function (e) {
|
||||||
if (!isDragging) return;
|
if (!isDragging) return;
|
||||||
const finalWidth = startWidth + (e.pageX - startX);
|
const finalWidth = startWidth + (e.pageX - startX);
|
||||||
|
const colIndex = $currCell.attr('data-col-index');
|
||||||
|
|
||||||
self.setColumnHeaderWidth($currCell, finalWidth);
|
self.setStyle(`[data-col-index="${colIndex}"] .content`, `width: ${finalWidth}px;`);
|
||||||
|
self.setBodyWidth();
|
||||||
|
// self.setColumnHeaderWidth($currCell, finalWidth);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -351,6 +359,7 @@ export default class ReGrid {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setColumnHeaderWidth(colIndex, width) {
|
setColumnHeaderWidth(colIndex, width) {
|
||||||
|
colIndex = +colIndex;
|
||||||
let $cell;
|
let $cell;
|
||||||
|
|
||||||
if (typeof colIndex === 'number') {
|
if (typeof colIndex === 'number') {
|
||||||
@ -408,15 +417,41 @@ export default class ReGrid {
|
|||||||
$style.html(styles);
|
$style.html(styles);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setStyle(rule, style) {
|
||||||
|
let $style = this.wrapper.find('style[data-id="regrid"]');
|
||||||
|
|
||||||
|
if ($style.length === 0) {
|
||||||
|
$style = $('<style data-id="regrid"></style>').prependTo(this.wrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
let styles = $style.text();
|
||||||
|
const patternStr = `${escapeRegExp(rule)} {([^}]*)}`;
|
||||||
|
const pattern = new RegExp(patternStr, 'g');
|
||||||
|
|
||||||
|
const property = style.split(':')[0];
|
||||||
|
const propPattern = new RegExp(`${escapeRegExp(property)}[^;]*;`);
|
||||||
|
|
||||||
|
styles = styles.replace(pattern, function (match, p1) {
|
||||||
|
const replacer =
|
||||||
|
`${rule} {${p1.trim()}${style}}`;
|
||||||
|
|
||||||
|
return replacer.replace(propPattern, '');
|
||||||
|
});
|
||||||
|
$style.html(styles);
|
||||||
|
}
|
||||||
|
|
||||||
getColumn(colIndex) {
|
getColumn(colIndex) {
|
||||||
|
colIndex = +colIndex;
|
||||||
return this.data.columns.find(col => col.colIndex === colIndex);
|
return this.data.columns.find(col => col.colIndex === colIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
getRow(rowIndex) {
|
getRow(rowIndex) {
|
||||||
|
rowIndex = +rowIndex;
|
||||||
return this.data.rows.find(row => row[0].rowIndex === rowIndex);
|
return this.data.rows.find(row => row[0].rowIndex === rowIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
getColumnHeaderElement(colIndex) {
|
getColumnHeaderElement(colIndex) {
|
||||||
|
colIndex = +colIndex;
|
||||||
if (colIndex < 0) return null;
|
if (colIndex < 0) return null;
|
||||||
return this.wrapper.find(
|
return this.wrapper.find(
|
||||||
`.data-table-col[data-is-header][data-col-index="${colIndex}"]`
|
`.data-table-col[data-is-header][data-col-index="${colIndex}"]`
|
||||||
|
|||||||
@ -110,6 +110,11 @@ function getDefault(a, b) {
|
|||||||
return a !== undefined ? a : b;
|
return a !== undefined ? a : b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function escapeRegExp(str) {
|
||||||
|
// https://stackoverflow.com/a/6969486
|
||||||
|
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&');
|
||||||
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
getHeaderHTML,
|
getHeaderHTML,
|
||||||
getBodyHTML,
|
getBodyHTML,
|
||||||
@ -118,5 +123,6 @@ export default {
|
|||||||
prepareRowHeader,
|
prepareRowHeader,
|
||||||
prepareRows,
|
prepareRows,
|
||||||
makeDataAttributeString,
|
makeDataAttributeString,
|
||||||
getDefault
|
getDefault,
|
||||||
|
escapeRegExp
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user