Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
window.location = `/index.html?thread=${encodeURIComponent(hash)}#/thread`
break
case "&":
window.location = `http://localhost:8989/blobs/get/${hash}`
break
case "@":
window.location = `/index.html?feed=${encodeURIComponent(hash)}#/profile`
break
case "#":
window.location = `/index.html?channel=${hash.replace("#","")}#/channel`
break
}
}
}
const connected = writable(false);
// maybe in the future, migrate routing system to:
// https://github.com/ItalyPaleAle/svelte-spa-router
const route = writable(parseLocation());
const routeParams = derived(route, $route => $route.data)
const routeLocation = derived(route, $route => $route.location)
const navigate = (location, data) => {
data = data || {}
route.set({ location, data });
let dataAsQuery = queryString.stringify(data);
let url = `/index.html?${dataAsQuery}#${location}`;
console.log("navigate url", url)
history.pushState({ location, data }, `Patchfox - ${location}`, `/index.html?${dataAsQuery}#${location}`);
console.log(`Navigate ${location}`, data);
};
once && _teardown();
},
// Handle firebase thrown errors
error => {
console.error(error);
next(null, error);
}
);
// Removes firebase listener when store completes
return () => _teardown();
};
// Svelte store
const store = writable(startWith, start);
const { subscribe, set } = store;
return {
subscribe,
firestore,
ref,
get loading() {
return _loading;
},
get error() {
return _error;
}
};
}
case "@":
window.location = `/index.html?feed=${encodeURIComponent(hash)}#/profile`
break
case "#":
window.location = `/index.html?channel=${hash.replace("#","")}#/channel`
break
}
}
}
const connected = writable(false);
// maybe in the future, migrate routing system to:
// https://github.com/ItalyPaleAle/svelte-spa-router
const route = writable(parseLocation());
const routeParams = derived(route, $route => $route.data)
const routeLocation = derived(route, $route => $route.location)
const navigate = (location, data) => {
data = data || {}
route.set({ location, data });
let dataAsQuery = queryString.stringify(data);
let url = `/index.html?${dataAsQuery}#${location}`;
console.log("navigate url", url)
history.pushState({ location, data }, `Patchfox - ${location}`, `/index.html?${dataAsQuery}#${location}`);
console.log(`Navigate ${location}`, data);
};
const routes = {
"/thread": Thread,
"/public": Public,
return this.banana.i18n(...args);
}
}
let i18n = new I18n('en');
function createTFactory(locale) {
i18n.init(locale);
return i18n.t;
}
// NOTE: "MessageStore" is used so that when the messages have been fetched, every subscription of "t" are rerendered.
const MessageStore = writable({});
// eslint-disable-next-line no-unused-vars
export const t = derived([Locale, MessageStore], ([locale, messageStore]) => {
return createTFactory(locale);
});
// src/auth.js
import { onMount, setContext, getContext } from "svelte";
import { writable } from "svelte/store";
import createAuth0Client from "@auth0/auth0-spa-js";
const isLoading = writable(true);
const isAuthenticated = writable(false);
const authToken = writable("");
const userInfo = writable({});
const authError = writable(null);
const AUTH_KEY = {};
// Default Auth0 expiration time is 10 hours or something like that.
// If you want to get fancy you can parse the JWT token and get
// token's actual expiration time.
const refreshRate = 10 * 60 * 60 * 1000;
function createAuth(config) {
let auth0 = null;
let intervalId = undefined;
// You can use Svelte's hooks in plain JS files. How nice!
onMount(async () => {
import { writable, derived } from 'svelte/store'
// @ts-ignore
import { subscribe__debug } from '@ctx-core/store'
import { _class } from '@ctx-core/html'
import { not } from '@ctx-core/function'
export const __theme__invert = writable(null)
export function invert__theme() {
__theme__invert.update(not)
}
export const __class__theme__invert =
derived(__theme__invert,
theme__invert => _class({ theme__invert }))
GenericHelpers,
StateHelpers,
RoutingHelpers,
IframeHelpers,
AuthHelpers
} from './utilities/helpers';
import { LuigiI18N, LuigiConfig, LuigiElements } from './core-api';
import { Navigation } from './navigation/services/navigation';
import { Routing } from './services/routing';
import { Iframe } from './services/iframe';
import { SplitViewSvc } from './services/split-view';
import { ViewGroupPreloading } from './services/preloading';
import { MessagesListeners } from './services/messages-listeners';
import { thirdPartyCookiesStatus } from './utilities/third-party-cookies-check.js';
const dispatch = createEventDispatcher();
export let store;
export let getTranslation;
let showLoadingIndicator = false;
let mfSplitView = {
displayed: false
};
let splitViewValues;
/// MFs
let modalIframe;
let modalIframeData;
let modal;
let splitViewIframe;
import { readable } from 'svelte/store';
import { RcStream } from './RcStream';
import { OresQueue } from './Ores';
import { filterEvents } from './AppConfig';
/**
* @var {Array>} eventGroups
*
* New events at the front
*/
let eventGroups = [];
export const RcStreamGroups = readable(eventGroups, async (set) => {
RcStream.subscribe((events) => {
if (!events || events.length < 1) {
return;
}
const filteredEvents = filterEvents(events);
const newEventIds = [];
for (const newEvent of filteredEvents) {
newEventIds.push({ revid: newEvent.revision.new, dbName: newEvent.wiki });
}
OresQueue.update((eventIds) => [...eventIds, ...newEventIds]);
for (const newEvent of filteredEvents) {
// TODO: These operations are expensive; O(N) on every new event received; see if we can improve
export function derived__async(stores, fn, initial_value = null) {
const single = !Array.isArray(stores)
if (single) stores = [stores]
const auto = fn.length < 2
let value = {}
return readable(initial_value, set=>{
let inited = false
const values = []
let pending = 0
// @ts-ignore
async function sync():Promise {
if (pending) return
const result = await fn(single ? values[0] : values, set)
if (auto && (value !== (value = result))) set(result)
}
const unsubscribers = stores.map((store, i)=>
subscribe(
store,
value=>{
values[i] = value
pending &= ~(1 << i)
if (inited) sync()
initial_value = { data: initial_value } as any;
} catch (err) {
// Ignore preload errors
}
}
// Create query and observe,
// but don't subscribe directly to avoid firing duplicate value if initialized
const observable_query = client.watchQuery(options);
const { subscribe: subscribe_to_query } = observe(
observable_query,
initial_value
);
// Wrap the query subscription with a readable to prevent duplicate values
const { subscribe } = readable(
(initial_value as unknown) as Deferred,
set => {
subscribed = true;
const skip_duplicate = initial_value !== undefined;
let initialized = false;
let skipped = false;
const unsubscribe = subscribe_to_query(value => {
if (skip_duplicate && initialized && !skipped) {
skipped = true;
} else {
if (!initialized) initialized = true;
set(value);
}
});