I haven’t been able to find any good guides on how to make your own Meteor packages, so I just kind of blindly took a shot at this. It’s nothing special, just a simple form validator that checks for blank fields. Code is below.
One thing I’m not clear about is how to namespace this thing. How do I name the function so that it doesn’t potentially conflict with something else (FormValidator is a fairly generic name). Of course, if I’ve done anything else wrong here, feel free to chime in.
csjFormValidator = function(form, options) {
// Override any default values. Defaults work well with Bootstrap 3
var o = $.extend({}, {
errorClass: 'has-error',
reqFieldSelector: '[data-required]',
addErrClassTo: '.form-group'
}, options);
$(form).find(o.reqFieldSelector).each(function() {
if ($(this).val() === '') {
$inputField = $(this);
$errField = $inputField.closest(o.addErrClassTo);
$errField.addClass(o.errorClass);
$inputField.on('focus', function() {
$(this).closest(o.addErrClassTo).removeClass(o.errorClass);
});
}
});
};
Oh, and this doesn’t yet return a true/false value yet (as it should). Still a work-in-progress.
Hey, can you post your package.js file? This is where you control exports, file load order, etc.
Here’s an example package.js file: https://github.com/max-leportlabs/maxharris9-straightsix/blob/master/package.js
Sure @maxharris9
Package.describe({
name: 'captsaltyjack:form-validator',
version: '1.0.0',
// Brief, one-line summary of the package.
summary: '',
// URL to the Git repository containing the source code for this package.
git: '',
// By default, Meteor will default to using README.md for documentation.
// To avoid submitting documentation, set this field to null.
documentation: 'README.md'
});
Package.onUse(function(api) {
api.versionsFrom('1.0.4.2');
api.addFiles('form-validator.js');
api.use(['jquery']);
api.export('csjFormValidator', 'client');
});
Package.onTest(function(api) {
api.use('tinytest');
api.use('captsaltyjack:form-validator');
api.addFiles('form-validator-tests.js');
});
What you could do is to enclose the function within a namespace that will most likely be unique.
csFV = {}
csFV.csjFormValidator = function(form, options) {/* ... */}
api.export('csFV', 'client');
At this point you don’t worry about conflicting internal names that you want to expose. Therefore you can do this:
csFV.validateForm = function(form, options) {/* ... */}
csFV.validateField = function(field, options) {/* ... */}
csFV.validateButContinueAnyway = function(form, options) {/* ... */}
1 Like