228 lines
8.0 KiB
JavaScript
Executable File
228 lines
8.0 KiB
JavaScript
Executable File
/*=========================================================================================
|
|
File Name: handsontable-disabled-editing.js
|
|
Description: Handsontable Rows Columns.
|
|
----------------------------------------------------------------------------------------
|
|
Item Name: Modern Admin - Clean Bootstrap 4 Dashboard HTML Template
|
|
Version: 1.0
|
|
Author: PIXINVENT
|
|
Author URL: http://www.themeforest.net/user/pixinvent
|
|
==========================================================================================*/
|
|
|
|
document.addEventListener("DOMContentLoaded", function() {
|
|
|
|
/*****************************
|
|
* Data validation *
|
|
*****************************/
|
|
|
|
var people = [
|
|
{ id: 1, name: { first: 'Joe', last: 'Fabiano' }, ip: '0.0.0.1', email: 'Joe.Fabiano@ex.com' },
|
|
{ id: 2, name: { first: 'Fred', last: 'Wecler' }, ip: '0.0.0.1', email: 'Fred.Wecler@ex.com' },
|
|
{ id: 3, name: { first: 'Steve', last: 'Wilson' }, ip: '0.0.0.1', email: 'Steve.Wilson@ex.com' },
|
|
{ id: 4, name: { first: 'Maria', last: 'Fernandez' }, ip: '0.0.0.1', email: 'M.Fernandez@ex.com' },
|
|
{ id: 5, name: { first: 'Pierre', last: 'Barbault' }, ip: '0.0.0.1', email: 'Pierre.Barbault@ex.com' },
|
|
{ id: 6, name: { first: 'Nancy', last: 'Moore' }, ip: '0.0.0.1', email: 'Nancy.Moore@ex.com' },
|
|
{ id: 7, name: { first: 'Barbara', last: 'MacDonald' }, ip: '0.0.0.1', email: 'B.MacDonald@ex.com' },
|
|
{ id: 8, name: { first: 'Wilma', last: 'Williams' }, ip: '0.0.0.1', email: 'Wilma.Williams@ex.com' },
|
|
{ id: 9, name: { first: 'Sasha', last: 'Silver' }, ip: '0.0.0.1', email: 'Sasha.Silver@ex.com' },
|
|
{ id: 10, name: { first: 'Don', last: 'Pérignon' }, ip: '0.0.0.1', email: 'Don.Pérignon@ex.com' },
|
|
{ id: 11, name: { first: 'Aaron', last: 'Kinley' }, ip: '0.0.0.1', email: 'Aaron.Kinley@ex.com' }
|
|
],
|
|
example1 = document.getElementById('validation'),
|
|
example1console = document.getElementById('example1console'),
|
|
settings1,
|
|
ipValidatorRegexp,
|
|
emailValidator;
|
|
|
|
ipValidatorRegexp = /^(?:\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b|null)$/;
|
|
emailValidator = function(value, callback) {
|
|
setTimeout(function() {
|
|
if (/.+@.+/.test(value)) {
|
|
callback(true);
|
|
} else {
|
|
callback(false);
|
|
}
|
|
}, 1000);
|
|
};
|
|
|
|
settings1 = {
|
|
data: people,
|
|
beforeChange: function(changes, source) {
|
|
for (var i = changes.length - 1; i >= 0; i--) {
|
|
// gently don't accept the word "foo" (remove the change at index i)
|
|
if (changes[i][3] === 'foo') {
|
|
changes.splice(i, 1);
|
|
}
|
|
// if any of pasted cells contains the word "nuke", reject the whole paste
|
|
else if (changes[i][3] === 'nuke') {
|
|
return false;
|
|
}
|
|
// capitalise first letter in column 1 and 2
|
|
else if ((changes[i][1] === 'name.first' || changes[i][1] === 'name.last') && changes[i][3].charAt(0)) {
|
|
changes[i][3] = changes[i][3].charAt(0).toUpperCase() + changes[i][3].slice(1);
|
|
}
|
|
}
|
|
},
|
|
afterChange: function(changes, source) {
|
|
if (source !== 'loadData') {
|
|
example1console.innerText = JSON.stringify(changes);
|
|
}
|
|
},
|
|
colHeaders: ['ID', 'First name', 'Last name', 'IP', 'E-mail'],
|
|
columns: [
|
|
{ data: 'id', type: 'numeric' },
|
|
{ data: 'name.first' },
|
|
{ data: 'name.last' },
|
|
{ data: 'ip', validator: ipValidatorRegexp, allowInvalid: true },
|
|
{ data: 'email', validator: emailValidator, allowInvalid: false }
|
|
]
|
|
};
|
|
var hot = new Handsontable(example1, settings1);
|
|
|
|
|
|
|
|
/***********************
|
|
* Drag down *
|
|
***********************/
|
|
|
|
var data = [
|
|
['', 'Kia', 'Nissan', 'Toyota', 'Honda'],
|
|
['2012', 10, 11, 12, 13],
|
|
['2013', 20, 11, 14, 13],
|
|
['2014', 30, 15, 12, 13],
|
|
['2015', '', '', '', ''],
|
|
['2016', '', '', '', '']
|
|
],
|
|
container = document.getElementById('drag'),
|
|
hot1;
|
|
|
|
hot1 = new Handsontable(container, {
|
|
rowHeaders: true,
|
|
colHeaders: true,
|
|
fillHandle: true // possible values: true, false, "horizontal", "vertical"
|
|
});
|
|
hot1.loadData(data);
|
|
|
|
|
|
|
|
/**************************
|
|
* Merged cells *
|
|
**************************/
|
|
|
|
var container = document.getElementById('merged'),
|
|
hot;
|
|
|
|
hot = new Handsontable(container, {
|
|
data: Handsontable.helper.createSpreadsheetData(25, 18),
|
|
colWidths: [47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47],
|
|
rowHeaders: true,
|
|
colHeaders: true,
|
|
contextMenu: true,
|
|
mergeCells: [
|
|
{ row: 1, col: 1, rowspan: 3, colspan: 3 },
|
|
{ row: 3, col: 4, rowspan: 2, colspan: 2 },
|
|
{ row: 5, col: 6, rowspan: 3, colspan: 3 }
|
|
]
|
|
});
|
|
|
|
|
|
|
|
/***********************
|
|
* Alignment *
|
|
***********************/
|
|
|
|
var container = document.getElementById('alignment'),
|
|
hot1;
|
|
|
|
hot1 = new Handsontable(container, {
|
|
data: Handsontable.helper.createSpreadsheetData(25, 18),
|
|
colWidths: [47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47],
|
|
rowHeaders: true,
|
|
colHeaders: true,
|
|
contextMenu: true,
|
|
mergeCells: [
|
|
{ row: 1, col: 1, rowspan: 3, colspan: 3 },
|
|
{ row: 3, col: 4, rowspan: 2, colspan: 2 }
|
|
],
|
|
className: "htCenter",
|
|
cell: [
|
|
{ row: 0, col: 0, className: "htRight" },
|
|
{ row: 1, col: 1, className: "htLeft htMiddle" },
|
|
{ row: 3, col: 4, className: "htLeft htBottom" }
|
|
],
|
|
afterSetCellMeta: function(row, col, key, val) {
|
|
console.log("cell meta changed", row, col, key, val);
|
|
}
|
|
});
|
|
|
|
|
|
|
|
/*******************************
|
|
* Read-only columns *
|
|
*******************************/
|
|
|
|
function getReadOnlyData() {
|
|
return [
|
|
{ car: 'Nissan', year: 2012, chassis: 'black', bumper: 'black' },
|
|
{ car: 'Nissan', year: 2013, chassis: 'blue', bumper: 'blue' },
|
|
{ car: 'Chrysler', year: 2014, chassis: 'yellow', bumper: 'black' },
|
|
{ car: 'Volvo', year: 2015, chassis: 'white', bumper: 'gray' }
|
|
];
|
|
}
|
|
|
|
var
|
|
container1 = document.getElementById('readOnly'),
|
|
hot1;
|
|
|
|
hot1 = new Handsontable(container1, {
|
|
data: getReadOnlyData(),
|
|
colHeaders: ['Car', 'Year', 'Chassis color', 'Bumper color'],
|
|
columns: [{
|
|
data: 'car',
|
|
readOnly: true
|
|
}, {
|
|
data: 'year'
|
|
}, {
|
|
data: 'chassis'
|
|
}, {
|
|
data: 'bumper'
|
|
}]
|
|
});
|
|
|
|
|
|
|
|
/******************************
|
|
* Disabled editing *
|
|
******************************/
|
|
|
|
function getDisableData() {
|
|
return [
|
|
{ car: 'Nissan', year: 2012, chassis: 'black', bumper: 'black' },
|
|
{ car: 'Nissan', year: 2013, chassis: 'blue', bumper: 'blue' },
|
|
{ car: 'Chrysler', year: 2014, chassis: 'yellow', bumper: 'black' },
|
|
{ car: 'Volvo', year: 2015, chassis: 'white', bumper: 'gray' }
|
|
];
|
|
}
|
|
|
|
var
|
|
container1 = document.getElementById('nonEditable'),
|
|
hot1;
|
|
|
|
hot1 = new Handsontable(container1, {
|
|
data: getDisableData(),
|
|
colHeaders: ['Car', 'Year', 'Chassis color', 'Bumper color'],
|
|
columns: [{
|
|
data: 'car',
|
|
editor: false
|
|
}, {
|
|
data: 'year',
|
|
editor: 'numeric'
|
|
}, {
|
|
data: 'chassis',
|
|
editor: 'text'
|
|
}, {
|
|
data: 'bumper',
|
|
editor: 'text'
|
|
}]
|
|
});
|
|
});
|