Custom column type

Jspreadsheet gives developers the ability to create their own custom columns. The following example shows how to integrate a third party clock plugin as a custom column on Jspreadsheet Pro v7+.

A time custom column based on the clockpicker plugin by weareoutman.

<html> <script src="https://jspreadsheet.com/v7/jspreadsheet.js"></script> <script src="https://jsuites.net/v5/jsuites.js"></script> <link rel="stylesheet" href="https://jspreadsheet.com/v7/jspreadsheet.css" type="text/css" /> <link rel="stylesheet" href="https://jsuites.net/v5/jsuites.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/clockpicker@0.0.7/dist/jquery-clockpicker.min.css" /> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/clockpicker@0.0.7/dist/jquery-clockpicker.min.js"></script> <div id="custom"></div> <script> let clockEditor = function() { let methods = {}; methods.createCell = function(cell, value, x, y, instance, options) { cell.innerHTML = value; } methods.updateCell = function(cell, value, x, y, instance, options) { if (cell) { cell.innerHTML = value; } } methods.openEditor = function(cell, value, x, y, instance, options) { // Create input from the helpers let editor = jspreadsheet.helpers.createEditor('input', cell); editor.value = value; // Instance of the clock picker $(editor).clockpicker({ afterHide:function() { setTimeout(function() { // To avoid double call if (cell.children[0]) { instance.closeEditor(cell, true); } }); } }); editor.focus(); } methods.closeEditor = function(cell, save) { if (save) { cell.innerHTML = cell.children[0].value; } else { cell.innerHTML = ''; } return cell.innerHTML; } return methods; }(); let data = [ ['PHP', '14:00'], ['Javascript', '16:30'], ]; jspreadsheet(document.getElementById('custom'), { data: data, columns: [ { type: 'text', title: 'Course Title', width: '300px' }, { type: clockEditor, title: 'Time', width: '200px' }, ], license: 'Yjc0ZDU2Y2FkZTkwMTU2N2I2M2QxZDNlNDA5NTI3NTM1YmNjNTVkMTQ0YjQxYjczMGI1ZWM4YzQ4YWY3NmUzOGNjZGJmYWUyZWVkMGFlMTYxMDc1MDljMWM3NDBlYjhkMDA4OGE0MDVlNzAzNTc4ZDJiNGY0MWExNDdlMTAzZDcsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpjME1UVXhNamt6TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0luWXhNaUlzSW1Ob1lYSjBjeUlzSW1admNtMXpJaXdpWm05eWJYVnNZU0lzSW5CaGNuTmxjaUlzSW5KbGJtUmxjaUlzSW1OdmJXMWxiblJ6SWl3aWFXMXdiM0owWlhJaUxDSmlZWElpTENKMllXeHBaR0YwYVc5dWN5SXNJbk5sWVhKamFDSXNJbkJ5YVc1MElpd2ljMmhsWlhSeklpd2lZMnhwWlc1MElpd2ljMlZ5ZG1WeUlpd2ljMmhoY0dWeklpd2labTl5YldGMElpd2ljR2wyYjNRaVhTd2laR1Z0YnlJNmRISjFaWDA9', }); </script> </html>