From 1aa56ff2d29e8656abe9ae241cd1f3d2176afe1b Mon Sep 17 00:00:00 2001 From: Lauris Date: Mon, 8 Feb 2016 20:05:39 +0200 Subject: [PATCH] Release v0.4.3 --- bower.json | 2 +- dist/sensei-grid.css | 12 +++++++++- dist/sensei-grid.js | 52 +++++++++++++++++++++++++++------------- dist/sensei-grid.min.css | 2 +- dist/sensei-grid.min.js | 4 ++-- examples/index.html | 28 +++++++++------------- package.json | 2 +- src/sensei-editors.js | 2 -- 8 files changed, 63 insertions(+), 41 deletions(-) diff --git a/bower.json b/bower.json index eab896d..4f6aaca 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "sensei-grid", - "version": "0.4.2", + "version": "0.4.3", "homepage": "https://github.com/datazenit/sensei-grid", "authors": [ "Lauris " diff --git a/dist/sensei-grid.css b/dist/sensei-grid.css index 32ee573..4d6a43a 100644 --- a/dist/sensei-grid.css +++ b/dist/sensei-grid.css @@ -1,5 +1,5 @@ /** - * sensei-grid v0.4.2 + * sensei-grid v0.4.3 * Copyright (c) 2016 Lauris Dzilums * Licensed under MIT */ @@ -219,4 +219,14 @@ } .tt-suggestion p { margin: 0; +} + +.note-editor .note-resizebar { + display: none; +} +.note-editor.note-frame { + margin-bottom: 0; + border-style: none; + box-shadow: none; + -webkit-box-shadow: none; } \ No newline at end of file diff --git a/dist/sensei-grid.js b/dist/sensei-grid.js index 961a61d..356f6e2 100644 --- a/dist/sensei-grid.js +++ b/dist/sensei-grid.js @@ -1,5 +1,5 @@ /** - * sensei-grid v0.4.2 + * sensei-grid v0.4.3 * Copyright (c) 2016 Lauris Dzilums * Licensed under MIT */ @@ -1377,6 +1377,15 @@ } else { $(div).text(item[column.name]); } + + // custom style callback + if (_.isFunction(column.style)) { + var style = column.style(item[column.name], plugin); + + if (!_.isEmpty(style)) { + $(td).css(style); + } + } } // check if nowrap needs to be disabled @@ -1786,35 +1795,46 @@ this.getElement().css({width: $td.outerWidth() + 50}); }, getValue: function () { - return $(".summertime-wrapper", this.editor).code(); + var htmlVal = $(".summertime-wrapper", this.editor).summernote("code"); + return ("" + htmlVal).trim(); }, setValue: function (val) { - $(".summertime-wrapper", this.editor).destroy(); - $(".summertime-wrapper", this.editor).html(val); - - var grid = this.grid; $(".summertime-wrapper", this.editor).summernote({ focus: true, + height: 100, + disableResizeEditor: true, toolbar: [ ['style', ['bold', 'italic', 'underline', 'clear']], ['font', ['strikethrough']], + ['color', ['color']], ['fontsize', ['fontsize']] ], - onfocus: function () { - grid.preventEnter = true; - }, - onblur: function () { - grid.preventEnter = false; - }, - onkeydown: function (e) { - if (e.keyCode === 9) { - e.stopImmediatePropagation(); + callbacks: { + onKeydown: function (e) { + + // prevent enter + modifier keys in summernote + if (e.keyCode === 13 && (e.shiftKey || e.altKey || e.metaKey || e.ctrlKey)) { + e.preventDefault(); + return true; + } + + // allow only enter itself in summernote, prevent event to be triggered in grid + if (e.keyCode === 13) { + e.stopImmediatePropagation(); + } + + // prevent tab in summernote + if (e.keyCode === 9) { + e.preventDefault(); + return false; + } + } } }); - $(".summertime-wrapper", this.editor).code(val); + $(".summertime-wrapper", this.editor).summernote("code", val); } }); diff --git a/dist/sensei-grid.min.css b/dist/sensei-grid.min.css index 29375a1..2d0d2a0 100644 --- a/dist/sensei-grid.min.css +++ b/dist/sensei-grid.min.css @@ -1 +1 @@ -.sensei-grid{outline:0}.sensei-grid.no-select{-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.sensei-grid-table-wrapper>table{empty-cells:show;margin-bottom:0}.sensei-grid-table-wrapper>table td,.sensei-grid-table-wrapper>table th{white-space:nowrap;overflow:hidden}.sensei-grid-table-wrapper>table td>div,.sensei-grid-table-wrapper>table th>div{overflow:hidden;border:1px solid transparent}.sensei-grid-table-wrapper>table tr div::after{content:'\00a0'}.sensei-grid-table-wrapper>table thead{background:#F5F5F5}.sensei-grid-table-wrapper>table thead>tr>th{border-bottom-width:1px;font-weight:700}.sensei-grid-table-wrapper>table .activeCell{background:#d0e9f8;border:1px double #39f}.sensei-grid-table-wrapper>table .activeRow{background:#eff7fc}.sensei-grid-table-wrapper>table .sensei-grid-dirty-row{color:gray}.sensei-grid-editor{position:absolute;background:#fff;border:2px solid #39f;box-shadow:2px 2px 2px rgba(0,0,0,.1)}.sensei-grid-editor input[type=text],.sensei-grid-editor select,.sensei-grid-editor textarea{border:none;width:100%;height:100%;box-shadow:none;outline:0;padding:5px 6px;background:#fff}.sensei-grid-editor input[type=checkbox]{margin:8px 0 0 8px;font-size:20px;display:inline-block;padding:0;line-height:inherit}.sensei-grid-editor textarea{vertical-align:top}.sensei-grid-date-editor .picker__holder{min-width:300px;margin-left:-2px;margin-top:2px}.sensei-grid-date-editor .picker{font-size:14px}.sensei-grid-disabled-editor{border-color:#ADADAD}.sensei-grid-disabled-editor input[type=text]{cursor:not-allowed;background:#FAFAFA}.sensei-grid th.sensei-grid-sortable{cursor:pointer;user-select:none;-webkit-user-select:none;-moz-user-select:none;padding-right:22px;position:relative}.sensei-grid th.sensei-grid-sortable .glyphicon{font-size:10px;color:#aaa;position:absolute;right:7px;top:12px}.sensei-grid-basic-row-actions{position:absolute;right:0;width:auto;background:#fff;margin-left:5px}.sensei-grid-basic-row-actions .btn{margin-right:2px}.sensei-grid .selectable,.sensei-grid td.row-action{width:1%;white-space:nowrap}.sensei-grid td.selectable input,.sensei-grid th.selectable input{margin-left:2px}.sensei-grid .activeRow.selectedRow,.sensei-grid .selectedRow{background-color:#FFFFE0}.sensei-grid-toolbar{background:#F5F5F5;padding:5px 10px;border:1px solid #DDD;vertical-align:top}.sensei-grid-toolbar .toolbar-label{display:inline-block;font-size:12px;padding-left:10px}.sensei-grid-toolbar .toolbar-label:first-child{padding-left:0}.twitter-typeahead{width:100%}.tt-hint,.tt-query{width:396px;height:30px;padding:8px 12px;font-size:14px;border:2px solid #ccc;-webkit-border-radius:8px;-moz-border-radius:8px;border-radius:8px;outline:0}.tt-query{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.tt-hint{color:#999}.tt-menu{width:300px;max-height:150px;overflow-y:auto;margin:3px 0 3px -2px;padding:4px 0;background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.tt-suggestion{padding:4px 10px;font-size:14px}.tt-suggestion:hover{cursor:pointer;color:#000;background-color:#d0e9f8}.tt-suggestion.tt-cursor{color:#000;background-color:#d0e9f8}.tt-suggestion p{margin:0} \ No newline at end of file +.sensei-grid{outline:0}.sensei-grid.no-select{-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.sensei-grid-table-wrapper>table{empty-cells:show;margin-bottom:0}.sensei-grid-table-wrapper>table td,.sensei-grid-table-wrapper>table th{white-space:nowrap;overflow:hidden}.sensei-grid-table-wrapper>table td>div,.sensei-grid-table-wrapper>table th>div{overflow:hidden;border:1px solid transparent}.sensei-grid-table-wrapper>table tr div::after{content:'\00a0'}.sensei-grid-table-wrapper>table thead{background:#F5F5F5}.sensei-grid-table-wrapper>table thead>tr>th{border-bottom-width:1px;font-weight:700}.sensei-grid-table-wrapper>table .activeCell{background:#d0e9f8;border:1px double #39f}.sensei-grid-table-wrapper>table .activeRow{background:#eff7fc}.sensei-grid-table-wrapper>table .sensei-grid-dirty-row{color:gray}.sensei-grid-editor{position:absolute;background:#fff;border:2px solid #39f;box-shadow:2px 2px 2px rgba(0,0,0,.1)}.sensei-grid-editor input[type=text],.sensei-grid-editor select,.sensei-grid-editor textarea{border:none;width:100%;height:100%;box-shadow:none;outline:0;padding:5px 6px;background:#fff}.sensei-grid-editor input[type=checkbox]{margin:8px 0 0 8px;font-size:20px;display:inline-block;padding:0;line-height:inherit}.sensei-grid-editor textarea{vertical-align:top}.sensei-grid-date-editor .picker__holder{min-width:300px;margin-left:-2px;margin-top:2px}.sensei-grid-date-editor .picker{font-size:14px}.sensei-grid-disabled-editor{border-color:#ADADAD}.sensei-grid-disabled-editor input[type=text]{cursor:not-allowed;background:#FAFAFA}.sensei-grid th.sensei-grid-sortable{cursor:pointer;user-select:none;-webkit-user-select:none;-moz-user-select:none;padding-right:22px;position:relative}.sensei-grid th.sensei-grid-sortable .glyphicon{font-size:10px;color:#aaa;position:absolute;right:7px;top:12px}.sensei-grid-basic-row-actions{position:absolute;right:0;width:auto;background:#fff;margin-left:5px}.sensei-grid-basic-row-actions .btn{margin-right:2px}.sensei-grid .selectable,.sensei-grid td.row-action{width:1%;white-space:nowrap}.sensei-grid td.selectable input,.sensei-grid th.selectable input{margin-left:2px}.sensei-grid .activeRow.selectedRow,.sensei-grid .selectedRow{background-color:#FFFFE0}.sensei-grid-toolbar{background:#F5F5F5;padding:5px 10px;border:1px solid #DDD;vertical-align:top}.sensei-grid-toolbar .toolbar-label{display:inline-block;font-size:12px;padding-left:10px}.sensei-grid-toolbar .toolbar-label:first-child{padding-left:0}.twitter-typeahead{width:100%}.tt-hint,.tt-query{width:396px;height:30px;padding:8px 12px;font-size:14px;border:2px solid #ccc;-webkit-border-radius:8px;-moz-border-radius:8px;border-radius:8px;outline:0}.tt-query{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.tt-hint{color:#999}.tt-menu{width:300px;max-height:150px;overflow-y:auto;margin:3px 0 3px -2px;padding:4px 0;background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.tt-suggestion{padding:4px 10px;font-size:14px}.tt-suggestion:hover{cursor:pointer;color:#000;background-color:#d0e9f8}.tt-suggestion.tt-cursor{color:#000;background-color:#d0e9f8}.tt-suggestion p{margin:0}.note-editor .note-resizebar{display:none}.note-editor.note-frame{margin-bottom:0;border-style:none;box-shadow:none;-webkit-box-shadow:none} \ No newline at end of file diff --git a/dist/sensei-grid.min.js b/dist/sensei-grid.min.js index 37e8a87..ca4f15b 100644 --- a/dist/sensei-grid.min.js +++ b/dist/sensei-grid.min.js @@ -1,6 +1,6 @@ /** - * sensei-grid v0.4.2 + * sensei-grid v0.4.3 * Copyright (c) 2016 Lauris Dzilums * Licensed under MIT */ -!function(a){a.fn.grid=function(b,c,d,e){var f=this,g={emptyRow:!1,sortable:!1,tableClass:"table table-bordered table-condensed",disableKeys:[],moveOnRowRemove:!0,removable:!0,readonly:!1,emptyGridMessage:null,skipOnDuplicate:null,initialSort:null,selectable:!1,toolbar:!1,getContainer:null};f.name=null,f.isEditing=!1,f.$prevRow=null,f.editorProps={},f.preventEnter=!1,f.$lastActiveCell=null,a.fn.between=function(b,c){var d=a(this).index(b),e=a(this).index(c);return e>=d?this.slice(d,e+1):this.slice(e,d+1)};var h=function(){return navigator.userAgent.search("Firefox")>-1},i=function(a){if(h()){var b=a.get(0),c=b.style.display;b.style.display="none",b.offsetHeight,b.style.display=c}},j=function(a){return a.replace(/\r\n/g,"\n")},k=function(){if(document.selection&&document.selection.empty)document.selection.empty();else if(window.getSelection){var a=window.getSelection();a.removeAllRanges()}};return f.setActiveCell=function(b){f.config.readonly||(f.$prevRow=a(".sensei-grid-tbody>tr>.activeCell",f.$el).parent("tr"),f.$prevRow.removeClass("activeRow"),a(".sensei-grid-tbody>tr>.activeCell",f.$el).removeClass("activeCell"),b.addClass("activeCell"),b.parent("tr").addClass("activeRow"),i(b.parent("tr")),f.events.trigger("cell:select",b),f.$prevRow.index()!==b.parent("tr").index()&&(f.events.trigger("row:select",b.parent("tr")),f.$prevRow.hasClass("sensei-grid-dirty-row")&&f.isEditing&&(f.saveEditor(!0),f.events.trigger("row:save",f.getRowData(f.$prevRow),f.$prevRow,"row:select"))),f.$lastActiveCell=b)},a.fn.cellPosition=function(){var b=a(this).position();return h()&&(b.left-=1,b.top-=1),b},f.events={_events:{}},f.events.on=function(a,b,c){_.has(this._events,a)||(this._events[a]=[]),this._events[a].push({callback:b,context:c})},f.events.trigger=function(a){var b=Array.prototype.slice.call(arguments,1);if(_.has(this._events,a)){var c=this._events[a];_.each(c,function(a){var c=_.bind(a.callback,a.context);c.apply(this,b)})}},f.events.off=function(a){_.has(this._events,a)&&delete this._events[a]},f.isSillyFirefox=function(){if(!f.$el.find("td:first").position())return!1;var a=f.$el.position().left,b=f.$el.find("td:first").position().left;return b!==a},f.registerEditor=function(a){var b=new a(f);f.editors[b.name]=b},f.registerRowAction=function(a){var b=new a(f);f.rowActions[b.name]=b},f.render=function(){if(f.rowElements={},_.each(f.rowActions,function(a){a.initialize();var b="
"+a.rowElement()+"
";f.rowElements[a.name]=b}),f.renderBaseTable(),f.renderColumns(),f.renderData(),f.config.sortable&&_.isObject(f.config.initialSort)){var b=f.config.initialSort.col,c=f.$el.find("th").filter(function(){return a(this).data("name")===b});c&&f.showSortingIndicator(c,f.config.initialSort.order)}_.each(f.editors,function(a){a.initialize(),a.render(),a.getElement().hide()}),f.bindEvents()},f.updateData=function(a){f.renderData(a),f.bindEvents()},f.destroy=function(){f.unbindEvents(),f.$el.remove()},f.addEdit=function(a){f.editPointer===f.edits.length-1?(f.editPointer+=1,f.edits.push(a)):(f.editPointer+=1,f.edits.splice(f.editPointer),f.edits.push(a))},f.redo=function(){return f.editPointer+1>=f.edits.length?[]:(f.editPointer+=1,f.edits[f.editPointer])},f.undo=function(){if(f.editPointer<0)return[];var a=f.edits[f.editPointer];return f.editPointer-=1,a},f.bindEvents=function(){f.unbindEvents(),f.$el.on("click.grid",".sensei-grid-tbody>tr>td",f.clickCell),f.$el.on("dblclick.grid",".sensei-grid-tbody>tr>td",f.dblClickCell),f.$el.on("blur.grid",f.blur),f.$el.on("keydown.grid",f.keydown),f.$el.on("click.grid",".sensei-grid-thead .sensei-grid-sortable",f.sort),f.$el.on("change.grid",".sensei-grid-tbody td.selectable :checkbox",f.selectCell),f.$el.on("change.grid",".sensei-grid-thead th.selectable :checkbox",f.selectAll),a(document).on("click.grid",f.editorBlur)},f.unbindEvents=function(){f.$el.off("click.grid",".sensei-grid-tbody>tr>td"),f.$el.off("dblclick.grid",".sensei-grid-tbody>tr>td"),f.$el.off("blur.grid"),f.$el.off("keydown.grid"),f.$el.off("click.grid",".sensei-grid-thead .sensei-grid-sortable"),f.$el.off("change.grid",".sensei-grid-tbody td.selectable :checkbox"),f.$el.off("change.grid",".sensei-grid-thead th.selectable :checkbox"),a(document).off("click.grid")},f.showSortingIndicator=function(b,c){var d;return f.$el.find("thead th.selectable :checkbox").prop("checked",!1),f.$el.find("tbody td.selectable :checkbox").prop("checked",!1),f.$el.find("tbody tr.selectedRow").removeClass("selectedRow"),f.$el.find("th.sensei-grid-sortable .glyphicon").remove(),"desc"===c||b.data("order")&&"asc"===b.data("order")?(d="desc",b.append(a("").addClass("glyphicon glyphicon-chevron-up"))):(d="asc",b.append(a("").addClass("glyphicon glyphicon-chevron-down"))),c&&(d=c),b.data("order",d),d},f.sort=function(){var b=a(this).data("name"),c=f.showSortingIndicator(a(this),c);f.events.trigger("column:sort",b,c,a(this))},f.editorBlur=function(b){f.getActiveCell().length>0&&0===f.$el.has(a(b.target)).length&&(f.exitEditor(),f.deactivateCell())},f.hideEditors=function(){a(".sensei-grid-editor",f.$el).hide()},f.blur=function(){if(f.getActiveCell().length>0&&!f.isEditing){var a=f.getActiveCell();f.exitEditor(),f.isEditing=!1,f.deactivateCell(),i(a.parent("tr"))}},f.parsers={},f.parsers.string=function(a){return a.toString()},f.parsers["int"]=function(a){return parseInt(a)},f.parsers["float"]=function(a){return parseFloat(a)},f.getCellData=function(a){if(!a||0===a.length)return null;var b=a.text(),c=f.getCellType(a);return _.has(f.parsers,c)&&(b=f.parsers[c](b)),b},f.getCellColumn=function(a){return a.data("column")},f.getCellType=function(a){return a.data("type")},f.getCellStatus=function(a){return!!a.data("saved")},f.getCellDataByIndex=function(a,b){var c=f.getRowByIndex(a),d=f.getCellFromRowByIndex(c,b);return f.getCellData(d)},f.getCellDataByKey=function(a,b){var c=f.getRowByIndex(a),d=f.getCellFromRowByKey(c,b);return f.getCellData(d)},f.getCellFromRowByIndex=function(a,b){var c=a.find("td").eq(b);return c},f.getCellFromRowByKey=function(b,c){var d=b.find("td").filter(function(){return a(this).data("column")===c});return d},f.getCellRow=function(a){return a.parent("tr")},f.getRowCellsByIndex=function(a){return f.getRowByIndex(a).find("td")},f.getRowCells=function(a){return a.find("td:not(.selectable)")},f.getRowByIndex=function(a){var b=f.$el.find(".sensei-grid-tbody>tr").eq(a);return b},f.getRowDataByIndex=function(a){var b=f.getRowByIndex(a);return f.getRowData(b)},f.getRowData=function(b){if(!b||0===b.length)return null;var c=f.getRowCells(b),d={};return c.each(function(){d[f.getCellColumn(a(this))]=f.getCellData(a(this))}),d},f.getRows=function(){return f.$el.find(".sensei-grid-tbody>tr")},f.getSelectedRows=function(){return f.$el.find(".sensei-grid-tbody>tr.selectedRow")},f.getGridData=function(){var b=f.getRows();return b.map(function(){return f.getRowData(a(this))}).get()},f.getActiveCell=function(){return f.isEditing&&f.activeEditor&&f.activeEditor.activeCell?f.activeEditor.activeCell:a("td.activeCell",f.$el)},f.setRowSaved=function(b){b.removeClass("sensei-grid-dirty-row").removeClass("sensei-grid-empty-row"),b.find(">td").data("saved",!0),b.find(">td.selectable").html(a(""))},f.setRowDirty=function(a){a.addClass("sensei-grid-dirty-row").removeClass("sensei-grid-empty-row"),a.find(">td").data("saved",!1)},f.deactivateCell=function(){var a=f.getActiveCell();a.removeClass("activeCell"),a.parent("tr").removeClass("activeRow"),f.events.trigger("cell:deactivate",a)},f.clearActiveCell=function(){var b=f.getActiveCell(),c=f.getCellData(b);a(">div",b).empty(),f.events.trigger("cell:clear",c,b)},f.removeRow=function(a,b){if(!f.config.removable)return!1;var c=a.index();if(a.hasClass("sensei-grid-empty-row"))return!1;f.config.moveOnRowRemove&&f.moveDown();var d=f.getRowData(a);f.events.trigger("row:remove",d,c,a,b),a.remove()},f.removeActiveRow=function(){var b=f.getSelectedRows();if(b.length>0)return void b.each(function(){f.removeRow(a(this))});var c=f.getActiveCell();if(0===c.length)return!1;var d=f.getCellRow(c);return f.removeRow(d),!0},f.duplicateActiveRow=function(){var b=f.getActiveCell();if(!b)return!1;var c=f.getCellRow(b);if(c.hasClass("sensei-grid-empty-row"))return!1;var d=f.getRowData(c);_.isEmpty(f.config.skipOnDuplicate)||(d=_.omit(d,f.config.skipOnDuplicate));var e=a(f.renderRow(d,!1,!0));return e.insertAfter(c),f.moveDown(),f.events.trigger("row:duplicate",e),!0},f.moveRight=function(){var b=f.getActiveCell();if(b.next().length>0)f.setActiveCell(b.next());else{var c=b.parent("tr").next();c.length>0&&f.setActiveCell(a("td:first",c))}},f.moveUp=function(){var b=f.getActiveCell(),c=b.parent("tr").prev();if(c.length>0){var d=b.index(),e=a("td",c).eq(d);f.setActiveCell(e.length>0?e:a("td:last",c))}},f.moveLeft=function(){var b=f.getActiveCell();if(b.prev().length>0)f.setActiveCell(b.prev());else{var c=b.parent("tr").prev();c.length>0&&f.setActiveCell(a("td:last",c))}},f.moveDown=function(){var b=f.getActiveCell(),c=b.parent("tr").next();if(c.length>0){var d=b.index(),e=a("td",c).eq(d);f.setActiveCell(e.length>0?e:a("td:first",c))}},f.scrollIntoView=function(a,b){var c=50,d=0,e=0;b.offset()&&(d=b.offset().top+b.scrollTop(),e=b.offset().left+b.scrollLeft()),b.scrollTop(a.offset().top-d-c),b.scrollLeft(a.offset().left-e-c)},f.move=function(b){var c="move"+b.charAt(0).toUpperCase()+b.substr(1);if(_.has(f,c)){f[c](),f.isEditing&&f.saveEditor();var d=f.getActiveCell(),e=a(window),g={};f.config.getContainer&&(e=f.config.getContainer(),g={viewport:e}),a.fn.isInViewport&&0===d.isInViewport(g).length&&f.scrollIntoView(d,e),f.isEditing&&f.editCell()}else console.warn("move method not found",c)},f.editCell=function(){f.config.readonly||f.showEditor()},f.getEditor=function(){return f.activeEditor},f.getEditorInstance=function(){var a=f.getActiveCell(),b=a.data("editor");if(_.isFunction(b)&&(b=b(f)),b&&_.has(f.editors,b)){var c=f.getCellColumn(a);return _.has(f.editorProps,c)&&(f.editors[b].props=f.editorProps[c]),f.editors[b]}return console.info("Editor not found, skipping cell: "+b),!1},f.saveEditor=function(b){if(f.isEditing&&f.activeEditor){var c=f.getActiveCell(),d=f.activeEditor.getValue();if(j(d)!==j(c.text())){var e={previousState:f.getCellData(c),currentState:d,row:f.getRowData(f.getCellRow(c)).id,column:c.index()},g=c.data("allowHTML");f.addEdit(e),c.html(g?a("
").html(d):a("
").text(d));var h={};h[c.data("column")]=d,f.events.trigger("editor:save",h,c);var i=c.parent("tr");i.hasClass("sensei-grid-empty-row")&&(i.removeClass("sensei-grid-empty-row").addClass("sensei-grid-dirty-row"),f.assureEmptyRow())}}!b&&f.activeEditor&&f.getEditor().hide()},f.assureEmptyRow=function(){if(f.config.emptyRow&&0===f.$el.find(".sensei-grid-tbody>tr.sensei-grid-empty-row").length){var a=f.$el.find(".sensei-grid-tbody"),b=f.renderRow(null,!1);a.append(b)}},f.exitEditor=function(a){var b=f.getActiveCell();if(f.isEditing&&f.activeEditor)if(a)f.getEditor().hide();else{f.saveEditor();var c=b.parent("tr");c.hasClass("sensei-grid-dirty-row")&&f.isEditing&&f.events.trigger("row:save",f.getRowData(c),c,"editor:close")}f.isEditing&&(f.setActiveCell(b),f.$el.focus()),f.isEditing=!1},f.moveEditor=function(){f.isEditing&&(f.showEditor(),f.editCell())},f.selectRow=function(a,b,c){if(f.config.selectable){var d=a.find(".selectable");f.selectCell(d,b,c)}},f.selectCell=function(b,c,d){if(a(this)&&a(this).is("input"))b=a(this).parents("td.selectable");else{var e=b.find(":checkbox");c?e.prop("checked",!0):d?e.prop("checked",!1):e.prop("checked",!e.prop("checked"))}b.parent().hasClass("sensei-grid-empty-row")||(c?b.parent().addClass("selectedRow"):d?b.parent().removeClass("selectedRow"):b.parent().toggleClass("selectedRow"),b.parent().hasClass("selectedRow")?f.events.trigger("row:mark",b.parent()):f.events.trigger("row:unmark",b.parent()))},f.selectAll=function(){var b=!0,c=!1,d=f.$el.find("thead th.selectable :checkbox");d&&!d.is(":checked")&&(b=!1,c=!0);var e=f.getRows();e.each(function(){f.selectRow(a(this),b,c)})},f.showEditor=function(){var a=f.getEditorInstance();if(!a)return f.exitEditor(),void(f.isEditing=!0);f.activeEditor=a;var b=f.activeEditor.getElement(),c=f.getActiveCell();f.activeEditor.activeCell=c,f.isEditing=!0,f.activeEditor.show(),b.css(c.cellPosition()),f.activeEditor.setDimensions(c);var d=c.data("column"),e=c.data("allowHTML"),g=e?c.find(">div").html():c.text();f.activeEditor.setValue(g),b.css(c.cellPosition());var h={};return h[d]=g,f.events.trigger("editor:load",h,c),b},f.keydown=function(b){var c=!0,d=[8,9,13,27,32,37,38,39,40,65,68,89,90],e=[8,32,37,38,39,40,65,68,89,90],g=[8],h=f.getActiveCell();if((0!==f.getActiveCell().length||f.isEditing||_.contains(g,b.which))&&_.contains(d,b.which)){if(!f.isEditing&&_.contains(f.config.disableKeys,b.which))return void b.preventDefault();if(!(f.isEditing&&f.getEditor()&&_.contains(e,b.which))){b.preventDefault();var i,j;switch(b.which){case 37:f.move("left");break;case 38:b.shiftKey&&f.config.selectable&&f.selectRow(h.parent(),!0),f.move("up"),i=f.getActiveCell(),b.shiftKey&&f.config.selectable&&f.selectRow(i.parent(),!0);break;case 39:f.move("right");break;case 40:b.shiftKey&&f.config.selectable&&f.selectRow(h.parent(),!0),f.move("down"),i=f.getActiveCell(),b.shiftKey&&f.config.selectable&&f.selectRow(i.parent(),!0);break;case 13:var k=!1,l=!1;if(h&&h.data("action")){var m=h.data("action-name");f.rowActions[m]&&f.rowActions[m].trigger({data:{$activeCell:h}}),k=!0}h&&h.hasClass("selectable")&&(f.selectCell(h),l=!0),f.isEditing?b.ctrlKey&&b.shiftKey?f.move("up"):b.ctrlKey&&!b.shiftKey?f.move("down"):f.preventEnter||k||l||f.exitEditor():k||l||f.editCell();break;case 27:if(f.isEditing)f.exitEditor(!0);else{var n=f.getSelectedRows();n&&n.length>0?(j=f.$el.find("thead th.selectable :checkbox"),j.prop("checked",!1),f.selectAll()):f.$el.blur()}break;case 9:f.move(b.shiftKey?"left":"right");break;case 32:h&&f.config.selectable&&f.selectRow(h.parent());break;case 8:(b.ctrlKey||b.metaKey)&&f.removeActiveRow();break;case 65:f.config.selectable&&(b.ctrlKey||b.metaKey||b.shiftKey)&&(j=f.$el.find("thead th.selectable :checkbox"),j.prop("checked",!j.prop("checked")),f.selectAll());break;case 90:if(b.ctrlKey||b.metaKey){var o=f.undo();if("row"in o&&"column"in o){var p=f.getRowByIndex(o.row-1),q=f.getCellFromRowByIndex(p,o.column);q.html(a("
").text(o.previousState));var r={};r[q.data("column")]=o.previousState,f.events.trigger("editor:save",r,q)}}break;case 89:if(b.ctrlKey||b.metaKey){var s=f.redo();if("row"in s&&"column"in s){var t=f.getRowByIndex(s.row-1),u=f.getCellFromRowByIndex(t,s.column);u.html(a("
").text(s.currentState));var v={};v[u.data("column")]=s.currentState,f.events.trigger("editor:save",v,u)}}break;case 68:(b.ctrlKey||b.shiftKey||b.metaKey)&&f.duplicateActiveRow()}c&&b.preventDefault()}}},f.clickCell=function(b){a(this).hasClass("selectable")||b.preventDefault();var c;if(f.getActiveCell()&&(c=f.getActiveCell().parent()),f.isEditing&&f.exitEditor(),f.setActiveCell(a(this)),f.config.selectable&&b.shiftKey){k();var d=a(this).parent();if(c&&d){var e=f.$el.find("tbody>tr").between(c,d);e.each(function(){a(b.target).is(":checkbox")&&a(this).is(d)||f.selectCell(a(this).find("td.selectable"),!0)})}}},f.dblClickCell=function(b){b.preventDefault(),f.setActiveCell(a(this)),f.editCell()},f.renderColumns=function(){var b=a("thead",f.$el),c=document.createElement("tr");if(f.config.selectable){var d=a("
")[0];c.appendChild(d)}_.each(f.columns,function(b){var d=document.createElement("th"),e=document.createElement("div");f.config.sortable&&(d.className="sensei-grid-sortable"),a(e).text(b.display?b.display:b.name),d.appendChild(e),a(d).data("name",b.name),a(d).data("type",b.type||"string"),a(d).data("editor",b.editor||"BasicEditor"),b.editorProps&&(f.editorProps[b.name]=b.editorProps),c.appendChild(d)}),b.append(c)},f.renderData=function(b){var c=a(".sensei-grid-tbody",f.$el);if(b&&(f.data=b),c.html(null),_.each(f.data,function(a){var b=f.renderRow(a,!0);c.append(b)}),f.config.emptyRow){var d=f.renderRow(null,!1);c.append(d)}if(_.isEmpty(f.data)&&f.config.emptyGridMessage){var e=a("").text(f.config.emptyGridMessage),g=a("").append(e);c.html(g)}},f.renderRow=function(b,c,d){var e=document.createElement("tr");if(c||(e.className="sensei-grid-empty-row"),d&&(e.className="sensei-grid-dirty-row"),f.config.selectable){var g=a("
");if(c){var h=a("");g.find("div").append(h)}g.prop("class","selectable"),e.appendChild(g[0])}return _.each(f.columns,function(d){var f=document.createElement("td"),g=document.createElement("div");_.has(b,d.name)&&(d.allowHTML&&d.allowHTML===!0?a(g).html(b[d.name]):a(g).text(b[d.name])),d.wrap===!0&&a(f).css("white-space","normal"),a(f).data("allowHTML",d.allowHTML),a(f).data("column",d.name),a(f).data("type",d.type||"string"),a(f).data("editor",d.editor||"BasicEditor"),a(f).data("saved",c),f.appendChild(g),e.appendChild(f)}),_.isEmpty(f.rowElements)||_.each(f.rowElements,function(b,c){var d=document.createElement("td");d.innerHTML=b,a(d).data("action",!0),a(d).data("action-name",c),a(d).addClass("row-action");var g=f.rowActions[c];g.triggerEvent&&g.triggerEvent.event&&g.triggerEvent.selector&&a(d).on(g.triggerEvent.event,g.triggerEvent.selector,{$activeCell:a(d)},g.trigger),e.appendChild(d)}),e},f.renderBaseTable=function(){var b=document.createElement("table"),c=document.createElement("thead"),d=document.createElement("tbody");d.className="sensei-grid-tbody",c.className="sensei-grid-thead",b.className=f.config.tableClass,b.appendChild(c),b.appendChild(d),f.$el.html(a("
").html(b)),f.$el.attr("tabindex",-1),f.config.toolbar&&f.$el.append(a("
").text("Empty toolbar."))},f.init=function(b,c,d,e){return f.config=a.extend({},g,d),f.data=b,f.columns=c,f.name=e,f.$el=a(this),f.editors={},f.rowActions={},f.edits=[],f.editPointer=-1,f},f.init(b,c,d,e)}}(jQuery),function(a){var b=this,c=function(a){this.grid=a};c.extend=function(a){var b,c=this;b=function(){return c.apply(this,arguments)};var d=function(){this.constructor=b};return d.prototype=c.prototype,b.prototype=new d,a&&_.extend(b.prototype,a),b.__super__=c.prototype,b},c.prototype.getElement=function(){return a(this.editor)},c.prototype.initialize=function(){},c.prototype.render=function(){},c.prototype.show=function(){this.getElement().show()},c.prototype.hide=function(){this.getElement().hide(),this.grid.activeEditor.activeCell=null,this.grid.activeEditor=null},c.prototype.setDimensions=function(a){this.getElement().css({width:a.outerWidth()+1,height:a.outerHeight()+1})},c.prototype.getValue=function(){throw Error("Editor.getValue not implemented")},c.prototype.setValue=function(){throw Error("Editor.setValue not implemented")},b.Editor=c,b.BasicEditor=c.extend({types:[],name:"BasicEditor",render:function(){if(!this.editor){this.editor=document.createElement("div"),this.editor.className="sensei-grid-editor sensei-grid-basic-editor";var a=document.createElement("input");a.setAttribute("type","text"),this.editor.appendChild(a),this.grid.$el.append(this.editor)}},getValue:function(){return a("input",this.editor).val()},setValue:function(b){a("input",this.editor).val(b).focus()}}),b.TextareaEditor=c.extend({types:[],name:"TextareaEditor",render:function(){if(!this.editor){this.editor=document.createElement("div"),this.editor.className="sensei-grid-editor sensei-grid-textarea-editor";var a=document.createElement("textarea");this.editor.appendChild(a),this.grid.$el.append(this.editor)}},setDimensions:function(a){this.getElement().find("textarea").css({width:a.outerWidth()+50,height:a.outerHeight()+50})},getValue:function(){return a("textarea",this.editor).val()},setValue:function(b){a("textarea",this.editor).val(b).focus()}}),b.BooleanEditor=c.extend({types:[],name:"BooleanEditor",render:function(){if(!this.editor){this.editor=document.createElement("div"),this.editor.className="sensei-grid-editor sensei-grid-boolean-editor";var b=a("
",{"class":"sensei-grid-checkbox-wrapper"});b.append(a("",{type:"checkbox"})),a(this.editor).append(b),this.grid.$el.append(this.editor)}},setDimensions:function(a){var b={width:a.outerWidth()-3,height:a.outerHeight()-3,background:"white"};this.getElement().find(".sensei-grid-checkbox-wrapper").css(b)},getValue:function(){return a("input",this.editor).is(":checked")?"true":"false"},setValue:function(b){"true"===b.toLowerCase()?a("input",this.editor).prop("checked",!0):a("input",this.editor).prop("checked",!1),a("input",this.editor).focus()}}),b.SelectEditor=c.extend({types:[],name:"SelectEditor",render:function(){if(!this.editor){this.editor=document.createElement("div"),this.editor.className="sensei-grid-editor sensei-grid-custom-editor";var a=document.createElement("select");this.editor.appendChild(a),this.grid.$el.append(this.editor)}},renderValues:function(){if(_.has(this.props,"values")){var a=this.getElement().find("select");a.html(null),_.each(this.props.values,function(b){var c=document.createElement("option");c.value=b,c.innerHTML=b,a.append(c)})}},show:function(){this.renderValues(),this.getElement().show()},getValue:function(){return a("select",this.editor).val()},setValue:function(b){a("select>option",this.editor).filter(function(){return a(this).val()===b}).attr("selected","selected"),a("select").focus()}});var d=function(b){return function(c,d){var e,f;e=[],f=new RegExp(c,"i"),a.each(b,function(a,b){f.test(b)&&e.push(b)}),d(e)}};b.AutocompleteEditor=c.extend({types:[],name:"AutocompleteEditor",render:function(){if(!this.editor){this.editor=document.createElement("div"),this.editor.className="sensei-grid-editor sensei-grid-ac-editor";var a=document.createElement("input");a.setAttribute("type","text"),this.editor.appendChild(a),this.grid.$el.append(this.editor)}},show:function(){this.getElement().show(),a("input",this.getElement()).typeahead({hint:!1,highlight:!1,minLength:0},{name:"values",source:d(this.props.values),limit:100})},hide:function(){a("input",this.getElement()).typeahead("close"),a("input",this.getElement()).typeahead("destroy"),this.getElement().hide(),this.grid.activeEditor.activeCell=null,this.grid.activeEditor=null},setDimensions:function(a){this.getElement().css({width:a.outerWidth()+1,height:a.outerHeight()+1})},getValue:function(){return a("input",this.editor).typeahead("val")},setValue:function(b){a("input",this.editor).typeahead("val",b).focus()}}),b.DateEditor=c.extend({types:[],name:"DateEditor",datepicker:null,render:function(){if(!this.editor){this.editor=document.createElement("div"),this.editor.className="sensei-grid-editor sensei-grid-date-editor";var b=a("
",{"class":"sensei-grid-date-wrapper"});b.append(a("",{type:"text","class":"datepicker"})),a(this.editor).append(b),this.grid.$el.append(this.editor),a(".datepicker").pickadate({format:"ddd mmm dd yyyy",editable:!0,today:!1,clear:!1,close:!1}),this.datepicker=a(".datepicker").pickadate("picker")}},show:function(){this.getElement().show(),this.datepicker&&this.datepicker.open()},getValue:function(){return a("input",this.editor).val()},setValue:function(b){a("input",this.editor).val(b).focus()}}),b.DisabledEditor=c.extend({types:[],name:"DisabledEditor",render:function(){if(!this.editor){this.editor=document.createElement("div"),this.editor.className="sensei-grid-editor sensei-grid-disabled-editor";var b=a("",{type:"text",readOnly:!0});a(this.editor).append(b),this.grid.$el.append(this.editor)}},getValue:function(){return a("input",this.editor).val()},setValue:function(b){a("input",this.editor).val(b).focus()}}),b.RichEditor=c.extend({types:[],name:"RichEditor",render:function(){if(!this.editor){this.editor=a("
",{"class":"sensei-grid-editor sensei-grid-rich-editor"});var b=a("
",{"class":"summertime-wrapper"});this.editor.append(b),this.grid.$el.append(this.editor)}},setDimensions:function(a){this.getElement().css({width:a.outerWidth()+50})},getValue:function(){return a(".summertime-wrapper",this.editor).code()},setValue:function(b){a(".summertime-wrapper",this.editor).destroy(),a(".summertime-wrapper",this.editor).html(b);var c=this.grid;a(".summertime-wrapper",this.editor).summernote({focus:!0,toolbar:[["style",["bold","italic","underline","clear"]],["font",["strikethrough"]],["fontsize",["fontsize"]]],onfocus:function(){c.preventEnter=!0},onblur:function(){c.preventEnter=!1},onkeydown:function(a){9===a.keyCode&&a.stopImmediatePropagation()}}),a(".summertime-wrapper",this.editor).code(b)}})}(jQuery); \ No newline at end of file +!function(a){a.fn.grid=function(b,c,d,e){var f=this,g={emptyRow:!1,sortable:!1,tableClass:"table table-bordered table-condensed",disableKeys:[],moveOnRowRemove:!0,removable:!0,readonly:!1,emptyGridMessage:null,skipOnDuplicate:null,initialSort:null,selectable:!1,toolbar:!1,getContainer:null};f.name=null,f.isEditing=!1,f.$prevRow=null,f.editorProps={},f.preventEnter=!1,f.$lastActiveCell=null,a.fn.between=function(b,c){var d=a(this).index(b),e=a(this).index(c);return e>=d?this.slice(d,e+1):this.slice(e,d+1)};var h=function(){return navigator.userAgent.search("Firefox")>-1},i=function(a){if(h()){var b=a.get(0),c=b.style.display;b.style.display="none",b.offsetHeight,b.style.display=c}},j=function(a){return a.replace(/\r\n/g,"\n")},k=function(){if(document.selection&&document.selection.empty)document.selection.empty();else if(window.getSelection){var a=window.getSelection();a.removeAllRanges()}};return f.setActiveCell=function(b){f.config.readonly||(f.$prevRow=a(".sensei-grid-tbody>tr>.activeCell",f.$el).parent("tr"),f.$prevRow.removeClass("activeRow"),a(".sensei-grid-tbody>tr>.activeCell",f.$el).removeClass("activeCell"),b.addClass("activeCell"),b.parent("tr").addClass("activeRow"),i(b.parent("tr")),f.events.trigger("cell:select",b),f.$prevRow.index()!==b.parent("tr").index()&&(f.events.trigger("row:select",b.parent("tr")),f.$prevRow.hasClass("sensei-grid-dirty-row")&&f.isEditing&&(f.saveEditor(!0),f.events.trigger("row:save",f.getRowData(f.$prevRow),f.$prevRow,"row:select"))),f.$lastActiveCell=b)},a.fn.cellPosition=function(){var b=a(this).position();return h()&&(b.left-=1,b.top-=1),b},f.events={_events:{}},f.events.on=function(a,b,c){_.has(this._events,a)||(this._events[a]=[]),this._events[a].push({callback:b,context:c})},f.events.trigger=function(a){var b=Array.prototype.slice.call(arguments,1);if(_.has(this._events,a)){var c=this._events[a];_.each(c,function(a){var c=_.bind(a.callback,a.context);c.apply(this,b)})}},f.events.off=function(a){_.has(this._events,a)&&delete this._events[a]},f.isSillyFirefox=function(){if(!f.$el.find("td:first").position())return!1;var a=f.$el.position().left,b=f.$el.find("td:first").position().left;return b!==a},f.registerEditor=function(a){var b=new a(f);f.editors[b.name]=b},f.registerRowAction=function(a){var b=new a(f);f.rowActions[b.name]=b},f.render=function(){if(f.rowElements={},_.each(f.rowActions,function(a){a.initialize();var b="
"+a.rowElement()+"
";f.rowElements[a.name]=b}),f.renderBaseTable(),f.renderColumns(),f.renderData(),f.config.sortable&&_.isObject(f.config.initialSort)){var b=f.config.initialSort.col,c=f.$el.find("th").filter(function(){return a(this).data("name")===b});c&&f.showSortingIndicator(c,f.config.initialSort.order)}_.each(f.editors,function(a){a.initialize(),a.render(),a.getElement().hide()}),f.bindEvents()},f.updateData=function(a){f.renderData(a),f.bindEvents()},f.destroy=function(){f.unbindEvents(),f.$el.remove()},f.addEdit=function(a){f.editPointer===f.edits.length-1?(f.editPointer+=1,f.edits.push(a)):(f.editPointer+=1,f.edits.splice(f.editPointer),f.edits.push(a))},f.redo=function(){return f.editPointer+1>=f.edits.length?[]:(f.editPointer+=1,f.edits[f.editPointer])},f.undo=function(){if(f.editPointer<0)return[];var a=f.edits[f.editPointer];return f.editPointer-=1,a},f.bindEvents=function(){f.unbindEvents(),f.$el.on("click.grid",".sensei-grid-tbody>tr>td",f.clickCell),f.$el.on("dblclick.grid",".sensei-grid-tbody>tr>td",f.dblClickCell),f.$el.on("blur.grid",f.blur),f.$el.on("keydown.grid",f.keydown),f.$el.on("click.grid",".sensei-grid-thead .sensei-grid-sortable",f.sort),f.$el.on("change.grid",".sensei-grid-tbody td.selectable :checkbox",f.selectCell),f.$el.on("change.grid",".sensei-grid-thead th.selectable :checkbox",f.selectAll),a(document).on("click.grid",f.editorBlur)},f.unbindEvents=function(){f.$el.off("click.grid",".sensei-grid-tbody>tr>td"),f.$el.off("dblclick.grid",".sensei-grid-tbody>tr>td"),f.$el.off("blur.grid"),f.$el.off("keydown.grid"),f.$el.off("click.grid",".sensei-grid-thead .sensei-grid-sortable"),f.$el.off("change.grid",".sensei-grid-tbody td.selectable :checkbox"),f.$el.off("change.grid",".sensei-grid-thead th.selectable :checkbox"),a(document).off("click.grid")},f.showSortingIndicator=function(b,c){var d;return f.$el.find("thead th.selectable :checkbox").prop("checked",!1),f.$el.find("tbody td.selectable :checkbox").prop("checked",!1),f.$el.find("tbody tr.selectedRow").removeClass("selectedRow"),f.$el.find("th.sensei-grid-sortable .glyphicon").remove(),"desc"===c||b.data("order")&&"asc"===b.data("order")?(d="desc",b.append(a("").addClass("glyphicon glyphicon-chevron-up"))):(d="asc",b.append(a("").addClass("glyphicon glyphicon-chevron-down"))),c&&(d=c),b.data("order",d),d},f.sort=function(){var b=a(this).data("name"),c=f.showSortingIndicator(a(this),c);f.events.trigger("column:sort",b,c,a(this))},f.editorBlur=function(b){f.getActiveCell().length>0&&0===f.$el.has(a(b.target)).length&&(f.exitEditor(),f.deactivateCell())},f.hideEditors=function(){a(".sensei-grid-editor",f.$el).hide()},f.blur=function(){if(f.getActiveCell().length>0&&!f.isEditing){var a=f.getActiveCell();f.exitEditor(),f.isEditing=!1,f.deactivateCell(),i(a.parent("tr"))}},f.parsers={},f.parsers.string=function(a){return a.toString()},f.parsers["int"]=function(a){return parseInt(a)},f.parsers["float"]=function(a){return parseFloat(a)},f.getCellData=function(a){if(!a||0===a.length)return null;var b=a.text(),c=f.getCellType(a);return _.has(f.parsers,c)&&(b=f.parsers[c](b)),b},f.getCellColumn=function(a){return a.data("column")},f.getCellType=function(a){return a.data("type")},f.getCellStatus=function(a){return!!a.data("saved")},f.getCellDataByIndex=function(a,b){var c=f.getRowByIndex(a),d=f.getCellFromRowByIndex(c,b);return f.getCellData(d)},f.getCellDataByKey=function(a,b){var c=f.getRowByIndex(a),d=f.getCellFromRowByKey(c,b);return f.getCellData(d)},f.getCellFromRowByIndex=function(a,b){var c=a.find("td").eq(b);return c},f.getCellFromRowByKey=function(b,c){var d=b.find("td").filter(function(){return a(this).data("column")===c});return d},f.getCellRow=function(a){return a.parent("tr")},f.getRowCellsByIndex=function(a){return f.getRowByIndex(a).find("td")},f.getRowCells=function(a){return a.find("td:not(.selectable)")},f.getRowByIndex=function(a){var b=f.$el.find(".sensei-grid-tbody>tr").eq(a);return b},f.getRowDataByIndex=function(a){var b=f.getRowByIndex(a);return f.getRowData(b)},f.getRowData=function(b){if(!b||0===b.length)return null;var c=f.getRowCells(b),d={};return c.each(function(){d[f.getCellColumn(a(this))]=f.getCellData(a(this))}),d},f.getRows=function(){return f.$el.find(".sensei-grid-tbody>tr")},f.getSelectedRows=function(){return f.$el.find(".sensei-grid-tbody>tr.selectedRow")},f.getGridData=function(){var b=f.getRows();return b.map(function(){return f.getRowData(a(this))}).get()},f.getActiveCell=function(){return f.isEditing&&f.activeEditor&&f.activeEditor.activeCell?f.activeEditor.activeCell:a("td.activeCell",f.$el)},f.setRowSaved=function(b){b.removeClass("sensei-grid-dirty-row").removeClass("sensei-grid-empty-row"),b.find(">td").data("saved",!0),b.find(">td.selectable").html(a(""))},f.setRowDirty=function(a){a.addClass("sensei-grid-dirty-row").removeClass("sensei-grid-empty-row"),a.find(">td").data("saved",!1)},f.deactivateCell=function(){var a=f.getActiveCell();a.removeClass("activeCell"),a.parent("tr").removeClass("activeRow"),f.events.trigger("cell:deactivate",a)},f.clearActiveCell=function(){var b=f.getActiveCell(),c=f.getCellData(b);a(">div",b).empty(),f.events.trigger("cell:clear",c,b)},f.removeRow=function(a,b){if(!f.config.removable)return!1;var c=a.index();if(a.hasClass("sensei-grid-empty-row"))return!1;f.config.moveOnRowRemove&&f.moveDown();var d=f.getRowData(a);f.events.trigger("row:remove",d,c,a,b),a.remove()},f.removeActiveRow=function(){var b=f.getSelectedRows();if(b.length>0)return void b.each(function(){f.removeRow(a(this))});var c=f.getActiveCell();if(0===c.length)return!1;var d=f.getCellRow(c);return f.removeRow(d),!0},f.duplicateActiveRow=function(){var b=f.getActiveCell();if(!b)return!1;var c=f.getCellRow(b);if(c.hasClass("sensei-grid-empty-row"))return!1;var d=f.getRowData(c);_.isEmpty(f.config.skipOnDuplicate)||(d=_.omit(d,f.config.skipOnDuplicate));var e=a(f.renderRow(d,!1,!0));return e.insertAfter(c),f.moveDown(),f.events.trigger("row:duplicate",e),!0},f.moveRight=function(){var b=f.getActiveCell();if(b.next().length>0)f.setActiveCell(b.next());else{var c=b.parent("tr").next();c.length>0&&f.setActiveCell(a("td:first",c))}},f.moveUp=function(){var b=f.getActiveCell(),c=b.parent("tr").prev();if(c.length>0){var d=b.index(),e=a("td",c).eq(d);f.setActiveCell(e.length>0?e:a("td:last",c))}},f.moveLeft=function(){var b=f.getActiveCell();if(b.prev().length>0)f.setActiveCell(b.prev());else{var c=b.parent("tr").prev();c.length>0&&f.setActiveCell(a("td:last",c))}},f.moveDown=function(){var b=f.getActiveCell(),c=b.parent("tr").next();if(c.length>0){var d=b.index(),e=a("td",c).eq(d);f.setActiveCell(e.length>0?e:a("td:first",c))}},f.scrollIntoView=function(a,b){var c=50,d=0,e=0;b.offset()&&(d=b.offset().top+b.scrollTop(),e=b.offset().left+b.scrollLeft()),b.scrollTop(a.offset().top-d-c),b.scrollLeft(a.offset().left-e-c)},f.move=function(b){var c="move"+b.charAt(0).toUpperCase()+b.substr(1);if(_.has(f,c)){f[c](),f.isEditing&&f.saveEditor();var d=f.getActiveCell(),e=a(window),g={};f.config.getContainer&&(e=f.config.getContainer(),g={viewport:e}),a.fn.isInViewport&&0===d.isInViewport(g).length&&f.scrollIntoView(d,e),f.isEditing&&f.editCell()}else console.warn("move method not found",c)},f.editCell=function(){f.config.readonly||f.showEditor()},f.getEditor=function(){return f.activeEditor},f.getEditorInstance=function(){var a=f.getActiveCell(),b=a.data("editor");if(_.isFunction(b)&&(b=b(f)),b&&_.has(f.editors,b)){var c=f.getCellColumn(a);return _.has(f.editorProps,c)&&(f.editors[b].props=f.editorProps[c]),f.editors[b]}return console.info("Editor not found, skipping cell: "+b),!1},f.saveEditor=function(b){if(f.isEditing&&f.activeEditor){var c=f.getActiveCell(),d=f.activeEditor.getValue();if(j(d)!==j(c.text())){var e={previousState:f.getCellData(c),currentState:d,row:f.getRowData(f.getCellRow(c)).id,column:c.index()},g=c.data("allowHTML");f.addEdit(e),c.html(g?a("
").html(d):a("
").text(d));var h={};h[c.data("column")]=d,f.events.trigger("editor:save",h,c);var i=c.parent("tr");i.hasClass("sensei-grid-empty-row")&&(i.removeClass("sensei-grid-empty-row").addClass("sensei-grid-dirty-row"),f.assureEmptyRow())}}!b&&f.activeEditor&&f.getEditor().hide()},f.assureEmptyRow=function(){if(f.config.emptyRow&&0===f.$el.find(".sensei-grid-tbody>tr.sensei-grid-empty-row").length){var a=f.$el.find(".sensei-grid-tbody"),b=f.renderRow(null,!1);a.append(b)}},f.exitEditor=function(a){var b=f.getActiveCell();if(f.isEditing&&f.activeEditor)if(a)f.getEditor().hide();else{f.saveEditor();var c=b.parent("tr");c.hasClass("sensei-grid-dirty-row")&&f.isEditing&&f.events.trigger("row:save",f.getRowData(c),c,"editor:close")}f.isEditing&&(f.setActiveCell(b),f.$el.focus()),f.isEditing=!1},f.moveEditor=function(){f.isEditing&&(f.showEditor(),f.editCell())},f.selectRow=function(a,b,c){if(f.config.selectable){var d=a.find(".selectable");f.selectCell(d,b,c)}},f.selectCell=function(b,c,d){if(a(this)&&a(this).is("input"))b=a(this).parents("td.selectable");else{var e=b.find(":checkbox");c?e.prop("checked",!0):d?e.prop("checked",!1):e.prop("checked",!e.prop("checked"))}b.parent().hasClass("sensei-grid-empty-row")||(c?b.parent().addClass("selectedRow"):d?b.parent().removeClass("selectedRow"):b.parent().toggleClass("selectedRow"),b.parent().hasClass("selectedRow")?f.events.trigger("row:mark",b.parent()):f.events.trigger("row:unmark",b.parent()))},f.selectAll=function(){var b=!0,c=!1,d=f.$el.find("thead th.selectable :checkbox");d&&!d.is(":checked")&&(b=!1,c=!0);var e=f.getRows();e.each(function(){f.selectRow(a(this),b,c)})},f.showEditor=function(){var a=f.getEditorInstance();if(!a)return f.exitEditor(),void(f.isEditing=!0);f.activeEditor=a;var b=f.activeEditor.getElement(),c=f.getActiveCell();f.activeEditor.activeCell=c,f.isEditing=!0,f.activeEditor.show(),b.css(c.cellPosition()),f.activeEditor.setDimensions(c);var d=c.data("column"),e=c.data("allowHTML"),g=e?c.find(">div").html():c.text();f.activeEditor.setValue(g),b.css(c.cellPosition());var h={};return h[d]=g,f.events.trigger("editor:load",h,c),b},f.keydown=function(b){var c=!0,d=[8,9,13,27,32,37,38,39,40,65,68,89,90],e=[8,32,37,38,39,40,65,68,89,90],g=[8],h=f.getActiveCell();if((0!==f.getActiveCell().length||f.isEditing||_.contains(g,b.which))&&_.contains(d,b.which)){if(!f.isEditing&&_.contains(f.config.disableKeys,b.which))return void b.preventDefault();if(!(f.isEditing&&f.getEditor()&&_.contains(e,b.which))){b.preventDefault();var i,j;switch(b.which){case 37:f.move("left");break;case 38:b.shiftKey&&f.config.selectable&&f.selectRow(h.parent(),!0),f.move("up"),i=f.getActiveCell(),b.shiftKey&&f.config.selectable&&f.selectRow(i.parent(),!0);break;case 39:f.move("right");break;case 40:b.shiftKey&&f.config.selectable&&f.selectRow(h.parent(),!0),f.move("down"),i=f.getActiveCell(),b.shiftKey&&f.config.selectable&&f.selectRow(i.parent(),!0);break;case 13:var k=!1,l=!1;if(h&&h.data("action")){var m=h.data("action-name");f.rowActions[m]&&f.rowActions[m].trigger({data:{$activeCell:h}}),k=!0}h&&h.hasClass("selectable")&&(f.selectCell(h),l=!0),f.isEditing?b.ctrlKey&&b.shiftKey?f.move("up"):b.ctrlKey&&!b.shiftKey?f.move("down"):f.preventEnter||k||l||f.exitEditor():k||l||f.editCell();break;case 27:if(f.isEditing)f.exitEditor(!0);else{var n=f.getSelectedRows();n&&n.length>0?(j=f.$el.find("thead th.selectable :checkbox"),j.prop("checked",!1),f.selectAll()):f.$el.blur()}break;case 9:f.move(b.shiftKey?"left":"right");break;case 32:h&&f.config.selectable&&f.selectRow(h.parent());break;case 8:(b.ctrlKey||b.metaKey)&&f.removeActiveRow();break;case 65:f.config.selectable&&(b.ctrlKey||b.metaKey||b.shiftKey)&&(j=f.$el.find("thead th.selectable :checkbox"),j.prop("checked",!j.prop("checked")),f.selectAll());break;case 90:if(b.ctrlKey||b.metaKey){var o=f.undo();if("row"in o&&"column"in o){var p=f.getRowByIndex(o.row-1),q=f.getCellFromRowByIndex(p,o.column);q.html(a("
").text(o.previousState));var r={};r[q.data("column")]=o.previousState,f.events.trigger("editor:save",r,q)}}break;case 89:if(b.ctrlKey||b.metaKey){var s=f.redo();if("row"in s&&"column"in s){var t=f.getRowByIndex(s.row-1),u=f.getCellFromRowByIndex(t,s.column);u.html(a("
").text(s.currentState));var v={};v[u.data("column")]=s.currentState,f.events.trigger("editor:save",v,u)}}break;case 68:(b.ctrlKey||b.shiftKey||b.metaKey)&&f.duplicateActiveRow()}c&&b.preventDefault()}}},f.clickCell=function(b){a(this).hasClass("selectable")||b.preventDefault();var c;if(f.getActiveCell()&&(c=f.getActiveCell().parent()),f.isEditing&&f.exitEditor(),f.setActiveCell(a(this)),f.config.selectable&&b.shiftKey){k();var d=a(this).parent();if(c&&d){var e=f.$el.find("tbody>tr").between(c,d);e.each(function(){a(b.target).is(":checkbox")&&a(this).is(d)||f.selectCell(a(this).find("td.selectable"),!0)})}}},f.dblClickCell=function(b){b.preventDefault(),f.setActiveCell(a(this)),f.editCell()},f.renderColumns=function(){var b=a("thead",f.$el),c=document.createElement("tr");if(f.config.selectable){var d=a("
")[0];c.appendChild(d)}_.each(f.columns,function(b){var d=document.createElement("th"),e=document.createElement("div");f.config.sortable&&(d.className="sensei-grid-sortable"),a(e).text(b.display?b.display:b.name),d.appendChild(e),a(d).data("name",b.name),a(d).data("type",b.type||"string"),a(d).data("editor",b.editor||"BasicEditor"),b.editorProps&&(f.editorProps[b.name]=b.editorProps),c.appendChild(d)}),b.append(c)},f.renderData=function(b){var c=a(".sensei-grid-tbody",f.$el);if(b&&(f.data=b),c.html(null),_.each(f.data,function(a){var b=f.renderRow(a,!0);c.append(b)}),f.config.emptyRow){var d=f.renderRow(null,!1);c.append(d)}if(_.isEmpty(f.data)&&f.config.emptyGridMessage){var e=a("").text(f.config.emptyGridMessage),g=a("").append(e);c.html(g)}},f.renderRow=function(b,c,d){var e=document.createElement("tr");if(c||(e.className="sensei-grid-empty-row"),d&&(e.className="sensei-grid-dirty-row"),f.config.selectable){var g=a("
");if(c){var h=a("");g.find("div").append(h)}g.prop("class","selectable"),e.appendChild(g[0])}return _.each(f.columns,function(d){var g=document.createElement("td"),h=document.createElement("div");if(_.has(b,d.name)&&(d.allowHTML&&d.allowHTML===!0?a(h).html(b[d.name]):a(h).text(b[d.name]),_.isFunction(d.style))){var i=d.style(b[d.name],f);_.isEmpty(i)||a(g).css(i)}d.wrap===!0&&a(g).css("white-space","normal"),a(g).data("allowHTML",d.allowHTML),a(g).data("column",d.name),a(g).data("type",d.type||"string"),a(g).data("editor",d.editor||"BasicEditor"),a(g).data("saved",c),g.appendChild(h),e.appendChild(g)}),_.isEmpty(f.rowElements)||_.each(f.rowElements,function(b,c){var d=document.createElement("td");d.innerHTML=b,a(d).data("action",!0),a(d).data("action-name",c),a(d).addClass("row-action");var g=f.rowActions[c];g.triggerEvent&&g.triggerEvent.event&&g.triggerEvent.selector&&a(d).on(g.triggerEvent.event,g.triggerEvent.selector,{$activeCell:a(d)},g.trigger),e.appendChild(d)}),e},f.renderBaseTable=function(){var b=document.createElement("table"),c=document.createElement("thead"),d=document.createElement("tbody");d.className="sensei-grid-tbody",c.className="sensei-grid-thead",b.className=f.config.tableClass,b.appendChild(c),b.appendChild(d),f.$el.html(a("
").html(b)),f.$el.attr("tabindex",-1),f.config.toolbar&&f.$el.append(a("
").text("Empty toolbar."))},f.init=function(b,c,d,e){return f.config=a.extend({},g,d),f.data=b,f.columns=c,f.name=e,f.$el=a(this),f.editors={},f.rowActions={},f.edits=[],f.editPointer=-1,f},f.init(b,c,d,e)}}(jQuery),function(a){var b=this,c=function(a){this.grid=a};c.extend=function(a){var b,c=this;b=function(){return c.apply(this,arguments)};var d=function(){this.constructor=b};return d.prototype=c.prototype,b.prototype=new d,a&&_.extend(b.prototype,a),b.__super__=c.prototype,b},c.prototype.getElement=function(){return a(this.editor)},c.prototype.initialize=function(){},c.prototype.render=function(){},c.prototype.show=function(){this.getElement().show()},c.prototype.hide=function(){this.getElement().hide(),this.grid.activeEditor.activeCell=null,this.grid.activeEditor=null},c.prototype.setDimensions=function(a){this.getElement().css({width:a.outerWidth()+1,height:a.outerHeight()+1})},c.prototype.getValue=function(){throw Error("Editor.getValue not implemented")},c.prototype.setValue=function(){throw Error("Editor.setValue not implemented")},b.Editor=c,b.BasicEditor=c.extend({types:[],name:"BasicEditor",render:function(){if(!this.editor){this.editor=document.createElement("div"),this.editor.className="sensei-grid-editor sensei-grid-basic-editor";var a=document.createElement("input");a.setAttribute("type","text"),this.editor.appendChild(a),this.grid.$el.append(this.editor)}},getValue:function(){return a("input",this.editor).val()},setValue:function(b){a("input",this.editor).val(b).focus()}}),b.TextareaEditor=c.extend({types:[],name:"TextareaEditor",render:function(){if(!this.editor){this.editor=document.createElement("div"),this.editor.className="sensei-grid-editor sensei-grid-textarea-editor";var a=document.createElement("textarea");this.editor.appendChild(a),this.grid.$el.append(this.editor)}},setDimensions:function(a){this.getElement().find("textarea").css({width:a.outerWidth()+50,height:a.outerHeight()+50})},getValue:function(){return a("textarea",this.editor).val()},setValue:function(b){a("textarea",this.editor).val(b).focus()}}),b.BooleanEditor=c.extend({types:[],name:"BooleanEditor",render:function(){if(!this.editor){this.editor=document.createElement("div"),this.editor.className="sensei-grid-editor sensei-grid-boolean-editor";var b=a("
",{"class":"sensei-grid-checkbox-wrapper"});b.append(a("",{type:"checkbox"})),a(this.editor).append(b),this.grid.$el.append(this.editor)}},setDimensions:function(a){var b={width:a.outerWidth()-3,height:a.outerHeight()-3,background:"white"};this.getElement().find(".sensei-grid-checkbox-wrapper").css(b)},getValue:function(){return a("input",this.editor).is(":checked")?"true":"false"},setValue:function(b){"true"===b.toLowerCase()?a("input",this.editor).prop("checked",!0):a("input",this.editor).prop("checked",!1),a("input",this.editor).focus()}}),b.SelectEditor=c.extend({types:[],name:"SelectEditor",render:function(){if(!this.editor){this.editor=document.createElement("div"),this.editor.className="sensei-grid-editor sensei-grid-custom-editor";var a=document.createElement("select");this.editor.appendChild(a),this.grid.$el.append(this.editor)}},renderValues:function(){if(_.has(this.props,"values")){var a=this.getElement().find("select");a.html(null),_.each(this.props.values,function(b){var c=document.createElement("option");c.value=b,c.innerHTML=b,a.append(c)})}},show:function(){this.renderValues(),this.getElement().show()},getValue:function(){return a("select",this.editor).val()},setValue:function(b){a("select>option",this.editor).filter(function(){return a(this).val()===b}).attr("selected","selected"),a("select").focus()}});var d=function(b){return function(c,d){var e,f;e=[],f=new RegExp(c,"i"),a.each(b,function(a,b){f.test(b)&&e.push(b)}),d(e)}};b.AutocompleteEditor=c.extend({types:[],name:"AutocompleteEditor",render:function(){if(!this.editor){this.editor=document.createElement("div"),this.editor.className="sensei-grid-editor sensei-grid-ac-editor";var a=document.createElement("input");a.setAttribute("type","text"),this.editor.appendChild(a),this.grid.$el.append(this.editor)}},show:function(){this.getElement().show(),a("input",this.getElement()).typeahead({hint:!1,highlight:!1,minLength:0},{name:"values",source:d(this.props.values),limit:100})},hide:function(){a("input",this.getElement()).typeahead("close"),a("input",this.getElement()).typeahead("destroy"),this.getElement().hide(),this.grid.activeEditor.activeCell=null,this.grid.activeEditor=null},setDimensions:function(a){this.getElement().css({width:a.outerWidth()+1,height:a.outerHeight()+1})},getValue:function(){return a("input",this.editor).typeahead("val")},setValue:function(b){a("input",this.editor).typeahead("val",b).focus()}}),b.DateEditor=c.extend({types:[],name:"DateEditor",datepicker:null,render:function(){if(!this.editor){this.editor=document.createElement("div"),this.editor.className="sensei-grid-editor sensei-grid-date-editor";var b=a("
",{"class":"sensei-grid-date-wrapper"});b.append(a("",{type:"text","class":"datepicker"})),a(this.editor).append(b),this.grid.$el.append(this.editor),a(".datepicker").pickadate({format:"ddd mmm dd yyyy",editable:!0,today:!1,clear:!1,close:!1}),this.datepicker=a(".datepicker").pickadate("picker")}},show:function(){this.getElement().show(),this.datepicker&&this.datepicker.open()},getValue:function(){return a("input",this.editor).val()},setValue:function(b){a("input",this.editor).val(b).focus()}}),b.DisabledEditor=c.extend({types:[],name:"DisabledEditor",render:function(){if(!this.editor){this.editor=document.createElement("div"),this.editor.className="sensei-grid-editor sensei-grid-disabled-editor";var b=a("",{type:"text",readOnly:!0});a(this.editor).append(b),this.grid.$el.append(this.editor)}},getValue:function(){return a("input",this.editor).val()},setValue:function(b){a("input",this.editor).val(b).focus()}}),b.RichEditor=c.extend({types:[],name:"RichEditor",render:function(){if(!this.editor){this.editor=a("
",{"class":"sensei-grid-editor sensei-grid-rich-editor"});var b=a("
",{"class":"summertime-wrapper"});this.editor.append(b),this.grid.$el.append(this.editor)}},setDimensions:function(a){this.getElement().css({width:a.outerWidth()+50})},getValue:function(){var b=a(".summertime-wrapper",this.editor).summernote("code");return(""+b).trim()},setValue:function(b){a(".summertime-wrapper",this.editor).summernote({focus:!0,height:100,disableResizeEditor:!0,toolbar:[["style",["bold","italic","underline","clear"]],["font",["strikethrough"]],["color",["color"]],["fontsize",["fontsize"]]],callbacks:{onKeydown:function(a){return 13===a.keyCode&&(a.shiftKey||a.altKey||a.metaKey||a.ctrlKey)?(a.preventDefault(),!0):(13===a.keyCode&&a.stopImmediatePropagation(),9===a.keyCode?(a.preventDefault(),!1):void 0)}}}),a(".summertime-wrapper",this.editor).summernote("code",b)}})}(jQuery); \ No newline at end of file diff --git a/examples/index.html b/examples/index.html index 60a348b..b6c6fc2 100644 --- a/examples/index.html +++ b/examples/index.html @@ -14,7 +14,7 @@ - + @@ -29,10 +29,10 @@ - - - - + + + +