Git Komut Rehberi & Terminal Asistanı
Sıfırdan Yeni Bir Depo Başlatın:
Mevcut Bir Git Deposu veya Klasörü Gönderin:
Hataları Geri Alma, İptal & Temizlik:
Son commit'i geri al (yapılan değişiklikleri korur):
git reset --soft HEAD~1
Yapılan yerel değişiklikleri iptal et (çalışma ağacını temizler):
git restore .
Takip edilmeyen gereksiz dosyaları sil:
git clean -fd
Değişiklikleri geçici sakla ve geri getir (stash):
git stash git stash pop
Dal (Branch) ve Sürüm Etiketleri:
Yeni dal aç ve geçiş yap:
git checkout -b yeni-ozellik git push -u origin yeni-ozellik
Sürüm etiketi (tag) oluştur ve gönder:
git tag -a v1.0.0 -m "Sürüm 1.0.0" git push origin --tags
51 lines
2.1 KiB
PHP
51 lines
2.1 KiB
PHP
<?php
|
||
|
||
namespace YakNet\AccessibilityConsole\Rules;
|
||
|
||
use DOMElement;
|
||
use YakNet\AccessibilityConsole\Core\Severity;
|
||
use YakNet\AccessibilityConsole\Core\Violation;
|
||
use YakNet\AccessibilityConsole\Core\WCAGStandard;
|
||
|
||
class InteractiveRoleTabindex extends AbstractRule
|
||
{
|
||
public function getId(): string { return 'WCAG_2_1_1_ROLE_TABINDEX'; }
|
||
public function getDescription(): string { return 'Elements with interactive ARIA roles must be focusable.'; }
|
||
public function getStandard(): WCAGStandard { return WCAGStandard::A; }
|
||
public function getSeverity(): Severity { return Severity::ERROR; }
|
||
public function getLevel(): int { return 3; }
|
||
|
||
public function check(DOMElement $element): ?Violation
|
||
{
|
||
$role = strtolower($element->getAttribute('role'));
|
||
$interactiveRoles = ['button', 'link', 'checkbox', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'radio', 'searchbox', 'slider', 'spinbutton', 'switch', 'tab', 'textbox', 'combobox', 'gridcell'];
|
||
|
||
if (empty($role) || !in_array($role, $interactiveRoles)) {
|
||
return null;
|
||
}
|
||
|
||
if ($element->hasAttribute('tabindex')) {
|
||
return null;
|
||
}
|
||
|
||
$tagName = strtolower($element->tagName);
|
||
$focusableNative = ['button', 'input', 'select', 'textarea', 'summary', 'details'];
|
||
if (in_array($tagName, $focusableNative)) {
|
||
return null;
|
||
}
|
||
|
||
if ($tagName === 'a' && $element->hasAttribute('href')) {
|
||
return null;
|
||
}
|
||
if (($tagName === 'audio' || $tagName === 'video') && $element->hasAttribute('controls')) {
|
||
return null;
|
||
}
|
||
|
||
return $this->createViolation(
|
||
$element,
|
||
'Etkileşimli bir role ('.$role.') sahip olan öğe klavye ile odaklanılabilir (focusable) değil. / Element with interactive role ('.$role.') is not focusable.',
|
||
'Öğeye tabindex="0" (veya uygun tabindex değeri) ekleyerek odaklanılabilir hale getirin. / Add tabindex="0" to make the element focusable.'
|
||
);
|
||
}
|
||
}
|