Global Metrics
path: .metrics.halstead.time
old: 51368.66431056631
new: 51478.2072227886
path: .metrics.halstead.volume
old: 13320.202543623189
new: 13327.586247915664
path: .metrics.halstead.length
old: 1804.0
new: 1805.0
path: .metrics.halstead.bugs
old: 3.1636803537138993
new: 3.1681764242091472
path: .metrics.halstead.purity_ratio
old: 0.6206414153180974
new: 0.6202975696586414
path: .metrics.halstead.difficulty
old: 69.41605839416059
new: 69.52554744525547
path: .metrics.halstead.effort
old: 924635.9575901936
new: 926607.7300101948
path: .metrics.halstead.N2
old: 634.0
new: 635.0
path: .metrics.halstead.level
old: 0.014405888538380651
new: 0.014383202099737534
path: .metrics.mi.mi_original
old: -5.571622460680572
new: -5.5745041454315185
path: .metrics.mi.mi_sei
old: -42.19648578434857
new: -42.20064317664816
Spaces Data
Minimal test - lines (19, 43)
path: .spaces[0].spaces[1].metrics.halstead.volume
old: 411.6441380011882
new: 416.1676999572452
path: .spaces[0].spaces[1].metrics.halstead.length
old: 91.0
new: 92.0
path: .spaces[0].spaces[1].metrics.halstead.effort
old: 11191.575001907304
new: 11704.71656129752
path: .spaces[0].spaces[1].metrics.halstead.purity_ratio
old: 0.9077292190563492
new: 0.8978625971100846
path: .spaces[0].spaces[1].metrics.halstead.N2
old: 29.0
new: 30.0
path: .spaces[0].spaces[1].metrics.halstead.bugs
old: 0.1667783034392754
new: 0.17183805414837336
path: .spaces[0].spaces[1].metrics.halstead.time
old: 621.754166772628
new: 650.2620311831956
path: .spaces[0].spaces[1].metrics.halstead.level
old: 0.0367816091954023
new: 0.035555555555555556
path: .spaces[0].spaces[1].metrics.halstead.difficulty
old: 27.1875
new: 28.125
path: .spaces[0].spaces[1].metrics.mi.mi_original
old: 85.93938362349006
new: 85.88255245672265
path: .spaces[0].spaces[1].metrics.mi.mi_visual_studio
old: 50.25694948742109
new: 50.2237148869723
path: .spaces[0].spaces[1].metrics.mi.mi_sei
old: 74.55947034070917
new: 74.47748029824592
Code
loadRecord(record = {}) {
for (let field of this._elements.form.elements) {
let value = record[field.id];
value = typeof value == "undefined" ? "" : value;
if (record.guid) {
field.value = value;
} else if (field.localName == "select") {
this.setDefaultSelectedOptionByValue(field, value);
} else {
// Use .defaultValue instead of .value to avoid setting the `dirty` flag
// which triggers form validation UI.
field.defaultValue = value;
}
}
if (!record.guid) {
// Reset the dirty value flag and validity state.
this._elements.form.reset();
} else {
for (let field of this._elements.form.elements) {
this.updatePopulatedState(field);
this.updateCustomValidity(field);
}
}
}
Minimal test - lines (10, 137)
path: .spaces[0].metrics.mi.mi_sei
old: 35.86232383748923
new: 35.833960801010264
path: .spaces[0].metrics.mi.mi_original
old: 48.99525513093292
new: 48.97559537216543
path: .spaces[0].metrics.mi.mi_visual_studio
old: 28.652195983001707
new: 28.640699048049957
path: .spaces[0].metrics.halstead.level
old: 0.032667876588021776
new: 0.03229665071770335
path: .spaces[0].metrics.halstead.time
old: 2479.874741900856
new: 2517.88048507175
path: .spaces[0].metrics.halstead.effort
old: 44637.74535421541
new: 45321.8487312915
path: .spaces[0].metrics.halstead.volume
old: 1458.2203563990515
new: 1463.7439183551085
path: .spaces[0].metrics.halstead.bugs
old: 0.419450045172249
new: 0.423724741326362
path: .spaces[0].metrics.halstead.purity_ratio
old: 0.792017368613037
new: 0.789028623825818
path: .spaces[0].metrics.halstead.length
old: 264.0
new: 265.0
path: .spaces[0].metrics.halstead.difficulty
old: 30.61111111111111
new: 30.96296296296296
path: .spaces[0].metrics.halstead.N2
old: 87.0
new: 88.0
Code
class EditAutofillForm {
constructor(elements) {
this._elements = elements;
}
/**
* Fill the form with a record object.
* @param {object} [record = {}]
*/
loadRecord(record = {}) {
for (let field of this._elements.form.elements) {
let value = record[field.id];
value = typeof value == "undefined" ? "" : value;
if (record.guid) {
field.value = value;
} else if (field.localName == "select") {
this.setDefaultSelectedOptionByValue(field, value);
} else {
// Use .defaultValue instead of .value to avoid setting the `dirty` flag
// which triggers form validation UI.
field.defaultValue = value;
}
}
if (!record.guid) {
// Reset the dirty value flag and validity state.
this._elements.form.reset();
} else {
for (let field of this._elements.form.elements) {
this.updatePopulatedState(field);
this.updateCustomValidity(field);
}
}
}
setDefaultSelectedOptionByValue(select, value) {
for (let option of select.options) {
option.defaultSelected = option.value == value;
}
}
/**
* Get a record from the form suitable for a save/update in storage.
* @returns {object}
*/
buildFormObject() {
let initialObject = {};
if (this.hasMailingAddressFields) {
// Start with an empty string for each mailing-address field so that any
// fields hidden for the current country are blanked in the return value.
initialObject = {
"street-address": "",
"address-level3": "",
"address-level2": "",
"address-level1": "",
"postal-code": "",
};
}
return Array.from(this._elements.form.elements).reduce((obj, input) => {
if (!input.disabled) {
obj[input.id] = input.value;
}
return obj;
}, initialObject);
}
/**
* Handle events
*
* @param {DOMEvent} event
*/
handleEvent(event) {
switch (event.type) {
case "change": {
this.handleChange(event);
break;
}
case "input": {
this.handleInput(event);
break;
}
}
}
/**
* Handle change events
*
* @param {DOMEvent} event
*/
handleChange(event) {
this.updatePopulatedState(event.target);
}
/**
* Handle input events
*
* @param {DOMEvent} event
*/
handleInput(event) {}
/**
* Attach event listener
*/
attachEventListeners() {
this._elements.form.addEventListener("input", this);
}
/**
* Set the field-populated attribute if the field has a value.
*
* @param {DOMElement} field The field that will be checked for a value.
*/
updatePopulatedState(field) {
let span = field.parentNode.querySelector(".label-text");
if (!span) {
return;
}
span.toggleAttribute("field-populated", !!field.value.trim());
}
/**
* Run custom validity routines specific to the field and type of form.
*
* @param {DOMElement} field The field that will be validated.
*/
updateCustomValidity(field) {}
}