I noticed that when creating a shareable calculator link, it wasn’t properly escaping the memo field. While technically it was still a valid URI, when pasting into email clients and such the auto link parsing would fail and could cut off the link.
I looked at the code and simplified the encoding and creation of the shareable link, fixing the issue.
The following is a drop-in replacement for the writeQuery
function on line 1212 of the calculator page:
function writeQuery() {
var params = [
['make', $("#make_dropdown option:selected").val()],
['miles', $("#miles option:selected").val()],
['msd', $("#msd option:selected").val()],
], calc_url;
inputArr.forEach(function(name) {
params.push([name, $("#" + name).val()]);
});
checkArr.forEach(function(name) {
if ($("#" + name).is(":checked")) {
params.push([name, 'true']);
}
});
calc_url = written_url + params.map(function(param) {
// No keys are currently unsafe, but might as well encode both
return encodeURIComponent(param[0]) + '=' + encodeURIComponent(param[1])
}).join('&');
console.log(calc_url); // Previous version logged to console
$("#display_url").val(calc_url).select();
document.execCommand("copy");
}
This properly encodes both the keys and values before adding to query string.
Then on the parsing side, you just have to update lines 1171, 1172 of the parseQuery
function to properly decode:
var queryKey = decodeURIComponent(splitArray[0]);
var queryValue = decodeURIComponent(splitArray[1]);
And in line 1178 you can then do away with all the manual regex find/replace and set value with:
$("#" + inputArr[n]).val(queryValue);
That’s my way of saying thanks for a helpful site… hopefully saving you a few minutes of bug fixing time.