UNPKG

slickgrid

Version:

A lightning fast JavaScript grid/spreadsheet

9 lines 13.6 kB
/** * SlickGrid v3.0.2 * (c) 2009-present Michael Leibman * homepage: http://github.com/mleibman/slickgrid * license: MIT * date: 2022-11-14 * file: ./slick.editors.js */ !function(r){function a(t){var o,i,n=this;function l(){var e=t.column.editorFixedDecimalPlaces;return(e=void 0===e?a.DefaultDecimalPlaces:e)||0===e?e:null}this.args=t,this.init=function(){var e=t.grid.getOptions().editorCellNavOnLRKeys;o=r("<INPUT type=text class='editor-text' />").appendTo(t.container).on("keydown.nav",e?s:c).focus().select(),t.compositeEditorOptions&&o.on("change",function(){var e=t.grid.getActiveCell();n.validate().valid&&n.applyValue(n.args.item,n.serializeValue()),n.applyValue(n.args.compositeEditorOptions.formValues,n.serializeValue()),t.grid.onCompositeEditorChange.notify({row:e.row,cell:e.cell,item:n.args.item,column:n.args.column,formValues:n.args.compositeEditorOptions.formValues})})},this.destroy=function(){o.remove()},this.focus=function(){o.focus()},this.loadValue=function(e){i=e[t.column.field];e=l();null!==e&&(i||0===i)&&i.toFixed&&(i=i.toFixed(e)),o.val(i),o[0].defaultValue=i,o.select()},this.serializeValue=function(){var e=parseFloat(o.val()),i=(a.AllowEmptyValue?e||0===e||(e=""):e=e||0,l());return e=null!==i&&(e||0===e)&&e.toFixed?parseFloat(e.toFixed(i)):e},this.applyValue=function(e,i){e[t.column.field]=i},this.isValueChanged=function(){return!(""===o.val()&&null==i)&&o.val()!=i},this.validate=function(){if(isNaN(o.val()))return{valid:!1,msg:"Please enter a valid number"};if(t.column.validator){var e=t.column.validator(o.val(),t);if(!e.valid)return e}return{valid:!0,msg:null}},this.init()}function s(e){var i=this.selectionStart,t=this.value.length;(e.keyCode===Slick.keyCode.LEFT&&0<i||e.keyCode===Slick.keyCode.RIGHT&&i<t-1)&&e.stopImmediatePropagation()}function c(e){e.keyCode!==Slick.keyCode.LEFT&&e.keyCode!==Slick.keyCode.RIGHT||e.stopImmediatePropagation()}a.DefaultDecimalPlaces=null,r.extend(!(a.AllowEmptyValue=!1),window,{Slick:{Editors:{Text:function(t){var i,o,n=this;this.args=t,this.init=function(){var e=t.grid.getOptions().editorCellNavOnLRKeys;i=r("<INPUT type=text class='editor-text' />").appendTo(t.container).on("keydown.nav",e?s:c).focus().select(),t.compositeEditorOptions&&i.on("change",function(){var e=t.grid.getActiveCell();n.validate().valid&&n.applyValue(n.args.item,n.serializeValue()),n.applyValue(n.args.compositeEditorOptions.formValues,n.serializeValue()),t.grid.onCompositeEditorChange.notify({row:e.row,cell:e.cell,item:n.args.item,column:n.args.column,formValues:n.args.compositeEditorOptions.formValues})})},this.destroy=function(){i.remove()},this.focus=function(){i.focus()},this.getValue=function(){return i.val()},this.setValue=function(e){i.val(e)},this.loadValue=function(e){o=e[t.column.field]||"",i.val(o),i[0].defaultValue=o,i.select()},this.serializeValue=function(){return i.val()},this.applyValue=function(e,i){e[t.column.field]=i},this.isValueChanged=function(){return!(""===i.val()&&null==o)&&i.val()!=o},this.validate=function(){if(t.column.validator){var e=t.column.validator(i.val(),t);if(!e.valid)return e}return{valid:!0,msg:null}},this.init()},Integer:function(t){var i,o,n=this;this.args=t,this.init=function(){var e=t.grid.getOptions().editorCellNavOnLRKeys;i=r("<INPUT type=text class='editor-text' />").appendTo(t.container).on("keydown.nav",e?s:c).focus().select(),t.compositeEditorOptions&&i.on("change",function(){var e=t.grid.getActiveCell();n.validate().valid&&n.applyValue(n.args.item,n.serializeValue()),n.applyValue(n.args.compositeEditorOptions.formValues,n.serializeValue()),t.grid.onCompositeEditorChange.notify({row:e.row,cell:e.cell,item:n.args.item,column:n.args.column,formValues:n.args.compositeEditorOptions.formValues})})},this.destroy=function(){i.remove()},this.focus=function(){i.focus()},this.loadValue=function(e){o=e[t.column.field],i.val(o),i[0].defaultValue=o,i.select()},this.serializeValue=function(){return parseInt(i.val(),10)||0},this.applyValue=function(e,i){e[t.column.field]=i},this.isValueChanged=function(){return!(""===i.val()&&null==o)&&i.val()!=o},this.validate=function(){if(isNaN(i.val()))return{valid:!1,msg:"Please enter a valid integer"};if(t.column.validator){var e=t.column.validator(i.val(),t);if(!e.valid)return e}return{valid:!0,msg:null}},this.init()},Float:a,Date:function(t){var i,o,n=this,l=!1;this.args=t,this.init=function(){(i=r("<INPUT type=text class='editor-text' />")).appendTo(t.container),i.focus().select(),i.datepicker({showOn:"button",buttonImageOnly:!0,beforeShow:function(){l=!0},onClose:function(){var e;l=!1,t.compositeEditorOptions&&(e=t.grid.getActiveCell(),n.validate().valid&&n.applyValue(n.args.item,n.serializeValue()),n.applyValue(n.args.compositeEditorOptions.formValues,n.serializeValue()),t.grid.onCompositeEditorChange.notify({row:e.row,cell:e.cell,item:n.args.item,column:n.args.column,formValues:n.args.compositeEditorOptions.formValues}))}}),i.width(i.width()-(t.compositeEditorOptions?28:18))},this.destroy=function(){r.datepicker.dpDiv.stop(!0,!0),i.datepicker("hide"),i.datepicker("destroy"),i.remove()},this.show=function(){l&&r.datepicker.dpDiv.stop(!0,!0).show()},this.hide=function(){l&&r.datepicker.dpDiv.stop(!0,!0).hide()},this.position=function(e){l&&r.datepicker.dpDiv.css("top",e.top+30).css("left",e.left)},this.focus=function(){i.focus()},this.loadValue=function(e){o=e[t.column.field],i.val(o),i[0].defaultValue=o,i.select()},this.serializeValue=function(){return i.val()},this.applyValue=function(e,i){e[t.column.field]=i},this.isValueChanged=function(){return!(""===i.val()&&null==o)&&i.val()!=o},this.validate=function(){if(t.column.validator){var e=t.column.validator(i.val(),t);if(!e.valid)return e}return{valid:!0,msg:null}},this.init()},Flatpickr:function(o){if("undefined"==typeof flatpickr)throw new Error("Flatpickr not loaded but required in SlickGrid.Editors, refer to Flatpickr documentation: https://flatpickr.js.org/getting-started/");var i,t,n,l=this;this.args=o,this.init=function(){(i=r('<input type=text class="editor-text" />')).appendTo(o.container),i.focus().select(),n=i.flatpickr({closeOnSelect:!0,allowInput:!0,altInput:!0,altFormat:"m/d/Y",dateFormat:"m/d/Y",onChange:(e,i)=>{var t;o.compositeEditorOptions&&(t=o.grid.getActiveCell(),l.validate().valid&&l.applyValue(l.args.item,l.serializeValue()),l.applyValue(l.args.compositeEditorOptions.formValues,l.serializeValue()),o.grid.onCompositeEditorChange.notify({row:t.row,cell:t.cell,item:l.args.item,column:l.args.column,formValues:l.args.compositeEditorOptions.formValues}))}}),o.compositeEditorOptions||setTimeout(()=>{l.show(),l.focus()},50),i.width(i.width()-(o.compositeEditorOptions?28:18))},this.destroy=function(){l.hide(),n.destroy(),i.remove()},this.show=function(){o.compositeEditorOptions||n.open()},this.hide=function(){o.compositeEditorOptions||n.close()},this.focus=function(){i.focus()},this.loadValue=function(e){t=e[o.column.field],i.val(t),i[0].defaultValue=t,i.select(),n.setDate(t)},this.serializeValue=function(){return i.val()},this.applyValue=function(e,i){e[o.column.field]=i},this.isValueChanged=function(){return!(""===i.val()&&null==t)&&i.val()!=t},this.validate=function(){if(o.column.validator){var e=o.column.validator(i.val(),o);if(!e.valid)return e}return{valid:!0,msg:null}},this.init()},YesNoSelect:function(t){var i,o,n=this;this.args=t,this.init=function(){(i=r("<SELECT tabIndex='0' class='editor-yesno'><OPTION value='yes'>Yes</OPTION><OPTION value='no'>No</OPTION></SELECT>")).appendTo(t.container),i.focus(),t.compositeEditorOptions&&i.on("change",function(){var e=t.grid.getActiveCell();n.validate().valid&&n.applyValue(n.args.item,n.serializeValue()),n.applyValue(n.args.compositeEditorOptions.formValues,n.serializeValue()),t.grid.onCompositeEditorChange.notify({row:e.row,cell:e.cell,item:n.args.item,column:n.args.column,formValues:n.args.compositeEditorOptions.formValues})})},this.destroy=function(){i.remove()},this.focus=function(){i.focus()},this.loadValue=function(e){i.val((o=e[t.column.field])?"yes":"no"),i.select()},this.serializeValue=function(){return"yes"==i.val()},this.applyValue=function(e,i){e[t.column.field]=i},this.isValueChanged=function(){return i.val()!=o},this.validate=function(){return{valid:!0,msg:null}},this.init()},Checkbox:function(t){var i,o,n=this;this.args=t,this.init=function(){(i=r("<INPUT type=checkbox value='true' class='editor-checkbox' hideFocus>")).appendTo(t.container),i.focus(),t.compositeEditorOptions&&i.on("change",function(){var e=t.grid.getActiveCell();n.validate().valid&&n.applyValue(n.args.item,n.serializeValue()),n.applyValue(n.args.compositeEditorOptions.formValues,n.serializeValue()),t.grid.onCompositeEditorChange.notify({row:e.row,cell:e.cell,item:n.args.item,column:n.args.column,formValues:n.args.compositeEditorOptions.formValues})})},this.destroy=function(){i.remove()},this.focus=function(){i.focus()},this.loadValue=function(e){(o=!!e[t.column.field])?i.prop("checked",!0):i.prop("checked",!1)},this.preClick=function(){i.prop("checked",!i.prop("checked"))},this.serializeValue=function(){return i.prop("checked")},this.applyValue=function(e,i){e[t.column.field]=i},this.isValueChanged=function(){return this.serializeValue()!==o},this.validate=function(){return{valid:!0,msg:null}},this.init()},PercentComplete:function(t){function e(){o.val(this.value)}function i(){var e;t.compositeEditorOptions&&(e=t.grid.getActiveCell(),s.validate().valid&&s.applyValue(s.args.item,s.serializeValue()),s.applyValue(s.args.compositeEditorOptions.formValues,s.serializeValue()),t.grid.onCompositeEditorChange.notify({row:e.row,cell:e.cell,item:s.args.item,column:s.args.column,formValues:s.args.compositeEditorOptions.formValues}))}var o,n,l,a,s=this;this.args=t,this.init=function(){(o=r('<input type="text" class="editor-percentcomplete" />')).width(r(t.container).innerWidth()-25),o.appendTo(t.container),(n=r("<div class='editor-percentcomplete-picker' />").appendTo(t.container)).append("<div class='editor-percentcomplete-helper'><div class='editor-percentcomplete-wrapper'><div class='editor-percentcomplete-slider' /><input type='range' class='editor-percentcomplete-slider' /><div class='editor-percentcomplete-buttons' /></div></div>"),n.find(".editor-percentcomplete-buttons").append('<button val="0">Not started</button><br/><button val="50">In Progress</button><br/><button val="100">Complete</button>'),o.focus().select(),(a=n.find("input.editor-percentcomplete-slider")).val(l),a.on("input",e),a.on("change",i),n.find(".editor-percentcomplete-buttons button").on("click",function(e){o.val(r(this).attr("val")),a.val(r(this).attr("val"))})},this.destroy=function(){a.off("input",e),a.off("change",i),o.remove(),n.remove()},this.focus=function(){o.focus()},this.loadValue=function(e){l=e[t.column.field],a.val(l),o.val(l),o.select()},this.serializeValue=function(){return parseInt(o.val(),10)||0},this.applyValue=function(e,i){e[t.column.field]=i},this.isValueChanged=function(){return!(""===o.val()&&null==l)&&(parseInt(o.val(),10)||0)!=l},this.validate=function(){return isNaN(parseInt(o.val(),10))?{valid:!1,msg:"Please enter a valid positive number"}:{valid:!0,msg:null}},this.init()},LongText:function(o){var t,n,i,l=this;this.args=o,this.init=function(){var e=o.compositeEditorOptions,i=(o.grid.getOptions().editorCellNavOnLRKeys,e?o.container:r("body"));n=r("<DIV class='slick-large-editor-text' style='z-index:10000;background:white;padding:5px;border:3px solid gray; border-radius:10px;'/>").appendTo(i),e?n.css({position:"relative",padding:0,border:0}):n.css({position:"absolute"}),t=r("<TEXTAREA hidefocus rows=5 style='background:white;width:250px;height:80px;border:0;outline:0'>").appendTo(n),e?t.on("change",function(){var e=o.grid.getActiveCell();l.validate().valid&&l.applyValue(l.args.item,l.serializeValue()),l.applyValue(l.args.compositeEditorOptions.formValues,l.serializeValue()),o.grid.onCompositeEditorChange.notify({row:e.row,cell:e.cell,item:l.args.item,column:l.args.column,formValues:l.args.compositeEditorOptions.formValues})}):(r("<DIV style='text-align:right'><BUTTON>Save</BUTTON><BUTTON>Cancel</BUTTON></DIV>").appendTo(n),n.find("button:first").on("click",this.save),n.find("button:last").on("click",this.cancel),t.on("keydown",this.handleKeyDown),l.position(o.position)),t.focus().select()},this.handleKeyDown=function(e){var i,t;e.which==Slick.keyCode.ENTER&&e.ctrlKey?l.save():e.which==Slick.keyCode.ESCAPE?(e.preventDefault(),l.cancel()):e.which==Slick.keyCode.TAB&&e.shiftKey?(e.preventDefault(),o.grid.navigatePrev()):e.which==Slick.keyCode.TAB?(e.preventDefault(),o.grid.navigateNext()):e.which!=Slick.keyCode.LEFT&&e.which!=Slick.keyCode.RIGHT||o.grid.getOptions().editorCellNavOnLRKeys&&(i=this.selectionStart,t=this.value.length,e.keyCode===Slick.keyCode.LEFT&&0===i&&o.grid.navigatePrev(),e.keyCode===Slick.keyCode.RIGHT&&t-1<=i&&o.grid.navigateNext())},this.save=function(){o.commitChanges()},this.cancel=function(){t.val(i),o.cancelChanges()},this.hide=function(){n.hide()},this.show=function(){n.show()},this.position=function(e){n.css("top",e.top-5).css("left",e.left-5)},this.destroy=function(){n.remove()},this.focus=function(){t.focus()},this.loadValue=function(e){t.val(i=e[o.column.field]),t.select()},this.serializeValue=function(){return t.val()},this.applyValue=function(e,i){e[o.column.field]=i},this.isValueChanged=function(){return!(""===t.val()&&null==i)&&t.val()!=i},this.validate=function(){if(o.column.validator){var e=o.column.validator(t.val(),o);if(!e.valid)return e}return{valid:!0,msg:null}},this.init()}}}})}(jQuery);