jQuery(document).ready(function($) {
// תיקון שדות ללא label
$('input, textarea, select').not('[type="hidden"], [type="submit"], [type="button"]').each(function() {
var $field = $(this);
var id = $field.attr('id');
var hasLabel = false;
// בדוק אם יש label או aria-label
if ($field.attr('aria-label') || $field.attr('aria-labelledby')) {
hasLabel = true;
} else if (id) {
hasLabel = $('label[for="' + id + '"]').length > 0;
}
if (!hasLabel) {
var labelText = $field.attr('placeholder') || $field.attr('name') || 'שדה קלט';
$field.attr('aria-label', labelText);
}
// שדות חובה
if ($field.attr('required') && !$field.attr('aria-required')) {
$field.attr('aria-required', 'true');
}
});
// תיקון כפתורים ללא תיאור
$('button').each(function() {
var $btn = $(this);
var text = $btn.text().trim();
if (!text && !$btn.attr('aria-label') && !$btn.attr('aria-labelledby')) {
var title = $btn.attr('title') || 'כפתור';
$btn.attr('aria-label', title);
}
});
// הוספת role לאלרטים
$('.alert, .notice, .error, .warning, .success').attr('role', 'alert').attr('aria-live', 'polite');
});
jQuery(document).ready(function($) {
// הוסף landmarks חסרים
if (!$('main, [role="main"]').length) {
var $content = $('.content, .main-content, #content, #main').first();
if ($content.length) {
$content.attr('role', 'main').attr('id', 'main');
}
}
// הוסף role לניווט
$('.menu, .nav, .navigation, nav').not('[role]').attr('role', 'navigation');
// הוסף role לסיידבר
$('.sidebar, .widget-area, aside').not('[role]').attr('role', 'complementary');
// הוסף tabindex לאלמנטים אינטראקטיביים
$('.card, .post-item, [onclick]').not('a, button, input, textarea, select, summary, [role="button"], [tabindex], #sx-access, #sx-access *').attr('tabindex', '0');
// טיפול ב-Enter על אלמנטים עם tabindex
$('[tabindex="0"]').on('keydown', function(e) {
if (e.key === 'Enter' || e.key === ' ') {
e.preventDefault();
$(this).click();
}
});
});
// Check if the plugin is loaded only once
if (typeof window.maspikLoaded === "undefined") {
window.maspikLoaded = true;
// Function to check if form should be excluded
function shouldExcludeForm(form) {
// Check role/aria for search
var role = (form.getAttribute('role') || '').toLowerCase();
if (role === 'search') { return true; }
var aria = (form.getAttribute('aria-label') || '').toLowerCase();
if (aria.indexOf('search') !== -1) { return true; }
// Check action URL for search patterns
var action = (form.getAttribute('action') || '').toLowerCase();
if (action.indexOf('?s=') !== -1 || action.indexOf('search=') !== -1 || /\/search(\/?|\?|$)/.test(action)) {
return true;
}
// Check form classes
var classes = form.className.split(' ');
if (classes.some(function(className) {
return className.toLowerCase().includes('search');
})) {
return true;
}
// Check for search inputs inside the form
var searchInputs = form.querySelectorAll('input[type="search"], input.search, .search input, input[class*="search"], input[id*="search"], input[name="s"], input[name*="search"]');
if (searchInputs.length > 0) {
return true;
}
// Check for search-related classes in child elements
var searchElements = form.querySelectorAll('.search, [class*="search"], [id*="search"], [aria-label*="search" i]');
if (searchElements.length > 0) {
return true;
}
return false;
}
function isGetForm(form) {
var method = (form.getAttribute("method") || "get").toLowerCase();
return method === "get";
}
// Function to add the hidden fields
function addMaspikHiddenFields(form) {
// Check if the fields already exist
if (form.querySelector(".maspik-field")) return;
// Check if the form is already submitted
if (form.dataset.maspikProcessed) return;
form.dataset.maspikProcessed = true;
// Common attributes for the fields
var commonAttributes = {
"aria-hidden": "true",
tabindex: "-1",
autocomplete: "off",
class: "maspik-field"
};
var hiddenFieldStyles = {
position: "absolute",
left: "-99999px"
};
// Function to create a hidden field
function createHiddenField(attributes, styles) {
var field = document.createElement("input");
for (var attr in attributes) {
field.setAttribute(attr, attributes[attr]);
}
for (var style in styles) {
field.style[style] = styles[style];
}
return field;
}
// Add Honeypot field if enabled
var honeypot = createHiddenField({
type: "text",
name: "full-name-maspik-hp",
class: form.className + " maspik-field",
placeholder: "השאר שדה זה ריק",
"aria-label": "השאר שדה זה ריק"
}, hiddenFieldStyles);
form.appendChild(honeypot);
}
//on load
document.addEventListener("DOMContentLoaded", function() {
var forms = document.querySelectorAll("form");
forms.forEach(function(form) {
// Only add fields if form is not excluded and not method="get"
if (!shouldExcludeForm(form) && !isGetForm(form)) {
addMaspikHiddenFields(form);
}
});
});
// Add the fields when the form is submitted
document.addEventListener("submit", function(e) {
if (e.target.tagName === "FORM") {
// Only add fields if form is not excluded and not method="get"
if (!shouldExcludeForm(e.target) && !isGetForm(e.target)) {
addMaspikHiddenFields(e.target);
}
}
}, true);
}