Pinafore to Semaphore
This commit is contained in:
parent
2e533d91ac
commit
e976da6b1e
|
@ -9,9 +9,9 @@ jobs:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:12.2
|
image: postgres:12.2
|
||||||
env:
|
env:
|
||||||
POSTGRES_USER: pinafore
|
POSTGRES_USER: semaphore
|
||||||
POSTGRES_PASSWORD: pinafore
|
POSTGRES_PASSWORD: semaphore
|
||||||
POSTGRES_DB: pinafore_development
|
POSTGRES_DB: semaphore_development
|
||||||
POSTGRES_HOST: 127.0.0.1
|
POSTGRES_HOST: 127.0.0.1
|
||||||
POSTGRES_PORT: 5432
|
POSTGRES_PORT: 5432
|
||||||
ports:
|
ports:
|
||||||
|
|
|
@ -9,9 +9,9 @@ jobs:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:12.2
|
image: postgres:12.2
|
||||||
env:
|
env:
|
||||||
POSTGRES_USER: pinafore
|
POSTGRES_USER: semaphore
|
||||||
POSTGRES_PASSWORD: pinafore
|
POSTGRES_PASSWORD: semaphore
|
||||||
POSTGRES_DB: pinafore_development
|
POSTGRES_DB: semaphore_development
|
||||||
POSTGRES_HOST: 127.0.0.1
|
POSTGRES_HOST: 127.0.0.1
|
||||||
POSTGRES_PORT: 5432
|
POSTGRES_PORT: 5432
|
||||||
ports:
|
ports:
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Contributing to Pinafore
|
# Contributing to semaphore
|
||||||
|
|
||||||
## Installing
|
## Installing
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ because of [this issue](https://github.com/paulmillr/chokidar/issues/237).
|
||||||
|
|
||||||
## Linting
|
## Linting
|
||||||
|
|
||||||
Pinafore uses [JavaScript Standard Style](https://standardjs.com/).
|
semaphore uses [JavaScript Standard Style](https://standardjs.com/).
|
||||||
|
|
||||||
Lint:
|
Lint:
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ If the script isn't able to set up the Postgres database, try running:
|
||||||
|
|
||||||
Then:
|
Then:
|
||||||
|
|
||||||
psql -d template1 -c "CREATE USER pinafore WITH PASSWORD 'pinafore' CREATEDB;"
|
psql -d template1 -c "CREATE USER semaphore WITH PASSWORD 'semaphore' CREATEDB;"
|
||||||
|
|
||||||
### Testing in development mode
|
### Testing in development mode
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ In separate terminals:
|
||||||
|
|
||||||
yarn run run-mastodon
|
yarn run run-mastodon
|
||||||
|
|
||||||
2\. Run a Pinafore dev server:
|
2\. Run a Semaphore dev server:
|
||||||
|
|
||||||
yarn run dev
|
yarn run dev
|
||||||
|
|
||||||
|
@ -148,18 +148,18 @@ To disable minification in a production build (for debugging purposes), you can
|
||||||
|
|
||||||
The Webpack Bundle Analyzer `report.html` and `stats.json` are available publicly via e.g.:
|
The Webpack Bundle Analyzer `report.html` and `stats.json` are available publicly via e.g.:
|
||||||
|
|
||||||
- [dev.pinafore.social/report.html](https://dev.pinafore.social/report.html)
|
- [dev.semaphore.social/report.html](https://dev.semaphore.social/report.html)
|
||||||
- [dev.pinafore.social/stats.json](https://dev.pinafore.social/stats.json)
|
- [dev.semaphore.social/stats.json](https://dev.semaphore.social/stats.json)
|
||||||
|
|
||||||
This is also available locally after `yarn run build` at `.sapper/client/report.html`.
|
This is also available locally after `yarn run build` at `.sapper/client/report.html`.
|
||||||
|
|
||||||
## Deploying
|
## Deploying
|
||||||
|
|
||||||
This section only applies to `dev.pinafore.social` and `pinafore.social`, not if you're hosting your own version of
|
This section only applies to `dev.semaphore.social` and `semaphore.social`, not if you're hosting your own version of
|
||||||
Pinafore.
|
Semaphore.
|
||||||
|
|
||||||
The site uses [Vercel](https://vercel.com). The `master` branch publishes to `dev.pinafore.social` and the `production`
|
The site uses [Vercel](https://vercel.com). The `master` branch publishes to `dev.semaphore.social` and the `production`
|
||||||
branch deploys to `pinafore.social`.
|
branch deploys to `semaphore.social`.
|
||||||
|
|
||||||
## Architecture
|
## Architecture
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ FROM node:16-alpine
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY . /app
|
COPY . /app
|
||||||
|
|
||||||
# Install Pinafore
|
# Install Semaphore
|
||||||
RUN yarn --production --pure-lockfile && \
|
RUN yarn --production --pure-lockfile && \
|
||||||
yarn build && \
|
yarn build && \
|
||||||
yarn cache clean && \
|
yarn cache clean && \
|
||||||
|
|
45
README.md
45
README.md
|
@ -6,28 +6,17 @@ Continuation of the [Pinafore project](https://github.com/nolanlawson/pinafore).
|
||||||
|
|
||||||
Credit must go to Nolan and the original contributors for their excellent work.
|
Credit must go to Nolan and the original contributors for their excellent work.
|
||||||
|
|
||||||
|
|
||||||
## What's with the name?
|
|
||||||
|
|
||||||
Semaphore is a fork of Pinafore and apparently they were going to call the boat H.M.S Semaphore but thought Pinafore was more fun.
|
|
||||||
Bonus - semaphore is an old communication method.
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>Original Pinafore readme</summary>
|
|
||||||
|
|
||||||
_**Note:** Pinafore is unmaintained. Read [this](https://nolanlawson.com/2023/01/09/retiring-pinafore/). Original documentation follows._
|
|
||||||
|
|
||||||
An alternative web client for [Mastodon](https://joinmastodon.org), focused on speed and simplicity.
|
An alternative web client for [Mastodon](https://joinmastodon.org), focused on speed and simplicity.
|
||||||
|
|
||||||
Pinafore is available at [pinafore.social](https://pinafore.social). Beta releases are at [dev.pinafore.social](https://dev.pinafore.social).
|
Semaphore is available at [semaphore.social](https://semaphore.social). Beta releases are at [dev.semaphore.social](https://dev.semaphore.social).
|
||||||
|
|
||||||
See the [user guide](https://github.com/nolanlawson/pinafore/blob/master/docs/User-Guide.md) for basic usage. See the [admin guide](https://github.com/nolanlawson/pinafore/blob/master/docs/Admin-Guide.md) if Pinafore cannot connect to your instance.
|
See the [user guide](https://github.com/nolanlawson/semaphore/blob/master/docs/User-Guide.md) for basic usage. See the [admin guide](https://github.com/nolanlawson/semaphore/blob/master/docs/Admin-Guide.md) if Semaphore cannot connect to your instance.
|
||||||
|
|
||||||
For updates and support, follow [@pinafore@fosstodon.org](https://fosstodon.org/@pinafore).
|
For updates and support, follow [@semaphore@fosstodon.org](https://fosstodon.org/@semaphore).
|
||||||
|
|
||||||
## Browser support
|
## Browser support
|
||||||
|
|
||||||
Pinafore supports the latest versions of the following browsers:
|
Semaphore supports the latest versions of the following browsers:
|
||||||
|
|
||||||
- Chrome
|
- Chrome
|
||||||
- Edge
|
- Edge
|
||||||
|
@ -69,9 +58,9 @@ Compatible versions of each (Opera, Brave, Samsung, etc.) should be fine.
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
|
|
||||||
Pinafore requires [Node.js](https://nodejs.org/en/) and [Yarn](https://yarnpkg.com).
|
Semaphore requires [Node.js](https://nodejs.org/en/) and [Yarn](https://yarnpkg.com).
|
||||||
|
|
||||||
To build Pinafore for production, first install dependencies:
|
To build Semaphore for production, first install dependencies:
|
||||||
|
|
||||||
yarn --production --pure-lockfile
|
yarn --production --pure-lockfile
|
||||||
|
|
||||||
|
@ -90,7 +79,7 @@ To build a Docker image for production:
|
||||||
docker build .
|
docker build .
|
||||||
docker run -d -p 4002:4002 [your-image]
|
docker run -d -p 4002:4002 [your-image]
|
||||||
|
|
||||||
Now Pinafore is running at `localhost:4002`.
|
Now Semaphore is running at `localhost:4002`.
|
||||||
|
|
||||||
### docker-compose
|
### docker-compose
|
||||||
|
|
||||||
|
@ -102,13 +91,13 @@ The image will build and start, then detach from the terminal running at `localh
|
||||||
|
|
||||||
### Updating
|
### Updating
|
||||||
|
|
||||||
To keep your version of Pinafore up to date, you can use `git` to check out the latest tag:
|
To keep your version of Semaphore up to date, you can use `git` to check out the latest tag:
|
||||||
|
|
||||||
git checkout $(git tag -l | sort -Vr | head -n 1)
|
git checkout $(git tag -l | sort -Vr | head -n 1)
|
||||||
|
|
||||||
### Exporting
|
### Exporting
|
||||||
|
|
||||||
Pinafore is a static site. When you run `yarn build`, static files will be
|
Semaphore is a static site. When you run `yarn build`, static files will be
|
||||||
written to `__sapper__/export`.
|
written to `__sapper__/export`.
|
||||||
|
|
||||||
It is _not_ recommended to directly expose these files when self-hosting. Instead, you should use `node server.js` (e.g. with an
|
It is _not_ recommended to directly expose these files when self-hosting. Instead, you should use `node server.js` (e.g. with an
|
||||||
|
@ -117,21 +106,21 @@ nginx or Apache proxy in front). This adds several things you don't get from the
|
||||||
- [CSP headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) (important for security)
|
- [CSP headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) (important for security)
|
||||||
- Certain dynamic routes (less important because of Service Worker managing routing, but certain things could break if Service Workers are disabled in the user's browser)
|
- Certain dynamic routes (less important because of Service Worker managing routing, but certain things could break if Service Workers are disabled in the user's browser)
|
||||||
|
|
||||||
Having an [nginx config generator](https://github.com/nolanlawson/pinafore/issues/1878) is currently an open issue.
|
Having an [nginx config generator](https://github.com/nolanlawson/semaphore/issues/1878) is currently an open issue.
|
||||||
|
|
||||||
## Developing and testing
|
## Developing and testing
|
||||||
|
|
||||||
See [CONTRIBUTING.md](https://github.com/nolanlawson/pinafore/blob/master/CONTRIBUTING.md) for
|
See [CONTRIBUTING.md](https://github.com/nolanlawson/semaphore/blob/master/CONTRIBUTING.md) for
|
||||||
how to run Pinafore in dev mode and run tests.
|
how to run Semaphore in dev mode and run tests.
|
||||||
|
|
||||||
## Changelog
|
## Changelog
|
||||||
|
|
||||||
For a changelog, see the [GitHub releases](http://github.com/nolanlawson/pinafore/releases/).
|
For a changelog, see the [GitHub releases](http://github.com/nolanlawson/semaphore/releases/).
|
||||||
|
|
||||||
|
For a list of breaking changes, see [BREAKING_CHANGES.md](https://github.com/nolanlawson/semaphore/blob/master/BREAKING_CHANGES.md).
|
||||||
|
|
||||||
For a list of breaking changes, see [BREAKING_CHANGES.md](https://github.com/nolanlawson/pinafore/blob/master/BREAKING_CHANGES.md).
|
|
||||||
|
|
||||||
## What's with the name?
|
## What's with the name?
|
||||||
|
|
||||||
Pinafore is named after the [Gilbert and Sullivan play](https://en.wikipedia.org/wiki/Hms_pinafore). The [soundtrack](https://www.allmusic.com/album/gilbert-sullivan-hms-pinafore-1949-mw0001830483) is very good.
|
Semaphore is a fork of Pinafore and apparently they were going to call the boat H.M.S Semaphore but thought Pinafore was more fun.
|
||||||
|
Bonus - semaphore is an old communication method.
|
||||||
</summary>
|
|
||||||
|
|
|
@ -3,6 +3,6 @@
|
||||||
set -x
|
set -x
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
PGPASSWORD=pinafore pg_dump -U pinafore -w pinafore_development -h 127.0.0.1 > tests/fixtures/dump.sql
|
PGPASSWORD=semaphore pg_dump -U semaphore -w semaphore_development -h 127.0.0.1 > tests/fixtures/dump.sql
|
||||||
cd mastodon/public/system
|
cd mastodon/public/system
|
||||||
tar -czf ../../../tests/fixtures/system.tgz .
|
tar -czf ../../../tests/fixtures/system.tgz .
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
|
|
||||||
export const DB_NAME = 'pinafore_development'
|
export const DB_NAME = 'semaphore_development'
|
||||||
export const DB_USER = 'pinafore'
|
export const DB_USER = 'semaphore'
|
||||||
export const DB_PASS = 'pinafore'
|
export const DB_PASS = 'semaphore'
|
||||||
export const DB_PORT = process.env.PGPORT || 5432
|
export const DB_PORT = process.env.PGPORT || 5432
|
||||||
export const DB_HOST = '127.0.0.1'
|
export const DB_HOST = '127.0.0.1'
|
||||||
|
|
||||||
|
|
|
@ -24,5 +24,5 @@ Export successful! Static files are in:
|
||||||
|
|
||||||
__sapper__/export/
|
__sapper__/export/
|
||||||
|
|
||||||
Enjoy Pinafore!
|
Enjoy Semaphore!
|
||||||
`)
|
`)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
export default [
|
export default [
|
||||||
{ id: 'pinafore-logo', src: 'src/static/sailboat.svg', inline: true },
|
{ id: 'semaphore-logo', src: 'src/static/sailboat.svg', inline: true },
|
||||||
{ id: 'fa-arrow-left', src: 'src/thirdparty/font-awesome-svg-png/white/svg/arrow-left.svg' },
|
{ id: 'fa-arrow-left', src: 'src/thirdparty/font-awesome-svg-png/white/svg/arrow-left.svg' },
|
||||||
{ id: 'fa-bell', src: 'src/thirdparty/font-awesome-svg-png/white/svg/bell.svg', inline: true },
|
{ id: 'fa-bell', src: 'src/thirdparty/font-awesome-svg-png/white/svg/bell.svg', inline: true },
|
||||||
{ id: 'fa-bell-o', src: 'src/thirdparty/font-awesome-svg-png/white/svg/bell-o.svg' },
|
{ id: 'fa-bell-o', src: 'src/thirdparty/font-awesome-svg-png/white/svg/bell-o.svg' },
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
---
|
---
|
||||||
version: "3"
|
version: "3"
|
||||||
services:
|
services:
|
||||||
pinafore:
|
semaphore:
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
image: pinafore:latest
|
image: semaphore:latest
|
||||||
ports:
|
ports:
|
||||||
- 4002:4002
|
- 4002:4002
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
Admin Guide
|
Admin Guide
|
||||||
====
|
====
|
||||||
|
|
||||||
This guide is for instance admins who may be having trouble with Pinafore compatibility.
|
This guide is for instance admins who may be having trouble with Semaphore compatibility.
|
||||||
|
|
||||||
By default, [Mastodon allows cross-origin access to the `/api` endpoint](https://github.com/tootsuite/mastodon/blob/50529cbceb84e611bca497624a7a4c38113e5135/config/initializers/cors.rb#L15-L20). Thus Pinafore should "just work" for most Mastodon servers.
|
By default, [Mastodon allows cross-origin access to the `/api` endpoint](https://github.com/tootsuite/mastodon/blob/50529cbceb84e611bca497624a7a4c38113e5135/config/initializers/cors.rb#L15-L20). Thus Semaphore should "just work" for most Mastodon servers.
|
||||||
|
|
||||||
If the nginx/Apache settings have been changed, though, then Pinafore might not be able to connect to an instance. To check if the instance is supported, run this command (replacing `myinstance.com` with your instance URL):
|
If the nginx/Apache settings have been changed, though, then Semaphore might not be able to connect to an instance. To check if the instance is supported, run this command (replacing `myinstance.com` with your instance URL):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -sLv -H 'Origin: https://pinafore.social' -o /dev/null \
|
curl -sLv -H 'Origin: https://semaphore.social' -o /dev/null \
|
||||||
myinstance.com/api/v1/instance
|
myinstance.com/api/v1/instance
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -18,12 +18,12 @@ If you see this in the output:
|
||||||
Access-Control-Allow-Origin: *
|
Access-Control-Allow-Origin: *
|
||||||
```
|
```
|
||||||
|
|
||||||
Then Pinafore should work as expected!
|
Then Semaphore should work as expected!
|
||||||
|
|
||||||
Otherwise, if the instance admin would like to whitelist only certain websites (including Pinafore) to work with CORS, then they will need to make sure that the server echoes:
|
Otherwise, if the instance admin would like to whitelist only certain websites (including Semaphore) to work with CORS, then they will need to make sure that the server echoes:
|
||||||
|
|
||||||
```
|
```
|
||||||
Access-Control-Allow-Origin: https://pinafore.social
|
Access-Control-Allow-Origin: https://semaphore.social
|
||||||
```
|
```
|
||||||
|
|
||||||
when Pinafore tries to access it. Note that this is a bit complicated to configure (compared to the simpler `*` approach), but [there are instructions on StackOverflow](https://stackoverflow.com/q/1653308) for nginx, Apache, and other servers.
|
when Semaphore tries to access it. Note that this is a bit complicated to configure (compared to the simpler `*` approach), but [there are instructions on StackOverflow](https://stackoverflow.com/q/1653308) for nginx, Apache, and other servers.
|
||||||
|
|
|
@ -5,16 +5,16 @@ Basically think of it as a "lay of the land" as well as "weird unusual stuff tha
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
Pinafore uses [SvelteJS](https://svelte.technology) v2 and [SapperJS](https://sapper.svelte.technology). Most of it is a fairly typical Svelte/Sapper project, but there
|
Semaphore uses [SvelteJS](https://svelte.technology) v2 and [SapperJS](https://sapper.svelte.technology). Most of it is a fairly typical Svelte/Sapper project, but there
|
||||||
are some quirks, which are described below. This list of quirks is non-exhaustive.
|
are some quirks, which are described below. This list of quirks is non-exhaustive.
|
||||||
|
|
||||||
## Why Svelte v2 / Sapper ?
|
## Why Svelte v2 / Sapper ?
|
||||||
|
|
||||||
There is [no upgrade path from Svelte v2 to v3](https://github.com/sveltejs/svelte/issues/2462). Doing so would require manually migrating every component over. And in the end, it would probably not change the UX (user experience) of Pinafore – only the DX (developer experience).
|
There is [no upgrade path from Svelte v2 to v3](https://github.com/sveltejs/svelte/issues/2462). Doing so would require manually migrating every component over. And in the end, it would probably not change the UX (user experience) of Semaphore – only the DX (developer experience).
|
||||||
|
|
||||||
Similarly, [Sapper would need to be migrated to SvelteKit](https://kit.svelte.dev/docs/migrating). Since Pinafore generates static files, there is probably not much benefit in moving from Sapper to SvelteKit.
|
Similarly, [Sapper would need to be migrated to SvelteKit](https://kit.svelte.dev/docs/migrating). Since Semaphore generates static files, there is probably not much benefit in moving from Sapper to SvelteKit.
|
||||||
|
|
||||||
For this reason, Pinafore has been stuck on Svelte v2 and Sapper for a long time. Migrating it is not something I've considered. The [v2 Svelte docs](https://v2.svelte.dev/) are still online, and share many similarities with Svelte v3.
|
For this reason, Semaphore has been stuck on Svelte v2 and Sapper for a long time. Migrating it is not something I've considered. The [v2 Svelte docs](https://v2.svelte.dev/) are still online, and share many similarities with Svelte v3.
|
||||||
|
|
||||||
## Prebuild process
|
## Prebuild process
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ as a bundled custom element, not as a Svelte component.
|
||||||
|
|
||||||
For various reasons, `a11y-dialog`, `autosize`, and `timeago` are forked and bundled into the source code.
|
For various reasons, `a11y-dialog`, `autosize`, and `timeago` are forked and bundled into the source code.
|
||||||
This was either because something needed to be tweaked or fixed, or I was trimming unused code and didn't
|
This was either because something needed to be tweaked or fixed, or I was trimming unused code and didn't
|
||||||
see much value in contributing it back, because it was too Pinafore-specific.
|
see much value in contributing it back, because it was too Semaphore-specific.
|
||||||
|
|
||||||
## Every Sapper page is "duplicated"
|
## Every Sapper page is "duplicated"
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Internationalization
|
# Internationalization
|
||||||
|
|
||||||
To contribute or change translations for Pinafore, look in the [src/intl](https://github.com/semaphore-social/semaphore/tree/master/src/intl) directory. Create a new file or edit an existing file based on its [two-letter language code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) and optionally, a region. For instance, `en-US.js` is American English, and `fr.js` is French.
|
To contribute or change translations for Semaphore, look in the [src/intl](https://github.com/semaphore-social/semaphore/tree/master/src/intl) directory. Create a new file or edit an existing file based on its [two-letter language code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) and optionally, a region. For instance, `en-US.js` is American English, and `fr.js` is French.
|
||||||
|
|
||||||
The default is `en-US.js`, and any strings not defined in a language file will fall back to the strings from that file.
|
The default is `en-US.js`, and any strings not defined in a language file will fall back to the strings from that file.
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ There is also an `intl/emoji-picker` directory, which contains translations for
|
||||||
(which already comes with English built-in).
|
(which already comes with English built-in).
|
||||||
|
|
||||||
Note that internationalization is currently experimental. Client-side locale switching is not supported – when you build
|
Note that internationalization is currently experimental. Client-side locale switching is not supported – when you build
|
||||||
the instance of Pinafore, it is either one language or another. To build in a particular language, use (for example):
|
the instance of Semaphore, it is either one language or another. To build in a particular language, use (for example):
|
||||||
|
|
||||||
LOCALE=fr yarn build
|
LOCALE=fr yarn build
|
||||||
|
|
||||||
|
@ -16,4 +16,4 @@ or
|
||||||
|
|
||||||
LOCALE=fr yarn dev
|
LOCALE=fr yarn dev
|
||||||
|
|
||||||
To host a localized version of Pinafore using Vercel, you can see this example: [buildCommand in vercel.json for Spanish](https://github.com/nvdaes/vercelPinafore/blob/45c70fb2088fe5f2380a729dab83e6f3ab4e6291/vercel.json#L9).
|
To host a localized version of Semaphore using Vercel, you can see this example: [buildCommand in vercel.json for Spanish](https://github.com/nvdaes/vercelPinafore/blob/45c70fb2088fe5f2380a729dab83e6f3ab4e6291/vercel.json#L9).
|
|
@ -1,6 +1,6 @@
|
||||||
## Theming
|
## Theming
|
||||||
|
|
||||||
This document describes how to write your own theme for Pinafore.
|
This document describes how to write your own theme for Semaphore.
|
||||||
|
|
||||||
First, create a file `scss/themes/foobar.scss`, write some SCSS inside and add
|
First, create a file `scss/themes/foobar.scss`, write some SCSS inside and add
|
||||||
the following at the bottom of `scss/themes/foobar.scss`.
|
the following at the bottom of `scss/themes/foobar.scss`.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Pinafore user guide
|
# Semaphore user guide
|
||||||
|
|
||||||
This will walk you through the basic usage of Pinafore and its major differences with the Mastodon web UI.
|
This will walk you through the basic usage of Semaphore and its major differences with the Mastodon web UI.
|
||||||
|
|
||||||
* [Home page](#home-page)
|
* [Home page](#home-page)
|
||||||
* [Community page](#community-page)
|
* [Community page](#community-page)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"name": "pinafore",
|
"name": "semaphore",
|
||||||
"description": "Alternative web client for Mastodon",
|
"description": "Alternative web client for Mastodon",
|
||||||
"version": "2.6.0",
|
"version": "2.6.0",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
<link href="/ipadpro1_splash.png" media="(device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2)" rel="apple-touch-startup-image" />
|
<link href="/ipadpro1_splash.png" media="(device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2)" rel="apple-touch-startup-image" />
|
||||||
<link href="/ipadpro3_splash.png" media="(device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2)" rel="apple-touch-startup-image" />
|
<link href="/ipadpro3_splash.png" media="(device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2)" rel="apple-touch-startup-image" />
|
||||||
<link href="/ipadpro2_splash.png" media="(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2)" rel="apple-touch-startup-image" />
|
<link href="/ipadpro2_splash.png" media="(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2)" rel="apple-touch-startup-image" />
|
||||||
<link rel="me" href="https://fosstodon.org/@pinafore">
|
<link rel="me" href="https://fosstodon.org/@semaphore">
|
||||||
|
|
||||||
<!-- inline CSS -->
|
<!-- inline CSS -->
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
export default {
|
export default {
|
||||||
// Home page, basic <title> and <description>
|
// Home page, basic <title> and <description>
|
||||||
appName: 'Pinafore',
|
appName: 'Semaphore',
|
||||||
appDescription: 'Ein alternativer Web Client für Mastodon, der auf Geschwindigkeit und einfache Bedienung ausgelegt ist.',
|
appDescription: 'Ein alternativer Web Client für Mastodon, der auf Geschwindigkeit und einfache Bedienung ausgelegt ist.',
|
||||||
homeDescription: `
|
homeDescription: `
|
||||||
<p>
|
<p>
|
||||||
Pinafore ist ein Web Client für
|
Semaphore ist ein Web Client für
|
||||||
<a rel="noopener" target="_blank" href="https://joinmastodon.org">Mastodon</a>,
|
<a rel="noopener" target="_blank" href="https://joinmastodon.org">Mastodon</a>,
|
||||||
der für Geschwindigkeit und einfache Bedienung konzipiert wurde.
|
der für Geschwindigkeit und einfache Bedienung konzipiert wurde.
|
||||||
</p>
|
</p>
|
||||||
|
@ -17,7 +17,7 @@ export default {
|
||||||
logIn: 'Anmelden',
|
logIn: 'Anmelden',
|
||||||
footer: `
|
footer: `
|
||||||
<p>
|
<p>
|
||||||
Pinafore ist
|
Semaphore ist
|
||||||
<a rel="noopener" target="_blank" href="https://github.com/semaphore-social/semaphore">quelloffene Software</a>,
|
<a rel="noopener" target="_blank" href="https://github.com/semaphore-social/semaphore">quelloffene Software</a>,
|
||||||
erstellt von <a rel="noopener" target="_blank" href="https://nolanlawson.com">Nolan Lawson</a>
|
erstellt von <a rel="noopener" target="_blank" href="https://nolanlawson.com">Nolan Lawson</a>
|
||||||
und verteilt unter der
|
und verteilt unter der
|
||||||
|
@ -174,7 +174,7 @@ export default {
|
||||||
·
|
·
|
||||||
{showInstanceName, select,
|
{showInstanceName, select,
|
||||||
true {{instanceName}}
|
true {{instanceName}}
|
||||||
other {Pinafore}
|
other {Semaphore}
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
pinLabel: `{label} {pinnable, select,
|
pinLabel: `{label} {pinnable, select,
|
||||||
|
@ -315,10 +315,10 @@ export default {
|
||||||
profilePageForAccount: 'Profilseite für {account}',
|
profilePageForAccount: 'Profilseite für {account}',
|
||||||
// About page
|
// About page
|
||||||
about: 'Über',
|
about: 'Über',
|
||||||
aboutApp: 'Über Pinafore',
|
aboutApp: 'Über Semaphore',
|
||||||
aboutAppDescription: `
|
aboutAppDescription: `
|
||||||
<p>
|
<p>
|
||||||
Pinafore ist
|
Semaphore ist
|
||||||
<a rel="noopener" target="_blank"
|
<a rel="noopener" target="_blank"
|
||||||
href="https://github.com/semaphore-social/semaphore">freie und quelloffene Software</a>
|
href="https://github.com/semaphore-social/semaphore">freie und quelloffene Software</a>
|
||||||
erstellt von
|
erstellt von
|
||||||
|
@ -331,13 +331,13 @@ export default {
|
||||||
<h2 id="privacy-policy">Datenschutzerklärung</h2>
|
<h2 id="privacy-policy">Datenschutzerklärung</h2>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Pinafore speichert keine persönlichen Informationen auf seinen Servern,
|
Semaphore speichert keine persönlichen Informationen auf seinen Servern,
|
||||||
einschließlich, aber nicht beschränkt auf, Namen, E-Mail-Adressen,
|
einschließlich, aber nicht beschränkt auf, Namen, E-Mail-Adressen,
|
||||||
IP-Adressen, Beiträgen, und Fotos.
|
IP-Adressen, Beiträgen, und Fotos.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Pinafore ist eine statische Seite. Alle Daten werden lokal in Ihrem Browser gespeichert und mit den Instanzen des Fediversums geteilt, zu denen Sie sich verbinden.
|
Semaphore ist eine statische Seite. Alle Daten werden lokal in Ihrem Browser gespeichert und mit den Instanzen des Fediversums geteilt, zu denen Sie sich verbinden.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h2>Mitwirkende</h2>
|
<h2>Mitwirkende</h2>
|
||||||
|
@ -406,7 +406,7 @@ export default {
|
||||||
notificationFilters: 'Filter für Benachrichtigungen',
|
notificationFilters: 'Filter für Benachrichtigungen',
|
||||||
pushNotifications: 'Push-Benachrichtigungen',
|
pushNotifications: 'Push-Benachrichtigungen',
|
||||||
// Add instance page
|
// Add instance page
|
||||||
storageError: 'Es sieht so aus als ob Pinafore lokal keine Daten speichern kann. Ist Dein Browser im privaten Modus oder blockiert Cookies? Pinafore speichert alle Daten lokal und braucht zum ordnungsgemäßen Betrieb LocalStorage und IndexedDB.',
|
storageError: 'Es sieht so aus als ob Semaphore lokal keine Daten speichern kann. Ist Dein Browser im privaten Modus oder blockiert Cookies? Semaphore speichert alle Daten lokal und braucht zum ordnungsgemäßen Betrieb LocalStorage und IndexedDB.',
|
||||||
javaScriptError: 'Du musst zum Einloggen javaScript einschalten.',
|
javaScriptError: 'Du musst zum Einloggen javaScript einschalten.',
|
||||||
enterInstanceName: 'Namen der Instanz eingeben',
|
enterInstanceName: 'Namen der Instanz eingeben',
|
||||||
instanceColon: 'Instanz:',
|
instanceColon: 'Instanz:',
|
||||||
|
@ -426,7 +426,7 @@ export default {
|
||||||
// Link text
|
// Link text
|
||||||
logInToAnInstancePre: '',
|
logInToAnInstancePre: '',
|
||||||
logInToAnInstanceText: 'Melde Dich bei einer Instanz an',
|
logInToAnInstanceText: 'Melde Dich bei einer Instanz an',
|
||||||
logInToAnInstancePost: 'um Pinafore zu verwenden.',
|
logInToAnInstancePost: 'um Semaphore zu verwenden.',
|
||||||
// Another custom tooltip
|
// Another custom tooltip
|
||||||
showRingPre: 'Immer einen',
|
showRingPre: 'Immer einen',
|
||||||
showRingText: 'Fokusring',
|
showRingText: 'Fokusring',
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
export default {
|
export default {
|
||||||
// Home page, basic <title> and <description>
|
// Home page, basic <title> and <description>
|
||||||
appName: 'Pinafore',
|
appName: 'Semaphore',
|
||||||
appDescription: 'An alternative web client for Mastodon, focused on speed and simplicity.',
|
appDescription: 'An alternative web client for Mastodon, focused on speed and simplicity.',
|
||||||
homeDescription: `
|
homeDescription: `
|
||||||
<p>
|
<p>
|
||||||
Pinafore is a web client for
|
Semaphore is a web client for
|
||||||
<a rel="noopener" target="_blank" href="https://joinmastodon.org">Mastodon</a>,
|
<a rel="noopener" target="_blank" href="https://joinmastodon.org">Mastodon</a>,
|
||||||
designed for speed and simplicity.
|
designed for speed and simplicity.
|
||||||
</p>
|
</p>
|
||||||
|
@ -17,7 +17,7 @@ export default {
|
||||||
logIn: 'Log in',
|
logIn: 'Log in',
|
||||||
footer: `
|
footer: `
|
||||||
<p>
|
<p>
|
||||||
Pinafore is
|
Semaphore is
|
||||||
<a rel="noopener" target="_blank" href="https://github.com/semaphore-social/semaphore">open-source software</a>
|
<a rel="noopener" target="_blank" href="https://github.com/semaphore-social/semaphore">open-source software</a>
|
||||||
created by
|
created by
|
||||||
<a rel="noopener" target="_blank" href="https://nolanlawson.com">Nolan Lawson</a>
|
<a rel="noopener" target="_blank" href="https://nolanlawson.com">Nolan Lawson</a>
|
||||||
|
@ -28,7 +28,7 @@ export default {
|
||||||
</p>
|
</p>
|
||||||
`,
|
`,
|
||||||
// Manifest
|
// Manifest
|
||||||
longAppName: 'Pinafore for Mastodon',
|
longAppName: 'Semaphore for Mastodon',
|
||||||
newStatus: 'New toot',
|
newStatus: 'New toot',
|
||||||
// Generic UI
|
// Generic UI
|
||||||
loading: 'Loading',
|
loading: 'Loading',
|
||||||
|
@ -180,7 +180,7 @@ export default {
|
||||||
·
|
·
|
||||||
{showInstanceName, select,
|
{showInstanceName, select,
|
||||||
true {{instanceName}}
|
true {{instanceName}}
|
||||||
other {Pinafore}
|
other {Semaphore}
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
pinLabel: `{label} {pinnable, select,
|
pinLabel: `{label} {pinnable, select,
|
||||||
|
@ -327,10 +327,10 @@ export default {
|
||||||
profilePageForAccount: 'Profile page for {account}',
|
profilePageForAccount: 'Profile page for {account}',
|
||||||
// About page
|
// About page
|
||||||
about: 'About',
|
about: 'About',
|
||||||
aboutApp: 'About Pinafore',
|
aboutApp: 'About Semaphore',
|
||||||
aboutAppDescription: `
|
aboutAppDescription: `
|
||||||
<p>
|
<p>
|
||||||
Pinafore is
|
Semaphore is
|
||||||
<a rel="noopener" target="_blank"
|
<a rel="noopener" target="_blank"
|
||||||
href="https://github.com/semaphore-social/semaphore">free and open-source software</a>
|
href="https://github.com/semaphore-social/semaphore">free and open-source software</a>
|
||||||
created by
|
created by
|
||||||
|
@ -343,13 +343,13 @@ export default {
|
||||||
<h2 id="privacy-policy">Privacy Policy</h2>
|
<h2 id="privacy-policy">Privacy Policy</h2>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Pinafore does not store any personal information on its servers,
|
Semaphore does not store any personal information on its servers,
|
||||||
including but not limited to names, email addresses,
|
including but not limited to names, email addresses,
|
||||||
IP addresses, posts, and photos.
|
IP addresses, posts, and photos.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Pinafore is a static site. All data is stored locally in your browser and shared with the fediverse
|
Semaphore is a static site. All data is stored locally in your browser and shared with the fediverse
|
||||||
instance(s) you connect to.
|
instance(s) you connect to.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -427,8 +427,8 @@ export default {
|
||||||
notificationFilters: 'Notification filters',
|
notificationFilters: 'Notification filters',
|
||||||
pushNotifications: 'Push notifications',
|
pushNotifications: 'Push notifications',
|
||||||
// Add instance page
|
// Add instance page
|
||||||
storageError: `It seems Pinafore cannot store data locally. Is your browser in private mode
|
storageError: `It seems Semaphore cannot store data locally. Is your browser in private mode
|
||||||
or blocking cookies? Pinafore stores all data locally, and requires LocalStorage and
|
or blocking cookies? Semaphore stores all data locally, and requires LocalStorage and
|
||||||
IndexedDB to work correctly.`,
|
IndexedDB to work correctly.`,
|
||||||
javaScriptError: 'You must enable JavaScript to log in.',
|
javaScriptError: 'You must enable JavaScript to log in.',
|
||||||
enterInstanceName: 'Enter instance name',
|
enterInstanceName: 'Enter instance name',
|
||||||
|
@ -449,7 +449,7 @@ export default {
|
||||||
// Link text
|
// Link text
|
||||||
logInToAnInstancePre: '',
|
logInToAnInstancePre: '',
|
||||||
logInToAnInstanceText: 'Log in to an instance',
|
logInToAnInstanceText: 'Log in to an instance',
|
||||||
logInToAnInstancePost: 'to start using Pinafore.',
|
logInToAnInstancePost: 'to start using Semaphore.',
|
||||||
// Another custom tooltip
|
// Another custom tooltip
|
||||||
showRingPre: 'Always show',
|
showRingPre: 'Always show',
|
||||||
showRingText: 'focus ring',
|
showRingText: 'focus ring',
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
export default {
|
export default {
|
||||||
// Home page, basic <title> and <description>
|
// Home page, basic <title> and <description>
|
||||||
appName: 'Pinafore',
|
appName: 'Semaphore',
|
||||||
appDescription: 'Un cliente web alternativo para Mastodon, centrado en la velocidad y la sencillez.',
|
appDescription: 'Un cliente web alternativo para Mastodon, centrado en la velocidad y la sencillez.',
|
||||||
homeDescription: `
|
homeDescription: `
|
||||||
<p>
|
<p>
|
||||||
Pinafore es un cliente web para
|
Semaphore es un cliente web para
|
||||||
<a rel="noopener" target="_blank" href="https://joinmastodon.org">Mastodon</a>,
|
<a rel="noopener" target="_blank" href="https://joinmastodon.org">Mastodon</a>,
|
||||||
diseñado para ser rápido y sencillo.
|
diseñado para ser rápido y sencillo.
|
||||||
</p>
|
</p>
|
||||||
|
@ -17,7 +17,7 @@ export default {
|
||||||
logIn: 'Iniciar sesión',
|
logIn: 'Iniciar sesión',
|
||||||
footer: `
|
footer: `
|
||||||
<p>
|
<p>
|
||||||
Pinafore es
|
Semaphore es
|
||||||
<a rel="noopener" target="_blank" href="https://github.com/semaphore-social/semaphore">software de código abierto</a>
|
<a rel="noopener" target="_blank" href="https://github.com/semaphore-social/semaphore">software de código abierto</a>
|
||||||
creado por
|
creado por
|
||||||
<a rel="noopener" target="_blank" href="https://nolanlawson.com">Nolan Lawson</a>
|
<a rel="noopener" target="_blank" href="https://nolanlawson.com">Nolan Lawson</a>
|
||||||
|
@ -28,7 +28,7 @@ export default {
|
||||||
</p>
|
</p>
|
||||||
`,
|
`,
|
||||||
// Manifest
|
// Manifest
|
||||||
longAppName: 'Pinafore para Mastodon',
|
longAppName: 'Semaphore para Mastodon',
|
||||||
newStatus: 'Nuevo toot',
|
newStatus: 'Nuevo toot',
|
||||||
// Generic UI
|
// Generic UI
|
||||||
loading: 'Cargando',
|
loading: 'Cargando',
|
||||||
|
@ -180,7 +180,7 @@ export default {
|
||||||
·
|
·
|
||||||
{showInstanceName, select,
|
{showInstanceName, select,
|
||||||
true {{instanceName}}
|
true {{instanceName}}
|
||||||
other {Pinafore}
|
other {Semaphore}
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
pinLabel: `{label} {pinnable, select,
|
pinLabel: `{label} {pinnable, select,
|
||||||
|
@ -327,10 +327,10 @@ export default {
|
||||||
profilePageForAccount: 'Página de perfil para {account}',
|
profilePageForAccount: 'Página de perfil para {account}',
|
||||||
// About page
|
// About page
|
||||||
about: 'Acerca de',
|
about: 'Acerca de',
|
||||||
aboutApp: 'Acerca de Pinafore',
|
aboutApp: 'Acerca de Semaphore',
|
||||||
aboutAppDescription: `
|
aboutAppDescription: `
|
||||||
<p>
|
<p>
|
||||||
Pinafore es
|
Semaphore es
|
||||||
<a rel="noopener" target="_blank"
|
<a rel="noopener" target="_blank"
|
||||||
href="https://github.com/semaphore-social/semaphore">software libre y de código abierto</a>
|
href="https://github.com/semaphore-social/semaphore">software libre y de código abierto</a>
|
||||||
creado por
|
creado por
|
||||||
|
@ -343,13 +343,13 @@ export default {
|
||||||
<h2 id="privacy-policy">Política de privacidad</h2>
|
<h2 id="privacy-policy">Política de privacidad</h2>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Pinafore no almacena ninguna información personal en sus servidores,
|
Semaphore no almacena ninguna información personal en sus servidores,
|
||||||
incluyendo, pero no limitándose a nombres, direcciones de correo electrónico,
|
incluyendo, pero no limitándose a nombres, direcciones de correo electrónico,
|
||||||
direcciones IP, posts y fotos.
|
direcciones IP, posts y fotos.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Pinafore es un sitio estático. Todos los datos son almacenados en tu navegador y compartidos con las instancias del fediverso
|
Semaphore es un sitio estático. Todos los datos son almacenados en tu navegador y compartidos con las instancias del fediverso
|
||||||
a las que te conectas.
|
a las que te conectas.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -425,8 +425,8 @@ export default {
|
||||||
notificationFilters: 'Filtros para notificaciones',
|
notificationFilters: 'Filtros para notificaciones',
|
||||||
pushNotifications: 'Notificaciones Push',
|
pushNotifications: 'Notificaciones Push',
|
||||||
// Add instance page
|
// Add instance page
|
||||||
storageError: `Parece que Pinafore no puede almacenar datos localmente. ¿Está tu navegador en modo privado
|
storageError: `Parece que Semaphore no puede almacenar datos localmente. ¿Está tu navegador en modo privado
|
||||||
o bloqueando las cookies? Pinafore almacena todos los datos localmente, y requiere LocalStorage e
|
o bloqueando las cookies? Semaphore almacena todos los datos localmente, y requiere LocalStorage e
|
||||||
IndexedDB para funcionar correctamente.`,
|
IndexedDB para funcionar correctamente.`,
|
||||||
javaScriptError: 'Debes habilitar JavaScript para iniciar sesión.',
|
javaScriptError: 'Debes habilitar JavaScript para iniciar sesión.',
|
||||||
enterInstanceName: 'Introducir nombre de instancia',
|
enterInstanceName: 'Introducir nombre de instancia',
|
||||||
|
@ -447,7 +447,7 @@ export default {
|
||||||
// Link text
|
// Link text
|
||||||
logInToAnInstancePre: '',
|
logInToAnInstancePre: '',
|
||||||
logInToAnInstanceText: 'Inicia sesión en una instancia',
|
logInToAnInstanceText: 'Inicia sesión en una instancia',
|
||||||
logInToAnInstancePost: 'para empezar a usar Pinafore.',
|
logInToAnInstancePost: 'para empezar a usar Semaphore.',
|
||||||
// Another custom tooltip
|
// Another custom tooltip
|
||||||
showRingPre: 'Mostrar siempre',
|
showRingPre: 'Mostrar siempre',
|
||||||
showRingText: 'anillo del foco',
|
showRingText: 'anillo del foco',
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
export default {
|
export default {
|
||||||
// Home page, basic <title> and <description>
|
// Home page, basic <title> and <description>
|
||||||
appName: 'Pinafore',
|
appName: 'Semaphore',
|
||||||
appDescription: 'Un client alternatif pour Mastodon, concentré sur la vitesse et la simplicité',
|
appDescription: 'Un client alternatif pour Mastodon, concentré sur la vitesse et la simplicité',
|
||||||
homeDescription: `
|
homeDescription: `
|
||||||
<p>
|
<p>
|
||||||
Pinafore est un client web pour
|
Semaphore est un client web pour
|
||||||
<a rel="noopener" target="_blank" href="https://joinmastodon.org">Mastodon</a>,
|
<a rel="noopener" target="_blank" href="https://joinmastodon.org">Mastodon</a>,
|
||||||
dessiné pour la vitesse et la simplicité.
|
dessiné pour la vitesse et la simplicité.
|
||||||
</p>
|
</p>
|
||||||
|
@ -17,7 +17,7 @@ export default {
|
||||||
logIn: 'Se connecter',
|
logIn: 'Se connecter',
|
||||||
footer: `
|
footer: `
|
||||||
<p>
|
<p>
|
||||||
Pinafore est
|
Semaphore est
|
||||||
<a rel="noopener" target="_blank" href="https://github.com/semaphore-social/semaphore">logiciel open-source</a>
|
<a rel="noopener" target="_blank" href="https://github.com/semaphore-social/semaphore">logiciel open-source</a>
|
||||||
créé par
|
créé par
|
||||||
<a rel="noopener" target="_blank" href="https://nolanlawson.com">Nolan Lawson</a>
|
<a rel="noopener" target="_blank" href="https://nolanlawson.com">Nolan Lawson</a>
|
||||||
|
@ -175,7 +175,7 @@ export default {
|
||||||
·
|
·
|
||||||
{showInstanceName, select,
|
{showInstanceName, select,
|
||||||
true {{instanceName}}
|
true {{instanceName}}
|
||||||
other {Pinafore}
|
other {Semaphore}
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
pinLabel: `{label} {pinnable, select,
|
pinLabel: `{label} {pinnable, select,
|
||||||
|
@ -316,10 +316,10 @@ export default {
|
||||||
profilePageForAccount: 'Page de profil pour {account}',
|
profilePageForAccount: 'Page de profil pour {account}',
|
||||||
// About page
|
// About page
|
||||||
about: 'Infos',
|
about: 'Infos',
|
||||||
aboutApp: 'Infos sur Pinafore',
|
aboutApp: 'Infos sur Semaphore',
|
||||||
aboutAppDescription: `
|
aboutAppDescription: `
|
||||||
<p>
|
<p>
|
||||||
Pinafore est un logiciel
|
Semaphore est un logiciel
|
||||||
<a rel="noopener" target="_blank"
|
<a rel="noopener" target="_blank"
|
||||||
href="https://github.com/semaphore-social/semaphore">gratuit et open-source</a>
|
href="https://github.com/semaphore-social/semaphore">gratuit et open-source</a>
|
||||||
créé par
|
créé par
|
||||||
|
@ -332,12 +332,12 @@ export default {
|
||||||
<h2 id="privacy-policy">Politique de confidentialité</h2>
|
<h2 id="privacy-policy">Politique de confidentialité</h2>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Pinafore ne garde pas d'informations personelles dans ses serveurs,
|
Semaphore ne garde pas d'informations personelles dans ses serveurs,
|
||||||
y compris les noms, addresses courriel, addresses IP, messages, et photos.
|
y compris les noms, addresses courriel, addresses IP, messages, et photos.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Pinafore est un site statique. Tous données sont gardées en locale dans le navigateur, et sont partagée qu'avec
|
Semaphore est un site statique. Tous données sont gardées en locale dans le navigateur, et sont partagée qu'avec
|
||||||
les instances auxquelles vous vous connectez.
|
les instances auxquelles vous vous connectez.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -409,8 +409,8 @@ export default {
|
||||||
notificationFilters: 'Filtres de notifications',
|
notificationFilters: 'Filtres de notifications',
|
||||||
pushNotifications: 'Filtres de notifications push',
|
pushNotifications: 'Filtres de notifications push',
|
||||||
// Add instance page
|
// Add instance page
|
||||||
storageError: `Il semble que Pinafore ne peut pas stocker les données en locale. Est-ce que votre navigateur
|
storageError: `Il semble que Semaphore ne peut pas stocker les données en locale. Est-ce que votre navigateur
|
||||||
est en mode privé, ou est-ce qu'il bloque les cookies? Pinafore garde tous ses données en locale et
|
est en mode privé, ou est-ce qu'il bloque les cookies? Semaphore garde tous ses données en locale et
|
||||||
ne peut pas fonctionner sans LocalStorage ou IndexedDB.`,
|
ne peut pas fonctionner sans LocalStorage ou IndexedDB.`,
|
||||||
javaScriptError: 'Le JavaScript devrait être activé pour continuer.',
|
javaScriptError: 'Le JavaScript devrait être activé pour continuer.',
|
||||||
enterInstanceName: "Saisir le nom d'instance",
|
enterInstanceName: "Saisir le nom d'instance",
|
||||||
|
@ -431,7 +431,7 @@ export default {
|
||||||
// Link text
|
// Link text
|
||||||
logInToAnInstancePre: '',
|
logInToAnInstancePre: '',
|
||||||
logInToAnInstanceText: 'Se connecter à une instance',
|
logInToAnInstanceText: 'Se connecter à une instance',
|
||||||
logInToAnInstancePost: 'pour utiliser Pinafore.',
|
logInToAnInstancePost: 'pour utiliser Semaphore.',
|
||||||
// Another custom tooltip
|
// Another custom tooltip
|
||||||
showRingPre: 'Afficher toujours',
|
showRingPre: 'Afficher toujours',
|
||||||
showRingText: "l'anneau de focus",
|
showRingText: "l'anneau de focus",
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
export default {
|
export default {
|
||||||
// Home page, basic <title> and <description>
|
// Home page, basic <title> and <description>
|
||||||
appName: 'Pinafore',
|
appName: 'Semaphore',
|
||||||
appDescription: 'Альтернативный веб-клиент для Mastodon, ориентированный на скорость и простоту.',
|
appDescription: 'Альтернативный веб-клиент для Mastodon, ориентированный на скорость и простоту.',
|
||||||
homeDescription: `
|
homeDescription: `
|
||||||
<p>
|
<p>
|
||||||
Pinafore — веб-клиент для
|
Semaphore — веб-клиент для
|
||||||
<a rel="noopener" target="_blank" href="https://joinmastodon.org">Mastodon</a>,
|
<a rel="noopener" target="_blank" href="https://joinmastodon.org">Mastodon</a>,
|
||||||
разработан для скорости и простоты.
|
разработан для скорости и простоты.
|
||||||
</p>
|
</p>
|
||||||
|
@ -17,7 +17,7 @@ export default {
|
||||||
logIn: 'Войти',
|
logIn: 'Войти',
|
||||||
footer: `
|
footer: `
|
||||||
<p>
|
<p>
|
||||||
Pinafore — это
|
Semaphore — это
|
||||||
<a rel="noopener" target="_blank" href="https://github.com/semaphore-social/semaphore">программное обеспечение с открытым исходным кодом</a>
|
<a rel="noopener" target="_blank" href="https://github.com/semaphore-social/semaphore">программное обеспечение с открытым исходным кодом</a>
|
||||||
созданное
|
созданное
|
||||||
<a rel="noopener" target="_blank" href="https://nolanlawson.com">Ноланом Лоусоном</a>
|
<a rel="noopener" target="_blank" href="https://nolanlawson.com">Ноланом Лоусоном</a>
|
||||||
|
@ -28,7 +28,7 @@ export default {
|
||||||
</p>
|
</p>
|
||||||
`,
|
`,
|
||||||
// Manifest
|
// Manifest
|
||||||
longAppName: 'Pinafore для Mastodon',
|
longAppName: 'Semaphore для Mastodon',
|
||||||
newStatus: 'Новая запись',
|
newStatus: 'Новая запись',
|
||||||
// Generic UI
|
// Generic UI
|
||||||
loading: 'Загрузка',
|
loading: 'Загрузка',
|
||||||
|
@ -176,7 +176,7 @@ export default {
|
||||||
}
|
}
|
||||||
{showInstanceName, select,
|
{showInstanceName, select,
|
||||||
true {{instanceName}}
|
true {{instanceName}}
|
||||||
other {Pinafore}
|
other {Semaphore}
|
||||||
}
|
}
|
||||||
·
|
·
|
||||||
{name}
|
{name}
|
||||||
|
@ -325,10 +325,10 @@ export default {
|
||||||
profilePageForAccount: 'Страница профиля для {account}',
|
profilePageForAccount: 'Страница профиля для {account}',
|
||||||
// About page
|
// About page
|
||||||
about: 'О нас',
|
about: 'О нас',
|
||||||
aboutApp: 'О Pinafore',
|
aboutApp: 'О Semaphore',
|
||||||
aboutAppDescription: `
|
aboutAppDescription: `
|
||||||
<p>
|
<p>
|
||||||
Pinafore — это
|
Semaphore — это
|
||||||
<a rel="noopener" target="_blank"
|
<a rel="noopener" target="_blank"
|
||||||
href="https://github.com/semaphore-social/semaphore">бесплатное программное обеспечение с открытым исходным кодом</a>
|
href="https://github.com/semaphore-social/semaphore">бесплатное программное обеспечение с открытым исходным кодом</a>
|
||||||
создано
|
создано
|
||||||
|
@ -341,13 +341,13 @@ export default {
|
||||||
<h2 id="privacy-policy">Политика конфиденциальности</h2>
|
<h2 id="privacy-policy">Политика конфиденциальности</h2>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Pinafore не хранит никакой личной информации на своих серверах,
|
Semaphore не хранит никакой личной информации на своих серверах,
|
||||||
включая, помимо прочего, имена, адреса электронной почты,
|
включая, помимо прочего, имена, адреса электронной почты,
|
||||||
IP-адреса, сообщения и фотографии.
|
IP-адреса, сообщения и фотографии.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Pinafore — это статический сайт. Все данные хранятся локально в вашем браузере и передаются через Федиверс
|
Semaphore — это статический сайт. Все данные хранятся локально в вашем браузере и передаются через Федиверс
|
||||||
инстансы, к которым вы подключаетесь.
|
инстансы, к которым вы подключаетесь.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -424,8 +424,8 @@ export default {
|
||||||
notificationFilters: 'Фильтры уведомлений',
|
notificationFilters: 'Фильтры уведомлений',
|
||||||
pushNotifications: 'Всплывающее уведомление',
|
pushNotifications: 'Всплывающее уведомление',
|
||||||
// Add instance page
|
// Add instance page
|
||||||
storageError: `Похоже, Pinafore не может хранить данные локально. Ваш браузер находится в приватном режиме
|
storageError: `Похоже, Semaphore не может хранить данные локально. Ваш браузер находится в приватном режиме
|
||||||
или блокирует файлов cookie? Pinafore хранит все данные локально, и для этого требуется LocalStorage и
|
или блокирует файлов cookie? Semaphore хранит все данные локально, и для этого требуется LocalStorage и
|
||||||
IndexedDB для корректной работы.`,
|
IndexedDB для корректной работы.`,
|
||||||
javaScriptError: 'Вы должны включить JavaScript, чтобы войти в систему.',
|
javaScriptError: 'Вы должны включить JavaScript, чтобы войти в систему.',
|
||||||
enterInstanceName: 'Введите имя инстанса',
|
enterInstanceName: 'Введите имя инстанса',
|
||||||
|
@ -446,7 +446,7 @@ export default {
|
||||||
// Link text
|
// Link text
|
||||||
logInToAnInstancePre: '',
|
logInToAnInstancePre: '',
|
||||||
logInToAnInstanceText: 'Войти в инстанс',
|
logInToAnInstanceText: 'Войти в инстанс',
|
||||||
logInToAnInstancePost: 'чтобы начать использовать Pinafore.',
|
logInToAnInstancePost: 'чтобы начать использовать Semaphore.',
|
||||||
// Another custom tooltip
|
// Another custom tooltip
|
||||||
showRingPre: 'Всегда показывать',
|
showRingPre: 'Всегда показывать',
|
||||||
showRingText: 'кольцо фокусировки',
|
showRingText: 'кольцо фокусировки',
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
import { post, paramsString, WRITE_TIMEOUT } from '../_utils/ajax.js'
|
import { post, paramsString, WRITE_TIMEOUT } from '../_utils/ajax.js'
|
||||||
import { basename } from './utils.js'
|
import { basename } from './utils.js'
|
||||||
|
|
||||||
const WEBSITE = 'https://pinafore.social'
|
const WEBSITE = 'https://semaphore.social'
|
||||||
const SCOPES = 'read write follow push'
|
const SCOPES = 'read write follow push'
|
||||||
const CLIENT_NAME = 'Pinafore'
|
const CLIENT_NAME = 'Semaphore'
|
||||||
|
|
||||||
export function registerApplication (instanceName, redirectUri) {
|
export function registerApplication (instanceName, redirectUri) {
|
||||||
const url = `${basename(instanceName)}/api/v1/apps`
|
const url = `${basename(instanceName)}/api/v1/apps`
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<FreeTextLayout>
|
<FreeTextLayout>
|
||||||
<div class="not-logged-in-home">
|
<div class="not-logged-in-home">
|
||||||
<div class="banner">
|
<div class="banner">
|
||||||
<SvgIcon className="not-logged-in-home-svg" href="#pinafore-logo" />
|
<SvgIcon className="not-logged-in-home-svg" href="#semaphore-logo" />
|
||||||
<h1>{intl.appName}</h1>
|
<h1>{intl.appName}</h1>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
|
|
|
@ -98,7 +98,7 @@
|
||||||
fill: var(--deemphasized-text-color);
|
fill: var(--deemphasized-text-color);
|
||||||
}
|
}
|
||||||
.compose-autosuggest-list-item-native-emoji {
|
.compose-autosuggest-list-item-native-emoji {
|
||||||
font-family: CountryFlagEmojiPolyfill, PinaforeEmoji;
|
font-family: CountryFlagEmojiPolyfill, SemaphoreEmoji;
|
||||||
font-size: 32px;
|
font-size: 32px;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
|
@ -216,7 +216,7 @@
|
||||||
contentWarning,
|
contentWarning,
|
||||||
realm,
|
realm,
|
||||||
overLimit,
|
overLimit,
|
||||||
inReplyToUuid, // typical replies, using Pinafore-specific uuid
|
inReplyToUuid, // typical replies, using Semaphore-specific uuid
|
||||||
inReplyToId, // delete-and-redraft replies, using standard id
|
inReplyToId, // delete-and-redraft replies, using standard id
|
||||||
poll,
|
poll,
|
||||||
sensitive
|
sensitive
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
export const STATUSES_STORE = 'statuses-v4'
|
||||||
|
export const STATUS_TIMELINES_STORE = 'status_timelines-v4'
|
||||||
|
export const META_STORE = 'meta-v4'
|
||||||
|
export const ACCOUNTS_STORE = 'accounts-v4'
|
||||||
|
export const RELATIONSHIPS_STORE = 'relationships-v4'
|
||||||
|
export const NOTIFICATIONS_STORE = 'notifications-v4'
|
||||||
|
export const NOTIFICATION_TIMELINES_STORE = 'notification_timelines-v4'
|
||||||
|
export const PINNED_STATUSES_STORE = 'pinned_statuses-v4'
|
||||||
|
export const THREADS_STORE = 'threads-v4'
|
||||||
|
|
||||||
|
export const TIMESTAMP = '__semaphore_ts'
|
||||||
|
export const ACCOUNT_ID = '__semaphore_acct_id'
|
||||||
|
export const STATUS_ID = '__semaphore_status_id'
|
||||||
|
export const REBLOG_ID = '__semaphore_reblog_id'
|
||||||
|
export const USERNAME_LOWERCASE = '__semaphore_acct_lc'
|
||||||
|
|
||||||
|
export const DB_VERSION_INITIAL = 9
|
||||||
|
export const DB_VERSION_SEARCH_ACCOUNTS = 10
|
||||||
|
export const DB_VERSION_SNOWFLAKE_IDS = 12 // 11 skipped because of mistake deployed to dev.semaphore.social
|
||||||
|
|
||||||
|
// Using an object for these so that unit tests can change them
|
||||||
|
export const DB_VERSION_CURRENT = { version: 12 }
|
||||||
|
export const CURRENT_TIME = { now: () => Date.now() }
|
|
@ -8,15 +8,15 @@ export const NOTIFICATION_TIMELINES_STORE = 'notification_timelines-v4'
|
||||||
export const PINNED_STATUSES_STORE = 'pinned_statuses-v4'
|
export const PINNED_STATUSES_STORE = 'pinned_statuses-v4'
|
||||||
export const THREADS_STORE = 'threads-v4'
|
export const THREADS_STORE = 'threads-v4'
|
||||||
|
|
||||||
export const TIMESTAMP = '__pinafore_ts'
|
export const TIMESTAMP = '__semaphore_ts'
|
||||||
export const ACCOUNT_ID = '__pinafore_acct_id'
|
export const ACCOUNT_ID = '__semaphore_acct_id'
|
||||||
export const STATUS_ID = '__pinafore_status_id'
|
export const STATUS_ID = '__semaphore_status_id'
|
||||||
export const REBLOG_ID = '__pinafore_reblog_id'
|
export const REBLOG_ID = '__semaphore_reblog_id'
|
||||||
export const USERNAME_LOWERCASE = '__pinafore_acct_lc'
|
export const USERNAME_LOWERCASE = '__semaphore_acct_lc'
|
||||||
|
|
||||||
export const DB_VERSION_INITIAL = 9
|
export const DB_VERSION_INITIAL = 9
|
||||||
export const DB_VERSION_SEARCH_ACCOUNTS = 10
|
export const DB_VERSION_SEARCH_ACCOUNTS = 10
|
||||||
export const DB_VERSION_SNOWFLAKE_IDS = 12 // 11 skipped because of mistake deployed to dev.pinafore.social
|
export const DB_VERSION_SNOWFLAKE_IDS = 12 // 11 skipped because of mistake deployed to dev.semaphore.social
|
||||||
|
|
||||||
// Using an object for these so that unit tests can change them
|
// Using an object for these so that unit tests can change them
|
||||||
export const DB_VERSION_CURRENT = { version: 12 }
|
export const DB_VERSION_CURRENT = { version: 12 }
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
// same as the one used for PinaforeEmoji
|
// same as the one used for SemaphoreEmoji
|
||||||
export const FONT_FAMILY = '"Twemoji Mozilla","Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol",' +
|
export const FONT_FAMILY = '"Twemoji Mozilla","Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol",' +
|
||||||
'"Noto Color Emoji","EmojiOne Color","Android Emoji",sans-serif'
|
'"Noto Color Emoji","EmojiOne Color","Android Emoji",sans-serif'
|
||||||
|
|
|
@ -69,7 +69,7 @@ export function navComputations (store) {
|
||||||
{
|
{
|
||||||
name: 'home',
|
name: 'home',
|
||||||
href: '/',
|
href: '/',
|
||||||
svg: '#pinafore-logo',
|
svg: '#semaphore-logo',
|
||||||
label: 'intl.home'
|
label: 'intl.home'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,7 @@ import { timelineMixins } from './timelineMixins.js'
|
||||||
import { statusMixins } from './statusMixins.js'
|
import { statusMixins } from './statusMixins.js'
|
||||||
import { autosuggestMixins } from './autosuggestMixins.js'
|
import { autosuggestMixins } from './autosuggestMixins.js'
|
||||||
import { composeMixins } from './composeMixins.js'
|
import { composeMixins } from './composeMixins.js'
|
||||||
import { PinaforeStore as Store } from '../store.js'
|
import { SemaphoreStore as Store } from '../store.js'
|
||||||
|
|
||||||
export function loggedInMixins () {
|
export function loggedInMixins () {
|
||||||
composeMixins(Store)
|
composeMixins(Store)
|
||||||
|
|
|
@ -73,17 +73,17 @@ const nonPersistedState = {
|
||||||
const state = Object.assign({}, persistedState, nonPersistedState)
|
const state = Object.assign({}, persistedState, nonPersistedState)
|
||||||
const keysToStoreInLocalStorage = new Set(Object.keys(persistedState))
|
const keysToStoreInLocalStorage = new Set(Object.keys(persistedState))
|
||||||
|
|
||||||
export class PinaforeStore extends LocalStorageStore {
|
export class SemaphoreStore extends LocalStorageStore {
|
||||||
constructor (state) {
|
constructor (state) {
|
||||||
super(state, keysToStoreInLocalStorage)
|
super(state, keysToStoreInLocalStorage)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PinaforeStore.prototype.observe = observe
|
SemaphoreStore.prototype.observe = observe
|
||||||
|
|
||||||
export const store = new PinaforeStore(state)
|
export const store = new SemaphoreStore(state)
|
||||||
|
|
||||||
mixins(PinaforeStore)
|
mixins(SemaphoreStore)
|
||||||
computations(store)
|
computations(store)
|
||||||
observers(store)
|
observers(store)
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: PinaforeRegular;
|
font-family: SemaphoreRegular;
|
||||||
src: local("BlinkMacSystemFont"),
|
src: local("BlinkMacSystemFont"),
|
||||||
local("Segoe UI"),
|
local("Segoe UI"),
|
||||||
local("Roboto"),
|
local("Roboto"),
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: PinaforeEmoji;
|
font-family: SemaphoreEmoji;
|
||||||
src:
|
src:
|
||||||
local("Twemoji Mozilla"),
|
local("Twemoji Mozilla"),
|
||||||
local("Apple Color Emoji"),
|
local("Apple Color Emoji"),
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
body {
|
body {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
font-family: system-ui, -apple-system, PinaforeRegular, sans-serif;
|
font-family: system-ui, -apple-system, SemaphoreRegular, sans-serif;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 1.4;
|
line-height: 1.4;
|
||||||
color: var(--body-text-color);
|
color: var(--body-text-color);
|
||||||
|
@ -161,7 +161,7 @@ input:required, input:invalid {
|
||||||
}
|
}
|
||||||
|
|
||||||
textarea {
|
textarea {
|
||||||
font-family: CountryFlagEmojiPolyfill, system-ui, -apple-system, PinaforeRegular, sans-serif, PinaforeEmoji;
|
font-family: CountryFlagEmojiPolyfill, system-ui, -apple-system, SemaphoreRegular, sans-serif, SemaphoreEmoji;
|
||||||
font-size: inherit;
|
font-size: inherit;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
@ -205,7 +205,7 @@ textarea {
|
||||||
}
|
}
|
||||||
|
|
||||||
.inline-emoji {
|
.inline-emoji {
|
||||||
font-family: CountryFlagEmojiPolyfill, PinaforeEmoji, sans-serif;
|
font-family: CountryFlagEmojiPolyfill, SemaphoreEmoji, sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
.invisible {
|
.invisible {
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -6,7 +6,7 @@ fixture`001-basic-spec.js`
|
||||||
|
|
||||||
test('has the correct <h1>', async t => {
|
test('has the correct <h1>', async t => {
|
||||||
await t
|
await t
|
||||||
.expect($('.main-content h1').innerText).eql('Pinafore')
|
.expect($('.main-content h1').innerText).eql('Semaphore')
|
||||||
})
|
})
|
||||||
|
|
||||||
test('navigates to about', async t => {
|
test('navigates to about', async t => {
|
||||||
|
@ -15,7 +15,7 @@ test('navigates to about', async t => {
|
||||||
.expect(getUrl()).contains('/settings')
|
.expect(getUrl()).contains('/settings')
|
||||||
.click('a[href="/settings/about"]')
|
.click('a[href="/settings/about"]')
|
||||||
.expect(getUrl()).contains('/about')
|
.expect(getUrl()).contains('/about')
|
||||||
.expect($('.main-content h1').innerText).eql('About Pinafore')
|
.expect($('.main-content h1').innerText).eql('About Semaphore')
|
||||||
})
|
})
|
||||||
|
|
||||||
test('navigates to /settings/instances/add', async t => {
|
test('navigates to /settings/instances/add', async t => {
|
||||||
|
|
|
@ -39,7 +39,7 @@ test('Pressing / focuses the search input if we are already on the search page',
|
||||||
test('Pressing / without logging in just goes to the search page', async t => {
|
test('Pressing / without logging in just goes to the search page', async t => {
|
||||||
await t
|
await t
|
||||||
.expect(getUrl()).eql('http://localhost:4002/')
|
.expect(getUrl()).eql('http://localhost:4002/')
|
||||||
.expect($('.main-content h1').innerText).eql('Pinafore')
|
.expect($('.main-content h1').innerText).eql('Semaphore')
|
||||||
await sleep(500) // wait for keyboard shortcuts to be active
|
await sleep(500) // wait for keyboard shortcuts to be active
|
||||||
await t
|
await t
|
||||||
.pressKey('/')
|
.pressKey('/')
|
||||||
|
|
Loading…
Reference in New Issue