UNPKG

alpaca

Version:

Alpaca provides the easiest and fastest way to generate interactive forms for the web and mobile devices. It runs simply as HTML5 or more elaborately using Bootstrap, jQuery Mobile or jQuery UI. Alpaca uses Handlebars to process JSON schema and provide

249 lines (216 loc) 7.12 kB
(function($) { var Alpaca = $.alpaca; Alpaca.Fields.IntegerField = Alpaca.Fields.NumberField.extend( /** * @lends Alpaca.Fields.IntegerField.prototype */ { /** * @see Alpaca.Fields.NumberField#getFieldType */ getFieldType: function() { return "integer"; }, /** * @see Alpaca.Fields.NumberField#getValue */ getControlValue: function() { var val = this.base(); if (typeof(val) == "undefined" || "" == val) { return val; } return parseInt(val, 10); }, /** * @see Alpaca.Field#onChange */ onChange: function(e) { this.base(); if (this.slider) { this.slider.slider("value", this.getValue()); } }, /** * @see Alpaca.Fields.NumberField#postRender */ postRender: function(callback) { var self = this; this.base(function() { if (self.options.slider) { if (!Alpaca.isEmpty(self.schema.maximum) && !Alpaca.isEmpty(self.schema.minimum)) { if (self.control) { self.control.after('<div id="slider"></div>'); self.slider = $('#slider', self.control.parent()).slider({ value: self.getValue(), min: self.schema.minimum, max: self.schema.maximum, slide: function(event, ui) { self.setValue(ui.value); self.refreshValidationState(); } }); } } } callback(); }); }, /** * @see Alpaca.Fields.NumberField#handleValidate */ handleValidate: function() { var baseStatus = this.base(); var valInfo = this.validation; var status = this._validateInteger(); valInfo["stringNotANumber"] = { "message": status ? "" : this.getMessage("stringNotAnInteger"), "status": status }; return baseStatus; }, /** * Validates if it is an integer. * * @returns {Boolean} true if it is an integer */ _validateInteger: function() { // get value as text var textValue = this._getControlVal(); if (typeof(textValue) === "number") { textValue = "" + textValue; } // allow empty if (Alpaca.isValEmpty(textValue)) { return true; } // check if valid integer format var validNumber = Alpaca.testRegex(Alpaca.regexps.integer, textValue); if (!validNumber) { return false; } // quick check to see if what they entered was a number var floatValue = this.getValue(); if (isNaN(floatValue)) { return false; } return true; }, /** * @see Alpaca.Fields.NumberField#getType */ getType: function() { return "integer"; } /* builder_helpers */ , /** * @see Alpaca.Fields.NumberField#getTitle */ getTitle: function() { return "Integer Field"; }, /** * @see Alpaca.Fields.NumberField#getDescription */ getDescription: function() { return "Field for integers."; }, /** * @private * @see Alpaca.Fields.NumberField#getSchemaOfSchema */ getSchemaOfSchema: function() { return Alpaca.merge(this.base(), { "properties": { "minimum": { "title": "Minimum", "description": "Minimum value of the property.", "type": "integer" }, "maximum": { "title": "Maximum", "description": "Maximum value of the property.", "type": "integer" }, "divisibleBy": { "title": "Divisible By", "description": "Property value must be divisible by this number.", "type": "integer" } } }); }, /** * @private * @see Alpaca.Fields.NumberField#getOptionsForSchema */ getOptionsForSchema: function() { return Alpaca.merge(this.base(), { "fields": { "minimum": { "helper": "Minimum value of the field.", "type": "integer" }, "maximum": { "helper": "Maximum value of the field.", "type": "integer" }, "divisibleBy": { "helper": "Property value must be divisible by this number.", "type": "integer" } } }); }, /** * @private * @see Alpaca.Fields.NumberField#getSchemaOfOptions */ getSchemaOfOptions: function() { return Alpaca.merge(this.base(), { "properties": { "slider": { "title": "Slider", "description": "Generate jQuery UI slider control with the field if true.", "type": "boolean", "default": false } } }); }, /** * @private * @see Alpaca.Fields.NumberField#getOptionsForOptions */ getOptionsForOptions: function() { return Alpaca.merge(this.base(), { "fields": { "slider": { "rightLabel": "Slider control ?", "helper": "Generate slider control if selected.", "type": "checkbox" } } }); } /* end_builder_helpers */ }); // Additional Registrations Alpaca.registerMessages({ "stringNotAnInteger": "This value is not an integer." }); Alpaca.registerFieldClass("integer", Alpaca.Fields.IntegerField); Alpaca.registerDefaultSchemaFieldMapping("integer", "integer"); })(jQuery);