From cbc808520d35406b5cd5900a65680bba682c7540 Mon Sep 17 00:00:00 2001 From: alekseybobkov Date: Sun, 11 Jan 2015 13:42:42 -0800 Subject: [PATCH] Added JS source map extension to the white map in the .htaccess file. Minor fix in the forms styling. Implemented client-side validation for the Table widget. Updated the Table widget readme file. --- .htaccess | 1 + modules/backend/assets/css/october.css | 1 + .../backend/assets/less/controls/forms.less | 1 + modules/backend/widgets/Table.php | 16 +++ modules/backend/widgets/table/README.md | 100 ++++++++++++++++-- .../widgets/table/assets/css/table.css | 13 +++ .../widgets/table/assets/js/table-min.js | 3 + .../widgets/table/assets/js/table-min.map | 1 + .../assets/js/table.helper.navigation.js | 5 + .../backend/widgets/table/assets/js/table.js | 73 +++++++++++-- .../table/assets/js/table.processor.base.js | 31 ++++++ .../table/assets/js/table.validator.base.js | 77 ++++++++++++++ .../assets/js/table.validator.basenumber.js | 57 ++++++++++ .../table/assets/js/table.validator.float.js | 59 +++++++++++ .../assets/js/table.validator.integer.js | 59 +++++++++++ .../table/assets/js/table.validator.length.js | 68 ++++++++++++ .../table/assets/js/table.validator.regex.js | 52 +++++++++ .../assets/js/table.validator.required.js | 44 ++++++++ .../widgets/table/assets/less/table.less | 15 +++ 19 files changed, 664 insertions(+), 12 deletions(-) create mode 100644 modules/backend/widgets/table/assets/js/table-min.js create mode 100644 modules/backend/widgets/table/assets/js/table-min.map create mode 100644 modules/backend/widgets/table/assets/js/table.validator.base.js create mode 100644 modules/backend/widgets/table/assets/js/table.validator.basenumber.js create mode 100644 modules/backend/widgets/table/assets/js/table.validator.float.js create mode 100644 modules/backend/widgets/table/assets/js/table.validator.integer.js create mode 100644 modules/backend/widgets/table/assets/js/table.validator.length.js create mode 100644 modules/backend/widgets/table/assets/js/table.validator.regex.js create mode 100644 modules/backend/widgets/table/assets/js/table.validator.required.js diff --git a/.htaccess b/.htaccess index 994594bac..b26fc7870 100644 --- a/.htaccess +++ b/.htaccess @@ -22,6 +22,7 @@ ## RewriteCond %{REQUEST_FILENAME} -f RewriteCond %{REQUEST_URI} !\.js + RewriteCond %{REQUEST_URI} !\.map RewriteCond %{REQUEST_URI} !\.ico RewriteCond %{REQUEST_URI} !\.jpg RewriteCond %{REQUEST_URI} !\.jpeg diff --git a/modules/backend/assets/css/october.css b/modules/backend/assets/css/october.css index 57520cea4..3a1994367 100644 --- a/modules/backend/assets/css/october.css +++ b/modules/backend/assets/css/october.css @@ -9017,6 +9017,7 @@ label { } .help-block.before-field { margin-top: 0; + margin-bottom: 10px; } .field-textarea { resize: vertical; diff --git a/modules/backend/assets/less/controls/forms.less b/modules/backend/assets/less/controls/forms.less index fee7d02e7..f7ef07132 100644 --- a/modules/backend/assets/less/controls/forms.less +++ b/modules/backend/assets/less/controls/forms.less @@ -190,6 +190,7 @@ label { margin-bottom: 0; &.before-field { margin-top: 0; + margin-bottom: 10px; } } diff --git a/modules/backend/widgets/Table.php b/modules/backend/widgets/Table.php index a9f3d740c..ef29b8c02 100644 --- a/modules/backend/widgets/Table.php +++ b/modules/backend/widgets/Table.php @@ -127,6 +127,14 @@ class Table extends WidgetBase public function loadAssets() { $this->addCss('css/table.css', 'core'); + + // Include a combined and minified script. + // TODO: At the moment the files are combined with + // CodeKit 2, but we should have a method to + // combine files without external dependencies. -ab + $this->addJs('js/table-min.js', 'core'); + + /* $this->addJs('js/table.js', 'core'); $this->addJs('js/table.helper.navigation.js', 'core'); $this->addJs('js/table.datasource.base.js', 'core'); @@ -135,6 +143,14 @@ class Table extends WidgetBase $this->addJs('js/table.processor.string.js', 'core'); $this->addJs('js/table.processor.checkbox.js', 'core'); $this->addJs('js/table.processor.dropdown.js', 'core'); + $this->addJs('js/table.validator.base.js', 'core'); + $this->addJs('js/table.validator.required.js', 'core'); + $this->addJs('js/table.validator.basenumber.js', 'core'); + $this->addJs('js/table.validator.integer.js', 'core'); + $this->addJs('js/table.validator.float.js', 'core'); + $this->addJs('js/table.validator.length.js', 'core'); + $this->addJs('js/table.validator.regex.js', 'core'); + */ } /** diff --git a/modules/backend/widgets/table/README.md b/modules/backend/widgets/table/README.md index 2c7ecb44f..e874e68be 100644 --- a/modules/backend/widgets/table/README.md +++ b/modules/backend/widgets/table/README.md @@ -41,6 +41,7 @@ All classes for the table widget are be defined in the **$.oc.table** namespace. - **$.oc.table.processor** - cell processors - **$.oc.table.datasource** - data sources - **$.oc.table.helper** - helper classes +- **$.oc.table.validator** - validation classes ### Client-side performance and memory usage considerations @@ -271,7 +272,7 @@ public function onSave() There are two ways to validate the table data - with the client-side and server-side validation. -### Client-side validation +### Client-side validation ($.oc.table.validator) The client-side validation is performed before the data is sent to the server, or before the user navigates to another page (if the pagination is enabled). Client-side validation is a fast, but simple validation implementation. It can't be used for complex cases like finding duplicating records, or comparing data with records existing in the database. @@ -283,20 +284,107 @@ The client-side validation is configured in the widget configuration file in the validation: required: message: Please select the state - apply_if_has: country + applyIfNotEmpty: country + +If a validator doesn't have any options (or default option values should be used), the declaration could look like this: + + state: + title: State + type: dropdown + validation: + required: {} + +The `applyIfNotEmpty` and `message` parameters are common for all validators. Currently implemented client-side validation rules: - required +- integer +- float +- length +- regex Validation rules can be configured with extra parameters, which depend on a specific validator. -#### required validator +#### required validator ($.oc.table.validator.required) -Checks if the user has provided a value for the cell. Parameters: +Checks if the user has provided a value for the cell. -- message - optional, error message if the message was not provided. If the error message is not provided, the default error message will be displayed. -- apply_if_has - optional, allows to specify a column name which should have a value in order the validator to run. If the column doesn't have a value, the validation won't be performed. If the parameter is omitted, the validation always runs. +#### integer validator ($.oc.table.validator.integer) + +Checks if the value is integer. Parameters: + +* `allowNegative` - optional, determines if negative values are allowed. +* `min` - optional object, defines the minimum allowed value and error message. Object fields: + * `value` - defines the minimum value. + * `message` - optional, defines the error message. +* `max` - optional object, defines the maximum allowed value and error message. Object fields: + * `value` - defines the maximum value. + * `message` - optional, defines the error message. + +Example of defining the integer validator with the `min` parameter: + + length: + title: Length + type: string + validation: + integer: + min: + value: 3 + message: "The length cannot be less than 3" + +#### float validator ($.oc.table.validator.float) + +Checks if the value is a floating point number. The parameters for this validator match the parameters of the **integer** validator. + +Valid floating point number formats: + +* 10 +* 10.302 +* -10 (if `allowNegative` is `true`) +* -10.84 (if `allowNegative` is `true`) + +#### length validator ($.oc.table.validator.length) + +Checks if a string is not shorter or longer than specified values. Parameters: + +* `min` - optional object, defines the minimum length and error message. Object fields: + * `value` - defines the minimum length. + * `message` - optional, defines the error message. +* `max` - optional object, defines the maximum length and error message. Object fields: + * `value` - defines the maximum length. + * `message` - optional, defines the error message. + +Example column definition: + + name: + title: Name + type: string + validation: + length: + min: + value: 3 + message: "The name is too short." + +#### regex validator ($.oc.table.validator.regex) + +Checks a string against a provided regular expression: + +* `pattern` - specifies the regular expression pattern string. Example: **^[0-9a-z]+$** +* `modifiers` - optional, a string containing regular expression modifiers (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp), for example **i** for "case insensitive". + +Example: + + login: + title: Login + type: string + validation: + regex: + pattern: "^[a-z0-9]+$" + modifiers: "i" + message: "The login name can contain only Latin letters and numbers." + +Although the `message` parameter is optional for all validators it's highly recommended to provide a message for the regular expression validator as the default message "Invalid value format." is not descriptive and can be confusing. ### Server-side validation diff --git a/modules/backend/widgets/table/assets/css/table.css b/modules/backend/widgets/table/assets/css/table.css index 6a8324843..4af68339b 100644 --- a/modules/backend/widgets/table/assets/css/table.css +++ b/modules/backend/widgets/table/assets/css/table.css @@ -97,6 +97,19 @@ .control-table table.data tr { background-color: white; } +.control-table table.data tr.error { + background-color: #fbecec!important; +} +.control-table table.data tr.error td.active.error { + border-color: #ec0000!important; +} +.control-table table.data tr.error td.active.error .content-container { + border-color: #ec0000!important; +} +.control-table table.data tr.error td.active.error .content-container:before, +.control-table table.data tr.error td.active.error .content-container:after { + background-color: #ec0000!important; +} .control-table table.data tr:nth-child(2n) { background-color: #fbfbfb; } diff --git a/modules/backend/widgets/table/assets/js/table-min.js b/modules/backend/widgets/table/assets/js/table-min.js new file mode 100644 index 000000000..afaf1ba8d --- /dev/null +++ b/modules/backend/widgets/table/assets/js/table-min.js @@ -0,0 +1,3 @@ ++function(t){"use strict";void 0===t.oc&&(t.oc={}),void 0===t.oc.table&&(t.oc.table={});var e=function(e,o){this.el=e,this.$el=t(e),this.options=o,this.dataSource=null,this.cellProcessors={},this.activeCellProcessor=null,this.activeCell=null,this.tableContainer=null,this.dataTableContainer=null,this.editedRowKey=null,this.dataTable=null,this.headerTable=null,this.toolbar=null,this.clickHandler=this.onClick.bind(this),this.keydownHandler=this.onKeydown.bind(this),this.documentClickHandler=this.onDocumentClick.bind(this),this.toolbarClickHandler=this.onToolbarClick.bind(this),this.options.postback&&"client"==this.options.clientDataSourceClass&&(this.formSubmitHandler=this.onFormSubmit.bind(this)),this.navigation=null,this.recordsAddedOrDeleted=0,this.init()};e.prototype.init=function(){this.createDataSource(),this.initCellProcessors(),this.navigation=new t.oc.table.helper.navigation(this),this.buildUi(),this.registerHandlers()},e.prototype.disposeCellProcessors=function(){for(var t=0,e=this.options.columns.length;e>t;t++){var o=this.options.columns[t].key;this.cellProcessors[o].dispose(),this.cellProcessors[o]=null}this.cellProcessors=null,this.activeCellProcessor=null},e.prototype.createDataSource=function(){var e=this.options.clientDataSourceClass;if(void 0===t.oc.table.datasource||void 0==t.oc.table.datasource[e])throw new Error('The table client-side data source class "'+e+'" is not found in the $.oc.table.datasource namespace.');this.dataSource=new t.oc.table.datasource[e](this)},e.prototype.registerHandlers=function(){this.el.addEventListener("click",this.clickHandler),this.el.addEventListener("keydown",this.keydownHandler),document.addEventListener("click",this.documentClickHandler),this.options.postback&&"client"==this.options.clientDataSourceClass&&this.$el.closest("form").bind("oc.beforeRequest",this.formSubmitHandler);var t=this.getToolbar();t&&t.addEventListener("click",this.toolbarClickHandler)},e.prototype.unregisterHandlers=function(){this.el.removeEventListener("click",this.clickHandler),document.removeEventListener("click",this.documentClickHandler),this.clickHandler=null,this.el.removeEventListener("keydown",this.keydownHandler),this.keydownHandler=null;var t=this.getToolbar();t&&t.removeEventListener("click",this.toolbarClickHandler),this.toolbarClickHandler=null,this.formSubmitHandler&&(this.$el.closest("form").unbind("oc.beforeRequest",this.formSubmitHandler),this.formSubmitHandler=null)},e.prototype.initCellProcessors=function(){for(var e=0,o=this.options.columns.length;o>e;e++){var i=this.options.columns[e],a=i.key,n=i.type;if(void 0===n&&(n="string",this.options.columns[e].type=n),void 0===t.oc.table.processor||void 0==t.oc.table.processor[n])throw new Error('The table cell processor for the column type "'+n+'" is not found in the $.oc.table.processor namespace.');this.cellProcessors[a]=new t.oc.table.processor[n](this,a,i)}},e.prototype.getCellProcessor=function(t){return this.cellProcessors[t]},e.prototype.buildUi=function(){this.tableContainer=document.createElement("div"),this.tableContainer.setAttribute("class","table-container"),this.options.toolbar&&this.buildToolbar(),this.tableContainer.appendChild(this.buildHeaderTable()),this.el.insertBefore(this.tableContainer,this.el.children[0]),this.dataTableContainer=this.options.height?this.buildScrollbar():this.tableContainer,this.updateDataTable()},e.prototype.buildToolbar=function(){if(this.options.adding||this.options.deleting){if(this.toolbar=document.createElement("div"),this.toolbar.setAttribute("class","toolbar"),this.options.adding){var t=document.createElement("a");if(t.setAttribute("class","btn add-table-row-below"),t.setAttribute("data-cmd","record-add-below"),this.toolbar.appendChild(t),this.navigation.paginationEnabled()||!this.options.rowSorting)t.textContent="Add row";else{t.textContent="Add row below";var e=document.createElement("a");e.setAttribute("class","btn add-table-row-above"),e.textContent="Add row above",e.setAttribute("data-cmd","record-add-above"),this.toolbar.appendChild(e)}}if(this.options.deleting){var o=document.createElement("a");o.setAttribute("class","btn delete-table-row"),o.textContent="Delete row",o.setAttribute("data-cmd","record-delete"),this.toolbar.appendChild(o)}this.tableContainer.appendChild(this.toolbar)}},e.prototype.buildScrollbar=function(){var e=document.createElement("div"),o=document.createElement("div");return e.setAttribute("class","control-scrollbar"),e.setAttribute("style","height: "+this.options.height+"px"),e.appendChild(o),this.tableContainer.appendChild(e),t(e).scrollbar({animation:!1}),o},e.prototype.buildHeaderTable=function(){var t=document.createElement("table"),e=document.createElement("tr");t.className="headers",t.appendChild(e);for(var o=0,i=this.options.columns.length;i>o;o++){var a=document.createElement("th");this.options.columns[o].width&&a.setAttribute("style","width: "+this.options.columns[o].width),void 0!==a.textContent?a.textContent=this.options.columns[o].title:a.innerText=this.options.columns[o].title,e.appendChild(a)}return this.headerTable=t,t},e.prototype.updateDataTable=function(t){var e=this;this.unfocusTable(),this.fetchRecords(function o(i,a){e.buildDataTable(i,a),t&&t(),0==a&&e.addRecord("above",!0),e=null})},e.prototype.updateColumnWidth=function(){for(var t=this.headerTable.querySelectorAll("th"),e=this.dataTable.querySelectorAll("tr:first-child td"),o=0,i=t.length;i>o;o++)e[o]&&e[o].setAttribute("style",t[o].getAttribute("style"))},e.prototype.buildDataTable=function(t,e){var o=document.createElement("table"),i=document.createElement("tbody"),a=this.options.keyColumn;o.setAttribute("class","data");for(var n=0,s=t.length;s>n;n++){var r=document.createElement("tr");if(void 0===t[n][a])throw new Error("The row attribute "+a+" is not set for the row #"+n);r.setAttribute("data-row",t[n][a]);for(var l=0,c=this.options.columns.length;c>l;l++){var d=document.createElement("td"),h=document.createElement("input"),u=document.createElement("div"),p=this.options.columns[l],b=p.key,v=this.getCellProcessor(b);d.setAttribute("data-column",b),d.setAttribute("data-column-type",p.type),h.setAttribute("type","hidden"),h.setAttribute("data-container","data-container"),h.value=void 0!==t[n][b]?t[n][b]:"",u.setAttribute("class","content-container"),d.appendChild(u),r.appendChild(d),d.appendChild(h),v.renderCell(t[n][b],u)}i.appendChild(r)}o.appendChild(i),null!==this.dataTable?this.dataTableContainer.replaceChild(o,this.dataTable):this.dataTableContainer.appendChild(o),this.dataTable=o,this.updateColumnWidth(),this.updateScrollbar(),this.navigation.buildPagination(e)},e.prototype.fetchRecords=function(t){this.dataSource.getRecords(this.navigation.getPageFirstRowOffset(),this.options.recordsPerPage,t)},e.prototype.updateScrollbar=function(){this.options.height&&t(this.dataTableContainer.parentNode).data("oc.scrollbar").update()},e.prototype.scrollCellIntoView=function(){this.options.height&&this.activeCell&&t(this.dataTableContainer.parentNode).data("oc.scrollbar").gotoElement(this.activeCell)},e.prototype.disposeScrollbar=function(){this.options.height&&(t(this.dataTableContainer.parentNode).data("oc.scrollbar").dispose(),t(this.dataTableContainer.parentNode).data("oc.scrollbar",null))},e.prototype.setActiveProcessor=function(t){this.activeCellProcessor&&this.activeCellProcessor.onUnfocus(),this.activeCellProcessor=t},e.prototype.commitEditedRow=function(){if(null!==this.editedRowKey){var t=this.dataTable.querySelector('tr[data-row="'+this.editedRowKey+'"]');if(t&&1==t.getAttribute("data-dirty")){for(var e=t.children,o={},i=0,a=e.length;a>i;i++){var n=e[i];o[n.getAttribute("data-column")]=this.getCellValue(n)}this.dataSource.updateRecord(this.editedRowKey,o),t.setAttribute("data-dirty",0)}}},e.prototype.unfocusTable=function(){this.elementRemoveClass(this.el,"active"),this.activeCellProcessor&&this.activeCellProcessor.onUnfocus(),this.commitEditedRow(),this.activeCellProcessor=null,this.activeCell&&this.activeCell.setAttribute("class",""),this.activeCell=null},e.prototype.focusTable=function(){this.elementAddClass(this.el,"active")},e.prototype.focusCell=function(t,e){var o=t.getAttribute("data-column");if(null!==o){this.focusTable();var i=this.getCellProcessor(o);if(!i)throw new Error("Cell processor not found for the column "+o);this.activeCell!==t&&(this.activeCell&&this.elementRemoveClass(this.activeCell,"active"),this.setActiveProcessor(i),this.activeCell=t,i.isCellFocusable()&&this.elementAddClass(this.activeCell,"active"));var a=this.getCellRowKey(t);null!==this.editedRowKey&&a!=this.editedRowKey&&this.commitEditedRow(),this.editedRowKey=a,i.onFocus(t,e),this.scrollCellIntoView()}},e.prototype.markCellRowDirty=function(t){t.parentNode.setAttribute("data-dirty",1)},e.prototype.addRecord=function(t,e){this.activeCell&&!this.navigation.paginationEnabled()&&this.options.rowSorting||(t="bottom");var o=null,i=null;if(("above"==t||"below"==t)&&(o=this.getCellRowKey(this.activeCell),i=this.getCellRowIndex(this.activeCell)),this.unfocusTable(),this.navigation.paginationEnabled()){var a=this.navigation.getNewRowPage(t,i);if(a!=this.navigation.pageIndex&&!this.validate())return;this.navigation.pageIndex=a}this.recordsAddedOrDeleted++;var n=this.options.keyColumn,s={},r=this;s[n]=-1*this.recordsAddedOrDeleted,this.dataSource.createRecord(s,t,o,this.navigation.getPageFirstRowOffset(),this.options.recordsPerPage,function l(t,o){r.buildDataTable(t,o);var i=r.findRowByKey(s[n]);if(!i)throw new Error("New row is not found in the updated table: "+s[n]);e||r.navigation.focusCell(i,0),r=null})},e.prototype.deleteRecord=function(){if(this.activeCell){var t=this.getCellRowIndex(this.activeCell),e=this.getCellRowKey(this.activeCell),o=this,i=this.navigation.paginationEnabled(),a=this.navigation.pageIndex,n=this.activeCell.cellIndex;i&&(this.navigation.pageIndex=this.navigation.getPageAfterDeletion(t)),this.recordsAddedOrDeleted++;var s=this.options.keyColumn,r={};r[s]=-1*this.recordsAddedOrDeleted,this.dataSource.deleteRecord(e,r,this.navigation.getPageFirstRowOffset(),this.options.recordsPerPage,function l(e,s){o.buildDataTable(e,s),i&&a!=o.navigation.pageIndex?o.navigation.focusCell("bottom",n):o.navigation.focusCellInReplacedRow(t,n),o=null})}},e.prototype.notifyRowProcessorsOnChange=function(t){for(var e=t.getAttribute("data-column"),o=t.parentNode,i=0,a=o.children.length;a>i;i++){var n=this.options.columns[i].key;this.cellProcessors[n].onRowValueChanged(e,o.children[i])}},e.prototype.getToolbar=function(){return this.tableContainer.querySelector("div.toolbar")},e.prototype.validate=function(){for(var e=this.dataTable.querySelectorAll("tbody tr[data-row]"),o=0,i=e.length;i>o;o++){var a=e[o];this.elementRemoveClass(a,"error")}for(var o=0,n=e.length;n>o;o++){for(var a=e[o],s=this.getRowData(a),r=0,l=a.children.length;l>r;r++)this.elementRemoveClass(a.children[r],"error");for(var c in s){var d=this.getCellProcessor(c),h=d.validate(s[c],s);if(void 0!==h){var u=a.querySelector('td[data-column="'+c+'"]'),p=this;return this.elementAddClass(a,"error"),this.elementAddClass(u,"error"),t.oc.flashMsg({text:h,"class":"error"}),window.setTimeout(function(){p.focusCell(u,!1),u=null,p=null,d=null},100),!1}}}return!0},e.prototype.onClick=function(t){if(this.focusTable(),this.navigation.onClick(t)!==!1){for(var e=0,o=this.options.columns.length;o>e;e++){var i=this.options.columns[e].key;this.cellProcessors[i].onClick(t)}var a=this.getEventTarget(t,"TD");a&&"TD"==a.tagName&&this.focusCell(a,!0)}},e.prototype.onKeydown=function(t){if(65==t.keyCode&&t.altKey&&this.options.adding)return this.addRecord(t.shiftKey?"above":"below"),void this.stopEvent(t);if(68==t.keyCode&&t.altKey&&this.options.deleting)return this.deleteRecord(),void this.stopEvent(t);for(var e=0,o=this.options.columns.length;o>e;e++){var i=this.options.columns[e].key;this.cellProcessors[i].onKeyDown(t)}this.navigation.onKeydown(t)===!1},e.prototype.onFormSubmit=function(t,e){if(e.handler==this.options.postbackHandlerName){if(this.unfocusTable(),!this.validate())return void t.preventDefault();var o=this.options.alias.indexOf("[")>-1?this.options.alias+"[TableData]":this.options.alias+"TableData";e.options.data[o]=this.dataSource.getAllData()}},e.prototype.onToolbarClick=function(t){var e=this.getEventTarget(t),o=e.getAttribute("data-cmd");switch(o){case"record-add-below":this.addRecord("below");break;case"record-add-above":this.addRecord("above");break;case"record-delete":this.deleteRecord()}this.stopEvent(t)},e.prototype.onDocumentClick=function(t){var e=this.getEventTarget(t);this.parentContainsElement(this.el,e)||this.activeCellProcessor&&this.activeCellProcessor.elementBelongsToProcessor(e)||this.unfocusTable()},e.prototype.dispose=function(){this.unfocusTable(),this.dataSource.dispose(),this.dataSource=null,this.unregisterHandlers(),this.dataTable=null,this.headerTable=null,this.toolbar=null,this.disposeCellProcessors(),this.navigation.dispose(),this.navigation=null,this.disposeScrollbar(),this.el=null,this.tableContainer=null,this.$el=null,this.dataTableContainer=null,this.activeCell=null},e.prototype.getElement=function(){return this.el},e.prototype.getAlias=function(){return this.options.alias},e.prototype.getTableContainer=function(){return this.tableContainer},e.prototype.getDataTableBody=function(){return this.dataTable.children[0]},e.prototype.getEventTarget=function(t,e){var o=t.target?t.target:t.srcElement;if(void 0===e)return o;for(var i=o.tagName;i!=e;){if(o=o.parentNode,!o)return null;i=o.tagName}return o},e.prototype.stopEvent=function(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,t.preventDefault?t.preventDefault():t.returnValue=!1},e.prototype.elementHasClass=function(t,e){return t.classList?t.classList.contains(e):new RegExp("(^| )"+e+"( |$)","gi").test(t.className)},e.prototype.elementAddClass=function(t,e){this.elementHasClass(t,e)||(t.classList?t.classList.add(e):t.className+=" "+e)},e.prototype.elementRemoveClass=function(t,e){t.classList?t.classList.remove(e):t.className=t.className.replace(new RegExp("(^|\\b)"+e.split(" ").join("|")+"(\\b|$)","gi")," ")},e.prototype.parentContainsElement=function(t,e){for(;e&&e!=t;)e=e.parentNode;return e?!0:!1},e.prototype.getCellValue=function(t){return t.querySelector("[data-container]").value},e.prototype.getCellRowKey=function(t){return parseInt(t.parentNode.getAttribute("data-row"))},e.prototype.findRowByKey=function(t){return this.dataTable.querySelector('tbody tr[data-row="'+t+'"]')},e.prototype.findRowByIndex=function(t){return this.getDataTableBody().children[t]},e.prototype.getCellRowIndex=function(t){return parseInt(t.parentNode.rowIndex)},e.prototype.getRowCellValueByColumnName=function(t,e){var o=t.querySelector('td[data-column="'+e+'"]');return o?this.getCellValue(o):o},e.prototype.getRowData=function(t){for(var e={},o=0,i=t.children.length;i>o;o++){var a=t.children[o];e[a.getAttribute("data-column")]=this.getCellValue(a)}return e},e.prototype.setCellValue=function(t,e){var o=t.querySelector("[data-container]");o.value!=e&&(o.value=e,this.markCellRowDirty(t),this.notifyRowProcessorsOnChange(t))},e.DEFAULTS={clientDataSourceClass:"client",keyColumn:"id",recordsPerPage:!1,data:null,postback:!0,postbackHandlerName:"onSave",adding:!0,deleting:!0,toolbar:!0,rowSorting:!1,height:!1};var o=t.fn.table;t.fn.table=function(o){var i=Array.prototype.slice.call(arguments,1),a=void 0;return this.each(function(){var n=t(this),s=n.data("oc.table"),r=t.extend({},e.DEFAULTS,n.data(),"object"==typeof o&&o);return s||n.data("oc.table",s=new e(this,r)),"string"==typeof o&&(a=s[o].apply(s,i)),"undefined"!=typeof a?!1:void 0}),a?a:this},t.fn.table.Constructor=e,t.oc.table.table=e,t.fn.table.noConflict=function(){return t.fn.table=o,this},t(document).on("render",function(){t("div[data-control=table]").table()})}(window.jQuery),+function(t){"use strict";if(void 0===t.oc.table)throw new Error("The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.");void 0===t.oc.table.datasource&&(t.oc.table.datasource={});var e=function(t){this.tableObj=t};e.prototype.dispose=function(){this.tableObj=null},e.prototype.getRecords=function(t,e,o){o([])},e.prototype.createRecord=function(t,e,o,i,a,n){n([],0)},e.prototype.updateRecord=function(t,e){},e.prototype.deleteRecord=function(t,e,o,i,a){a([],0)},t.oc.table.datasource.base=e}(window.jQuery),+function(t){"use strict";if(void 0===t.oc.table)throw new Error("The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.");void 0===t.oc.table.processor&&(t.oc.table.processor={});var e=function(t,e,o){this.tableObj=t,this.columnName=e,this.columnConfiguration=o,this.activeCell=null,this.validators=[],this.registerHandlers(),this.initValidators()};e.prototype.dispose=function(){this.unregisterHandlers(),this.tableObj=null,this.activeCell=null},e.prototype.renderCell=function(t,e){},e.prototype.registerHandlers=function(){},e.prototype.unregisterHandlers=function(){},e.prototype.onFocus=function(t,e){},e.prototype.onUnfocus=function(){},e.prototype.onKeyDown=function(t){},e.prototype.onClick=function(t){},e.prototype.onRowValueChanged=function(t,e){},e.prototype.keyNavigationAllowed=function(t,e){return!0},e.prototype.isCellFocusable=function(){return!0},e.prototype.getCellContentContainer=function(t){return t.querySelector(".content-container")},e.prototype.createViewContainer=function(t,e){var o=document.createElement("div");return o.setAttribute("data-view-container","data-view-container"),o.textContent=e,t.appendChild(o),o},e.prototype.getViewContainer=function(t){return t.querySelector("[data-view-container]")},e.prototype.showViewContainer=function(t){return this.getViewContainer(t).setAttribute("class","")},e.prototype.hideViewContainer=function(t){return this.getViewContainer(t).setAttribute("class","hide")},e.prototype.setViewContainerValue=function(t,e){return this.getViewContainer(t).textContent=e},e.prototype.elementBelongsToProcessor=function(t){return!1},e.prototype.initValidators=function(){if(void 0!==this.columnConfiguration.validation)for(var e in this.columnConfiguration.validation){if(void 0===t.oc.table.validator||void 0==t.oc.table.validator[e])throw new Error('The table cell validator "'+e+'" for the column "'+this.columnName+'" is not found in the $.oc.table.validator namespace.');var o=new t.oc.table.validator[e](this.columnConfiguration.validation[e]);this.validators.push(o)}},e.prototype.validate=function(t,e){for(var o=0,i=this.validators.length;i>o;o++){var a=this.validators[o].validate(t,e);if(void 0!==a)return a}},t.oc.table.processor.base=e}(window.jQuery),+function(t){"use strict";if(void 0===t.oc.table)throw new Error("The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.");void 0===t.oc.table.helper&&(t.oc.table.helper={});var e=function(t){this.tableObj=t,this.pageIndex=0,this.pageCount=0,this.init()};e.prototype.init=function(){},e.prototype.dispose=function(){this.tableObj=null},e.prototype.paginationEnabled=function(){return null!=this.tableObj.options.recordsPerPage&&0!=this.tableObj.options.recordsPerPage},e.prototype.getPageFirstRowOffset=function(){return this.pageIndex*this.tableObj.options.recordsPerPage},e.prototype.buildPagination=function(t){if(this.paginationEnabled()){var e=this.tableObj.getElement().querySelector(".pagination"),o=!1,i=0;if(this.pageCount=this.calculatePageCount(t,this.tableObj.options.recordsPerPage),e?i=this.getRecordCount(e):(e=document.createElement("div"),e.setAttribute("class","pagination"),o=!0),o||i!=t){e.setAttribute("data-record-count",t);var a=this.buildPaginationLinkList(t,this.tableObj.options.recordsPerPage,this.pageIndex);o?(e.appendChild(a),this.tableObj.getElement().appendChild(e)):e.replaceChild(a,e.children[0])}else this.markActiveLinkItem(e,this.pageIndex)}},e.prototype.calculatePageCount=function(t,e){var o=Math.ceil(t/e);return o||(o=1),o},e.prototype.getRecordCount=function(t){var e=t?t:this.tableObj.getElement().querySelector(".pagination");return parseInt(e.getAttribute("data-record-count"))},e.prototype.buildPaginationLinkList=function(t,e,o){for(var i=this.calculatePageCount(t,e),a=document.createElement("ul"),n=0;i>n;n++){var s=document.createElement("li"),r=document.createElement("a");n==o&&s.setAttribute("class","active"),r.innerText=n+1,r.setAttribute("data-page-index",n),r.setAttribute("href","#"),s.appendChild(r),a.appendChild(s)}return a},e.prototype.markActiveLinkItem=function(t,e){var o=t.querySelector(".active"),i=t.children[0];o.setAttribute("class","");for(var a=0,n=i.children.length;n>a;a++)a==e&&i.children[a].setAttribute("class","active")},e.prototype.gotoPage=function(t,e){this.tableObj.unfocusTable(),this.tableObj.validate()&&(this.pageIndex=t,this.tableObj.updateDataTable(e))},e.prototype.getRowCountOnPage=function(t){return this.tableObj.getDataTableBody().children.length},e.prototype.getNewRowPage=function(t,e){var o=this.getRecordCount();return"bottom"===t?this.calculatePageCount(o+1,this.tableObj.options.recordsPerPage)-1:"above"==t?this.pageIndex:"below"==t&&e==this.tableObj.options.recordsPerPage-1?this.pageIndex+1:this.pageIndex},e.prototype.getPageAfterDeletion=function(t){return 0==t&&1==this.getRowCountOnPage()?0==this.pageIndex?0:this.pageIndex-1:this.pageIndex},e.prototype.navigateDown=function(t,e){if(this.tableObj.activeCell&&(!this.tableObj.activeCellProcessor||this.tableObj.activeCellProcessor.keyNavigationAllowed(t,"down"))){var o=this.tableObj.activeCell.parentNode,i=t.shiftKey?o.parentNode.children[o.parentNode.children.length-1]:o.nextElementSibling,a=void 0!==e?e:this.tableObj.activeCell.cellIndex;if(i){var n=i.children[a];n&&this.tableObj.focusCell(n)}else{if(!this.paginationEnabled())return;if(this.pageIndex0){var r=this;this.gotoPage(this.pageIndex-1,function l(){r.focusCell("bottom",n),r=null})}}}},e.prototype.navigateLeft=function(t,e){if(this.tableObj.activeCell&&(e||!this.tableObj.activeCellProcessor||this.tableObj.activeCellProcessor.keyNavigationAllowed(t,"left"))){var o=this.tableObj.activeCell.parentNode,i=!t.shiftKey||e?this.tableObj.activeCell.cellIndex-1:0,a=o.children[i];a?this.tableObj.focusCell(a):this.navigateUp(t,o.children.length-1,e)}},e.prototype.navigateRight=function(t,e){if(this.tableObj.activeCell&&(e||!this.tableObj.activeCellProcessor||this.tableObj.activeCellProcessor.keyNavigationAllowed(t,"right"))){var o=this.tableObj.activeCell.parentNode,i=t.shiftKey?o.children.length-1:this.tableObj.activeCell.cellIndex+1,a=o.children[i];a?this.tableObj.focusCell(a):this.navigateDown(t,0)}},e.prototype.navigateNext=function(t){this.tableObj.activeCell&&(!this.tableObj.activeCellProcessor||this.tableObj.activeCellProcessor.keyNavigationAllowed(t,"tab"))&&(t.shiftKey?this.navigateLeft(t,!0):this.navigateRight(t,!0),this.tableObj.stopEvent(t))},e.prototype.focusCell=function(t,e){var o=null,i=this.tableObj.getDataTableBody();if("object"==typeof t?o=t:"bottom"==t?o=i.children[i.children.length-1]:"top"==t&&(o=i.children[0]),o){var a=o.children[e];a&&this.tableObj.focusCell(a)}},e.prototype.focusCellInReplacedRow=function(t,e){if(0==t)this.focusCell("top",e);else{var o=this.tableObj.findRowByIndex(t);o||(o=this.tableObj.findRowByIndex(t-1)),o?this.focusCell(o,e):this.focusCell("top",e)}},e.prototype.onKeydown=function(t){return 40==t.keyCode?this.navigateDown(t):38==t.keyCode?this.navigateUp(t):37==t.keyCode?this.navigateLeft(t):39==t.keyCode?this.navigateRight(t):9==t.keyCode?this.navigateNext(t):void 0},e.prototype.onClick=function(t){var e=this.tableObj.getEventTarget(t,"A");if(e){var o=parseInt(e.getAttribute("data-page-index"));if(null!==o)return this.gotoPage(o),this.tableObj.stopEvent(t),!1}},t.oc.table.helper.navigation=e}(window.jQuery),+function(t){"use strict";if(void 0===t.oc.table)throw new Error("The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.");if(void 0===t.oc.table.datasource)throw new Error("The $.oc.table.datasource namespace is not defined. Make sure that the table.datasource.base.js script is loaded.");var e=t.oc.table.datasource.base,o=e.prototype,i=function(t){e.call(this,t);var o=t.getElement().getAttribute("data-data");if(null===o||void 0===o)throw new Error("The required data-data attribute is not found on the table control element.");this.data=JSON.parse(o)};i.prototype=Object.create(o),i.prototype.constructor=i,i.prototype.dispose=function(){o.dispose.call(this),this.data=null},i.prototype.getRecords=function(t,e,o){e?o(this.data.slice(t,t+e),this.data.length):o(this.data,this.data.length)},i.prototype.createRecord=function(t,e,o,i,a,n){if("bottom"===e)this.data.push(t);else if("above"==e||"below"==e){var s=this.getIndexOfKey(o);"below"==e&&s++,this.data.splice(s,0,t)}this.getRecords(i,a,n)},i.prototype.updateRecord=function(t,e){var o=this.getIndexOfKey(t);if(-1===o)throw new Error("Record with they key "+t+" is not found in the data set");e[this.tableObj.options.keyColumn]=t,this.data[o]=e},e.prototype.deleteRecord=function(t,e,o,i,a){var n=this.getIndexOfKey(t);if(-1===n)throw new Error("Record with they key "+t+" is not found in the data set");this.data.splice(n,1),0==this.data.length&&this.data.push(e),this.getRecords(o,i,a)},i.prototype.getIndexOfKey=function(t){var e=this.tableObj.options.keyColumn;return this.data.map(function(t){return t[e]+""}).indexOf(t+"")},i.prototype.getAllData=function(){return this.data},t.oc.table.datasource.client=i}(window.jQuery),+function(t){"use strict";if(void 0===t.oc.table)throw new Error("The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.");if(void 0===t.oc.table.processor)throw new Error("The $.oc.table.processor namespace is not defined. Make sure that the table.processor.base.js script is loaded.");var e=t.oc.table.processor.base,o=e.prototype,i=function(t,o,i){e.call(this,t,o,i)};i.prototype=Object.create(o),i.prototype.constructor=i,i.prototype.dispose=function(){o.dispose.call(this)},i.prototype.isCellFocusable=function(){return!1},i.prototype.renderCell=function(t,e){var o=document.createElement("div");o.setAttribute("data-checkbox-element","true"),o.setAttribute("tabindex","0"),t&&0!=t&&"false"!=t&&o.setAttribute("class","checked"),e.appendChild(o)},i.prototype.onFocus=function(t,e){t.querySelector("div[data-checkbox-element]").focus()},i.prototype.onKeyDown=function(t){32==t.keyCode&&this.onClick(t)},i.prototype.onClick=function(t){var e=this.tableObj.getEventTarget(t,"DIV");e.getAttribute("data-checkbox-element")&&this.changeState(e)},i.prototype.changeState=function(t){var e=t.parentNode.parentNode;"checked"==t.getAttribute("class")?(t.setAttribute("class",""),this.tableObj.setCellValue(e,0)):(t.setAttribute("class","checked"),this.tableObj.setCellValue(e,1))},t.oc.table.processor.checkbox=i}(window.jQuery),+function(t){"use strict";if(void 0===t.oc.table)throw new Error("The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.");if(void 0===t.oc.table.processor)throw new Error("The $.oc.table.processor namespace is not defined. Make sure that the table.processor.base.js script is loaded.");var e=t.oc.table.processor.base,o=e.prototype,i=function(t,o,i){this.itemListElement=null,this.cachedOptionPromises={},this.itemClickHandler=this.onItemClick.bind(this),this.itemKeyDownHandler=this.onItemKeyDown.bind(this),e.call(this,t,o,i)};i.prototype=Object.create(o),i.prototype.constructor=i,i.prototype.dispose=function(){this.unregisterListHandlers(),this.itemClickHandler=null,this.itemKeyDownHandler=null,this.itemListElement=null,this.cachedOptionPromises=null,o.dispose.call(this)},i.prototype.unregisterListHandlers=function(){this.itemListElement&&(this.itemListElement.removeEventListener("click",this.itemClickHandler),this.itemListElement.removeEventListener("keydown",this.itemKeyDownHandler))},i.prototype.renderCell=function(t,e){var o=this.createViewContainer(e,"...");this.fetchOptions(e.parentNode,function i(a){void 0!==a[t]&&(o.textContent=a[t]),e.setAttribute("tabindex",0)})},i.prototype.onFocus=function(t,e){if(this.activeCell===t)return void this.showDropdown();this.activeCell=t;var o=this.getCellContentContainer(t);this.buildEditor(t,o,e),e||o.focus()},i.prototype.onUnfocus=function(){this.activeCell&&(this.unregisterListHandlers(),this.hideDropdown(),this.itemListElement=null,this.activeCell=null)},i.prototype.buildEditor=function(t,e,o){var i=this.tableObj.getCellValue(t),a=this.getAbsolutePosition(e);self=this,this.itemListElement=document.createElement("div"),this.itemListElement.addEventListener("click",this.itemClickHandler),this.itemListElement.addEventListener("keydown",this.itemKeyDownHandler),this.itemListElement.setAttribute("class","table-control-dropdown-list"),this.itemListElement.style.width=e.offsetWidth+"px",this.itemListElement.style.left=a.left+"px",this.itemListElement.style.top=a.top-2+e.offsetHeight+"px",this.fetchOptions(t,function n(t){var e=document.createElement("ul");for(var a in t){var n=document.createElement("li");n.setAttribute("data-value",a),n.textContent=t[a],n.setAttribute("tabindex",0),a==i&&n.setAttribute("class","selected"),e.appendChild(n)}self.itemListElement.appendChild(e),o&&self.showDropdown(),self=null})},i.prototype.hideDropdown=function(){if(this.itemListElement&&this.activeCell&&this.itemListElement.parentNode){var t=this.getCellContentContainer(this.activeCell);t.setAttribute("data-dropdown-open","false"),this.itemListElement.parentNode.removeChild(this.itemListElement),t.focus()}},i.prototype.showDropdown=function(){if(this.itemListElement&&this.itemListElement.parentNode!==document.body){this.getCellContentContainer(this.activeCell).setAttribute("data-dropdown-open","true"),document.body.appendChild(this.itemListElement);var t=this.itemListElement.querySelector("ul li.selected");t||(t=this.itemListElement.querySelector("ul li:first-child"),t&&t.setAttribute("class","selected")),t&&window.setTimeout(function(){t.focus()},0)}},i.prototype.fetchOptions=function(t,e){if(this.columnConfiguration.options)e(this.columnConfiguration.options);else{var o=t.parentNode,i=this.createOptionsCachingKey(o),a=this.getViewContainer(t);if(a.setAttribute("class","loading"),!this.cachedOptionPromises[i]){var n={column:this.columnName,rowData:this.tableObj.getRowData(o)},s=this.tableObj.getAlias()+"::onGetDropdownOptions";this.cachedOptionPromises[i]=this.tableObj.$el.request(s,{data:n})}this.cachedOptionPromises[i].done(function r(t){e(t.options)}).always(function l(){a.setAttribute("class","")})}},i.prototype.createOptionsCachingKey=function(t){var e="non-dependent",o=this.columnConfiguration.dependsOn;if(o)if("object"==typeof o)for(var i=0,a=o.length;a>i;i++)e+=o[i]+this.tableObj.getRowCellValueByColumnName(t,o[i]);else e=o+this.tableObj.getRowCellValueByColumnName(t,o);return e},i.prototype.getAbsolutePosition=function(t){var e=document.body.scrollTop,o=0;do e+=t.offsetTop||0,e-=t.scrollTop||0,o+=t.offsetLeft||0,t=t.offsetParent;while(t);return{top:e,left:o}},i.prototype.updateCellFromSelectedItem=function(t){this.tableObj.setCellValue(this.activeCell,t.getAttribute("data-value")),this.setViewContainerValue(this.activeCell,t.textContent)},i.prototype.findSelectedItem=function(){return this.itemListElement?this.itemListElement.querySelector("ul li.selected"):null},i.prototype.onItemClick=function(t){var e=this.tableObj.getEventTarget(t); +if("LI"==e.tagName){this.updateCellFromSelectedItem(e);var o=this.findSelectedItem();o&&o.setAttribute("class",""),e.setAttribute("class","selected"),this.hideDropdown()}},i.prototype.onItemKeyDown=function(t){if(this.itemListElement){if(40==t.keyCode||38==t.keyCode){var e=this.findSelectedItem(),o=e.nextElementSibling;return 38==t.keyCode&&(o=e.previousElementSibling),void(o&&(e.setAttribute("class",""),o.setAttribute("class","selected"),o.focus()))}if(13==t.keyCode||32==t.keyCode)return this.updateCellFromSelectedItem(this.findSelectedItem()),void this.hideDropdown();9==t.keyCode&&(this.updateCellFromSelectedItem(this.findSelectedItem()),this.tableObj.navigation.navigateNext(t),this.tableObj.stopEvent(t)),27==t.keyCode&&this.hideDropdown()}},i.prototype.onKeyDown=function(t){32==t.keyCode&&this.showDropdown()},i.prototype.onRowValueChanged=function(t,e){if(this.columnConfiguration.dependsOn){var o=!1,i=this.columnConfiguration.dependsOn;if("object"==typeof i){for(var a=0,n=i.length;n>a;a++)if(i[a]==t){o=!0;break}}else o=i==t;if(o){var s=this.tableObj.getCellValue(e),r=this.getViewContainer(e);this.fetchOptions(e,function l(t){var e=void 0!==t[s]?t[s]:"...";r.textContent=e,r=null})}}},i.prototype.elementBelongsToProcessor=function(t){return this.itemListElement?this.tableObj.parentContainsElement(this.itemListElement,t):!1},t.oc.table.processor.dropdown=i}(window.jQuery),+function(t){"use strict";if(void 0===t.oc.table)throw new Error("The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.");if(void 0===t.oc.table.processor)throw new Error("The $.oc.table.processor namespace is not defined. Make sure that the table.processor.base.js script is loaded.");var e=t.oc.table.processor.base,o=e.prototype,i=function(t,o,i){this.focusTimeoutHandler=this.onFocusTimeout.bind(this),e.call(this,t,o,i)};i.prototype=Object.create(o),i.prototype.constructor=i,i.prototype.dispose=function(){o.dispose.call(this),this.focusTimeoutHandler=null},i.prototype.renderCell=function(t,e){this.createViewContainer(e,t)},i.prototype.onFocus=function(t,e){this.activeCell!==t&&(this.activeCell=t,this.buildEditor(t,this.getCellContentContainer(t)))},i.prototype.onUnfocus=function(){if(this.activeCell){var t=this.activeCell.querySelector(".string-input");t&&(this.tableObj.setCellValue(this.activeCell,t.value),this.setViewContainerValue(this.activeCell,t.value),t.parentNode.removeChild(t)),this.showViewContainer(this.activeCell),this.activeCell=null}},i.prototype.buildEditor=function(t,e){this.hideViewContainer(this.activeCell);var o=document.createElement("input");o.setAttribute("type","text"),o.setAttribute("class","string-input"),o.value=this.tableObj.getCellValue(t),e.appendChild(o),this.setCaretPosition(o,0),window.setTimeout(this.focusTimeoutHandler,0)},i.prototype.keyNavigationAllowed=function(t,e){if("left"!=e&&"right"!=e)return!0;if(!this.activeCell)return!0;var o=this.activeCell.querySelector(".string-input");if(!o)return!0;var i=this.getCaretPosition(o);return"left"==e?0==i:"right"==e?i==o.value.length:!0},i.prototype.onFocusTimeout=function(){if(this.activeCell){var t=this.activeCell.querySelector(".string-input");t&&(t.focus(),this.setCaretPosition(t,0))}},i.prototype.getCaretPosition=function(t){if(document.selection){var e=document.selection.createRange();return e.moveStart("character",-t.value.length),e.text.length}return void 0!==t.selectionStart?t.selectionStart:0},i.prototype.setCaretPosition=function(t,e){if(document.selection){var o=t.createTextRange();setTimeout(function(){o.collapse(!0),o.moveStart("character",e),o.moveEnd("character",0),o.select()},0)}return void 0!==t.selectionStart&&setTimeout(function(){t.selectionStart=e,t.selectionEnd=e},0),0},t.oc.table.processor.string=i}(window.jQuery),+function(t){"use strict";if(void 0===t.oc.table)throw new Error("The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.");void 0===t.oc.table.validator&&(t.oc.table.validator={});var e=function(t){this.options=t};e.prototype.validate=function(t,e){return void 0===this.options.applyIfNotEmpty||this.rowHasValue(this.options.applyIfNotEmpty,e)?this.validateValue(t,e):void 0},e.prototype.validateValue=function(t,e){},e.prototype.trim=function(t){return String.prototype.trim?t.trim():t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")},e.prototype.getMessage=function(t){return void 0!==this.options.message?this.options.message:t},e.prototype.rowHasValue=function(t,e){if(void 0===e[t])return!1;if("boolean"==typeof e[t])return e[t];var o=this.trim(String(e[t]));return o.length>0},t.oc.table.validator.base=e}(window.jQuery),+function(t){"use strict";if(void 0===t.oc.table)throw new Error("The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.");if(void 0===t.oc.table.validator)throw new Error("The $.oc.table.validator namespace is not defined. Make sure that the table.validator.base.js script is loaded.");var e=t.oc.table.validator.base,o=e.prototype,i=function(t){e.call(this,t)};i.prototype=Object.create(o),i.prototype.constructor=i,i.prototype.validateValue=function(t,e){return t=this.trim(t),0===t.length?this.getMessage("The value should not be empty."):void 0},t.oc.table.validator.required=i}(window.jQuery),+function(t){"use strict";if(void 0===t.oc.table)throw new Error("The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.");if(void 0===t.oc.table.validator)throw new Error("The $.oc.table.validator namespace is not defined. Make sure that the table.validator.base.js script is loaded.");var e=t.oc.table.validator.base,o=e.prototype,i=function(t){e.call(this,t)};i.prototype=Object.create(o),i.prototype.constructor=i,i.prototype.doCommonChecks=function(t){if(void 0!==this.options.min||void 0!==this.options.max){if(void 0!==this.options.min){if(void 0===this.options.min.value)throw new Error("The min.value parameter is not defined in the table validator configuration");if(tthis.options.max.value)return void 0!==this.options.max.message?this.options.max.message:"The value should not be more than "+this.options.max.value}}},t.oc.table.validator.baseNumber=i}(window.jQuery),+function(t){"use strict";if(void 0===t.oc.table)throw new Error("The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.");if(void 0===t.oc.table.validator)throw new Error("The $.oc.table.validator namespace is not defined. Make sure that the table.validator.base.js script is loaded.");if(void 0===t.oc.table.validator.baseNumber)throw new Error("The $.oc.table.validator.baseNumber namespace is not defined. Make sure that the table.validator.baseNumber.js script is loaded.");var e=t.oc.table.validator.baseNumber,o=e.prototype,i=function(t){e.call(this,t)};i.prototype=Object.create(o),i.prototype.constructor=i,i.prototype.validateValue=function(t,e){if(t=this.trim(t),0!=t.length){var o=this.options.allowNegative?/^\-?[0-9]*$/.test(t):/^[0-9]*$/.test(t);if(!o){var i=this.options.allowNegative?"The value should be an integer.":"The value should be a positive integer";return this.getMessage(i)}return this.doCommonChecks(parseInt(t))}},t.oc.table.validator.integer=i}(window.jQuery),+function(t){"use strict";if(void 0===t.oc.table)throw new Error("The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.");if(void 0===t.oc.table.validator)throw new Error("The $.oc.table.validator namespace is not defined. Make sure that the table.validator.base.js script is loaded.");if(void 0===t.oc.table.validator.baseNumber)throw new Error("The $.oc.table.validator.baseNumber namespace is not defined. Make sure that the table.validator.baseNumber.js script is loaded.");var e=t.oc.table.validator.baseNumber,o=e.prototype,i=function(t){e.call(this,t)};i.prototype=Object.create(o),i.prototype.constructor=i,i.prototype.validateValue=function(t,e){if(t=this.trim(t),0!=t.length){var o=this.options.allowNegative?/^[-]?([0-9]+\.[0-9]+|[0-9]+)$/.test(t):/^([0-9]+\.[0-9]+|[0-9]+)$/.test(t);if(!o){var i=this.options.allowNegative?"The value should be a floating point number.":"The value should be a positive floating point number";return this.getMessage(i)}return this.doCommonChecks(parseFloat(t))}},t.oc.table.validator.float=i}(window.jQuery),+function(t){"use strict";if(void 0===t.oc.table)throw new Error("The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.");if(void 0===t.oc.table.validator)throw new Error("The $.oc.table.validator namespace is not defined. Make sure that the table.validator.base.js script is loaded.");var e=t.oc.table.validator.base,o=e.prototype,i=function(t){e.call(this,t)};i.prototype=Object.create(o),i.prototype.constructor=i,i.prototype.validateValue=function(t,e){if(t=this.trim(t),0!=t.length&&(void 0!==this.options.min||void 0!==this.options.max)){if(void 0!==this.options.min){if(void 0===this.options.min.value)throw new Error("The min.value parameter is not defined in the Length table validator configuration");if(t.lengththis.options.max.value)return void 0!==this.options.max.message?this.options.max.message:"The string should not be longer than "+this.options.max.value}}},t.oc.table.validator.length=i}(window.jQuery),+function(t){"use strict";if(void 0===t.oc.table)throw new Error("The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.");if(void 0===t.oc.table.validator)throw new Error("The $.oc.table.validator namespace is not defined. Make sure that the table.validator.base.js script is loaded.");var e=t.oc.table.validator.base,o=e.prototype,i=function(t){e.call(this,t)};i.prototype=Object.create(o),i.prototype.constructor=i,i.prototype.validateValue=function(t,e){if(t=this.trim(t),0!=t.length){if(void 0===this.options.pattern)throw new Error("The pattern parameter is not defined in the Regex table validator configuration");var o=new RegExp(this.options.pattern,this.options.modifiers);return o.test(t)?void 0:this.getMessage("Invalid value format.")}},t.oc.table.validator.regex=i}(window.jQuery); +//# sourceMappingURL=./table-min.map \ No newline at end of file diff --git a/modules/backend/widgets/table/assets/js/table-min.map b/modules/backend/widgets/table/assets/js/table-min.map new file mode 100644 index 000000000..9b807f450 --- /dev/null +++ b/modules/backend/widgets/table/assets/js/table-min.map @@ -0,0 +1 @@ +{"version":3,"file":"/Users/elf/projects/new-cms/dev/modules/backend/widgets/table/assets/js/table-min.js","sources":["table.js","table.datasource.base.js","table.processor.base.js","table.helper.navigation.js","table.datasource.client.js","table.processor.checkbox.js","table.processor.dropdown.js","table.processor.string.js","table.validator.base.js","table.validator.required.js","table.validator.basenumber.js","table.validator.integer.js","table.validator.float.js","table.validator.length.js","table.validator.regex.js"],"names":["$","undefined","oc","table","Table","element","options","this","el","$el","dataSource","cellProcessors","activeCellProcessor","activeCell","tableContainer","dataTableContainer","editedRowKey","dataTable","headerTable","toolbar","clickHandler","onClick","bind","keydownHandler","onKeydown","documentClickHandler","onDocumentClick","toolbarClickHandler","onToolbarClick","postback","clientDataSourceClass","formSubmitHandler","onFormSubmit","navigation","recordsAddedOrDeleted","init","prototype","createDataSource","initCellProcessors","helper","buildUi","registerHandlers","disposeCellProcessors","i","len","columns","length","column","key","dispose","dataSourceClass","datasource","Error","addEventListener","document","closest","getToolbar","unregisterHandlers","removeEventListener","unbind","columnConfiguration","columnType","type","processor","getCellProcessor","columnName","createElement","setAttribute","buildToolbar","appendChild","buildHeaderTable","insertBefore","children","height","buildScrollbar","updateDataTable","adding","deleting","addBelowButton","paginationEnabled","rowSorting","textContent","addAboveButton","deleteButton","scrollbar","scrollbarContent","animation","headersTable","row","className","header","width","title","innerText","onSuccess","self","unfocusTable","fetchRecords","onUpdateDataTableSuccess","records","totalCount","buildDataTable","addRecord","updateColumnWidth","headerCells","querySelectorAll","dataCells","getAttribute","tbody","keyColumn","j","colsLen","cell","dataContainer","cellContentContainer","cellProcessor","value","renderCell","replaceChild","updateScrollbar","buildPagination","getRecords","getPageFirstRowOffset","recordsPerPage","parentNode","data","update","scrollCellIntoView","gotoElement","disposeScrollbar","setActiveProcessor","onUnfocus","commitEditedRow","editedRow","querySelector","cells","getCellValue","updateRecord","elementRemoveClass","focusTable","elementAddClass","focusCell","cellElement","isClick","isCellFocusable","rowKey","getCellRowKey","onFocus","markCellRowDirty","placement","noFocus","relativeToKey","currentRowIndex","getCellRowIndex","newPageIndex","getNewRowPage","pageIndex","validate","recordData","createRecord","onAddRecordDataTableSuccess","findRowByKey","deleteRecord","currentPageIndex","currentCellIndex","cellIndex","getPageAfterDeletion","newRecordData","onDeleteRecordDataTableSuccess","focusCellInReplacedRow","notifyRowProcessorsOnChange","onRowValueChanged","rows","rowsLen","rowData","getRowData","message","flashMsg","text","class","window","setTimeout","ev","target","getEventTarget","tagName","keyCode","altKey","shiftKey","stopEvent","onKeyDown","handler","postbackHandlerName","preventDefault","fieldName","alias","indexOf","getAllData","cmd","parentContainsElement","elementBelongsToProcessor","getElement","getAlias","getTableContainer","getDataTableBody","tag","srcElement","stopPropagation","cancelBubble","returnValue","elementHasClass","classList","contains","RegExp","test","add","remove","replace","split","join","parent","parseInt","findRowByIndex","index","rowIndex","getRowCellValueByColumnName","result","setCellValue","DEFAULTS","old","fn","option","args","Array","slice","call","arguments","each","$this","extend","apply","Constructor","noConflict","on","jQuery","Base","tableObj","offset","count","base","validators","initValidators","keyNavigationAllowed","direction","getCellContentContainer","createViewContainer","viewContainer","getViewContainer","showViewContainer","hideViewContainer","setViewContainerValue","validation","validatorName","validator","push","Navigation","pageCount","recordCount","paginationContainer","newPaginationContainer","curRecordCount","calculatePageCount","getRecordCount","pageList","buildPaginationLinkList","markActiveLinkItem","Math","ceil","container","item","link","activeItem","list","gotoPage","getRowCountOnPage","navigateDown","forceCellIndex","newRow","nextElementSibling","navDownPageSuccess","navigateUp","isTab","previousElementSibling","navUpPageSuccess","navigateLeft","newIndex","navigateRight","navigateNext","rowReference","focusRow","BaseProto","Client","dataString","JSON","parse","Object","create","constructor","recordIndex","getIndexOfKey","splice","map","record","client","CheckboxProcessor","checkbox","focus","changeState","divElement","DropdownProcessor","itemListElement","cachedOptionPromises","itemClickHandler","onItemClick","itemKeyDownHandler","onItemKeyDown","unregisterListHandlers","fetchOptions","renderCellFetchOptions","showDropdown","buildEditor","hideDropdown","currentValue","containerPosition","getAbsolutePosition","style","offsetWidth","left","top","offsetHeight","listElement","itemElement","removeChild","body","activeItemElement","cachingKey","createOptionsCachingKey","requestData","handlerName","request","done","onDropDownLoadOptionsSuccess","always","onDropDownLoadOptionsAlways","dependsOn","scrollTop","offsetTop","offsetLeft","offsetParent","updateCellFromSelectedItem","selectedItem","findSelectedItem","selected","newSelectedItem","dependsOnColumn","rowValueChangedFetchOptions","dropdown","StringProcessor","focusTimeoutHandler","onFocusTimeout","editor","input","setCaretPosition","caretPosition","getCaretPosition","selection","createRange","moveStart","selectionStart","position","range","createTextRange","collapse","moveEnd","select","selectionEnd","string","applyIfNotEmpty","rowHasValue","validateValue","trim","String","getMessage","defaultValue","Required","required","BaseNumber","doCommonChecks","min","max","baseNumber","Integer","testResult","allowNegative","defaultMessage","integer","Float","parseFloat","float","Length","Regex","pattern","regexObj","modifiers","regex"],"mappings":"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","sourceRoot":"./"} \ No newline at end of file diff --git a/modules/backend/widgets/table/assets/js/table.helper.navigation.js b/modules/backend/widgets/table/assets/js/table.helper.navigation.js index bdc75d0e1..058dc3c8c 100644 --- a/modules/backend/widgets/table/assets/js/table.helper.navigation.js +++ b/modules/backend/widgets/table/assets/js/table.helper.navigation.js @@ -147,6 +147,11 @@ } Navigation.prototype.gotoPage = function(pageIndex, onSuccess) { + this.tableObj.unfocusTable() + + if (!this.tableObj.validate()) + return + this.pageIndex = pageIndex this.tableObj.updateDataTable(onSuccess) diff --git a/modules/backend/widgets/table/assets/js/table.js b/modules/backend/widgets/table/assets/js/table.js index 65f1cf37a..4073fdfab 100644 --- a/modules/backend/widgets/table/assets/js/table.js +++ b/modules/backend/widgets/table/assets/js/table.js @@ -428,7 +428,7 @@ Table.prototype.commitEditedRow = function() { if (this.editedRowKey === null) return - + var editedRow = this.dataTable.querySelector('tr[data-row="'+this.editedRowKey+'"]') if (!editedRow) return @@ -492,13 +492,13 @@ if (this.activeCell !== cellElement) { if (this.activeCell) - this.activeCell.setAttribute('class', '') + this.elementRemoveClass(this.activeCell, 'active') this.setActiveProcessor(processor) this.activeCell = cellElement if (processor.isCellFocusable()) - this.activeCell.setAttribute('class', 'active') + this.elementAddClass(this.activeCell, 'active') } // If the cell belongs to other row than the currently edited, @@ -536,11 +536,21 @@ currentRowIndex = this.getCellRowIndex(this.activeCell) } - if (this.navigation.paginationEnabled()) - this.navigation.pageIndex = this.navigation.getNewRowPage(placement, currentRowIndex) - this.unfocusTable() + if (this.navigation.paginationEnabled()) { + var newPageIndex = this.navigation.getNewRowPage(placement, currentRowIndex) + + if (newPageIndex != this.navigation.pageIndex) { + // Validate data on the current page if adding a new record + // is going to create another page. + if (!this.validate()) + return + } + + this.navigation.pageIndex = newPageIndex + } + this.recordsAddedOrDeleted++ // New records have negative keys @@ -626,6 +636,52 @@ return this.tableContainer.querySelector('div.toolbar') } + /* + * Validaates data on the current page + */ + Table.prototype.validate = function() { + var rows = this.dataTable.querySelectorAll('tbody tr[data-row]') + + for (var i = 0, len = rows.length; i < len; i++) { + var row = rows[i] + + this.elementRemoveClass(row, 'error') + } + + for (var i = 0, rowsLen = rows.length; i < rowsLen; i++) { + var row = rows[i], + rowData = this.getRowData(row) + + for (var j = 0, colsLen = row.children.length; j < colsLen; j++) + this.elementRemoveClass(row.children[j], 'error') + + for (var columnName in rowData) { + var cellProcessor = this.getCellProcessor(columnName), + message = cellProcessor.validate(rowData[columnName], rowData) + + if (message !== undefined) { + var cell = row.querySelector('td[data-column="'+columnName+'"]'), + self = this + + this.elementAddClass(row, 'error') + this.elementAddClass(cell, 'error') + + $.oc.flashMsg({text: message, 'class': 'error'}) + + window.setTimeout(function(){ + self.focusCell(cell, false) + cell = null + self = null + cellProcessor = null + }, 100) + return false + } + } + } + + return true + } + // EVENT HANDLERS // ============================ @@ -688,6 +744,11 @@ if (data.handler == this.options.postbackHandlerName) { this.unfocusTable() + if (!this.validate()) { + ev.preventDefault() + return + } + var fieldName = this.options.alias.indexOf('[') > -1 ? this.options.alias + '[TableData]' : this.options.alias + 'TableData'; diff --git a/modules/backend/widgets/table/assets/js/table.processor.base.js b/modules/backend/widgets/table/assets/js/table.processor.base.js index 515143acb..14d14be01 100644 --- a/modules/backend/widgets/table/assets/js/table.processor.base.js +++ b/modules/backend/widgets/table/assets/js/table.processor.base.js @@ -28,8 +28,13 @@ this.activeCell = null + this.validators = [] + // Register event handlers this.registerHandlers() + + // Initialize validators + this.initValidators() } Base.prototype.dispose = function() { @@ -175,5 +180,31 @@ return false } + Base.prototype.initValidators = function() { + if (this.columnConfiguration.validation === undefined) + return + + for (var validatorName in this.columnConfiguration.validation) { + if ($.oc.table.validator === undefined || $.oc.table.validator[validatorName] == undefined) + throw new Error('The table cell validator "'+validatorName+'" for the column "'+this.columnName+'" is not ' + + 'found in the $.oc.table.validator namespace.') + + var validator = new $.oc.table.validator[validatorName]( + this.columnConfiguration.validation[validatorName] + ) + + this.validators.push(validator) + } + } + + Base.prototype.validate = function(value, rowData) { + for (var i=0, len=this.validators.length; i 0 + } + + $.oc.table.validator.base = Base; +}(window.jQuery); \ No newline at end of file diff --git a/modules/backend/widgets/table/assets/js/table.validator.basenumber.js b/modules/backend/widgets/table/assets/js/table.validator.basenumber.js new file mode 100644 index 000000000..9a0f6c04a --- /dev/null +++ b/modules/backend/widgets/table/assets/js/table.validator.basenumber.js @@ -0,0 +1,57 @@ +/* + * Base class for number validators. + */ ++function ($) { "use strict"; + + // NAMESPACE CHECK + // ============================ + + if ($.oc.table === undefined) + throw new Error("The $.oc.table namespace is not defined. Make sure that the table.js script is loaded."); + + if ($.oc.table.validator === undefined) + throw new Error("The $.oc.table.validator namespace is not defined. Make sure that the table.validator.base.js script is loaded."); + + // CLASS DEFINITION + // ============================ + + var Base = $.oc.table.validator.base, + BaseProto = Base.prototype + + var BaseNumber = function(options) { + Base.call(this, options) + }; + + BaseNumber.prototype = Object.create(BaseProto) + BaseNumber.prototype.constructor = BaseNumber + + BaseNumber.prototype.doCommonChecks = function(value) { + if (this.options.min !== undefined || this.options.max !== undefined) { + if (this.options.min !== undefined) { + if (this.options.min.value === undefined) + throw new Error('The min.value parameter is not defined in the table validator configuration') + + if (value < this.options.min.value) { + return this.options.min.message !== undefined ? + this.options.min.message : + "The value should not be less than " + this.options.min.value + } + } + + if (this.options.max !== undefined) { + if (this.options.max.value === undefined) + throw new Error('The max.value parameter is not defined in the table validator configuration') + + if (value > this.options.max.value) { + return this.options.max.message !== undefined ? + this.options.max.message : + "The value should not be more than " + this.options.max.value + } + } + } + + return + } + + $.oc.table.validator.baseNumber = BaseNumber +}(window.jQuery); \ No newline at end of file diff --git a/modules/backend/widgets/table/assets/js/table.validator.float.js b/modules/backend/widgets/table/assets/js/table.validator.float.js new file mode 100644 index 000000000..8c44997e6 --- /dev/null +++ b/modules/backend/widgets/table/assets/js/table.validator.float.js @@ -0,0 +1,59 @@ +/* + * Float table validator. + */ ++function ($) { "use strict"; + + // NAMESPACE CHECK + // ============================ + + if ($.oc.table === undefined) + throw new Error("The $.oc.table namespace is not defined. Make sure that the table.js script is loaded."); + + if ($.oc.table.validator === undefined) + throw new Error("The $.oc.table.validator namespace is not defined. Make sure that the table.validator.base.js script is loaded."); + + if ($.oc.table.validator.baseNumber === undefined) + throw new Error("The $.oc.table.validator.baseNumber namespace is not defined. Make sure that the table.validator.baseNumber.js script is loaded."); + + // CLASS DEFINITION + // ============================ + + var Base = $.oc.table.validator.baseNumber, + BaseProto = Base.prototype + + var Float = function(options) { + Base.call(this, options) + }; + + Float.prototype = Object.create(BaseProto) + Float.prototype.constructor = Float + + /* + * Validates a value and returns the error message. If there + * are no errors, returns undefined. + * The rowData parameter is an object containing all values in the + * target row. + */ + Float.prototype.validateValue = function(value, rowData) { + value = this.trim(value) + + if (value.length == 0) + return + + var testResult = this.options.allowNegative ? + /^[-]?([0-9]+\.[0-9]+|[0-9]+)$/.test(value) : + /^([0-9]+\.[0-9]+|[0-9]+)$/.test(value) + + if (!testResult) { + var defaultMessage = this.options.allowNegative ? + 'The value should be a floating point number.' : + 'The value should be a positive floating point number'; + + return this.getMessage(defaultMessage) + } + + return this.doCommonChecks(parseFloat(value)) + } + + $.oc.table.validator.float = Float +}(window.jQuery); \ No newline at end of file diff --git a/modules/backend/widgets/table/assets/js/table.validator.integer.js b/modules/backend/widgets/table/assets/js/table.validator.integer.js new file mode 100644 index 000000000..4af60e6f2 --- /dev/null +++ b/modules/backend/widgets/table/assets/js/table.validator.integer.js @@ -0,0 +1,59 @@ +/* + * Integer table validator. + */ ++function ($) { "use strict"; + + // NAMESPACE CHECK + // ============================ + + if ($.oc.table === undefined) + throw new Error("The $.oc.table namespace is not defined. Make sure that the table.js script is loaded."); + + if ($.oc.table.validator === undefined) + throw new Error("The $.oc.table.validator namespace is not defined. Make sure that the table.validator.base.js script is loaded."); + + if ($.oc.table.validator.baseNumber === undefined) + throw new Error("The $.oc.table.validator.baseNumber namespace is not defined. Make sure that the table.validator.baseNumber.js script is loaded."); + + // CLASS DEFINITION + // ============================ + + var Base = $.oc.table.validator.baseNumber, + BaseProto = Base.prototype + + var Integer = function(options) { + Base.call(this, options) + }; + + Integer.prototype = Object.create(BaseProto) + Integer.prototype.constructor = Integer + + /* + * Validates a value and returns the error message. If there + * are no errors, returns undefined. + * The rowData parameter is an object containing all values in the + * target row. + */ + Integer.prototype.validateValue = function(value, rowData) { + value = this.trim(value) + + if (value.length == 0) + return + + var testResult = this.options.allowNegative ? + /^\-?[0-9]*$/.test(value) : + /^[0-9]*$/.test(value) + + if (!testResult) { + var defaultMessage = this.options.allowNegative ? + 'The value should be an integer.' : + 'The value should be a positive integer'; + + return this.getMessage(defaultMessage) + } + + return this.doCommonChecks(parseInt(value)) + } + + $.oc.table.validator.integer = Integer +}(window.jQuery); \ No newline at end of file diff --git a/modules/backend/widgets/table/assets/js/table.validator.length.js b/modules/backend/widgets/table/assets/js/table.validator.length.js new file mode 100644 index 000000000..0461eab71 --- /dev/null +++ b/modules/backend/widgets/table/assets/js/table.validator.length.js @@ -0,0 +1,68 @@ +/* + * String length table validator. + */ ++function ($) { "use strict"; + + // NAMESPACE CHECK + // ============================ + + if ($.oc.table === undefined) + throw new Error("The $.oc.table namespace is not defined. Make sure that the table.js script is loaded."); + + if ($.oc.table.validator === undefined) + throw new Error("The $.oc.table.validator namespace is not defined. Make sure that the table.validator.base.js script is loaded."); + + // CLASS DEFINITION + // ============================ + + var Base = $.oc.table.validator.base, + BaseProto = Base.prototype + + var Length = function(options) { + Base.call(this, options) + }; + + Length.prototype = Object.create(BaseProto) + Length.prototype.constructor = Length + + /* + * Validates a value and returns the error message. If there + * are no errors, returns undefined. + * The rowData parameter is an object containing all values in the + * target row. + */ + Length.prototype.validateValue = function(value, rowData) { + value = this.trim(value) + + if (value.length == 0) + return + + if (this.options.min !== undefined || this.options.max !== undefined) { + if (this.options.min !== undefined) { + if (this.options.min.value === undefined) + throw new Error('The min.value parameter is not defined in the Length table validator configuration') + + if (value.length < this.options.min.value) { + return this.options.min.message !== undefined ? + this.options.min.message : + "The string should not be shorter than " + this.options.min.value + } + } + + if (this.options.max !== undefined) { + if (this.options.max.value === undefined) + throw new Error('The max.value parameter is not defined in the Length table validator configuration') + + if (value.length > this.options.max.value) { + return this.options.max.message !== undefined ? + this.options.max.message : + "The string should not be longer than " + this.options.max.value + } + } + } + + return + } + + $.oc.table.validator.length = Length +}(window.jQuery); \ No newline at end of file diff --git a/modules/backend/widgets/table/assets/js/table.validator.regex.js b/modules/backend/widgets/table/assets/js/table.validator.regex.js new file mode 100644 index 000000000..90914503c --- /dev/null +++ b/modules/backend/widgets/table/assets/js/table.validator.regex.js @@ -0,0 +1,52 @@ +/* + * Regex length table validator. + */ ++function ($) { "use strict"; + + // NAMESPACE CHECK + // ============================ + + if ($.oc.table === undefined) + throw new Error("The $.oc.table namespace is not defined. Make sure that the table.js script is loaded."); + + if ($.oc.table.validator === undefined) + throw new Error("The $.oc.table.validator namespace is not defined. Make sure that the table.validator.base.js script is loaded."); + + // CLASS DEFINITION + // ============================ + + var Base = $.oc.table.validator.base, + BaseProto = Base.prototype + + var Regex = function(options) { + Base.call(this, options) + }; + + Regex.prototype = Object.create(BaseProto) + Regex.prototype.constructor = Regex + + /* + * Validates a value and returns the error message. If there + * are no errors, returns undefined. + * The rowData parameter is an object containing all values in the + * target row. + */ + Regex.prototype.validateValue = function(value, rowData) { + value = this.trim(value) + + if (value.length == 0) + return + + if (this.options.pattern === undefined) + throw new Error('The pattern parameter is not defined in the Regex table validator configuration') + + var regexObj = new RegExp(this.options.pattern, this.options.modifiers) + + if (!regexObj.test(value)) + return this.getMessage("Invalid value format.") + + return + } + + $.oc.table.validator.regex = Regex +}(window.jQuery); \ No newline at end of file diff --git a/modules/backend/widgets/table/assets/js/table.validator.required.js b/modules/backend/widgets/table/assets/js/table.validator.required.js new file mode 100644 index 000000000..b90357972 --- /dev/null +++ b/modules/backend/widgets/table/assets/js/table.validator.required.js @@ -0,0 +1,44 @@ +/* + * Required table validator. + */ ++function ($) { "use strict"; + + // NAMESPACE CHECK + // ============================ + + if ($.oc.table === undefined) + throw new Error("The $.oc.table namespace is not defined. Make sure that the table.js script is loaded."); + + if ($.oc.table.validator === undefined) + throw new Error("The $.oc.table.validator namespace is not defined. Make sure that the table.validator.base.js script is loaded."); + + // CLASS DEFINITION + // ============================ + + var Base = $.oc.table.validator.base, + BaseProto = Base.prototype + + var Required = function(options) { + Base.call(this, options) + }; + + Required.prototype = Object.create(BaseProto) + Required.prototype.constructor = Required + + /* + * Validates a value and returns the error message. If there + * are no errors, returns undefined. + * The rowData parameter is an object containing all values in the + * target row. + */ + Required.prototype.validateValue = function(value, rowData) { + value = this.trim(value) + + if (value.length === 0) + return this.getMessage("The value should not be empty.") + + return + } + + $.oc.table.validator.required = Required +}(window.jQuery); \ No newline at end of file diff --git a/modules/backend/widgets/table/assets/less/table.less b/modules/backend/widgets/table/assets/less/table.less index 83c040d8e..95498bb2c 100644 --- a/modules/backend/widgets/table/assets/less/table.less +++ b/modules/backend/widgets/table/assets/less/table.less @@ -120,6 +120,21 @@ tr { background-color: white; + + &.error { + background-color: #fbecec!important; + + td.active.error { + border-color: #ec0000!important; + + .content-container { + border-color: #ec0000!important; + &:before, &:after { + background-color: #ec0000!important; + } + } + } + } } tr:nth-child(2n) {