Skip to content

Commit

Permalink
[Fix] ES3: use object-keys instead of Object.keys.
Browse files Browse the repository at this point in the history
  • Loading branch information
ljharb committed Oct 25, 2016
1 parent bf62455 commit 571d84c
Show file tree
Hide file tree
Showing 6 changed files with 25 additions and 19 deletions.
13 changes: 7 additions & 6 deletions lib/forms.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ var querystring = require('qs');
var parse = require('url').parse;
var formidable = require('formidable');
var assign = require('object.assign');
var keys = require('object-keys');

exports.widgets = require('./widgets');
exports.fields = require('./fields');
Expand All @@ -18,7 +19,7 @@ exports.create = function (fields, options) {

var validatePastFirstError = !!opts.validatePastFirstError;

Object.keys(fields).forEach(function (k) {
keys(fields).forEach(function (k) {
// if it's not a field object, create an object field.
if (!is.fn(fields[k].toHTML) && is.object(fields[k])) {
fields[k] = exports.fields.object(fields[k], opts);
Expand All @@ -32,19 +33,19 @@ exports.create = function (fields, options) {
toHTML: f.toHTML,
fields: {}
};
Object.keys(f.fields).forEach(function (k) {
keys(f.fields).forEach(function (k) {
if (data != null || f.fields[k].required) {
b.fields[k] = f.fields[k].bind((data || {})[k]);
}
});
b.data = Object.keys(b.fields).reduce(function (a, k) {
b.data = keys(b.fields).reduce(function (a, k) {
a[k] = b.fields[k].data;
return a;
}, {});
b.validate = function () {
var callback = arguments.length > 1 ? arguments[1] : arguments[0];

async.forEach(Object.keys(b.fields), function (k, asyncCallback) {
async.forEach(keys(b.fields), function (k, asyncCallback) {
b.fields[k].validate(b, function (err, bound_field) {
b.fields[k] = bound_field;
asyncCallback(validatePastFirstError ? null : err);
Expand All @@ -55,7 +56,7 @@ exports.create = function (fields, options) {
};
b.isValid = function () {
var form = this;
return Object.keys(form.fields).every(function (k) {
return keys(form.fields).every(function (k) {
var field = form.fields[k];
if (is.fn(field.isValid)) { return field.isValid(); }
return field.error === null || typeof field.error === 'undefined';
Expand Down Expand Up @@ -104,7 +105,7 @@ exports.create = function (fields, options) {
var iterator = arguments.length > 1 ? arguments[1] : arguments[0];
var name = arguments.length > 1 ? arguments[0] : void 0;

return Object.keys(form.fields).reduce(function (html, k) {
return keys(form.fields).reduce(function (html, k) {
var kname = is.string(name) ? name + '[' + k + ']' : k;
return html + form.fields[k].toHTML(kname, iterator);
}, '');
Expand Down
3 changes: 2 additions & 1 deletion lib/tag.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

var htmlEscape = require('./htmlEscape');
var is = require('is');
var keys = require('object-keys');

// generates a string for common HTML tag attributes
var attrs = function attrs(a) {
Expand All @@ -13,7 +14,7 @@ var attrs = function attrs(a) {
}
a.classes = null;
var pairs = [];
Object.keys(a).forEach(function (field) {
keys(a).forEach(function (field) {
var value = a[field];
if (typeof value === 'boolean') {
value = value ? field : null;
Expand Down
11 changes: 6 additions & 5 deletions lib/widgets.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
'use strict';

var is = require('is');
var keys = require('object-keys');
var tag = require('./tag');

var dataRegExp = /^data-[a-z]+([-][a-z]+)*$/;
var ariaRegExp = /^aria-[a-z]+$/;
var legalAttrs = ['autocomplete', 'autocorrect', 'autofocus', 'autosuggest', 'checked', 'dirname', 'disabled', 'tabindex', 'list', 'max', 'maxlength', 'min', 'multiple', 'novalidate', 'pattern', 'placeholder', 'readonly', 'required', 'size', 'step'];
var ignoreAttrs = ['id', 'name', 'class', 'classes', 'type', 'value'];
var getUserAttrs = function (opt) {
return Object.keys(opt).reduce(function (attrs, k) {
return keys(opt).reduce(function (attrs, k) {
if ((ignoreAttrs.indexOf(k) === -1 && legalAttrs.indexOf(k) > -1) || dataRegExp.test(k) || ariaRegExp.test(k)) {
attrs[k] = opt[k];
}
Expand Down Expand Up @@ -108,7 +109,7 @@ exports.select = function (options) {
var userAttrs = getUserAttrs(opt);
w.toHTML = function (name, field) {
var f = field || {};
var optionsHTML = Object.keys(f.choices).reduce(function (html, k) {
var optionsHTML = keys(f.choices).reduce(function (html, k) {
return html + tag('option', {
value: k,
selected: !!(f.value && String(f.value) === String(k))
Expand Down Expand Up @@ -155,7 +156,7 @@ exports.multipleCheckbox = function (options) {
var userAttrs = getUserAttrs(opt);
w.toHTML = function (name, field) {
var f = field || {};
return Object.keys(f.choices).reduce(function (html, k) {
return keys(f.choices).reduce(function (html, k) {
// input element
var id = f.id === false ? false : (f.id ? f.id + '_' + k : 'id_' + name + '_' + k);
var checked = f.value && (is.array(f.value) ? f.value.some(function (v) { return String(v) === String(k); }) : String(f.value) === String(k));
Expand Down Expand Up @@ -203,7 +204,7 @@ exports.multipleRadio = function (options) {
var userAttrs = getUserAttrs(opt);
w.toHTML = function (name, field) {
var f = field || {};
return Object.keys(f.choices).reduce(function (html, k) {
return keys(f.choices).reduce(function (html, k) {
// input element
var id = f.id === false ? false : (f.id ? f.id + '_' + k : 'id_' + name + '_' + k);
var checked = f.value && (is.array(f.value) ? f.value.some(function (v) { return String(v) === String(k); }) : String(f.value) === String(k));
Expand Down Expand Up @@ -234,7 +235,7 @@ exports.multipleSelect = function (options) {
var userAttrs = getUserAttrs(opt);
w.toHTML = function (name, field) {
var f = field || {};
var optionsHTML = Object.keys(f.choices).reduce(function (html, k) {
var optionsHTML = keys(f.choices).reduce(function (html, k) {
var selected = f.value && (is.array(f.value) ? f.value.some(function (v) { return String(v) === String(k); }) : String(f.value) === String(k));
return html + tag('option', {
value: k,
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
"formidable": "^1.0.17",
"is": "^3.1.0",
"object.assign": "^4.0.4",
"object-keys": "^1.0.11",
"string.prototype.trim": "^1.1.2"
},
"devDependencies": {
Expand Down
9 changes: 5 additions & 4 deletions test/test-form.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ var forms = require('../lib/forms');
var is = require('is');
var http = require('http');
var test = require('tape');
var keys = require('object-keys');

test('bind', function (t) {
t.plan(12);
Expand Down Expand Up @@ -272,13 +273,13 @@ test('handle sends callbacks', function (t) {
};
f.handle({}, {
empty: function testing(form, callbacks) {
t.equal(Object.keys(callbacks).length, 1);
t.equal(keys(callbacks).length, 1);
t.equal(typeof callbacks.empty, 'function');
}
});
f.handle({ field1: 'test' }, {
success: function testing(form, callbacks) {
t.equal(Object.keys(callbacks).length, 1);
t.equal(keys(callbacks).length, 1);
t.equal(typeof callbacks.success, 'function');
}
});
Expand All @@ -290,15 +291,15 @@ test('handle sends callbacks', function (t) {
f.handle({ field1: 'test' }, {
success: function yay() {},
error: function nay(form, callbacks) {
t.equal(Object.keys(callbacks).length, 2);
t.equal(keys(callbacks).length, 2);
t.equal(typeof callbacks.success, 'function');
t.equal(typeof callbacks.error, 'function');
}
});

f.handle({ field1: 'test' }, {
other: function testing(form, callbacks) {
t.equal(Object.keys(callbacks).length, 1);
t.equal(keys(callbacks).length, 1);
t.equal(typeof callbacks.other, 'function');
}
});
Expand Down
7 changes: 4 additions & 3 deletions test/test-widgets.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

var forms = require('../lib/forms');
var test = require('tape');
var keys = require('object-keys');

var test_input = function (type) {
return function (t) {
Expand Down Expand Up @@ -601,10 +602,10 @@ test('label', function (t) {
});

test('dynamic widget attributes', function (t) {
var keys = Object.keys(forms.widgets);
t.plan(keys.length);
var theKeys = keys(forms.widgets);
t.plan(theKeys.length);
var re = /autocomplete="no"/;
keys.forEach(function (name) {
theKeys.forEach(function (name) {
var w = forms.widgets[name]();
w.attrs = { autocomplete: 'no' };
var html = w.toHTML('test', { choices: { foo: 'bar' } });
Expand Down

0 comments on commit 571d84c

Please sign in to comment.