@nativescript/core
Version:
A JavaScript library providing an easy to use api for interacting with iOS and Android platform APIs.
64 lines • 2.02 kB
JavaScript
const lastFocusedViewOnPageKeyName = '__lastFocusedViewOnPage';
export const accessibilityBlurEvent = 'accessibilityBlur';
export const accessibilityFocusEvent = 'accessibilityFocus';
export const accessibilityFocusChangedEvent = 'accessibilityFocusChanged';
export const accessibilityPerformEscapeEvent = 'accessibilityPerformEscape';
/**
* Send notification when accessibility focus state changes.
* If either receivedFocus or lostFocus is true, 'accessibilityFocusChanged' is send with value true if element received focus
* If receivedFocus, 'accessibilityFocus' is send
* if lostFocus, 'accessibilityBlur' is send
*
* @param {View} view
* @param {boolean} receivedFocus
* @param {boolean} lostFocus
*/
export function notifyAccessibilityFocusState(view, receivedFocus, lostFocus) {
if (!receivedFocus && !lostFocus) {
return;
}
view.notify({
eventName: accessibilityFocusChangedEvent,
object: view,
value: !!receivedFocus,
});
if (receivedFocus) {
if (view.page) {
view.page[lastFocusedViewOnPageKeyName] = new WeakRef(view);
}
view.notify({
eventName: accessibilityFocusEvent,
object: view,
});
}
else if (lostFocus) {
view.notify({
eventName: accessibilityBlurEvent,
object: view,
});
}
}
export function getLastFocusedViewOnPage(page) {
try {
const lastFocusedViewRef = page[lastFocusedViewOnPageKeyName];
if (!lastFocusedViewRef) {
return null;
}
const lastFocusedView = lastFocusedViewRef.deref();
if (!lastFocusedView) {
return null;
}
if (!lastFocusedView.parent || lastFocusedView.page !== page) {
return null;
}
return lastFocusedView;
}
catch {
// ignore
}
finally {
delete page[lastFocusedViewOnPageKeyName];
}
return null;
}
//# sourceMappingURL=accessibility-common.js.map