Spelling (#772)
* spelling: account Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> * spelling: activated Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> * spelling: additional Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> * spelling: appropriate Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> * spelling: bskyweb Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> * spelling: description Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> * spelling: display Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> * spelling: highlighted Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> * spelling: javascript Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> * spelling: locally-hosted Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> * spelling: notification Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> * spelling: occurring Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> * spelling: parenthetical Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> * spelling: preexisting Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> * spelling: prefetched Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> * spelling: punctuation Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> * spelling: simplicity Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --------- Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>zio/stable
parent
724951e2f0
commit
c808721938
|
@ -17,7 +17,7 @@ ENV CGO_ENABLED=1
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
#
|
#
|
||||||
# Generate the Javascript webpack.
|
# Generate the JavaScript webpack.
|
||||||
#
|
#
|
||||||
RUN mkdir --parents $NVM_DIR && \
|
RUN mkdir --parents $NVM_DIR && \
|
||||||
wget \
|
wget \
|
||||||
|
@ -36,7 +36,7 @@ RUN \. "$NVM_DIR/nvm.sh" && \
|
||||||
RUN find ./bskyweb/static && find ./web-build/static
|
RUN find ./bskyweb/static && find ./web-build/static
|
||||||
|
|
||||||
#
|
#
|
||||||
# Generate the bksyweb Go binary.
|
# Generate the bskyweb Go binary.
|
||||||
#
|
#
|
||||||
RUN cd bskyweb/ && \
|
RUN cd bskyweb/ && \
|
||||||
go mod download && \
|
go mod download && \
|
||||||
|
|
|
@ -48,7 +48,7 @@ describe('detectLinkables', () => {
|
||||||
'Classic article https://socket3.wordpress.com/2018/02/03/designing-windows-95s-user-interface/ ',
|
'Classic article https://socket3.wordpress.com/2018/02/03/designing-windows-95s-user-interface/ ',
|
||||||
'https://foo.com https://bar.com/whatever https://baz.com',
|
'https://foo.com https://bar.com/whatever https://baz.com',
|
||||||
'punctuation https://foo.com, https://bar.com/whatever; https://baz.com.',
|
'punctuation https://foo.com, https://bar.com/whatever; https://baz.com.',
|
||||||
'parenthentical (https://foo.com)',
|
'parenthetical (https://foo.com)',
|
||||||
'except for https://foo.com/thing_(cool)',
|
'except for https://foo.com/thing_(cool)',
|
||||||
]
|
]
|
||||||
const outputs = [
|
const outputs = [
|
||||||
|
@ -112,7 +112,7 @@ describe('detectLinkables', () => {
|
||||||
{link: 'https://baz.com'},
|
{link: 'https://baz.com'},
|
||||||
'.',
|
'.',
|
||||||
],
|
],
|
||||||
['parenthentical (', {link: 'https://foo.com'}, ')'],
|
['parenthetical (', {link: 'https://foo.com'}, ')'],
|
||||||
['except for ', {link: 'https://foo.com/thing_(cool)'}],
|
['except for ', {link: 'https://foo.com/thing_(cool)'}],
|
||||||
]
|
]
|
||||||
it('correctly handles a set of text inputs', () => {
|
it('correctly handles a set of text inputs', () => {
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
### SPA Bundle (monolithic static javascript file)
|
### SPA Bundle (monolithic static javascript file)
|
||||||
|
|
||||||
To build the SPA bundle (`bundle.web.js`), first get a Javascript development
|
To build the SPA bundle (`bundle.web.js`), first get a JavaScript development
|
||||||
environment set up. Either follow the top-level README, or something quick
|
environment set up. Either follow the top-level README, or something quick
|
||||||
like:
|
like:
|
||||||
|
|
||||||
|
|
|
@ -122,8 +122,8 @@
|
||||||
{%- block body_all %}
|
{%- block body_all %}
|
||||||
<div id="root"></div>
|
<div id="root"></div>
|
||||||
<noscript>
|
<noscript>
|
||||||
<h1>Javascript Required</h1>
|
<h1>JavaScript Required</h1>
|
||||||
<p>This is a heavily interactive web application, and Javascript is required. Simple HTML interfaces are possible, but that is not what this is.
|
<p>This is a heavily interactive web application, and JavaScript is required. Simple HTML interfaces are possible, but that is not what this is.
|
||||||
<p>Learn more about Bluesky at <a href="https://blueskyweb.xyz">blueskyweb.xyz</a> and <a href="https://atproto.com">atproto.com</a>.
|
<p>Learn more about Bluesky at <a href="https://blueskyweb.xyz">blueskyweb.xyz</a> and <a href="https://atproto.com">atproto.com</a>.
|
||||||
{% block noscript_extra %}{% endblock %}
|
{% block noscript_extra %}{% endblock %}
|
||||||
</noscript>
|
</noscript>
|
||||||
|
|
|
@ -26,11 +26,11 @@
|
||||||
- Run once: `yarn e2e:build`
|
- Run once: `yarn e2e:build`
|
||||||
- Each test run: `yarn e2e:run`
|
- Each test run: `yarn e2e:run`
|
||||||
- Tips
|
- Tips
|
||||||
- Make sure you copy the `.env.example` to `.env` and add the appropiate tokens (e.g. `SENTRY_AUTH_TOKEN` can be created on the Sentry dashboard). If this is not required, you can remove it from `eas.json` and `package.json`, as well as any mentions in the code.
|
- Make sure you copy the `.env.example` to `.env` and add the appropriate tokens (e.g. `SENTRY_AUTH_TOKEN` can be created on the Sentry dashboard). If this is not required, you can remove it from `eas.json` and `package.json`, as well as any mentions in the code.
|
||||||
- If you want to use Expo EAS on your own builds without ejecting from Expo, make sure to change the `owner` as well as `extra.eas.projectId` properties. If you do not have an Expo account, you may remove these properties.
|
- If you want to use Expo EAS on your own builds without ejecting from Expo, make sure to change the `owner` as well as `extra.eas.projectId` properties. If you do not have an Expo account, you may remove these properties.
|
||||||
- `npx react-native info` Checks what has been installed.
|
- `npx react-native info` Checks what has been installed.
|
||||||
- The android simulator won't be able to access localhost services unless you run `adb reverse tcp:{PORT} tcp:{PORT}`
|
- The android simulator won't be able to access localhost services unless you run `adb reverse tcp:{PORT} tcp:{PORT}`
|
||||||
- For instance, the localhosted dev-wallet will need `adb reverse tcp:3001 tcp:3001`
|
- For instance, the locally-hosted dev-wallet will need `adb reverse tcp:3001 tcp:3001`
|
||||||
- For some reason, the typescript compiler chokes on platform-specific files (e.g. `foo.native.ts`) but only when compiling for Web thus far. Therefore we always have one version of the file which doesn't use a platform specifier, and that should be the Web version. ([More info](https://stackoverflow.com/questions/44001050/platform-specific-import-component-in-react-native-with-typescript).)
|
- For some reason, the typescript compiler chokes on platform-specific files (e.g. `foo.native.ts`) but only when compiling for Web thus far. Therefore we always have one version of the file which doesn't use a platform specifier, and that should be the Web version. ([More info](https://stackoverflow.com/questions/44001050/platform-specific-import-component-in-react-native-with-typescript).)
|
||||||
|
|
||||||
## Go-Server Build
|
## Go-Server Build
|
||||||
|
|
|
@ -41,26 +41,26 @@ export function displayNotification(
|
||||||
}
|
}
|
||||||
|
|
||||||
export function displayNotificationFromModel(
|
export function displayNotificationFromModel(
|
||||||
notif: NotificationsFeedItemModel,
|
notification: NotificationsFeedItemModel,
|
||||||
) {
|
) {
|
||||||
let author = sanitizeDisplayName(
|
let author = sanitizeDisplayName(
|
||||||
notif.author.displayName || notif.author.handle,
|
notification.author.displayName || notification.author.handle,
|
||||||
)
|
)
|
||||||
let title: string
|
let title: string
|
||||||
let body: string = ''
|
let body: string = ''
|
||||||
if (notif.isLike) {
|
if (notification.isLike) {
|
||||||
title = `${author} liked your post`
|
title = `${author} liked your post`
|
||||||
body = notif.additionalPost?.thread?.postRecord?.text || ''
|
body = notification.additionalPost?.thread?.postRecord?.text || ''
|
||||||
} else if (notif.isRepost) {
|
} else if (notification.isRepost) {
|
||||||
title = `${author} reposted your post`
|
title = `${author} reposted your post`
|
||||||
body = notif.additionalPost?.thread?.postRecord?.text || ''
|
body = notification.additionalPost?.thread?.postRecord?.text || ''
|
||||||
} else if (notif.isMention) {
|
} else if (notification.isMention) {
|
||||||
title = `${author} mentioned you`
|
title = `${author} mentioned you`
|
||||||
body = notif.additionalPost?.thread?.postRecord?.text || ''
|
body = notification.additionalPost?.thread?.postRecord?.text || ''
|
||||||
} else if (notif.isReply) {
|
} else if (notification.isReply) {
|
||||||
title = `${author} replied to your post`
|
title = `${author} replied to your post`
|
||||||
body = notif.additionalPost?.thread?.postRecord?.text || ''
|
body = notification.additionalPost?.thread?.postRecord?.text || ''
|
||||||
} else if (notif.isFollow) {
|
} else if (notification.isFollow) {
|
||||||
title = 'New follower!'
|
title = 'New follower!'
|
||||||
body = `${author} has followed you`
|
body = `${author} has followed you`
|
||||||
} else {
|
} else {
|
||||||
|
@ -68,10 +68,12 @@ export function displayNotificationFromModel(
|
||||||
}
|
}
|
||||||
let image
|
let image
|
||||||
if (
|
if (
|
||||||
AppBskyEmbedImages.isView(notif.additionalPost?.thread?.post.embed) &&
|
AppBskyEmbedImages.isView(
|
||||||
notif.additionalPost?.thread?.post.embed.images[0]?.thumb
|
notification.additionalPost?.thread?.post.embed,
|
||||||
|
) &&
|
||||||
|
notification.additionalPost?.thread?.post.embed.images[0]?.thumb
|
||||||
) {
|
) {
|
||||||
image = notif.additionalPost.thread.post.embed.images[0].thumb
|
image = notification.additionalPost.thread.post.embed.images[0].thumb
|
||||||
}
|
}
|
||||||
return displayNotification(title, body, image)
|
return displayNotification(title, body, image)
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ export function getCurrentRoute(state: State) {
|
||||||
export function isStateAtTabRoot(state: State | undefined) {
|
export function isStateAtTabRoot(state: State | undefined) {
|
||||||
if (!state) {
|
if (!state) {
|
||||||
// NOTE
|
// NOTE
|
||||||
// if state is not defined it's because init is occuring
|
// if state is not defined it's because init is occurring
|
||||||
// and therefore we can safely assume we're at root
|
// and therefore we can safely assume we're at root
|
||||||
// -prf
|
// -prf
|
||||||
return true
|
return true
|
||||||
|
|
|
@ -27,7 +27,7 @@ export function detectLinkables(text: string): DetectedLinkable[] {
|
||||||
matchValue = matchValue.slice(1)
|
matchValue = matchValue.slice(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// strip ending puncuation
|
// strip ending punctuation
|
||||||
if (/[.,;!?]$/.test(matchValue)) {
|
if (/[.,;!?]$/.test(matchValue)) {
|
||||||
matchValue = matchValue.slice(0, -1)
|
matchValue = matchValue.slice(0, -1)
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ globalThis.atob = (str: string): string => {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Adding the padding if missing, for semplicity
|
// Adding the padding if missing, for simplicity
|
||||||
str += '=='.slice(2 - (str.length & 3))
|
str += '=='.slice(2 - (str.length & 3))
|
||||||
var bitmap,
|
var bitmap,
|
||||||
result = '',
|
result = '',
|
||||||
|
|
|
@ -118,7 +118,7 @@ export class PostThreadItemModel {
|
||||||
|
|
||||||
assignTreeModels(
|
assignTreeModels(
|
||||||
v: AppBskyFeedDefs.ThreadViewPost,
|
v: AppBskyFeedDefs.ThreadViewPost,
|
||||||
higlightedPostUri: string,
|
highlightedPostUri: string,
|
||||||
includeParent = true,
|
includeParent = true,
|
||||||
includeChildren = true,
|
includeChildren = true,
|
||||||
) {
|
) {
|
||||||
|
@ -130,7 +130,12 @@ export class PostThreadItemModel {
|
||||||
parentModel._showChildReplyLine = true
|
parentModel._showChildReplyLine = true
|
||||||
if (v.parent.parent) {
|
if (v.parent.parent) {
|
||||||
parentModel._showParentReplyLine = true
|
parentModel._showParentReplyLine = true
|
||||||
parentModel.assignTreeModels(v.parent, higlightedPostUri, true, false)
|
parentModel.assignTreeModels(
|
||||||
|
v.parent,
|
||||||
|
highlightedPostUri,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
this.parent = parentModel
|
this.parent = parentModel
|
||||||
} else if (AppBskyFeedDefs.isNotFoundPost(v.parent)) {
|
} else if (AppBskyFeedDefs.isNotFoundPost(v.parent)) {
|
||||||
|
@ -147,10 +152,10 @@ export class PostThreadItemModel {
|
||||||
const itemModel = new PostThreadItemModel(this.rootStore, item)
|
const itemModel = new PostThreadItemModel(this.rootStore, item)
|
||||||
itemModel._depth = this._depth + 1
|
itemModel._depth = this._depth + 1
|
||||||
itemModel._showParentReplyLine =
|
itemModel._showParentReplyLine =
|
||||||
itemModel.parentUri !== higlightedPostUri && replies.length === 0
|
itemModel.parentUri !== highlightedPostUri && replies.length === 0
|
||||||
if (item.replies?.length) {
|
if (item.replies?.length) {
|
||||||
itemModel._showChildReplyLine = true
|
itemModel._showChildReplyLine = true
|
||||||
itemModel.assignTreeModels(item, higlightedPostUri, false, true)
|
itemModel.assignTreeModels(item, highlightedPostUri, false, true)
|
||||||
}
|
}
|
||||||
replies.push(itemModel)
|
replies.push(itemModel)
|
||||||
} else if (AppBskyFeedDefs.isNotFoundPost(item)) {
|
} else if (AppBskyFeedDefs.isNotFoundPost(item)) {
|
||||||
|
|
|
@ -181,7 +181,7 @@ export class NotificationsFeedItemModel {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
get additionaDataUri(): string | undefined {
|
get additionalDataUri(): string | undefined {
|
||||||
if (this.isReply || this.isQuote || this.isMention) {
|
if (this.isReply || this.isQuote || this.isMention) {
|
||||||
return this.uri
|
return this.uri
|
||||||
} else if (this.isLike || this.isRepost) {
|
} else if (this.isLike || this.isRepost) {
|
||||||
|
@ -492,7 +492,7 @@ export class NotificationsFeedModel {
|
||||||
'mostRecent',
|
'mostRecent',
|
||||||
res.data.notifications[0],
|
res.data.notifications[0],
|
||||||
)
|
)
|
||||||
const addedUri = notif.additionaDataUri
|
const addedUri = notif.additionalDataUri
|
||||||
if (addedUri) {
|
if (addedUri) {
|
||||||
const postsRes = await this.rootStore.agent.app.bsky.feed.getPosts({
|
const postsRes = await this.rootStore.agent.app.bsky.feed.getPosts({
|
||||||
uris: [addedUri],
|
uris: [addedUri],
|
||||||
|
@ -585,7 +585,7 @@ export class NotificationsFeedModel {
|
||||||
`item-${_idCounter++}`,
|
`item-${_idCounter++}`,
|
||||||
item,
|
item,
|
||||||
)
|
)
|
||||||
const uri = itemModel.additionaDataUri
|
const uri = itemModel.additionalDataUri
|
||||||
if (uri) {
|
if (uri) {
|
||||||
const models = addedPostMap.get(uri) || []
|
const models = addedPostMap.get(uri) || []
|
||||||
models.push(itemModel)
|
models.push(itemModel)
|
||||||
|
|
|
@ -187,7 +187,7 @@ export class SessionModel {
|
||||||
account => account.service === service && account.did === did,
|
account => account.service === service && account.did === did,
|
||||||
)
|
)
|
||||||
|
|
||||||
// fall back to any pre-existing access tokens
|
// fall back to any preexisting access tokens
|
||||||
let refreshJwt = session?.refreshJwt || existingAccount?.refreshJwt
|
let refreshJwt = session?.refreshJwt || existingAccount?.refreshJwt
|
||||||
let accessJwt = session?.accessJwt || existingAccount?.accessJwt
|
let accessJwt = session?.accessJwt || existingAccount?.accessJwt
|
||||||
if (event === 'expired') {
|
if (event === 'expired') {
|
||||||
|
@ -247,7 +247,7 @@ export class SessionModel {
|
||||||
const res = await agent.getProfile({actor: did}).catch(_e => undefined)
|
const res = await agent.getProfile({actor: did}).catch(_e => undefined)
|
||||||
if (res) {
|
if (res) {
|
||||||
return {
|
return {
|
||||||
dispayName: res.data.displayName,
|
displayName: res.data.displayName,
|
||||||
aviUrl: res.data.avatar,
|
aviUrl: res.data.avatar,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@ export const Step1 = observer(({model}: {model: CreateAccountModel}) => {
|
||||||
model.setServiceDescription(undefined)
|
model.setServiceDescription(undefined)
|
||||||
}, [setIsDefaultSelected, model])
|
}, [setIsDefaultSelected, model])
|
||||||
|
|
||||||
const fetchServiceDesription = React.useMemo(
|
const fetchServiceDescription = React.useMemo(
|
||||||
() => debounce(() => model.fetchServiceDescription(), 1e3),
|
() => debounce(() => model.fetchServiceDescription(), 1e3),
|
||||||
[model],
|
[model],
|
||||||
)
|
)
|
||||||
|
@ -40,9 +40,9 @@ export const Step1 = observer(({model}: {model: CreateAccountModel}) => {
|
||||||
const onChangeServiceUrl = React.useCallback(
|
const onChangeServiceUrl = React.useCallback(
|
||||||
(v: string) => {
|
(v: string) => {
|
||||||
model.setServiceUrl(v)
|
model.setServiceUrl(v)
|
||||||
fetchServiceDesription()
|
fetchServiceDescription()
|
||||||
},
|
},
|
||||||
[model, fetchServiceDesription],
|
[model, fetchServiceDescription],
|
||||||
)
|
)
|
||||||
|
|
||||||
const onDebugChangeServiceUrl = React.useCallback(
|
const onDebugChangeServiceUrl = React.useCallback(
|
||||||
|
|
|
@ -218,7 +218,7 @@ const ProfileHeaderLoaded = observer(
|
||||||
onRefreshAll()
|
onRefreshAll()
|
||||||
Toast.show('Account unblocked')
|
Toast.show('Account unblocked')
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
store.log.error('Failed to block unaccount', e)
|
store.log.error('Failed to block account', e)
|
||||||
Toast.show(`There was an issue! ${e.toString()}`)
|
Toast.show(`There was an issue! ${e.toString()}`)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -109,7 +109,7 @@ export function PostEmbeds({
|
||||||
RNImage.prefetch(firstImageToShow)
|
RNImage.prefetch(firstImageToShow)
|
||||||
items.forEach(item => {
|
items.forEach(item => {
|
||||||
if (firstImageToShow !== item.uri) {
|
if (firstImageToShow !== item.uri) {
|
||||||
// First image already prefeched above
|
// First image already prefetched above
|
||||||
RNImage.prefetch(item.uri)
|
RNImage.prefetch(item.uri)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -202,7 +202,7 @@ const FeedPage = observer(
|
||||||
}
|
}
|
||||||
}, [store, doPoll, onSoftReset, screen, feed]),
|
}, [store, doPoll, onSoftReset, screen, feed]),
|
||||||
)
|
)
|
||||||
// fires when tab is actived/deactivated
|
// fires when tab is activated/deactivated
|
||||||
// - check for latest
|
// - check for latest
|
||||||
useTabFocusEffect(
|
useTabFocusEffect(
|
||||||
'Home',
|
'Home',
|
||||||
|
|
Loading…
Reference in New Issue