I created a Greasemonkey script to allow me to quickly fill a specific form on a specific URL, for testing/dev purposes. If the current URL matches any of the urls found in the formsDefault array a button is added to the page that allows the user to auto fill with the default values.
This is my first time using arrow functions in JS.
/*jshint esversion: 6 */
(function($) {
'use strict';
var formDefaults = [
{
urlPattern : '/profile/user',
valueSet : [
{ selector : '#username', value : 'bill' },
{ selector : '#lastname', value : 'miller' },
{ selector : '#auth_pin', value : '1234' },
]
},
{
urlPattern : '/profile/company',
valueSet : [
{ selector : '#companyname', value : 'bill' },
{ selector : '#state', value : 'washington' },
]
},
];
var formFiller = {
valueSet : null,
run(formDefaults) {
var valueSetObj = this.tryEachPattern(this);
if (valueSetObj !== null) {
this.valueSet = valueSetObj.valueSet;
this.showFormFillButton(this);
}
},
tryEachPattern : (_this) => {
var valueSetObj = null;
for (var i = formDefaults.length - 1; i >= 0; i--) {
valueSetObj = formDefaults[i];
var matched = _this.matchUrl(_this, valueSetObj.urlPattern);
if (matched === true)
{
break;
}
}
return valueSetObj;
},
matchUrl : (_this, urlPattern) => {
var matched = !!location.href.match(urlPattern);
return matched;
},
fillForm : (_this) => {
var valueSet = _this.valueSet;
for (var i = valueSet.length - 1; i >= 0; i--) {
var value = valueSet[i];
$(value.selector).val(value.value);
}
},
showFormFillButton : (_this) => {
var button = $('<button type="button" style="position: absolute; right: 10px; bottom: 10px">Auto Fill</button>');
button.on('click', function(event) {
event.preventDefault();
_this.fillForm(_this);
});
$('body').append(button);
},
};
// Ready, set, go
formFiller.run(formDefaults);
})(jQuery);