mirror of
https://github.com/gristlabs/grist-core.git
synced 2026-03-02 04:09:24 +00:00
support other SQLite wrappers, and various hooks needed by grist-static (#516)
This commit is contained in:
11
app/client/DefaultHooks.ts
Normal file
11
app/client/DefaultHooks.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import { UrlTweaks } from 'app/common/gristUrls';
|
||||
|
||||
export interface IHooks {
|
||||
iframeAttributes?: Record<string, any>,
|
||||
fetch?: typeof fetch,
|
||||
baseURI?: string,
|
||||
urlTweaks?: UrlTweaks,
|
||||
}
|
||||
|
||||
export const defaultHooks: IHooks = {
|
||||
};
|
||||
3
app/client/Hooks.ts
Normal file
3
app/client/Hooks.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
import {defaultHooks} from 'app/client/DefaultHooks';
|
||||
|
||||
export const hooks = defaultHooks;
|
||||
@@ -1,11 +1,12 @@
|
||||
import {get as getBrowserGlobals} from 'app/client/lib/browserGlobals';
|
||||
import {guessTimezone} from 'app/client/lib/guessTimezone';
|
||||
import {getSessionStorage} from 'app/client/lib/storage';
|
||||
import {newUserAPIImpl} from 'app/client/models/AppModel';
|
||||
import {getWorker} from 'app/client/models/gristConfigCache';
|
||||
import {CommResponseBase} from 'app/common/CommTypes';
|
||||
import * as gutil from 'app/common/gutil';
|
||||
import {addOrgToPath, docUrl, getGristConfig} from 'app/common/urlUtils';
|
||||
import {UserAPI, UserAPIImpl} from 'app/common/UserAPI';
|
||||
import {UserAPI} from 'app/common/UserAPI';
|
||||
import {Events as BackboneEvents} from 'backbone';
|
||||
import {Disposable} from 'grainjs';
|
||||
|
||||
@@ -25,7 +26,7 @@ async function getDocWorkerUrl(assignmentId: string|null): Promise<string|null>
|
||||
// never changes.
|
||||
if (assignmentId === null) { return docUrl(null); }
|
||||
|
||||
const api: UserAPI = new UserAPIImpl(getGristConfig().homeUrl!);
|
||||
const api: UserAPI = newUserAPIImpl();
|
||||
return getWorker(api, assignmentId);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import BaseView from 'app/client/components/BaseView';
|
||||
import {GristDoc} from 'app/client/components/GristDoc';
|
||||
import {hooks} from 'app/client/Hooks';
|
||||
import {get as getBrowserGlobals} from 'app/client/lib/browserGlobals';
|
||||
import {ColumnRec, ViewSectionRec} from 'app/client/models/DocModel';
|
||||
import {AccessLevel, isSatisfied} from 'app/common/CustomWidget';
|
||||
@@ -157,6 +158,7 @@ export class WidgetFrame extends DisposableWithEvents {
|
||||
return onElem(
|
||||
(this._iframe = dom('iframe', dom.cls('clipboard_focus'), dom.cls('custom_view'), {
|
||||
src: fullUrl,
|
||||
...hooks.iframeAttributes,
|
||||
}))
|
||||
);
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ Object.assign(window.exposedModules, {
|
||||
grainjs: require('grainjs'),
|
||||
ko: require('knockout'),
|
||||
moment: require('moment-timezone'),
|
||||
Comm: require('./components/Comm'),
|
||||
Comm: require('app/client/components/Comm'),
|
||||
_loadScript: require('./lib/loadScript'),
|
||||
ConnectState: require('./models/ConnectState'),
|
||||
});
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import {hooks} from 'app/client/Hooks';
|
||||
import {getGristConfig} from 'app/common/urlUtils';
|
||||
import {DomContents} from 'grainjs';
|
||||
import i18next from 'i18next';
|
||||
@@ -34,7 +35,7 @@ export async function setupLocale() {
|
||||
// Detect what is resolved languages to load.
|
||||
const languages = i18next.languages;
|
||||
// Fetch all json files (all of which should be already preloaded);
|
||||
const loadPath = `${document.baseURI}locales/{{lng}}.{{ns}}.json`;
|
||||
const loadPath = `${hooks.baseURI || document.baseURI}locales/{{lng}}.{{ns}}.json`;
|
||||
const pathsToLoad: Promise<any>[] = [];
|
||||
async function load(lang: string, n: string) {
|
||||
const resourceUrl = loadPath.replace('{{lng}}', lang.replace("-", "_")).replace('{{ns}}', n);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import {BehavioralPromptsManager} from 'app/client/components/BehavioralPromptsManager';
|
||||
import {hooks} from 'app/client/Hooks';
|
||||
import {get as getBrowserGlobals} from 'app/client/lib/browserGlobals';
|
||||
import {makeT} from 'app/client/lib/localization';
|
||||
import {sessionStorageObs} from 'app/client/lib/localStorageObs';
|
||||
@@ -131,7 +132,7 @@ export class TopAppModelImpl extends Disposable implements TopAppModel {
|
||||
|
||||
constructor(
|
||||
window: {gristConfig?: GristLoadConfig},
|
||||
public readonly api: UserAPI = new UserAPIImpl(getHomeUrl()),
|
||||
public readonly api: UserAPI = newUserAPIImpl(),
|
||||
) {
|
||||
super();
|
||||
setErrorNotifier(this.notifier);
|
||||
@@ -436,6 +437,12 @@ export function getHomeUrl(): string {
|
||||
return (gristConfig && gristConfig.homeUrl) || `${protocol}//${host}`;
|
||||
}
|
||||
|
||||
export function newUserAPIImpl(): UserAPIImpl {
|
||||
return new UserAPIImpl(getHomeUrl(), {
|
||||
fetch: hooks.fetch,
|
||||
});
|
||||
}
|
||||
|
||||
export function getOrgNameOrGuest(org: Organization|null, user: FullUser|null) {
|
||||
if (!org) { return ''; }
|
||||
if (user && user.anonymous && org.owner && org.owner.id === user.id) {
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
* Note that the form of URLs depends on the settings in window.gristConfig object.
|
||||
*/
|
||||
import {unsavedChanges} from 'app/client/components/UnsavedChanges';
|
||||
import {hooks} from 'app/client/Hooks';
|
||||
import {UrlState} from 'app/client/lib/UrlState';
|
||||
import {decodeUrl, encodeUrl, getSlugIfNeeded, GristLoadConfig, IGristUrlState,
|
||||
parseFirstUrlPart} from 'app/common/gristUrls';
|
||||
@@ -134,7 +135,9 @@ export class UrlStateImpl {
|
||||
*/
|
||||
public encodeUrl(state: IGristUrlState, baseLocation: Location | URL): string {
|
||||
const gristConfig = this._window.gristConfig || {};
|
||||
return encodeUrl(gristConfig, state, baseLocation);
|
||||
return encodeUrl(gristConfig, state, baseLocation, {
|
||||
tweaks: hooks.urlTweaks,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -142,7 +145,9 @@ export class UrlStateImpl {
|
||||
*/
|
||||
public decodeUrl(location: Location | URL): IGristUrlState {
|
||||
const gristConfig = this._window.gristConfig || {};
|
||||
return decodeUrl(gristConfig, location);
|
||||
return decodeUrl(gristConfig, location, {
|
||||
tweaks: hooks.urlTweaks,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -84,7 +84,7 @@ export class App extends DisposableWithEvents {
|
||||
|
||||
const isHelpPaneVisible = ko.observable(false);
|
||||
|
||||
G.document.querySelector('#grist-logo-wrapper').remove();
|
||||
G.document.querySelector('#grist-logo-wrapper')?.remove();
|
||||
|
||||
// Help pop-up pane
|
||||
const helpDiv = document.body.appendChild(
|
||||
|
||||
Reference in New Issue
Block a user