UNPKG

slickgrid

Version:

A lightning fast JavaScript grid/spreadsheet

9 lines 13.7 kB
/** * SlickGrid v3.0.4 * (c) 2009-present Michael Leibman * homepage: http://github.com/mleibman/slickgrid * license: MIT * date: 2023-02-15 * file: ./slick.editors.js */ !function(r){function a(i){var o,t,n=this;function l(){var e=i.column.editorFixedDecimalPlaces;return(e=void 0===e?a.DefaultDecimalPlaces:e)||0===e?e:null}this.args=i,this.init=function(){var e=i.grid.getOptions().editorCellNavOnLRKeys;o=r("<INPUT type=text class='editor-text' />").appendTo(i.container).on("keydown.nav",e?s:c).focus().select(),i.compositeEditorOptions&&o.on("change",function(){var e=i.grid.getActiveCell();n.validate().valid&&n.applyValue(n.args.item,n.serializeValue()),n.applyValue(n.args.compositeEditorOptions.formValues,n.serializeValue()),i.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){t=e[i.column.field];e=l();null!==e&&(t||0===t)&&t.toFixed&&(t=t.toFixed(e)),o.val(t),o[0].defaultValue=t,o.select()},this.serializeValue=function(){var e=parseFloat(o.val()),t=(a.AllowEmptyValue?e||0===e||(e=""):e=e||0,l());return e=null!==t&&(e||0===e)&&e.toFixed?parseFloat(e.toFixed(t)):e},this.applyValue=function(e,t){e[i.column.field]=t},this.isValueChanged=function(){return!(""===o.val()&&null==t)&&o.val()!=t},this.validate=function(){if(isNaN(o.val()))return{valid:!1,msg:"Please enter a valid number"};if(i.column.validator){var e=i.column.validator(o.val(),i);if(!e.valid)return e}return{valid:!0,msg:null}},this.init()}function s(e){var t=this.selectionStart,i=this.value.length;(e.keyCode===Slick.keyCode.LEFT&&0<t||e.keyCode===Slick.keyCode.RIGHT&&t<i-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(i){var t,o,n=this;this.args=i,this.init=function(){var e=i.grid.getOptions().editorCellNavOnLRKeys;t=r("<INPUT type=text class='editor-text' />").appendTo(i.container).on("keydown.nav",e?s:c).focus().select(),i.compositeEditorOptions&&t.on("change",function(){var e=i.grid.getActiveCell();n.validate().valid&&n.applyValue(n.args.item,n.serializeValue()),n.applyValue(n.args.compositeEditorOptions.formValues,n.serializeValue()),i.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(){t.remove()},this.focus=function(){t.focus()},this.getValue=function(){return t.val()},this.setValue=function(e){t.val(e)},this.loadValue=function(e){o=e[i.column.field]||"",t.val(o),t[0].defaultValue=o,t.select()},this.serializeValue=function(){return t.val()},this.applyValue=function(e,t){e[i.column.field]=t},this.isValueChanged=function(){return!(""===t.val()&&null==o)&&t.val()!=o},this.validate=function(){if(i.column.validator){var e=i.column.validator(t.val(),i);if(!e.valid)return e}return{valid:!0,msg:null}},this.init()},Integer:function(i){var t,o,n=this;this.args=i,this.init=function(){var e=i.grid.getOptions().editorCellNavOnLRKeys;t=r("<INPUT type=text class='editor-text' />").appendTo(i.container).on("keydown.nav",e?s:c).focus().select(),i.compositeEditorOptions&&t.on("change",function(){var e=i.grid.getActiveCell();n.validate().valid&&n.applyValue(n.args.item,n.serializeValue()),n.applyValue(n.args.compositeEditorOptions.formValues,n.serializeValue()),i.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(){t.remove()},this.focus=function(){t.focus()},this.loadValue=function(e){o=e[i.column.field],t.val(o),t[0].defaultValue=o,t.select()},this.serializeValue=function(){return parseInt(t.val(),10)||0},this.applyValue=function(e,t){e[i.column.field]=t},this.isValueChanged=function(){return!(""===t.val()&&null==o)&&t.val()!=o},this.validate=function(){if(isNaN(t.val()))return{valid:!1,msg:"Please enter a valid integer"};if(i.column.validator){var e=i.column.validator(t.val(),i);if(!e.valid)return e}return{valid:!0,msg:null}},this.init()},Float:a,Date:function(i){var t,o,n=this,l=!1;this.args=i,this.init=function(){(t=r("<INPUT type=text class='editor-text' />")).appendTo(i.container),t.focus().select(),t.datepicker({showOn:"button",buttonImageOnly:!0,beforeShow:function(){l=!0},onClose:function(){var e;l=!1,i.compositeEditorOptions&&(e=i.grid.getActiveCell(),n.validate().valid&&n.applyValue(n.args.item,n.serializeValue()),n.applyValue(n.args.compositeEditorOptions.formValues,n.serializeValue()),i.grid.onCompositeEditorChange.notify({row:e.row,cell:e.cell,item:n.args.item,column:n.args.column,formValues:n.args.compositeEditorOptions.formValues}))}}),t.width(t.width()-(i.compositeEditorOptions?28:18))},this.destroy=function(){r.datepicker.dpDiv.stop(!0,!0),t.datepicker("hide"),t.datepicker("destroy"),t.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(){t.focus()},this.loadValue=function(e){o=e[i.column.field],t.val(o),t[0].defaultValue=o,t.select()},this.serializeValue=function(){return t.val()},this.applyValue=function(e,t){e[i.column.field]=t},this.isValueChanged=function(){return!(""===t.val()&&null==o)&&t.val()!=o},this.validate=function(){if(i.column.validator){var e=i.column.validator(t.val(),i);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 t,i,n,l=this;this.args=o,this.init=function(){(t=r('<input type=text class="editor-text" />')).appendTo(o.container),t.focus().select(),n=t.flatpickr({closeOnSelect:!0,allowInput:!0,altInput:!0,altFormat:"m/d/Y",dateFormat:"m/d/Y",onChange:(e,t)=>{var i;o.compositeEditorOptions&&(i=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:i.row,cell:i.cell,item:l.args.item,column:l.args.column,formValues:l.args.compositeEditorOptions.formValues}))}}),o.compositeEditorOptions||setTimeout(()=>{l.show(),l.focus()},50),t.width(t.width()-(o.compositeEditorOptions?28:18))},this.destroy=function(){l.hide(),n.destroy(),t.remove()},this.show=function(){o.compositeEditorOptions||n.open()},this.hide=function(){o.compositeEditorOptions||n.close()},this.focus=function(){t.focus()},this.loadValue=function(e){i=e[o.column.field],t.val(i),t[0].defaultValue=i,t.select(),n.setDate(i)},this.serializeValue=function(){return t.val()},this.applyValue=function(e,t){e[o.column.field]=t},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()},YesNoSelect:function(i){var t,o,n=this;this.args=i,this.init=function(){(t=r("<SELECT tabIndex='0' class='editor-yesno'><OPTION value='yes'>Yes</OPTION><OPTION value='no'>No</OPTION></SELECT>")).appendTo(i.container),t.focus(),i.compositeEditorOptions&&t.on("change",function(){var e=i.grid.getActiveCell();n.validate().valid&&n.applyValue(n.args.item,n.serializeValue()),n.applyValue(n.args.compositeEditorOptions.formValues,n.serializeValue()),i.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(){t.remove()},this.focus=function(){t.focus()},this.loadValue=function(e){t.val((o=e[i.column.field])?"yes":"no"),t.select()},this.serializeValue=function(){return"yes"==t.val()},this.applyValue=function(e,t){e[i.column.field]=t},this.isValueChanged=function(){return t.val()!=o},this.validate=function(){return{valid:!0,msg:null}},this.init()},Checkbox:function(i){var t,o,n=this;this.args=i,this.init=function(){(t=r("<INPUT type=checkbox value='true' class='editor-checkbox' hideFocus>")).appendTo(i.container),t.focus(),i.compositeEditorOptions&&t.on("change",function(){var e=i.grid.getActiveCell();n.validate().valid&&n.applyValue(n.args.item,n.serializeValue()),n.applyValue(n.args.compositeEditorOptions.formValues,n.serializeValue()),i.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(){t.remove()},this.focus=function(){t.focus()},this.loadValue=function(e){(o=!!e[i.column.field])?t.prop("checked",!0):t.prop("checked",!1)},this.preClick=function(){t.prop("checked",!t.prop("checked"))},this.serializeValue=function(){return t.prop("checked")},this.applyValue=function(e,t){e[i.column.field]=t},this.isValueChanged=function(){return this.serializeValue()!==o},this.validate=function(){return{valid:!0,msg:null}},this.init()},PercentComplete:function(i){function e(){o.val(this.value)}function t(){var e;i.compositeEditorOptions&&(e=i.grid.getActiveCell(),s.validate().valid&&s.applyValue(s.args.item,s.serializeValue()),s.applyValue(s.args.compositeEditorOptions.formValues,s.serializeValue()),i.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=i,this.init=function(){(o=r('<input type="text" class="editor-percentcomplete" />')).width(r(i.container).innerWidth()-25),o.appendTo(i.container),(n=r("<div class='editor-percentcomplete-picker' />").appendTo(i.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",t),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",t),o.remove(),n.remove()},this.focus=function(){o.focus()},this.loadValue=function(e){l=e[i.column.field],a.val(l),o.val(l),o.select()},this.serializeValue=function(){return parseInt(o.val(),10)||0},this.applyValue=function(e,t){e[i.column.field]=t},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 i,n,t,l=this;this.args=o,this.init=function(){var e=o.compositeEditorOptions,t=(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(t),e?n.css({position:"relative",padding:0,border:0}):n.css({position:"absolute"}),i=r("<TEXTAREA hidefocus rows=5 style='background:white;width:250px;height:80px;border:0;outline:0'>").appendTo(n),e?i.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),i.on("keydown",this.handleKeyDown),l.position(o.position)),i.focus().select()},this.handleKeyDown=function(e){var t,i;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&&(t=this.selectionStart,i=this.value.length,e.keyCode===Slick.keyCode.LEFT&&0===t&&o.grid.navigatePrev(),e.keyCode===Slick.keyCode.RIGHT&&i-1<=t&&o.grid.navigateNext())},this.save=function(){(o.grid.getOptions()||{}).autoCommitEdit?o.grid.getEditorLock().commitCurrentEdit():o.commitChanges()},this.cancel=function(){i.val(t),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(){i.focus()},this.loadValue=function(e){i.val(t=e[o.column.field]),i.select()},this.serializeValue=function(){return i.val()},this.applyValue=function(e,t){e[o.column.field]=t},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()}}}})}(jQuery);