59 lines
1.5 KiB
JavaScript
59 lines
1.5 KiB
JavaScript
const DRAG_DROP_STORAGE_KEY = "bugreport_drag_drop_enabled";
|
|
const DRAG_DROP_MEDIA_QUERY = "(max-width: 768px), (any-pointer: coarse)";
|
|
|
|
let sessionDragDropPreference = null;
|
|
|
|
function getStorage() {
|
|
try {
|
|
if (typeof window !== "undefined" && window.localStorage) {
|
|
return window.localStorage;
|
|
}
|
|
} catch (error) {
|
|
return null;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
export function getDragDropMediaQuery() {
|
|
if (typeof window === "undefined" || typeof window.matchMedia !== "function") {
|
|
return null;
|
|
}
|
|
return window.matchMedia(DRAG_DROP_MEDIA_QUERY);
|
|
}
|
|
|
|
export function getDragDropPreference() {
|
|
if (sessionDragDropPreference != null) return sessionDragDropPreference;
|
|
|
|
let storage = getStorage();
|
|
if (storage != null) {
|
|
try {
|
|
let storedPreference = storage.getItem(DRAG_DROP_STORAGE_KEY);
|
|
if (storedPreference === "true") return true;
|
|
if (storedPreference === "false") return false;
|
|
} catch (error) {
|
|
return null;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
export function getDragDropEnabled(mediaQuery = null) {
|
|
let preference = getDragDropPreference();
|
|
if (preference != null) return preference;
|
|
|
|
if (mediaQuery == null) mediaQuery = getDragDropMediaQuery();
|
|
return mediaQuery == null || !mediaQuery.matches;
|
|
}
|
|
|
|
export function setDragDropEnabled(enabled) {
|
|
sessionDragDropPreference = enabled;
|
|
let storage = getStorage();
|
|
if (storage == null) return;
|
|
|
|
try {
|
|
storage.setItem(DRAG_DROP_STORAGE_KEY, String(enabled));
|
|
} catch (error) {
|
|
// The in-memory preference still applies until the page is reloaded.
|
|
}
|
|
}
|