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

257 lines (233 loc) 9.21 kB
(function($) { var Alpaca = $.alpaca; Alpaca.usHoldings = {}; Alpaca.usHoldings.territories = { "American Samoa" : "AS", "District Of Columbia" : "DC", "Federated States Of Micronesia" : "FM", "Guam" : "GU", "Marshall Islands" : "MH", "Northern Mariana Islands" : "MP", "Palau" : "PW", "Puerto Rico" : "PR", "Virgin Islands" : "VI" }; Alpaca.usHoldings.states = { "Alabama" : "AL", "Alaska" : "AK", "Arizona" : "AZ", "Arkansas" : "AR", "California" : "CA", "Colorado" : "CO", "Connecticut" : "CT", "Delaware" : "DE", "Florida" : "FL", "Georgia" : "GA", "Hawaii" : "HI", "Idaho" : "ID", "Illinois" : "IL", "Indiana" : "IN", "Iowa" : "IA", "Kansas" : "KS", "Kentucky" : "KY", "Louisiana" : "LA", "Maine" : "ME", "Maryland" : "MD", "Massachusetts" : "MA", "Michigan" : "MI", "Minnesota" : "MN", "Mississippi" : "MS", "Missouri" : "MO", "Montana" : "MT", "Nebraska" : "NE", "Nevada" : "NV", "New Hampshire" : "NH", "New Jersey" : "NJ", "New Mexico" : "NM", "New York" : "NY", "North Carolina" : "NC", "North Dakota" : "ND", "Ohio" : "OH", "Oklahoma" : "OK", "Oregon" : "OR", "Pennsylvania" : "PA", "Rhode Island" : "RI", "South Carolina" : "SC", "South Dakota" : "SD", "Tennessee" : "TN", "Texas" : "TX", "Utah" : "UT", "Vermont" : "VT", "Virginia" : "VA", "Washington" : "WA", "West Virginia" : "WV", "Wisconsin" : "WI", "Wyoming" : "WY" }; Alpaca.Fields.StateField = Alpaca.Fields.SelectField.extend( /** * @lends Alpaca.Fields.StateField.prototype */ { /** * @see Alpaca.Fields.TextField#getFieldType */ getFieldType: function() { return "state"; }, /** * @see Alpaca.Fields.TextField#setup */ setup: function() { // defaults if (Alpaca.isUndefined(this.options.capitalize)) { this.options.capitalize = false; } if (Alpaca.isUndefined(this.options.includeStates)) { this.options.includeStates = true; } if (Alpaca.isUndefined(this.options.includeTerritories)) { this.options.includeTerritories = true; } if (Alpaca.isUndefined(this.options.format)) { this.options.format = "name"; } // validate settings if (this.options.format === "name" || this.options.format === "code") { // valid formats } else { Alpaca.logError("The configured state format: " + this.options.format + " is not a legal value [name, code]"); // default to name format this.options.format = "name"; } // configure var holdings = Alpaca.retrieveUSHoldings( this.options.includeStates, this.options.includeTerritories, (this.options.format === "code"), this.options.capitalize); this.schema["enum"] = holdings.keys; this.options.optionLabels = holdings.values; this.base(); } /* builder_helpers */ , /** * @see Alpaca.Fields.TextField#getTitle */ getTitle: function() { return "State Field"; }, /** * @see Alpaca.Fields.TextField#getDescription */ getDescription: function() { return "Provides a dropdown selector of states and/or territories in the United States, keyed by their two-character code."; }, /** * @private * @see Alpaca.Fields.TextField#getSchemaOfOptions */ getSchemaOfOptions: function() { return Alpaca.merge(this.base(), { "properties": { "format": { "title": "Format", "description": "How to represent the state values in the selector", "type": "string", "default": "name", "enum":["name", "code"], "readonly": true }, "capitalize": { "title": "Capitalize", "description": "Whether the values should be capitalized", "type": "boolean", "default": false, "readonly": true }, "includeStates": { "title": "Include States", "description": "Whether to include the states of the United States", "type": "boolean", "default": true, "readonly": true }, "includeTerritories": { "title": "Include Territories", "description": "Whether to include the territories of the United States", "type": "boolean", "default": true, "readonly": true } } }); }, /** * @private * @see Alpaca.Fields.TextField#getOptionsForOptions */ getOptionsForOptions: function() { return Alpaca.merge(this.base(), { "fields": { "format": { "type": "text" }, "capitalize": { "type": "checkbox" }, "includeStates": { "type": "checkbox" }, "includeTerritories": { "type": "checkbox" } } }); } /* end_builder_helpers */ }); Alpaca.registerFieldClass("state", Alpaca.Fields.StateField); Alpaca.registerDefaultFormatFieldMapping("state", "state"); /** * Helper function to retrieve the holdings of US states and territories. * * @param {Boolean} includeStates whether to include US states * @param {Boolean} includeTerritories whether to include US territories * @param {Boolean} codeValue whether to hand back US holding codes (instead of names) * @param {Boolean} capitalize whether to capitalize the values handed back * * @returns {Object} an object containing "keys" and "values", both of which are arrays. */ Alpaca.retrieveUSHoldings = (function() { return function(includeStates, includeTerritories, codeValue, capitalize) { var res = { keys: [], values: [] }; var opts = $.extend( {}, includeStates ? Alpaca.usHoldings.states : {}, includeTerritories ? Alpaca.usHoldings.territories : {} ); var sorted = Object.keys(opts); sorted.sort(); for (var i in sorted) { var state = sorted[i]; var key = opts[state]; var value = codeValue ? key : state; if (capitalize) { value = value.toUpperCase(); } res.keys.push(key); res.values.push(value); } return res; }; })(); })(jQuery);