* 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
Josh Soref 2023-05-30 15:46:43 -04:00 committed by GitHub
parent 724951e2f0
commit c808721938
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 48 additions and 41 deletions

View File

@ -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 && \

View File

@ -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', () => {

View File

@ -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:

View File

@ -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>

View File

@ -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

View File

@ -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)
} }

View File

@ -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

View File

@ -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)
} }

View File

@ -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 = '',

View File

@ -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)) {

View File

@ -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)

View File

@ -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,
} }
} }

View File

@ -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(

View File

@ -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()}`)
} }
}, },

View File

@ -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)
} }
}) })

View File

@ -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',