VulpesOS/gaia/tests/jsmarionette/plugins/marionette-plugin-forms/lib/index.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

72 lines
1.7 KiB
JavaScript
Executable file

'use strict';
var formatters = require('./formatters');
function Forms(client) {
this.client = client;
}
/**
* Fill out one or more input elements (regardless of visibility)
* @param {Element} elem The input element to change (when setting a single
* value) or the parent node (when setting multiple
* values).
* @param {object} value The value to set (when setting a single value) or a
* hash of form element names to corresponding values
* (when setting multiple values)
*/
Forms.prototype.fill = function(elem, value, done) {
elem.tagName(function(err, tagName) {
if (tagName === 'form') {
setValues(elem, value, done);
} else {
setValue(elem, value, done);
}
});
};
function setValue(elem, value, done) {
elem.getAttribute('type', function(err, type) {
if (err) {
if (done) {
done(err);
} else {
throw err;
}
return;
}
type = type.trim().toLowerCase();
if (formatters.hasOwnProperty(type)) {
value = formatters[type](value);
}
elem.client.executeScript(function(elem, value) {
elem.value = value;
}, [elem, value], done);
});
}
function setValues(form, values, done) {
var keys = Object.keys(values);
var setCount = keys.length;
var setKey = function() {
setCount--;
if (setCount === 0) {
done && done();
}
};
keys.forEach(function(key) {
form.findElement('[name="' + key + '"]', function(err, elem) {
if (err) {
return;
}
setValue(elem, values[key], setKey);
});
});
}
module.exports = function(client, options) {
return new Forms(client);
};