+export function debounce(func: any, wait: number = 500, immediate: boolean = false) {
+ // 'private' variable for instance
+ // The returned function will be able to reference this due to closure.
+ // Each call to the returned function will share this common timer.
+ let timeout: number;
+
+ // Calling debounce returns a new anonymous function
+ return function() {
+ // reference the context and args for the setTimeout function
+ var context = this,
+ args = arguments;
+
+ // Should the function be called now? If immediate is true
+ // and not already in a timeout then the answer is: Yes
+ var callNow = immediate && !timeout;
+
+ // This is the basic debounce behaviour where you can call this
+ // function several times, but it will only execute once
+ // [before or after imposing a delay].
+ // Each time the returned function is called, the timer starts over.
+ clearTimeout(timeout);
+
+ // Set the new timeout
+ timeout = setTimeout(function() {
+
+ // Inside the timeout function, clear the timeout variable
+ // which will let the next execution run when in 'immediate' mode
+ timeout = null;
+
+ // Check if the function already ran with the immediate flag
+ if (!immediate) {
+ // Call the original function with apply
+ // apply lets you define the 'this' object as well as the arguments
+ // (both captured before setTimeout)
+ func.apply(context, args);
+ }
+ }, wait);
+
+ // Immediate mode and no wait timer? Execute the function..
+ if (callNow) func.apply(context, args);
+ }
+}
+
+export function getLanguage(): string {
+ return (navigator.language || navigator.userLanguage);
+}
+
+export function getMomentLanguage(): string {
+ let lang = getLanguage();
+ if (lang.startsWith('zh')) {
+ lang = 'zh-cn';
+ } else if (lang.startsWith('sv')) {
+ lang = 'sv';
+ } else if (lang.startsWith('fr')) {
+ lang = 'fr';
+ } else if (lang.startsWith('de')) {
+ lang = 'de';
+ } else if (lang.startsWith('ru')) {
+ lang = 'ru';
+ } else if (lang.startsWith('es')) {
+ lang = 'es';
+ } else if (lang.startsWith('eo')) {
+ lang = 'eo';
+ } else if (lang.startsWith('nl')) {
+ lang = 'nl';
+ } else {
+ lang = 'en';
+ }
+ return lang;
+}