mirror of
https://github.com/zoriya/react-native-web.git
synced 2026-05-29 17:12:37 +00:00
committed by
Nicolas Gallagher
parent
06d3cadf05
commit
ba5e9e3079
@@ -7,7 +7,7 @@
|
|||||||
* @flow
|
* @flow
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function emptyFunction() {}
|
import { canUseDOM } from 'fbjs/lib/ExecutionEnvironment';
|
||||||
|
|
||||||
function isScreenReaderEnabled(): Promise<*> {
|
function isScreenReaderEnabled(): Promise<*> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
@@ -15,6 +15,17 @@ function isScreenReaderEnabled(): Promise<*> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const prefersReducedMotionMedia = canUseDOM
|
||||||
|
? window.matchMedia('(prefers-reduced-motion: reduce)')
|
||||||
|
: null;
|
||||||
|
function isReduceMotionEnabled(): Promise<*> {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
resolve(prefersReducedMotionMedia ? prefersReducedMotionMedia.matches : true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const handlers = {};
|
||||||
|
|
||||||
const AccessibilityInfo = {
|
const AccessibilityInfo = {
|
||||||
/**
|
/**
|
||||||
* Query whether a screen reader is currently enabled.
|
* Query whether a screen reader is currently enabled.
|
||||||
@@ -24,17 +35,37 @@ const AccessibilityInfo = {
|
|||||||
*/
|
*/
|
||||||
isScreenReaderEnabled,
|
isScreenReaderEnabled,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Query whether the user prefers reduced motion.
|
||||||
|
*
|
||||||
|
* Returns a promise which resolves to a boolean.
|
||||||
|
* The result is `true` when a screen reader is enabled and `false` otherwise.
|
||||||
|
*/
|
||||||
|
isReduceMotionEnabled,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deprecated
|
* Deprecated
|
||||||
*/
|
*/
|
||||||
fetch: isScreenReaderEnabled,
|
fetch: isScreenReaderEnabled,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add an event handler. Supported events:
|
* Add an event handler. Supported events: reduceMotionChanged
|
||||||
*/
|
*/
|
||||||
addEventListener: function(eventName: string, handler: Function): Object {
|
addEventListener: function(eventName: string, handler: Function): Object {
|
||||||
|
if (eventName === 'reduceMotionChanged') {
|
||||||
|
if (!prefersReducedMotionMedia) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const listener = event => {
|
||||||
|
handler(event.matches);
|
||||||
|
};
|
||||||
|
prefersReducedMotionMedia.addEventListener('change', listener);
|
||||||
|
handlers[handler] = listener;
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
remove: emptyFunction
|
remove: () => AccessibilityInfo.removeEventListener(eventName, handler)
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -52,6 +83,15 @@ const AccessibilityInfo = {
|
|||||||
* Remove an event handler.
|
* Remove an event handler.
|
||||||
*/
|
*/
|
||||||
removeEventListener: function(eventName: string, handler: Function): void {
|
removeEventListener: function(eventName: string, handler: Function): void {
|
||||||
|
if (eventName === 'reduceMotionChanged') {
|
||||||
|
const listener = handlers[handler];
|
||||||
|
if (!listener || !prefersReducedMotionMedia) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
prefersReducedMotionMedia.removeEventListener('change', listener);
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user