mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
(core) updates from grist-core
This commit is contained in:
commit
8c610dcb33
@ -231,6 +231,7 @@ GRIST_SESSION_DOMAIN | if set, associates the cookie with the given domain - oth
|
|||||||
GRIST_SESSION_SECRET | a key used to encode sessions
|
GRIST_SESSION_SECRET | a key used to encode sessions
|
||||||
GRIST_FORCE_LOGIN | when set to 'true' disables anonymous access
|
GRIST_FORCE_LOGIN | when set to 'true' disables anonymous access
|
||||||
GRIST_SINGLE_ORG | set to an org "domain" to pin client to that org
|
GRIST_SINGLE_ORG | set to an org "domain" to pin client to that org
|
||||||
|
GRIST_HELP_CENTER | set the help center link ref
|
||||||
GRIST_SUPPORT_ANON | if set to 'true', show UI for anonymous access (not shown by default)
|
GRIST_SUPPORT_ANON | if set to 'true', show UI for anonymous access (not shown by default)
|
||||||
GRIST_SUPPORT_EMAIL | if set, give a user with the specified email support powers. The main extra power is the ability to share sites, workspaces, and docs with all users in a listed way.
|
GRIST_SUPPORT_EMAIL | if set, give a user with the specified email support powers. The main extra power is the ability to share sites, workspaces, and docs with all users in a listed way.
|
||||||
GRIST_THROTTLE_CPU | if set, CPU throttling is enabled
|
GRIST_THROTTLE_CPU | if set, CPU throttling is enabled
|
||||||
|
@ -9,6 +9,9 @@ import { cssIconBackground, icon } from 'app/client/ui2018/icons';
|
|||||||
import { gristLink } from 'app/client/ui2018/links';
|
import { gristLink } from 'app/client/ui2018/links';
|
||||||
import { NewAbstractWidget, Options } from 'app/client/widgets/NewAbstractWidget';
|
import { NewAbstractWidget, Options } from 'app/client/widgets/NewAbstractWidget';
|
||||||
import { Computed, dom, DomArg, DomContents, fromKo, Observable, styled } from 'grainjs';
|
import { Computed, dom, DomArg, DomContents, fromKo, Observable, styled } from 'grainjs';
|
||||||
|
import {makeT} from 'app/client/lib/localization';
|
||||||
|
|
||||||
|
const t = makeT('NTextBox');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TextBox - The most basic widget for displaying text information.
|
* TextBox - The most basic widget for displaying text information.
|
||||||
@ -62,7 +65,7 @@ export class NTextBox extends NewAbstractWidget {
|
|||||||
return dom('div.field_clip',
|
return dom('div.field_clip',
|
||||||
dom.style('text-align', this.alignment),
|
dom.style('text-align', this.alignment),
|
||||||
dom.cls('text_wrapping', this.wrapping),
|
dom.cls('text_wrapping', this.wrapping),
|
||||||
dom.domComputed((use) => use(row._isAddRow) ? null : makeLinks(use(this.valueFormatter).formatAny(use(value))))
|
dom.domComputed((use) => use(row._isAddRow) ? null : makeLinks(use(this.valueFormatter).formatAny(use(value), t)))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -79,19 +79,28 @@ export class BaseFormatter {
|
|||||||
* Formats using this.format() if a value is of the right type for this formatter, or using
|
* Formats using this.format() if a value is of the right type for this formatter, or using
|
||||||
* AnyFormatter otherwise. This method the recommended API. There is no need to override it.
|
* AnyFormatter otherwise. This method the recommended API. There is no need to override it.
|
||||||
*/
|
*/
|
||||||
public formatAny(value: any): string {
|
public formatAny(value: any, translate?: (val: string) => string): string {
|
||||||
return this.isRightType(value) ? this.format(value) : formatUnknown(value);
|
return this.isRightType(value) ? this.format(value, translate) : formatUnknown(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Formats a value that matches the type of this formatter. This should be overridden by derived
|
* Formats a value that matches the type of this formatter. This should be overridden by derived
|
||||||
* classes to handle values in formatter-specific ways.
|
* classes to handle values in formatter-specific ways.
|
||||||
*/
|
*/
|
||||||
protected format(value: any): string {
|
protected format(value: any, _translate?: (val: string) => string): string {
|
||||||
return String(value);
|
return String(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class BoolFormatter extends BaseFormatter {
|
||||||
|
public format(value: boolean | 0 | 1, translate?: (val: string) => string): string {
|
||||||
|
if (typeof value === 'boolean' && translate) {
|
||||||
|
return translate(String(value));
|
||||||
|
}
|
||||||
|
return super.format(value, translate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class AnyFormatter extends BaseFormatter {
|
class AnyFormatter extends BaseFormatter {
|
||||||
public format(value: any): string {
|
public format(value: any): string {
|
||||||
return formatUnknown(value);
|
return formatUnknown(value);
|
||||||
@ -265,7 +274,7 @@ class ReferenceListFormatter extends ReferenceFormatter {
|
|||||||
const formatters: { [name: string]: typeof BaseFormatter } = {
|
const formatters: { [name: string]: typeof BaseFormatter } = {
|
||||||
Numeric: NumericFormatter,
|
Numeric: NumericFormatter,
|
||||||
Int: IntFormatter,
|
Int: IntFormatter,
|
||||||
Bool: BaseFormatter,
|
Bool: BoolFormatter,
|
||||||
Date: DateFormatter,
|
Date: DateFormatter,
|
||||||
DateTime: DateTimeFormatter,
|
DateTime: DateTimeFormatter,
|
||||||
Ref: ReferenceFormatter,
|
Ref: ReferenceFormatter,
|
||||||
|
@ -60,7 +60,7 @@ export const MIN_URLID_PREFIX_LENGTH = 12;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
export const commonUrls = {
|
export const commonUrls = {
|
||||||
help: "https://support.getgrist.com",
|
help: getHelpCenterUrl(),
|
||||||
helpAccessRules: "https://support.getgrist.com/access-rules",
|
helpAccessRules: "https://support.getgrist.com/access-rules",
|
||||||
helpConditionalFormatting: "https://support.getgrist.com/conditional-formatting",
|
helpConditionalFormatting: "https://support.getgrist.com/conditional-formatting",
|
||||||
helpLinkingWidgets: "https://support.getgrist.com/linking-widgets",
|
helpLinkingWidgets: "https://support.getgrist.com/linking-widgets",
|
||||||
@ -494,6 +494,9 @@ export interface GristLoadConfig {
|
|||||||
// In single-org mode, this is the single well-known org. Suppress any org selection UI.
|
// In single-org mode, this is the single well-known org. Suppress any org selection UI.
|
||||||
singleOrg?: string;
|
singleOrg?: string;
|
||||||
|
|
||||||
|
// Url for support for the browser client to use.
|
||||||
|
helpCenterUrl?: string;
|
||||||
|
|
||||||
// When set, this directs the client to encode org information in path, not in domain.
|
// When set, this directs the client to encode org information in path, not in domain.
|
||||||
pathOnly?: boolean;
|
pathOnly?: boolean;
|
||||||
|
|
||||||
@ -641,6 +644,15 @@ export function getKnownOrg(): string|null {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getHelpCenterUrl(): string|null {
|
||||||
|
if(isClient()) {
|
||||||
|
const gristConfig: GristLoadConfig = (window as any).gristConfig;
|
||||||
|
return gristConfig && gristConfig.helpCenterUrl || null;
|
||||||
|
} else {
|
||||||
|
return process.env.GRIST_HELP_CENTER || null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Like getKnownOrg, but respects singleOrg/GRIST_SINGLE_ORG strictly.
|
* Like getKnownOrg, but respects singleOrg/GRIST_SINGLE_ORG strictly.
|
||||||
* The main difference in behavior would be for orgs with custom domains
|
* The main difference in behavior would be for orgs with custom domains
|
||||||
|
@ -41,6 +41,7 @@ export function makeGristConfig(homeUrl: string|null, extra: Partial<GristLoadCo
|
|||||||
org: process.env.GRIST_SINGLE_ORG || (mreq && mreq.org),
|
org: process.env.GRIST_SINGLE_ORG || (mreq && mreq.org),
|
||||||
baseDomain,
|
baseDomain,
|
||||||
singleOrg: process.env.GRIST_SINGLE_ORG,
|
singleOrg: process.env.GRIST_SINGLE_ORG,
|
||||||
|
helpCenterUrl: process.env.GRIST_HELP_CENTER || "https://support.getgrist.com",
|
||||||
pathOnly,
|
pathOnly,
|
||||||
supportAnon: shouldSupportAnon(),
|
supportAnon: shouldSupportAnon(),
|
||||||
supportEngines: getSupportedEngineChoices(),
|
supportEngines: getSupportedEngineChoices(),
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "grist-core",
|
"name": "grist-core",
|
||||||
"version": "1.0.4",
|
"version": "1.0.5",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"description": "Grist is the evolution of spreadsheets",
|
"description": "Grist is the evolution of spreadsheets",
|
||||||
"homepage": "https://github.com/gristlabs/grist-core",
|
"homepage": "https://github.com/gristlabs/grist-core",
|
||||||
|
@ -354,6 +354,10 @@
|
|||||||
"GiveFeedback": "Give feedback",
|
"GiveFeedback": "Give feedback",
|
||||||
"NoNotifications": "No notifications"
|
"NoNotifications": "No notifications"
|
||||||
},
|
},
|
||||||
|
"NTextBox": {
|
||||||
|
"false": "false",
|
||||||
|
"true": "true"
|
||||||
|
},
|
||||||
"OnBoardingPopups": {
|
"OnBoardingPopups": {
|
||||||
"Finish": "Finish",
|
"Finish": "Finish",
|
||||||
"Next": "Next"
|
"Next": "Next"
|
||||||
|
@ -351,6 +351,10 @@
|
|||||||
"GiveFeedback": "Donnez votre avis",
|
"GiveFeedback": "Donnez votre avis",
|
||||||
"NoNotifications": "Aucune notification"
|
"NoNotifications": "Aucune notification"
|
||||||
},
|
},
|
||||||
|
"NTextBox": {
|
||||||
|
"false": "faux",
|
||||||
|
"true": "vrai"
|
||||||
|
},
|
||||||
"OnBoardingPopups": {
|
"OnBoardingPopups": {
|
||||||
"Finish": "Terminer",
|
"Finish": "Terminer",
|
||||||
"Next": "Suivant"
|
"Next": "Suivant"
|
||||||
|
Loading…
Reference in New Issue
Block a user