You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Connected.Components/TScripts/mudHelpers.js

88 lines
2.9 KiB

2 years ago
// Copyright (c) MudBlazor 2021
// MudBlazor licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
window.getTabbableElements = (element) => {
return element.querySelectorAll(
"a[href]:not([tabindex='-1'])," +
"area[href]:not([tabindex='-1'])," +
"button:not([disabled]):not([tabindex='-1'])," +
"input:not([disabled]):not([tabindex='-1']):not([type='hidden'])," +
"select:not([disabled]):not([tabindex='-1'])," +
"textarea:not([disabled]):not([tabindex='-1'])," +
"iframe:not([tabindex='-1'])," +
"details:not([tabindex='-1'])," +
"[tabindex]:not([tabindex='-1'])," +
"[contentEditable=true]:not([tabindex='-1']"
);
};
//from: https://github.com/RemiBou/BrowserInterop
window.serializeParameter = (data, spec) => {
if (typeof data == "undefined" ||
data === null) {
return null;
}
if (typeof data === "number" ||
typeof data === "string" ||
typeof data == "boolean") {
return data;
}
let res = (Array.isArray(data)) ? [] : {};
if (!spec) {
spec = "*";
}
for (let i in data) {
let currentMember = data[i];
if (typeof currentMember === 'function' || currentMember === null) {
continue;
}
let currentMemberSpec;
if (spec != "*") {
currentMemberSpec = Array.isArray(data) ? spec : spec[i];
if (!currentMemberSpec) {
continue;
}
} else {
currentMemberSpec = "*"
}
if (typeof currentMember === 'object') {
if (Array.isArray(currentMember) || currentMember.length) {
res[i] = [];
for (let j = 0; j < currentMember.length; j++) {
const arrayItem = currentMember[j];
if (typeof arrayItem === 'object') {
res[i].push(this.serializeParameter(arrayItem, currentMemberSpec));
} else {
res[i].push(arrayItem);
}
}
} else {
//the browser provides some member (like plugins) as hash with index as key, if length == 0 we shall not convert it
if (currentMember.length === 0) {
res[i] = [];
} else {
res[i] = this.serializeParameter(currentMember, currentMemberSpec);
}
}
} else {
// string, number or boolean
if (currentMember === Infinity) { //inifity is not serialized by JSON.stringify
currentMember = "Infinity";
}
if (currentMember !== null) { //needed because the default json serializer in jsinterop serialize null values
res[i] = currentMember;
}
}
}
return res;
};