mirror of
https://github.com/ilyakooo0/urbit.git
synced 2024-12-15 10:02:47 +03:00
Merge branch 'release/next-userspace' into mp/chat/fix-joining
This commit is contained in:
commit
e636611ccc
@ -502,8 +502,8 @@
|
|||||||
^+ +>
|
^+ +>
|
||||||
:: XX needs filter
|
:: XX needs filter
|
||||||
::
|
::
|
||||||
:: ?: ?=({$show $3} -.mad)
|
?: ?=({$show $3} -.mad)
|
||||||
:: (dy-rash %tan (dy-show-source q.mad) ~) :: XX separate command
|
(dy-rash %tan (dy-show-source q.mad) ~)
|
||||||
?: ?=($brev -.mad)
|
?: ?=($brev -.mad)
|
||||||
=. var (~(del by var) p.mad)
|
=. var (~(del by var) p.mad)
|
||||||
=< dy-amok
|
=< dy-amok
|
||||||
@ -589,10 +589,8 @@
|
|||||||
?- p.p.mad
|
?- p.p.mad
|
||||||
%0 ~
|
%0 ~
|
||||||
%1 [[%rose [~ " " ~] (skol p.q.cay) ~] maar]
|
%1 [[%rose [~ " " ~] (skol p.q.cay) ~] maar]
|
||||||
:: XX actually print something meaningful here
|
%2 [[%rose [~ " " ~] (dy-show-type-noun p.q.cay) ~] maar]
|
||||||
::
|
::%3 handled above
|
||||||
%2 [[%rose [~ " " ~] *tank ~] maar]
|
|
||||||
%3 ~
|
|
||||||
%4 ~
|
%4 ~
|
||||||
%5 [[%rose [~ " " ~] (xskol p.q.cay) ~] maar]
|
%5 [[%rose [~ " " ~] (xskol p.q.cay) ~] maar]
|
||||||
==
|
==
|
||||||
@ -638,6 +636,70 @@
|
|||||||
:- i=""
|
:- i=""
|
||||||
t=(turn `wain`?~(r.hit ~ (to-wain:format q.u.r.hit)) trip)
|
t=(turn `wain`?~(r.hit ~ (to-wain:format q.u.r.hit)) trip)
|
||||||
==
|
==
|
||||||
|
++ dy-show-type-noun
|
||||||
|
|= a/type ^- tank
|
||||||
|
=- >[-]<
|
||||||
|
|- ^- $? $% {$atom @tas (unit @)}
|
||||||
|
{$cell _$ _$}
|
||||||
|
{$face $@(term tune) _$}
|
||||||
|
{$fork (set _$)}
|
||||||
|
{$hold _$ hoon}
|
||||||
|
==
|
||||||
|
wain :: "<|core|>"
|
||||||
|
$?($noun $void)
|
||||||
|
==
|
||||||
|
?+ a a
|
||||||
|
{$face ^} a(q $(a q.a))
|
||||||
|
{$cell ^} a(p $(a p.a), q $(a q.a))
|
||||||
|
{$fork *} a(p (silt (turn ~(tap in p.a) |=(b/type ^$(a b)))))
|
||||||
|
{$hint *} !!
|
||||||
|
{$core ^} `wain`/core
|
||||||
|
{$hold *} a(p $(a p.a))
|
||||||
|
==
|
||||||
|
::
|
||||||
|
:: XX needs filter
|
||||||
|
::
|
||||||
|
++ dy-shown
|
||||||
|
=/ jank-bucwut :: FIXME just $? fishes when defined for some reason
|
||||||
|
|* [a=mold b=mold]
|
||||||
|
|=(c=_`*`*a ?:(& (a c) (b c)))
|
||||||
|
::
|
||||||
|
::$? hoon
|
||||||
|
;: jank-bucwut
|
||||||
|
hoon
|
||||||
|
$^ {dy-shown dy-shown}
|
||||||
|
$% {$ur cord}
|
||||||
|
{$sa mark}
|
||||||
|
{$as mark dy-shown}
|
||||||
|
{$do hoon dy-shown}
|
||||||
|
{$te term (list dy-shown)}
|
||||||
|
{$ge path (list dy-shown) (map term (unit dy-shown))}
|
||||||
|
{$dv path}
|
||||||
|
==
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ dy-show-source
|
||||||
|
|= a/dojo-source ^- tank
|
||||||
|
=- >[-]<
|
||||||
|
=+ `{@ bil/dojo-build}`a
|
||||||
|
|- ^- dy-shown
|
||||||
|
?- -.bil
|
||||||
|
$?($ur $dv $sa) bil
|
||||||
|
$ex ?. ?=({$cltr *} p.bil) p.bil
|
||||||
|
|- ^- hoon
|
||||||
|
?~ p.p.bil !!
|
||||||
|
?~ t.p.p.bil i.p.p.bil
|
||||||
|
[i.p.p.bil $(p.p.bil t.p.p.bil)]
|
||||||
|
$tu ?~ p.bil !!
|
||||||
|
|-
|
||||||
|
?~ t.p.bil ^$(bil q.i.p.bil)
|
||||||
|
[^$(bil q.i.p.bil) $(p.bil t.p.bil)]
|
||||||
|
$as bil(q $(bil q.q.bil))
|
||||||
|
$do bil(q $(bil q.q.bil))
|
||||||
|
$te bil(q (turn q.bil ..$))
|
||||||
|
$ge :+ %ge q.p.p.bil
|
||||||
|
[(turn p.q.p.bil ..$) (~(run by q.q.p.bil) (lift ..$))]
|
||||||
|
==
|
||||||
::
|
::
|
||||||
++ dy-edit :: handle edit
|
++ dy-edit :: handle edit
|
||||||
|= cal/sole-change
|
|= cal/sole-change
|
||||||
@ -875,6 +937,8 @@
|
|||||||
?> ?=(~ cud)
|
?> ?=(~ cud)
|
||||||
?: =(nex num)
|
?: =(nex num)
|
||||||
dy-over
|
dy-over
|
||||||
|
?: =([%show %3] -.mad) :: just show source
|
||||||
|
dy-over
|
||||||
dy-make(cud `[nex (~(got by job) nex)])
|
dy-make(cud `[nex (~(got by job) nex)])
|
||||||
--
|
--
|
||||||
::
|
::
|
||||||
|
23
pkg/interface/package-lock.json
generated
23
pkg/interface/package-lock.json
generated
@ -7700,6 +7700,24 @@
|
|||||||
"resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz",
|
||||||
"integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw=="
|
"integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw=="
|
||||||
},
|
},
|
||||||
|
"react-helmet": {
|
||||||
|
"version": "6.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz",
|
||||||
|
"integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==",
|
||||||
|
"requires": {
|
||||||
|
"object-assign": "^4.1.1",
|
||||||
|
"prop-types": "^15.7.2",
|
||||||
|
"react-fast-compare": "^3.1.1",
|
||||||
|
"react-side-effect": "^2.1.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"react-fast-compare": {
|
||||||
|
"version": "3.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz",
|
||||||
|
"integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"react-hot-loader": {
|
"react-hot-loader": {
|
||||||
"version": "4.12.21",
|
"version": "4.12.21",
|
||||||
"resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.12.21.tgz",
|
"resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.12.21.tgz",
|
||||||
@ -7781,6 +7799,11 @@
|
|||||||
"tiny-warning": "^1.0.0"
|
"tiny-warning": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"react-side-effect": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-IgmcegOSi5SNX+2Snh1vqmF0Vg/CbkycU9XZbOHJlZ6kMzTmi3yc254oB1WCkgA7OQtIAoLmcSFuHTc/tlcqXg=="
|
||||||
|
},
|
||||||
"react-window": {
|
"react-window": {
|
||||||
"version": "1.8.5",
|
"version": "1.8.5",
|
||||||
"resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.5.tgz",
|
"resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.5.tgz",
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
"react": "^16.5.2",
|
"react": "^16.5.2",
|
||||||
"react-codemirror2": "^6.0.1",
|
"react-codemirror2": "^6.0.1",
|
||||||
"react-dom": "^16.8.6",
|
"react-dom": "^16.8.6",
|
||||||
|
"react-helmet": "^6.1.0",
|
||||||
"react-markdown": "^4.3.1",
|
"react-markdown": "^4.3.1",
|
||||||
"react-router-dom": "^5.0.0",
|
"react-router-dom": "^5.0.0",
|
||||||
"react-window": "^1.8.5",
|
"react-window": "^1.8.5",
|
||||||
|
@ -4,6 +4,7 @@ import * as React from 'react';
|
|||||||
import { BrowserRouter as Router, Route, withRouter, Switch } from 'react-router-dom';
|
import { BrowserRouter as Router, Route, withRouter, Switch } from 'react-router-dom';
|
||||||
import styled, { ThemeProvider, createGlobalStyle } from 'styled-components';
|
import styled, { ThemeProvider, createGlobalStyle } from 'styled-components';
|
||||||
import { sigil as sigiljs, stringRenderer } from 'urbit-sigil-js';
|
import { sigil as sigiljs, stringRenderer } from 'urbit-sigil-js';
|
||||||
|
import Helmet from 'react-helmet';
|
||||||
|
|
||||||
import Mousetrap from 'mousetrap';
|
import Mousetrap from 'mousetrap';
|
||||||
import 'mousetrap-global-bind';
|
import 'mousetrap-global-bind';
|
||||||
@ -50,7 +51,7 @@ class App extends React.Component {
|
|||||||
new GlobalSubscription(this.store, this.api, this.appChannel);
|
new GlobalSubscription(this.store, this.api, this.appChannel);
|
||||||
|
|
||||||
this.updateTheme = this.updateTheme.bind(this);
|
this.updateTheme = this.updateTheme.bind(this);
|
||||||
this.setFavicon = this.setFavicon.bind(this);
|
this.faviconString = this.faviconString.bind(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
@ -64,23 +65,17 @@ class App extends React.Component {
|
|||||||
e.stopImmediatePropagation();
|
e.stopImmediatePropagation();
|
||||||
this.api.local.setOmnibox();
|
this.api.local.setOmnibox();
|
||||||
});
|
});
|
||||||
this.setFavicon();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillUnmount() {
|
componentWillUnmount() {
|
||||||
this.themeWatcher.removeListener(this.updateTheme);
|
this.themeWatcher.removeListener(this.updateTheme);
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidUpdate(prevProps, prevState, snapshot) {
|
|
||||||
this.setFavicon();
|
|
||||||
}
|
|
||||||
|
|
||||||
updateTheme(e) {
|
updateTheme(e) {
|
||||||
this.api.local.setDark(e.matches);
|
this.api.local.setDark(e.matches);
|
||||||
}
|
}
|
||||||
|
|
||||||
setFavicon() {
|
faviconString() {
|
||||||
if (window.ship.length < 14) {
|
|
||||||
let background = '#ffffff';
|
let background = '#ffffff';
|
||||||
if (this.state.contacts.hasOwnProperty('/~/default')) {
|
if (this.state.contacts.hasOwnProperty('/~/default')) {
|
||||||
background = `#${uxToHex(this.state.contacts['/~/default'][window.ship].color)}`;
|
background = `#${uxToHex(this.state.contacts['/~/default'][window.ship].color)}`;
|
||||||
@ -93,10 +88,7 @@ class App extends React.Component {
|
|||||||
colors: [background, foreground]
|
colors: [background, foreground]
|
||||||
});
|
});
|
||||||
const dataurl = 'data:image/svg+xml;base64,' + btoa(svg);
|
const dataurl = 'data:image/svg+xml;base64,' + btoa(svg);
|
||||||
const favicon = document.querySelector('[rel=icon]');
|
return dataurl;
|
||||||
favicon.href = dataurl;
|
|
||||||
favicon.type = 'image/svg+xml';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
@ -107,6 +99,11 @@ class App extends React.Component {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<ThemeProvider theme={theme}>
|
<ThemeProvider theme={theme}>
|
||||||
|
<Helmet>
|
||||||
|
{window.ship.length < 14
|
||||||
|
? <link rel="icon" type="image/svg+xml" href={this.faviconString()} />
|
||||||
|
: null}
|
||||||
|
</Helmet>
|
||||||
<Root>
|
<Root>
|
||||||
<Router>
|
<Router>
|
||||||
<StatusBarWithRouter
|
<StatusBarWithRouter
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Route, Switch } from 'react-router-dom';
|
import { Route, Switch } from 'react-router-dom';
|
||||||
|
import Helmet from 'react-helmet';
|
||||||
|
|
||||||
import './css/custom.css';
|
import './css/custom.css';
|
||||||
|
|
||||||
@ -24,14 +25,11 @@ type ChatAppProps = StoreState & {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export default class ChatApp extends React.Component<ChatAppProps, {}> {
|
export default class ChatApp extends React.Component<ChatAppProps, {}> {
|
||||||
totalUnreads = 0;
|
|
||||||
|
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
document.title = 'OS1 - Chat';
|
|
||||||
// preload spinner asset
|
// preload spinner asset
|
||||||
new Image().src = '/~landscape/img/Spinner.png';
|
new Image().src = '/~landscape/img/Spinner.png';
|
||||||
|
|
||||||
@ -79,12 +77,6 @@ export default class ChatApp extends React.Component<ChatAppProps, {}> {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (totalUnreads !== this.totalUnreads) {
|
|
||||||
document.title =
|
|
||||||
totalUnreads > 0 ? `(${totalUnreads}) OS1 - Chat` : 'OS1 - Chat';
|
|
||||||
this.totalUnreads = totalUnreads;
|
|
||||||
}
|
|
||||||
|
|
||||||
const {
|
const {
|
||||||
invites,
|
invites,
|
||||||
s3,
|
s3,
|
||||||
@ -113,6 +105,10 @@ export default class ChatApp extends React.Component<ChatAppProps, {}> {
|
|||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<>
|
||||||
|
<Helmet>
|
||||||
|
<title>{totalUnreads > 0 ? `(${totalUnreads}) ` : ''}OS1 - Chat</title>
|
||||||
|
</Helmet>
|
||||||
<Switch>
|
<Switch>
|
||||||
<Route
|
<Route
|
||||||
exact
|
exact
|
||||||
@ -315,6 +311,7 @@ export default class ChatApp extends React.Component<ChatAppProps, {}> {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</Switch>
|
</Switch>
|
||||||
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import React, { Component } from 'react';
|
import React, { Component } from 'react';
|
||||||
import { Route, Link } from 'react-router-dom';
|
import { Route, Link } from 'react-router-dom';
|
||||||
import classnames from 'classnames';
|
import classnames from 'classnames';
|
||||||
|
import Helmet from 'react-helmet';
|
||||||
|
|
||||||
import { Popout } from './components/lib/icons/popout';
|
import { Popout } from './components/lib/icons/popout';
|
||||||
import { History } from './components/history';
|
import { History } from './components/history';
|
||||||
@ -28,8 +29,6 @@ export default class DojoApp extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
document.title = 'OS1 - Dojo';
|
|
||||||
|
|
||||||
const channel = new window.channel();
|
const channel = new window.channel();
|
||||||
this.api = new Api(this.props.ship, channel);
|
this.api = new Api(this.props.ship, channel);
|
||||||
this.store.api = this.api;
|
this.store.api = this.api;
|
||||||
@ -46,6 +45,10 @@ export default class DojoApp extends Component {
|
|||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
|
<>
|
||||||
|
<Helmet>
|
||||||
|
<title>OS1 - Dojo</title>
|
||||||
|
</Helmet>
|
||||||
<div
|
<div
|
||||||
className="bg-white bg-gray0-d"
|
className="bg-white bg-gray0-d"
|
||||||
style={{ height: '100%' }}
|
style={{ height: '100%' }}
|
||||||
@ -96,6 +99,7 @@ export default class DojoApp extends Component {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import React, { Component } from 'react';
|
import React, { Component } from 'react';
|
||||||
import { Route, Switch } from 'react-router-dom';
|
import { Route, Switch } from 'react-router-dom';
|
||||||
|
import Helmet from 'react-helmet';
|
||||||
|
|
||||||
import './css/custom.css';
|
import './css/custom.css';
|
||||||
|
|
||||||
@ -25,7 +26,6 @@ type GroupsAppProps = StoreState & {
|
|||||||
|
|
||||||
export default class GroupsApp extends Component<GroupsAppProps, {}> {
|
export default class GroupsApp extends Component<GroupsAppProps, {}> {
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
document.title = 'OS1 - Groups';
|
|
||||||
// preload spinner asset
|
// preload spinner asset
|
||||||
new Image().src = '/~landscape/img/Spinner.png';
|
new Image().src = '/~landscape/img/Spinner.png';
|
||||||
|
|
||||||
@ -55,6 +55,10 @@ export default class GroupsApp extends Component<GroupsAppProps, {}> {
|
|||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<>
|
||||||
|
<Helmet>
|
||||||
|
<title>OS1 - Groups</title>
|
||||||
|
</Helmet>
|
||||||
<Switch>
|
<Switch>
|
||||||
<Route exact path="/~groups"
|
<Route exact path="/~groups"
|
||||||
render={(props) => {
|
render={(props) => {
|
||||||
@ -357,6 +361,7 @@ export default class GroupsApp extends Component<GroupsAppProps, {}> {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</Switch>
|
</Switch>
|
||||||
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import Helmet from 'react-helmet';
|
||||||
|
|
||||||
import './css/custom.css';
|
import './css/custom.css';
|
||||||
|
|
||||||
@ -8,7 +9,6 @@ import Welcome from './components/welcome';
|
|||||||
export default class LaunchApp extends React.Component {
|
export default class LaunchApp extends React.Component {
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
document.title = 'OS1 - Home';
|
|
||||||
// preload spinner asset
|
// preload spinner asset
|
||||||
new Image().src = '/~landscape/img/Spinner.png';
|
new Image().src = '/~landscape/img/Spinner.png';
|
||||||
|
|
||||||
@ -18,6 +18,10 @@ export default class LaunchApp extends React.Component {
|
|||||||
const { props } = this;
|
const { props } = this;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<>
|
||||||
|
<Helmet>
|
||||||
|
<title>OS1 - Home</title>
|
||||||
|
</Helmet>
|
||||||
<div className="h-100 flex flex-column h-100">
|
<div className="h-100 flex flex-column h-100">
|
||||||
<div className='v-mid ph2 dtc-m dtc-l dtc-xl flex justify-between flex-wrap' style={{ maxWidth: '40rem' }}>
|
<div className='v-mid ph2 dtc-m dtc-l dtc-xl flex justify-between flex-wrap' style={{ maxWidth: '40rem' }}>
|
||||||
<Welcome firstTime={props.launch.firstTime} api={props.api} />
|
<Welcome firstTime={props.launch.firstTime} api={props.api} />
|
||||||
@ -31,6 +35,7 @@ export default class LaunchApp extends React.Component {
|
|||||||
</div>
|
</div>
|
||||||
<div className="absolute mono bottom-0 left-0 f9 gray2 ml4 mb4 f8"> {props.baseHash} </div>
|
<div className="absolute mono bottom-0 left-0 f9 gray2 ml4 mb4 f8"> {props.baseHash} </div>
|
||||||
</div>
|
</div>
|
||||||
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import React, { Component } from 'react';
|
import React, { Component } from 'react';
|
||||||
import { Switch, Route } from 'react-router-dom';
|
import { Switch, Route } from 'react-router-dom';
|
||||||
|
import Helmet from 'react-helmet';
|
||||||
|
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
|
|
||||||
@ -22,11 +23,9 @@ import {
|
|||||||
export class LinksApp extends Component {
|
export class LinksApp extends Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
this.totalUnseen = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
document.title = 'OS1 - Links';
|
|
||||||
// preload spinner asset
|
// preload spinner asset
|
||||||
new Image().src = '/~landscape/img/Spinner.png';
|
new Image().src = '/~landscape/img/Spinner.png';
|
||||||
|
|
||||||
@ -61,11 +60,6 @@ export class LinksApp extends Component {
|
|||||||
0
|
0
|
||||||
);
|
);
|
||||||
|
|
||||||
if(totalUnseen !== this.totalUnseen) {
|
|
||||||
document.title = totalUnseen !== 0 ? `(${totalUnseen}) OS1 - Links` : 'OS1 - Links';
|
|
||||||
this.totalUnseen = totalUnseen;
|
|
||||||
}
|
|
||||||
|
|
||||||
const invites = props.invites ?
|
const invites = props.invites ?
|
||||||
props.invites : {};
|
props.invites : {};
|
||||||
|
|
||||||
@ -75,6 +69,10 @@ export class LinksApp extends Component {
|
|||||||
const { api, sidebarShown } = this.props;
|
const { api, sidebarShown } = this.props;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<>
|
||||||
|
<Helmet>
|
||||||
|
<title>{totalUnseen > 0 ? `(${totalUnseen}) ` : ''}OS1 - Links</title>
|
||||||
|
</Helmet>
|
||||||
<Switch>
|
<Switch>
|
||||||
<Route exact path="/~link"
|
<Route exact path="/~link"
|
||||||
render={ (props) => {
|
render={ (props) => {
|
||||||
@ -329,6 +327,7 @@ export class LinksApp extends Component {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</Switch>
|
</Switch>
|
||||||
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ import React, { useRef, useEffect } from "react";
|
|||||||
import { Route, Switch, useLocation, withRouter } from "react-router-dom";
|
import { Route, Switch, useLocation, withRouter } from "react-router-dom";
|
||||||
import { Center, Text } from "@tlon/indigo-react";
|
import { Center, Text } from "@tlon/indigo-react";
|
||||||
import _ from "lodash";
|
import _ from "lodash";
|
||||||
|
import Helmet from 'react-helmet';
|
||||||
|
|
||||||
import "./css/custom.css";
|
import "./css/custom.css";
|
||||||
|
|
||||||
@ -61,6 +62,10 @@ export default function PublishApp(props: PublishAppProps) {
|
|||||||
: "rightPanel";
|
: "rightPanel";
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<>
|
||||||
|
<Helmet>
|
||||||
|
<title>{unreadTotal > 0 ? `(${unreadTotal}) ` : ''}OS1 - Publish</title>
|
||||||
|
</Helmet>
|
||||||
<Route
|
<Route
|
||||||
path={[
|
path={[
|
||||||
"/~publish/notebook/:ship/:notebook/note/:noteId",
|
"/~publish/notebook/:ship/:notebook/note/:noteId",
|
||||||
@ -155,5 +160,6 @@ export default function PublishApp(props: PublishAppProps) {
|
|||||||
</Switch>
|
</Switch>
|
||||||
</RouterSkeleton>
|
</RouterSkeleton>
|
||||||
</Route>
|
</Route>
|
||||||
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user