document.addEventListener("DOMContentLoaded", function() { Fancy.defineControl('mycontrol', { controls: [{ event: 'cellclick', selector: '.my-button', handler: 'onClickMyButton' }], onClickMyButton: function(grid, o){ console.log(o.id, o.data.loading); if(o.data.loading){ console.log('Run action when loading is false'); grid.setById(o.id, { loading: false }); } else{ console.log('Run action when loading is true'); grid.setById(o.id, { loading: true }); } //Update all grid cells grid.update(); //Update row /* grid.update({ type: 'row' }); */ //Update cell /* grid.update({ type: 'cell' }); */ } }); new FancyGrid({ renderTo: 'container', controllers: ['mycontrol'], width: 500, height: 400, dirtyEnabled: false, data: { items: data, fields: ['company', 'name', 'surname', 'age', 'loading'] }, defaults: { draggable: true, sortable: true }, columns: [{ index: 'company', title: 'Company', type: 'string', width: 100 }, { index: 'name', title: 'Name', type: 'string', width: 100 }, { index: 'surname', title: 'Sur Name', type: 'string', width: 100 }, { index: 'age', title: 'Age', type: 'number', width: 100 }, { width: 100, cls: 'my-column-action', index: 'loading', render: function(o){ o.value = []; if(o.data.loading){ o.value.push('<i class="button-status"><svg xmlns="http://www.w3.org/2000/svg" width="12.959999999999999" height="12.959999999999999" viewBox="0 0 54 54"><g><path d="M10.9,48.6c-1.6-1.3-2-3.6-0.7-5.3c1.3-1.6,3.6-2.1,5.3-0.8c0.8,0.5,1.5,1.1,2.4,1.5c7.5,4.1,16.8,2.7,22.8-3.4c1.5-1.5,3.8-1.5,5.3,0c1.4,1.5,1.4,3.9,0,5.3c-8.4,8.5-21.4,10.6-31.8,4.8C13,50.1,11.9,49.3,10.9,48.6z" fill="#888888"></path><path d="M53.6,31.4c-0.3,2.1-2.3,3.5-4.4,3.2c-2.1-0.3-3.4-2.3-3.1-4.4c0.2-1.1,0.2-2.2,0.2-3.3c0-8.7-5.7-16.2-13.7-18.5c-2-0.5-3.2-2.7-2.6-4.7s2.6-3.2,4.7-2.6C46,4.4,53.9,14.9,53.9,27C53.9,28.5,53.8,30,53.6,31.4z" fill="#888888"></path><path d="M16.7,1.9c1.9-0.8,4.1,0.2,4.8,2.2s-0.2,4.2-2.1,5c-7.2,2.9-12,10-12,18.1c0,1.6,0.2,3.2,0.6,4.7c0.5,2-0.7,4.1-2.7,4.6c-2,0.5-4-0.7-4.5-2.8C0.3,31.5,0,29.3,0,27.1C0,15.8,6.7,5.9,16.7,1.9z" fill="#888888"></path></g></svg></i>'); o.value.push('<span class="my-button">Stop</span>'); } else{ o.value.push('<span class="my-button">Click</span>'); } o.value = o.value.join(''); return o; } }] }); }); var data = [{ name: 'Ted', surname: 'Smith', company: 'Electrical Systems', age: 30 }, { name: 'Ed', surname: 'Johnson', company: 'Energy and Oil', loading: true, age: 35 }, { name: 'Sam', surname: 'Williams', company: 'Airbus', age: 38 }, { name: 'Alexander', surname: 'Brown', company: 'Renault', age: 24 }, { name: 'Nicholas', surname: 'Miller', company: 'Adobe', age: 33 }, { name: 'Andrew', surname: 'Thompson', company: 'Google', age: 28 }, { name: 'Ryan', surname: 'Walker', company: 'Siemens', age: 39 }, { name: 'John', surname: 'Scott', company: 'Cargo', age: 45 }, { name: 'James', surname: 'Phillips', company: 'Pro bugs', age: 30 }, { name: 'Brian', surname: 'Edwards', company: 'IT Consultant', age: 23 }, { name: 'Jack', surname: 'Richardson', company: 'Europe IT', age: 24 }, { name: 'Alex', surname: 'Howard', company: 'Cisco', age: 27 }, { name: 'Carlos', surname: 'Wood', company: 'HP', age: 36 }, { name: 'Adrian', surname: 'Russell', company: 'Micro Systems', age: 31 }, { name: 'Jeremy', surname: 'Hamilton', company: 'Big Machines', age: 30 }, { name: 'Ivan', surname: 'Woods', company: '', age: 24 }, { name: 'Peter', surname: 'West', company: 'Adobe', age: 26 }, { name: 'Scott', surname: 'Simpson', company: 'IBM', age: 29 }, { name: 'Lorenzo', surname: 'Tucker', company: 'Intel', age: 29 }, { name: 'Randy', surname: 'Grant', company: 'Bridges', age: 30 }, { name: 'Arthur', surname: 'Gardner', company: 'Google', age: 31 }, { name: 'Orlando', surname: 'Ruiz', company: 'Apple', age: 32 } ];
<script src="https://cdn.fancygrid.com/fancy.min.js"></script> <div id="container"></div>
.my-column-action .fancy-grid-cell-inner { margin-top: 5px; } .fancy-grid-cell .my-button { background-color: rgba(0,0,0,0.05); padding: 5px 10px; opacity: 0.75; border-radius: 3px; cursor: pointer; margin-right: 10px; box-sizing: border-box; line-height: 19px; color: gray; margin-top: 5px; margin-left: 5px; } @keyframes spinScale{0%{transform:rotate(0) scale(1)}50%{transform:rotate(360deg) scale(.9)}100%{transform:rotate(720deg) scale(1)}} .button-status { position: relative; top: 2px; } .button-status svg { margin-top: 1px -webkit-animation-name: spinScale; animation-name: spinScale; -webkit-animation-duration: 1800ms; animation-duration: 1800ms; -webkit-animation-timing-function: cubic-bezier(.785, .135, .15, .86); animation-timing-function: cubic-bezier(.785, .135, .15, .86); -webkit-animation-iteration-count: infinite; animation-iteration-count: infinite; shape-rendering: geometricprecision; }