From 73e265d8fd050ae3daa67472b4465a5c49d68910 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sat, 20 Apr 2019 15:18:33 +0300 Subject: Include to Wekan packages directory contents, so that meteor command would build all directly. This also simplifies build scripts. Thanks to xet7 ! --- packages/meteor-useraccounts-core/lib/field.js | 292 +++++++++++++++++++++++++ 1 file changed, 292 insertions(+) create mode 100644 packages/meteor-useraccounts-core/lib/field.js (limited to 'packages/meteor-useraccounts-core/lib/field.js') diff --git a/packages/meteor-useraccounts-core/lib/field.js b/packages/meteor-useraccounts-core/lib/field.js new file mode 100644 index 00000000..c3ecfbb9 --- /dev/null +++ b/packages/meteor-useraccounts-core/lib/field.js @@ -0,0 +1,292 @@ +// --------------------------------------------------------------------------------- +// Field object +// --------------------------------------------------------------------------------- + +Field = function(field) { + check(field, FIELD_PAT); + _.defaults(this, field); + + this.validating = new ReactiveVar(false); + this.status = new ReactiveVar(null); +}; + +if (Meteor.isClient) { + Field.prototype.clearStatus = function() { + return this.status.set(null); + }; +} + +if (Meteor.isServer) { + Field.prototype.clearStatus = function() { + // Nothing to do server-side + return; + }; +} + +Field.prototype.fixValue = function(value) { + if (this.type === "checkbox") { + return !!value; + } + + if (this.type === "select") { + // TODO: something working... + return value; + } + + if (this.type === "radio") { + // TODO: something working... + return value; + } + + // Possibly applies required transformations to the input value + if (this.trim) { + value = value.trim(); + } + + if (this.lowercase) { + value = value.toLowerCase(); + } + + if (this.uppercase) { + value = value.toUpperCase(); + } + + if (!!this.transform) { + value = this.transform(value); + } + + return value; +}; + +if (Meteor.isClient) { + Field.prototype.getDisplayName = function(state) { + var displayName = this.displayName; + + if (_.isFunction(displayName)) { + displayName = displayName(); + } else if (_.isObject(displayName)) { + displayName = displayName[state] || displayName["default"]; + } + + if (!displayName) { + displayName = capitalize(this._id); + } + + return displayName; + }; +} + +if (Meteor.isClient) { + Field.prototype.getPlaceholder = function(state) { + var placeholder = this.placeholder; + + if (_.isObject(placeholder)) { + placeholder = placeholder[state] || placeholder["default"]; + } + + if (!placeholder) { + placeholder = capitalize(this._id); + } + + return placeholder; + }; +} + +Field.prototype.getStatus = function() { + return this.status.get(); +}; + +if (Meteor.isClient) { + Field.prototype.getValue = function(templateInstance) { + if (this.type === "checkbox") { + return !!(templateInstance.$("#at-field-" + this._id + ":checked").val()); + } + + if (this.type === "radio") { + return templateInstance.$("[name=at-field-"+ this._id + "]:checked").val(); + } + + return templateInstance.$("#at-field-" + this._id).val(); + }; +} + +if (Meteor.isClient) { + Field.prototype.hasError = function() { + return this.negativeValidation && this.status.get(); + }; +} + +if (Meteor.isClient) { + Field.prototype.hasIcon = function() { + if (this.showValidating && this.isValidating()) { + return true; + } + + if (this.negativeFeedback && this.hasError()) { + return true; + } + + if (this.positiveFeedback && this.hasSuccess()) { + return true; + } + }; +} + +if (Meteor.isClient) { + Field.prototype.hasSuccess = function() { + return this.positiveValidation && this.status.get() === false; + }; +} + +if (Meteor.isClient) + Field.prototype.iconClass = function() { + if (this.isValidating()) { + return AccountsTemplates.texts.inputIcons["isValidating"]; + } + + if (this.hasError()) { + return AccountsTemplates.texts.inputIcons["hasError"]; + } + + if (this.hasSuccess()) { + return AccountsTemplates.texts.inputIcons["hasSuccess"]; + } + }; + +if (Meteor.isClient) { + Field.prototype.isValidating = function() { + return this.validating.get(); + }; +} + +if (Meteor.isClient) { + Field.prototype.setError = function(err) { + check(err, Match.OneOf(String, undefined, Boolean)); + + if (err === false) { + return this.status.set(false); + } + + return this.status.set(err || true); + }; +} + +if (Meteor.isServer) { + Field.prototype.setError = function(err) { + // Nothing to do server-side + return; + }; +} + +if (Meteor.isClient) { + Field.prototype.setSuccess = function() { + return this.status.set(false); + }; +} + +if (Meteor.isServer) { + Field.prototype.setSuccess = function() { + // Nothing to do server-side + return; + }; +} + +if (Meteor.isClient) { + Field.prototype.setValidating = function(state) { + check(state, Boolean); + return this.validating.set(state); + }; +} + +if (Meteor.isServer) { + Field.prototype.setValidating = function(state) { + // Nothing to do server-side + return; + }; +} + +if (Meteor.isClient) { + Field.prototype.setValue = function(templateInstance, value) { + if (this.type === "checkbox") { + templateInstance.$("#at-field-" + this._id).prop('checked', true); + return; + } + + if (this.type === "radio") { + templateInstance.$("[name=at-field-"+ this._id + "]").prop('checked', true); + return; + } + + templateInstance.$("#at-field-" + this._id).val(value); + }; +} + +Field.prototype.validate = function(value, strict) { + check(value, Match.OneOf(undefined, String, Boolean)); + this.setValidating(true); + this.clearStatus(); + + if (_.isUndefined(value) || value === '') { + if (!!strict) { + if (this.required) { + this.setError(AccountsTemplates.texts.requiredField); + this.setValidating(false); + + return AccountsTemplates.texts.requiredField; + } else { + this.setSuccess(); + this.setValidating(false); + + return false; + } + } else { + this.clearStatus(); + this.setValidating(false); + + return null; + } + } + + var valueLength = value.length; + var minLength = this.minLength; + if (minLength && valueLength < minLength) { + this.setError(AccountsTemplates.texts.minRequiredLength + ": " + minLength); + this.setValidating(false); + + return AccountsTemplates.texts.minRequiredLength + ": " + minLength; + } + + var maxLength = this.maxLength; + if (maxLength && valueLength > maxLength) { + this.setError(AccountsTemplates.texts.maxAllowedLength + ": " + maxLength); + this.setValidating(false); + + return AccountsTemplates.texts.maxAllowedLength + ": " + maxLength; + } + + if (this.re && valueLength && !value.match(this.re)) { + this.setError(this.errStr); + this.setValidating(false); + + return this.errStr; + } + + if (this.func) { + var result = this.func(value); + var err = result === true ? this.errStr || true : result; + + if (_.isUndefined(result)) { + return err; + } + + this.status.set(err); + this.setValidating(false); + + return err; + } + + this.setSuccess(); + this.setValidating(false); + + return false; +}; -- cgit v1.2.3-1-g7c22