Browse Source

fix: update Sapper to latest (#775)

* fix: update to latest sapper

fixes #416

* fix error and debug pages

* requestIdleCallback makes column switching feel way nicer than double rAF

* add export feature

* add better csp info

* workaround for sapper sub-page issue

* clarify in readme about exporting

* fix now config

* switch from rIC to triple raf

* style-loader is no longer used

* update theming guide
master
Nolan Lawson 3 years ago
committed by GitHub
parent
commit
4bd181d3cc
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 9
      .gitignore
  2. 10
      README.md
  3. 14
      bin/build-inline-script.js
  4. 8
      bin/build-sass.js
  5. 8
      bin/build-svg.js
  6. 4
      bin/deploy.sh
  7. 48
      bin/print-export-info.js
  8. 10
      bin/restore-mastodon-data.js
  9. 2
      bin/svgs.js
  10. 15
      docs/Theming.md
  11. 4
      inline-script.js
  12. 0
      original-static/noun_1038998_cc.svg
  13. 0
      original-static/noun_975373_cc.png
  14. 0
      original-static/sailboat-icon.svg
  15. 0
      original-static/sailboat.svg
  16. 929
      package-lock.json
  17. 41
      package.json
  18. 36
      routes/_components/Layout.html
  19. 21
      routes/accounts/[accountId].html
  20. 14
      src/client.js
  21. 0
      src/routes/_a11y/getAccessibleLabelForStatus.js
  22. 0
      src/routes/_a11y/getAccountAccessibleName.js
  23. 0
      src/routes/_actions/accounts.js
  24. 2
      src/routes/_actions/addInstance.js
  25. 0
      src/routes/_actions/addStatusOrNotification.js
  26. 0
      src/routes/_actions/autosuggest.js
  27. 0
      src/routes/_actions/block.js
  28. 0
      src/routes/_actions/compose.js
  29. 0
      src/routes/_actions/contentWarnings.js
  30. 0
      src/routes/_actions/copyText.js
  31. 0
      src/routes/_actions/createMakeProps.js
  32. 0
      src/routes/_actions/delete.js
  33. 0
      src/routes/_actions/deleteStatuses.js
  34. 0
      src/routes/_actions/emoji.js
  35. 0
      src/routes/_actions/favorite.js
  36. 0
      src/routes/_actions/follow.js
  37. 0
      src/routes/_actions/followRequests.js
  38. 2
      src/routes/_actions/instances.js
  39. 0
      src/routes/_actions/lists.js
  40. 0
      src/routes/_actions/media.js
  41. 0
      src/routes/_actions/mute.js
  42. 0
      src/routes/_actions/muteConversation.js
  43. 0
      src/routes/_actions/pin.js
  44. 0
      src/routes/_actions/pinnedStatuses.js
  45. 0
      src/routes/_actions/postPrivacy.js
  46. 0
      src/routes/_actions/pushSubscription.js
  47. 0
      src/routes/_actions/reblog.js
  48. 0
      src/routes/_actions/requests.js
  49. 0
      src/routes/_actions/search.js
  50. 0
      src/routes/_actions/setDomainBlocked.js
  51. 0
      src/routes/_actions/setShowReblogs.js
  52. 0
      src/routes/_actions/statuses.js
  53. 0
      src/routes/_actions/streaming.js
  54. 0
      src/routes/_actions/timeline.js
  55. 0
      src/routes/_api/TimelineStream.js
  56. 0
      src/routes/_api/block.js
  57. 0
      src/routes/_api/blockDomain.js
  58. 0
      src/routes/_api/blockedAndMuted.js
  59. 0
      src/routes/_api/delete.js
  60. 0
      src/routes/_api/emoji.js
  61. 0
      src/routes/_api/favorite.js
  62. 0
      src/routes/_api/follow.js
  63. 0
      src/routes/_api/followsAndFollowers.js
  64. 0
      src/routes/_api/instance.js
  65. 0
      src/routes/_api/lists.js
  66. 0
      src/routes/_api/media.js
  67. 0
      src/routes/_api/mute.js
  68. 0
      src/routes/_api/muteConversation.js
  69. 0
      src/routes/_api/oauth.js
  70. 0
      src/routes/_api/pin.js
  71. 0
      src/routes/_api/pinnedStatuses.js
  72. 0
      src/routes/_api/pushSubscription.js
  73. 0
      src/routes/_api/reblog.js
  74. 0
      src/routes/_api/reblogsAndFavs.js
  75. 0
      src/routes/_api/relationships.js
  76. 0
      src/routes/_api/requests.js
  77. 0
      src/routes/_api/search.js
  78. 0
      src/routes/_api/showReblogs.js
  79. 0
      src/routes/_api/statuses.js
  80. 0
      src/routes/_api/timelines.js
  81. 0
      src/routes/_api/updateCredentials.js
  82. 0
      src/routes/_api/user.js
  83. 0
      src/routes/_api/utils.js
  84. 6
      src/routes/_components/AccountsListPage.html
  85. 0
      src/routes/_components/AutoplayVideo.html
  86. 0
      src/routes/_components/Avatar.html
  87. 0
      src/routes/_components/DynamicPageBanner.html
  88. 0
      src/routes/_components/ExternalLink.html
  89. 0
      src/routes/_components/FreeTextLayout.html
  90. 4
      src/routes/_components/HiddenFromSSR.html
  91. 0
      src/routes/_components/IconButton.html
  92. 0
      src/routes/_components/InformationalFooter.html
  93. 0
      src/routes/_components/Label.html
  94. 0
      src/routes/_components/LazyImage.html
  95. 11
      src/routes/_components/LazyPage.html
  96. 0
      src/routes/_components/LoadingMask.html
  97. 0
      src/routes/_components/LoadingPage.html
  98. 0
      src/routes/_components/LoadingSpinner.html
  99. 0
      src/routes/_components/Nav.html
  100. 0
      src/routes/_components/NavItem.html

9
.gitignore

@ -1,11 +1,14 @@
.DS_Store
node_modules
.sapper
__sapper__
yarn.lock
templates/.*
assets/*.css
static/*.css
/mastodon
mastodon.log
assets/robots.txt
static/robots.txt
/inline-script-checksum.json
/assets/inline-script.js.map
/static/inline-script.js.map
/templates/.*
/src/manifest/

10
README.md

@ -76,6 +76,16 @@ To keep your version of Pinafore up to date, you can use `git` to check out the
git checkout $(git tag -l | sort -Vr | head -n 1)
### Exporting
You can export Pinafore as a static site. Run:
npm run export
Static files will be written to `__sapper__/export`.
Be sure to add the [CSP](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) header printed out in the console to
your server config!
## Developing and testing
See [CONTRIBUTING.md](https://github.com/nolanlawson/pinafore/blob/master/CONTRIBUTING.md) for

14
bin/build-inline-script.js

@ -8,7 +8,7 @@ import { rollup } from 'rollup'
import { terser } from 'rollup-plugin-terser'
import replace from 'rollup-plugin-replace'
import fromPairs from 'lodash-es/fromPairs'
import { themes } from '../routes/_static/themes'
import { themes } from '../src/routes/_static/themes'
const readFile = pify(fs.readFile.bind(fs))
const writeFile = pify(fs.writeFile.bind(fs))
@ -36,22 +36,22 @@ async function main () {
sourcemap: true
})
let fullCode = `${code}\n//# sourceMappingURL=inline-script.js.map`
let fullCode = `${code}\n//# sourceMappingURL=/inline-script.js.map`
let checksum = crypto.createHash('sha256').update(fullCode).digest('base64')
let checksumFilepath = path.join(__dirname, '../inline-script-checksum.json')
await writeFile(checksumFilepath, JSON.stringify({ checksum }), 'utf8')
let html2xxFilepath = path.join(__dirname, '../templates/2xx.html')
let html2xxFile = await readFile(html2xxFilepath, 'utf8')
html2xxFile = html2xxFile.replace(
let htmlTemplateFilepath = path.join(__dirname, '../src/template.html')
let htmlTemplateFile = await readFile(htmlTemplateFilepath, 'utf8')
htmlTemplateFile = htmlTemplateFile.replace(
/<!-- insert inline script here -->[\s\S]+<!-- end insert inline script here -->/,
'<!-- insert inline script here --><script>' + fullCode + '</script><!-- end insert inline script here -->'
)
await writeFile(html2xxFilepath, html2xxFile, 'utf8')
await writeFile(htmlTemplateFilepath, htmlTemplateFile, 'utf8')
await writeFile(path.resolve(__dirname, '../assets/inline-script.js.map'), map.toString(), 'utf8')
await writeFile(path.resolve(__dirname, '../static/inline-script.js.map'), map.toString(), 'utf8')
}
main().catch(err => {

8
bin/build-sass.js

@ -16,10 +16,10 @@ const globalScss = path.join(__dirname, '../scss/global.scss')
const defaultThemeScss = path.join(__dirname, '../scss/themes/_default.scss')
const offlineThemeScss = path.join(__dirname, '../scss/themes/_offline.scss')
const customScrollbarScss = path.join(__dirname, '../scss/custom-scrollbars.scss')
const html2xxFile = path.join(__dirname, '../templates/2xx.html')
const htmlTemplateFile = path.join(__dirname, '../src/template.html')
const scssDir = path.join(__dirname, '../scss')
const themesScssDir = path.join(__dirname, '../scss/themes')
const assetsDir = path.join(__dirname, '../assets')
const assetsDir = path.join(__dirname, '../static')
function doWatch () {
let start = now()
@ -44,7 +44,7 @@ async function compileGlobalSass () {
let offlineStyle = (await renderCss(offlineThemeScss))
let scrollbarStyle = (await renderCss(customScrollbarScss))
let html = await readFile(html2xxFile, 'utf8')
let html = await readFile(htmlTemplateFile, 'utf8')
html = html.replace(/<!-- begin inline CSS -->[\s\S]+<!-- end inline CSS -->/,
`<!-- begin inline CSS -->\n` +
`<style>\n${mainStyle}</style>\n` +
@ -53,7 +53,7 @@ async function compileGlobalSass () {
`<!-- end inline CSS -->`
)
await writeFile(html2xxFile, html, 'utf8')
await writeFile(htmlTemplateFile, html, 'utf8')
}
async function compileThemesSass () {

8
bin/build-svg.js

@ -28,13 +28,13 @@ async function main () {
result = `<svg xmlns="http://www.w3.org/2000/svg" style="display:none;">\n${result}\n</svg>`
let html2xxFilepath = path.join(__dirname, '../templates/2xx.html')
let html2xxFile = await readFile(html2xxFilepath, 'utf8')
html2xxFile = html2xxFile.replace(
let htmlTemplateFilepath = path.join(__dirname, '../src/template.html')
let htmlTemplateFile = await readFile(htmlTemplateFilepath, 'utf8')
htmlTemplateFile = htmlTemplateFile.replace(
/<!-- insert svg here -->[\s\S]+<!-- end insert svg here -->/,
'<!-- insert svg here -->' + result + '<!-- end insert svg here -->'
)
await writeFile(html2xxFilepath, html2xxFile, 'utf8')
await writeFile(htmlTemplateFilepath, htmlTemplateFile, 'utf8')
}
main().catch(err => {

4
bin/deploy.sh

@ -7,9 +7,9 @@ PATH="$PATH:./node_modules/.bin"
# set up robots.txt
if [[ "$DEPLOY_TYPE" == "dev" ]]; then
printf 'User-agent: *\nDisallow: /' > assets/robots.txt
printf 'User-agent: *\nDisallow: /' > static/robots.txt
else
rm -f assets/robots.txt
rm -f static/robots.txt
fi
# if in travis, use the $NOW_TOKEN

48
bin/print-export-info.js

@ -0,0 +1,48 @@
const fs = require('fs')
const path = require('path')
const checksum = require('../inline-script-checksum').checksum
const html = fs.readFileSync(path.join(__dirname, '../__sapper__/export/index.html'), 'utf8')
const nonce = html.match(/<script nonce=([^>]+)>/)[1]
const csp = `add_header Content-Security-Policy "script-src 'self' 'sha256-${checksum}' 'nonce-${nonce}'; ` +
`worker-src 'self'; style-src 'self' 'unsafe-inline'; frame-src 'none'; object-src 'none'; manifest-src 'self';`
fs.writeFileSync(path.join(__dirname, '../__sapper__/export/.csp.nginx'), csp, 'utf8')
console.log(`
,((*
,((* (,
,((* (((*
,((* (((((.
* ,((* ((((((*
.(/ ,((* (((((((/
.((/ ,((* ((((((((/
,(((/ ,((* (((((((((*
.(((((/ ,((* ((((((((((
,((*
//////////((((/////////////
/((((((((((((((((((((((((((
/((((((((((((((((((((((((,
*(((((((((((((((((((((/.
./((((((((((((((((.
P I N A F O R E
Export successful! Static files are in:
__sapper__/export/
Be sure to add the CSP header to your nginx config:
server {
include ${path.resolve(__dirname, '..')}/__sapper__/export/.csp.nginx;
}
This file will be updated whenever you do \`npm run export\`.
Enjoy Pinafore!
`)

10
bin/restore-mastodon-data.js

@ -1,12 +1,12 @@
import { actions } from './mastodon-data'
import { users } from '../tests/users'
import { postStatus } from '../routes/_api/statuses'
import { followAccount } from '../routes/_api/follow'
import { favoriteStatus } from '../routes/_api/favorite'
import { reblogStatus } from '../routes/_api/reblog'
import { postStatus } from '../src/routes/_api/statuses'
import { followAccount } from '../src/routes/_api/follow'
import { favoriteStatus } from '../src/routes/_api/favorite'
import { reblogStatus } from '../src/routes/_api/reblog'
import fetch from 'node-fetch'
import FileApi from 'file-api'
import { pinStatus } from '../routes/_api/pin'
import { pinStatus } from '../src/routes/_api/pin'
import { submitMedia } from '../tests/submitMedia'
global.File = FileApi.File

2
bin/svgs.js

@ -1,5 +1,5 @@
module.exports = [
{ id: 'pinafore-logo', src: 'original-assets/sailboat.svg', title: 'Home' },
{ id: 'pinafore-logo', src: 'original-static/sailboat.svg', title: 'Home' },
{ id: 'fa-bell', src: 'node_modules/font-awesome-svg-png/white/svg/bell.svg', title: 'Notifications' },
{ id: 'fa-users', src: 'node_modules/font-awesome-svg-png/white/svg/users.svg', title: 'Local' },
{ id: 'fa-globe', src: 'node_modules/font-awesome-svg-png/white/svg/globe.svg', title: 'Federated' },

15
docs/Theming.md

@ -1,6 +1,9 @@
## Theming
Create a file `scss/themes/foobar.scss`, write some SCSS inside and add the following at the bottom of `scss/themes/foobar.scss`.
This document describes how to write your own theme for Pinafore.
First, create a file `scss/themes/foobar.scss`, write some SCSS inside and add
the following at the bottom of `scss/themes/foobar.scss`.
```scss
@import "_base.scss";
@ -9,9 +12,10 @@ body.theme-foobar {
}
```
> Note: You can find all the SCSS variables available in `scss/themes/_default.scss` while the all CSS Custom Properties available are listed in `scss/themes/_base.scss`.
> Note: You can find all the SCSS variables available in `scss/themes/_default.scss`
> while the all CSS Custom Properties available are listed in `scss/themes/_base.scss`.
Add your theme to `routes/_static/themes.js`
Then, Add your theme to `src/routes/_static/themes.js`
```js
const themes = [
...
@ -24,4 +28,7 @@ const themes = [
]
```
Start the development server (`npm run dev`), go to `http://localhost:4002/settings/instances/your-instance-name` and select your newly created theme. Once you've done that, you can update your theme, and refresh the page to see the change (you don't have to restart the server).
Start the development server (`npm run dev`), go to
`http://localhost:4002/settings/instances/your-instance-name` and select your
newly-created theme. Once you've done that, you can update your theme, and refresh
the page to see the change (you don't have to restart the server).

4
inline-script.js

@ -2,8 +2,8 @@
// To allow CSP to work correctly, we also calculate a sha256 hash during
// the build process and write it to inline-script-checksum.json.
import { testHasLocalStorageOnce } from './routes/_utils/testStorage'
import { switchToTheme } from './routes/_utils/themeEngine'
import { testHasLocalStorageOnce } from './src/routes/_utils/testStorage'
import { switchToTheme } from './src/routes/_utils/themeEngine'
window.__themeColors = process.env.THEME_COLORS

original-assets/noun_1038998_cc.svg → original-static/noun_1038998_cc.svg

original-assets/noun_975373_cc.png → original-static/noun_975373_cc.png

original-assets/sailboat-icon.svg → original-static/sailboat-icon.svg

original-assets/sailboat.svg → original-static/sailboat.svg

929
package-lock.json
File diff suppressed because it is too large
View File

41
package.json

@ -3,15 +3,16 @@
"description": "Alternative web client for Mastodon",
"version": "0.13.0",
"scripts": {
"lint": "standard && standard --plugin html 'routes/**/*.html'",
"lint-fix": "standard --fix && standard --fix --plugin html 'routes/**/*.html'",
"lint": "standard && standard --plugin html 'src/routes/**/*.html'",
"lint-fix": "standard --fix && standard --fix --plugin html 'src/routes/**/*.html'",
"dev": "run-s build-svg build-inline-script serve-dev",
"serve-dev": "run-p --race build-sass-watch serve",
"serve": "node server.js",
"serve-dev": "run-p --race build-sass-watch sapper-dev",
"sapper-dev": "cross-env PORT=4002 sapper dev",
"sapper-prod": "cross-env PORT=4002 node __sapper__/build",
"build": "cross-env NODE_ENV=production npm run build-steps",
"build-steps": "run-s globalize-css build-sass build-svg build-inline-script sapper-build deglobalize-css",
"sapper-build": "sapper build",
"start": "cross-env NODE_ENV=production npm run serve",
"start": "cross-env NODE_ENV=production npm run sapper-prod",
"build-and-start": "run-s build start",
"build-svg": "node ./bin/build-svg.js",
"build-inline-script": "node -r esm ./bin/build-inline-script.js",
@ -36,7 +37,10 @@
"deploy-prod": "DEPLOY_TYPE=prod ./bin/deploy.sh",
"deploy-dev": "DEPLOY_TYPE=dev ./bin/deploy.sh",
"deploy-all-travis": "./bin/deploy-all-travis.sh",
"backup-mastodon-data": "./bin/backup-mastodon-data.sh"
"backup-mastodon-data": "./bin/backup-mastodon-data.sh",
"sapper-export": "sapper export",
"print-export-info": "node ./bin/print-export-info.js",
"export": "run-s build sapper-export print-export-info"
},
"dependencies": {
"@gamestdio/websocket": "^0.2.8",
@ -48,6 +52,7 @@
"cross-env": "^5.2.0",
"css-loader": "^2.0.0",
"emoji-regex": "^7.0.1",
"encoding": "^0.1.12",
"escape-html": "^1.0.3",
"esm": "^3.0.84",
"events-light": "^1.0.5",
@ -63,12 +68,10 @@
"localstorage-memory": "^1.0.3",
"lodash-es": "^4.17.11",
"lodash-webpack-plugin": "^0.11.5",
"mini-css-extract-plugin": "^0.5.0",
"mkdirp": "^0.5.1",
"node-fetch": "^2.3.0",
"node-sass": "^4.10.0",
"npm-run-all": "^4.1.5",
"optimize-css-assets-webpack-plugin": "^5.0.1",
"p-any": "^1.1.0",
"page-lifecycle": "^0.1.1",
"performance-now": "^2.1.0",
@ -78,10 +81,9 @@
"rollup": "^0.67.4",
"rollup-plugin-replace": "^2.1.0",
"rollup-plugin-terser": "^3.0.0",
"sapper": "github:nolanlawson/sapper#for-pinafore-9",
"sapper": "github:nolanlawson/sapper#nolan/sw-index-html-built",
"serve-static": "^1.13.2",
"stringz": "^1.0.0",
"style-loader": "^0.23.1",
"svelte": "^2.15.3",
"svelte-extras": "^2.0.2",
"svelte-loader": "^2.11.0",
@ -89,6 +91,7 @@
"svgo": "^1.1.1",
"terser-webpack-plugin": "^1.1.0",
"tiny-queue": "^0.2.1",
"uuid": "^3.3.2",
"web-animations-js": "^2.3.1",
"webpack": "^4.26.1",
"webpack-bundle-analyzer": "^3.0.3"
@ -140,8 +143,8 @@
],
"ignore": [
"dist",
"routes/_utils/asyncModules.js",
"routes/_components/dialog/asyncDialogs.js"
"src/routes/_utils/asyncModules.js",
"src/routes/_components/dialog/asyncDialogs.js"
]
},
"esm": {
@ -154,18 +157,16 @@
"NODE_ENV": "production"
},
"files": [
"assets",
"bin",
"original-assets",
"routes",
"inline-script.js",
"original-static",
"scss",
"templates",
"src",
"static",
"package.json",
"package-lock.json",
"server.js",
"inline-script.js",
"webpack.client.config.js",
"webpack.server.config.js"
"webpack",
"webpack.config.js"
],
"engines": {
"node": "^8.0.0"

36
routes/_components/Layout.html

@ -1,36 +0,0 @@
<Nav {page} />
<div class="main-content">
<main class="{infiniteScrollPage ? 'infinite-scroll-page' : ''}">
<slot></slot>
</main>
{#if !$isUserLoggedIn && page === 'home'}
<InformationalFooter />
{/if}
</div>
<style>
/* this avoids a flash of the background color when switching timelines */
.infinite-scroll-page {
min-height: 100vh;
}
</style>
<script>
import Nav from './Nav.html'
import { store } from '../_store/store'
import InformationalFooter from './InformationalFooter.html'
export default {
components: {
Nav,
InformationalFooter
},
oncreate () {
let { page } = this.get()
this.store.set({ currentPage: page })
},
store: () => store,
computed: {
infiniteScrollPage: ({ $isUserLoggedIn, page }) => $isUserLoggedIn && page !== 'settings'
}
}
</script>

21
routes/accounts/[accountId].html

@ -1,21 +0,0 @@
<Title name="Profile" />
<Layout page='tags'>
<LazyPage {pageComponent} {params} />
</Layout>
<script>
import Layout from '../_components/Layout.html'
import Title from '../_components/Title.html'
import LazyPage from '../_components/LazyPage.html'
import pageComponent from '../_pages/accounts/[accountId].html'
export default {
components: {
Layout,
Title,
LazyPage
},
data: () => ({
pageComponent
})
}
</script>

14
src/client.js

@ -0,0 +1,14 @@
import * as sapper from '../__sapper__/client.js'
import { loadPolyfills } from './routes/_utils/loadPolyfills'
import './routes/_utils/serviceWorkerClient'
import './routes/_utils/historyEvents'
import './routes/_utils/loadingMask'
loadPolyfills().then(() => {
console.log('init()')
sapper.start({ target: document.querySelector('#sapper') })
})
if (module.hot) {
module.hot.accept()
}

routes/_a11y/getAccessibleLabelForStatus.js → src/routes/_a11y/getAccessibleLabelForStatus.js

routes/_a11y/getAccountAccessibleName.js → src/routes/_a11y/getAccountAccessibleName.js

routes/_actions/accounts.js → src/routes/_actions/accounts.js

routes/_actions/addInstance.js → src/routes/_actions/addInstance.js

routes/_actions/addStatusOrNotification.js → src/routes/_actions/addStatusOrNotification.js

routes/_actions/autosuggest.js → src/routes/_actions/autosuggest.js

routes/_actions/block.js → src/routes/_actions/block.js

routes/_actions/compose.js → src/routes/_actions/compose.js

routes/_actions/contentWarnings.js → src/routes/_actions/contentWarnings.js

routes/_actions/copyText.js → src/routes/_actions/copyText.js

routes/_actions/createMakeProps.js → src/routes/_actions/createMakeProps.js

routes/_actions/delete.js → src/routes/_actions/delete.js

routes/_actions/deleteStatuses.js → src/routes/_actions/deleteStatuses.js

routes/_actions/emoji.js → src/routes/_actions/emoji.js

routes/_actions/favorite.js → src/routes/_actions/favorite.js

routes/_actions/follow.js → src/routes/_actions/follow.js

routes/_actions/followRequests.js → src/routes/_actions/followRequests.js

routes/_actions/instances.js → src/routes/_actions/instances.js

routes/_actions/lists.js → src/routes/_actions/lists.js

routes/_actions/media.js → src/routes/_actions/media.js

routes/_actions/mute.js → src/routes/_actions/mute.js

routes/_actions/muteConversation.js → src/routes/_actions/muteConversation.js

routes/_actions/pin.js → src/routes/_actions/pin.js

routes/_actions/pinnedStatuses.js → src/routes/_actions/pinnedStatuses.js

routes/_actions/postPrivacy.js → src/routes/_actions/postPrivacy.js

routes/_actions/pushSubscription.js → src/routes/_actions/pushSubscription.js

routes/_actions/reblog.js → src/routes/_actions/reblog.js

routes/_actions/requests.js → src/routes/_actions/requests.js

routes/_actions/search.js → src/routes/_actions/search.js

routes/_actions/setDomainBlocked.js → src/routes/_actions/setDomainBlocked.js

routes/_actions/setShowReblogs.js → src/routes/_actions/setShowReblogs.js

routes/_actions/statuses.js → src/routes/_actions/statuses.js

routes/_actions/streaming.js → src/routes/_actions/streaming.js

routes/_actions/timeline.js → src/routes/_actions/timeline.js

routes/_api/TimelineStream.js → src/routes/_api/TimelineStream.js

routes/_api/block.js → src/routes/_api/block.js

routes/_api/blockDomain.js → src/routes/_api/blockDomain.js

routes/_api/blockedAndMuted.js → src/routes/_api/blockedAndMuted.js

routes/_api/delete.js → src/routes/_api/delete.js

routes/_api/emoji.js → src/routes/_api/emoji.js

routes/_api/favorite.js → src/routes/_api/favorite.js

routes/_api/follow.js → src/routes/_api/follow.js

routes/_api/followsAndFollowers.js → src/routes/_api/followsAndFollowers.js

routes/_api/instance.js → src/routes/_api/instance.js

routes/_api/lists.js → src/routes/_api/lists.js

routes/_api/media.js → src/routes/_api/media.js

routes/_api/mute.js → src/routes/_api/mute.js

routes/_api/muteConversation.js → src/routes/_api/muteConversation.js

routes/_api/oauth.js → src/routes/_api/oauth.js

routes/_api/pin.js → src/routes/_api/pin.js

routes/_api/pinnedStatuses.js → src/routes/_api/pinnedStatuses.js

routes/_api/pushSubscription.js → src/routes/_api/pushSubscription.js

routes/_api/reblog.js → src/routes/_api/reblog.js

routes/_api/reblogsAndFavs.js → src/routes/_api/reblogsAndFavs.js

routes/_api/relationships.js → src/routes/_api/relationships.js

routes/_api/requests.js → src/routes/_api/requests.js

routes/_api/search.js → src/routes/_api/search.js

routes/_api/showReblogs.js → src/routes/_api/showReblogs.js

routes/_api/statuses.js → src/routes/_api/statuses.js

routes/_api/timelines.js → src/routes/_api/timelines.js

routes/_api/updateCredentials.js → src/routes/_api/updateCredentials.js

routes/_api/user.js → src/routes/_api/user.js

routes/_api/utils.js → src/routes/_api/utils.js

routes/_components/AccountsListPage.html → src/routes/_components/AccountsListPage.html

routes/_components/AutoplayVideo.html → src/routes/_components/AutoplayVideo.html

routes/_components/Avatar.html → src/routes/_components/Avatar.html

routes/_components/DynamicPageBanner.html → src/routes/_components/DynamicPageBanner.html

routes/_components/ExternalLink.html → src/routes/_components/ExternalLink.html

routes/_components/FreeTextLayout.html → src/routes/_components/FreeTextLayout.html

routes/_components/HiddenFromSSR.html → src/routes/_components/HiddenFromSSR.html

routes/_components/IconButton.html → src/routes/_components/IconButton.html

routes/_components/InformationalFooter.html → src/routes/_components/InformationalFooter.html

routes/_components/Label.html → src/routes/_components/Label.html

routes/_components/LazyImage.html → src/routes/_components/LazyImage.html

routes/_components/LazyPage.html → src/routes/_components/LazyPage.html

routes/_components/LoadingMask.html → src/routes/_components/LoadingMask.html

routes/_components/LoadingPage.html → src/routes/_components/LoadingPage.html

routes/_components/LoadingSpinner.html → src/routes/_components/LoadingSpinner.html

routes/_components/Nav.html → src/routes/_components/Nav.html

routes/_components/NavItem.html → src/routes/_components/NavItem.html

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save