@goodfellow-cms/admin 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{admin-text-sources-BTZJPlVK.js → admin-text-sources-B1CoPEu6.js} +1 -1
- package/dist/{custom-font-faces-DJ2AF2oN.js → custom-font-faces-DCan2jgW.js} +2 -2
- package/dist/editor.js +3 -3
- package/dist/{entry-values-FcVgwQkJ.js → entry-values-CAPB0igb.js} +8 -8
- package/dist/{es-ChxY0KVH.js → es-Z-QY8sdc.js} +144 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1332 -227
- package/dist/plugin.js +1 -1
- package/dist/{strings-CWaRN_0v.d.ts → strings-Bd9r6qQn.d.ts} +144 -1
- package/dist/{strings-D94noZrv.js → strings-CgC6pd6k.js} +144 -1
- package/dist/text.d.ts +1 -1
- package/dist/text.js +2 -2
- package/package.json +6 -6
- package/styles.css +23 -0
package/dist/plugin.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _ as mediaUrl, a as showMediaInPreview, n as PLUGIN_READY_MESSAGE, r as createMediaPreviews, s as createChannel, t as installCustomFonts } from "./custom-font-faces-
|
|
1
|
+
import { _ as mediaUrl, a as showMediaInPreview, n as PLUGIN_READY_MESSAGE, r as createMediaPreviews, s as createChannel, t as installCustomFonts } from "./custom-font-faces-DCan2jgW.js";
|
|
2
2
|
import { MEDIA_DIR } from "@goodfellow-cms/core";
|
|
3
3
|
//#region src/plugin.ts
|
|
4
4
|
/**
|
|
@@ -1073,6 +1073,58 @@ declare const defaultStrings: {
|
|
|
1073
1073
|
readonly "security.broker.stop": "Stop using the sign-in page";
|
|
1074
1074
|
readonly "security.broker.stopMessage": "Stop signing in at {address}";
|
|
1075
1075
|
readonly "security.broker.stopBody": "Once the site has been rebuilt, editors sign in in the admin panel itself again, which keeps their sign-in where the site's pages could reach it, and blocks from registries other than Goodfellow's can't be added there.";
|
|
1076
|
+
readonly "domain.signInSettings": "Sign-in settings";
|
|
1077
|
+
readonly "signInSetup.service.title": "Sign in with {host}";
|
|
1078
|
+
readonly "signInSetup.app.title": "Sign in with {host}";
|
|
1079
|
+
readonly "signInSetup.error": "The sign-in setting couldn't be published.";
|
|
1080
|
+
readonly "signInSetup.remove": "Stop using it";
|
|
1081
|
+
readonly "signInSetup.contentOnly": "This site's config is kept with its code, which this sign-in can't publish. A developer runs this in the code's folder, then publishes the change:";
|
|
1082
|
+
readonly "signInSetup.handWritten": "The site's config says where the site is stored in a way this screen can't change. A developer adds {key} to its backend line by hand.";
|
|
1083
|
+
readonly "signInSetup.copy": "Copy";
|
|
1084
|
+
readonly "signInSetup.copied": "Copied";
|
|
1085
|
+
readonly "signInSetup.or": "or";
|
|
1086
|
+
readonly "signInSetup.service.using": "Editors can choose Sign in with GitHub, through the sign-in service at {address}. Changes show once the site has rebuilt.";
|
|
1087
|
+
readonly "signInSetup.service.message": "Sign in with GitHub through {address}";
|
|
1088
|
+
readonly "signInSetup.service.removeMessage": "Stop signing in through {address}";
|
|
1089
|
+
readonly "signInSetup.service.intro": "Without a sign-in service, editors sign in with a token. With one, they choose Sign in with GitHub. It runs free on your own Cloudflare account, keeps nothing, and you set it up from your browser:";
|
|
1090
|
+
readonly "signInSetup.service.step.deploy": "Put it online with Cloudflare's button, which copies it into your GitHub account and deploys it:";
|
|
1091
|
+
readonly "signInSetup.service.deploy": "Deploy to Cloudflare";
|
|
1092
|
+
readonly "signInSetup.service.step.setup": "Open its address with /setup after it. It asks for a Cloudflare token, made from a link that fills it in, and your sites' addresses, then makes its two GitHub Apps with you.";
|
|
1093
|
+
readonly "signInSetup.service.step.use": "Put its address here and choose Use this sign-in service.";
|
|
1094
|
+
readonly "signInSetup.service.more": "How the sign-in service works";
|
|
1095
|
+
readonly "signInSetup.service.field": "The sign-in service's address";
|
|
1096
|
+
readonly "signInSetup.service.fieldHint": "Such as https://sign-in.your-name.workers.dev.";
|
|
1097
|
+
readonly "signInSetup.service.problem.invalid": "That needs to be an https:// address, with nothing after the domain.";
|
|
1098
|
+
readonly "signInSetup.service.problem.unset": "That sign-in service isn't set up yet. Finish its setup page, at its address with /setup after it, first.";
|
|
1099
|
+
readonly "signInSetup.service.problem.unreachable": "Nothing answered at that address as a sign-in service. Check the address, and that the service is deployed.";
|
|
1100
|
+
readonly "signInSetup.service.use": "Use this sign-in service";
|
|
1101
|
+
readonly "signInSetup.app.intro": "Without this, editors sign in with a token. Register the admin panel with {host} once, and they choose Sign in with {host}. {host} doesn't let other sites do it for you, so it takes {host}'s own form, filled in with these values:";
|
|
1102
|
+
readonly "signInSetup.app.noAddress": "Put the site's address in General → Site address first: the form needs the admin panel's address.";
|
|
1103
|
+
readonly "signInSetup.app.name": "Name";
|
|
1104
|
+
readonly "signInSetup.app.on": "Editors can choose Sign in with {host}. Changes show once the site has rebuilt.";
|
|
1105
|
+
readonly "signInSetup.app.message": "Sign in with {host}";
|
|
1106
|
+
readonly "signInSetup.app.removeMessage": "Stop signing in with {host}";
|
|
1107
|
+
readonly "signInSetup.app.turnOn": "Turn on Sign in with {host}";
|
|
1108
|
+
readonly "signInSetup.app.after": "Once the site has rebuilt, sign out and choose Sign in with {host} to try it. If {host} says the address isn't allowed, check the addresses in its form match the ones above.";
|
|
1109
|
+
readonly "signInSetup.app.problem": "That doesn't look like what {host} shows. Copy it again.";
|
|
1110
|
+
readonly "signInSetup.app.gitlab.open": "Open GitLab's form for a new application,";
|
|
1111
|
+
readonly "signInSetup.app.gitlab.group": "in the {group} group";
|
|
1112
|
+
readonly "signInSetup.app.gitlab.own": "in your own account";
|
|
1113
|
+
readonly "signInSetup.app.gitlab.fill": "Choose Add new application, and fill it in with these:";
|
|
1114
|
+
readonly "signInSetup.app.gitlab.redirect": "Redirect URI";
|
|
1115
|
+
readonly "signInSetup.app.gitlab.settings": "Untick Confidential, tick the api scope, and choose Save application. An application in the group keeps working when people leave it.";
|
|
1116
|
+
readonly "signInSetup.app.gitlab.copyId": "Copy the Application ID GitLab shows (not the Secret, which isn't needed), and paste it below.";
|
|
1117
|
+
readonly "signInSetup.app.gitlab.field": "Application ID";
|
|
1118
|
+
readonly "signInSetup.app.gitlab.keep": "The application's redirect URIs need every address the admin panel is at: {addresses}.";
|
|
1119
|
+
readonly "signInSetup.app.bitbucket.open": "Open Bitbucket's OAuth consumers for the workspace:";
|
|
1120
|
+
readonly "signInSetup.app.bitbucket.consumers": "{workspace}'s OAuth consumers";
|
|
1121
|
+
readonly "signInSetup.app.bitbucket.fill": "Choose Add consumer, and fill it in with these:";
|
|
1122
|
+
readonly "signInSetup.app.bitbucket.callback": "Callback URL";
|
|
1123
|
+
readonly "signInSetup.app.bitbucket.permissions": "Permissions";
|
|
1124
|
+
readonly "signInSetup.app.bitbucket.settings": "Leave This is a private consumer unticked, tick those permissions, and choose Save.";
|
|
1125
|
+
readonly "signInSetup.app.bitbucket.copyId": "Open the consumer, copy its Key (not the Secret, which isn't needed), and paste it below.";
|
|
1126
|
+
readonly "signInSetup.app.bitbucket.field": "Key";
|
|
1127
|
+
readonly "signInSetup.app.bitbucket.keep": "The consumer's callback URL needs to be where the admin panel is: {addresses}.";
|
|
1076
1128
|
readonly "broker.elsewhere": "Editors sign in to this site on its own sign-in page, which keeps your sign-in where the site's pages can't reach it, and shows the admin panel from there.";
|
|
1077
1129
|
readonly "broker.open": "Go to the sign-in page";
|
|
1078
1130
|
readonly "broker.invalid": "The site's config names a sign-in page whose address isn't one of its own, so the admin panel can't open. Ask the site's developer to fix the broker address in goodfellow.config.tsx.";
|
|
@@ -1205,7 +1257,7 @@ declare const defaultStrings: {
|
|
|
1205
1257
|
readonly "comments.error.no-category": "That project's Discussions have no categories yet. Open its Discussions on GitHub once, then try again.";
|
|
1206
1258
|
readonly "comments.error.other": "Something went wrong on GitHub. Try again in a moment.";
|
|
1207
1259
|
readonly "comments.error.fix": "Open it on GitHub";
|
|
1208
|
-
readonly "settings.tab.import": "Import";
|
|
1260
|
+
readonly "settings.tab.import": "Import / Export";
|
|
1209
1261
|
readonly "settings.tab.themes": "Themes";
|
|
1210
1262
|
readonly "plugins.notFound": "The site has no plugin screen at this address.";
|
|
1211
1263
|
readonly "plugins.failed": "{plugin}'s screen couldn't start. If it keeps happening, the plugin may need updating.";
|
|
@@ -1556,6 +1608,97 @@ declare const defaultStrings: {
|
|
|
1556
1608
|
readonly "export.note.redirects": "Redirects aren't in the file, since WordPress needs a plugin for them: {count}.";
|
|
1557
1609
|
readonly "export.note.noAddress": "The site has no address yet, so WordPress can't copy its media. Set it on the General tab, then download the file again.";
|
|
1558
1610
|
readonly "export.note.layout": "The header and footer aren't in the file. WordPress's theme shows its own, with the menus.";
|
|
1611
|
+
readonly "markdownExport.title": "Export as Markdown";
|
|
1612
|
+
readonly "markdownExport.intro": "Download the site's pages and collection items as Markdown files, with the media library, to use with other website tools such as Hugo, Jekyll, Eleventy or Astro, notes apps such as Obsidian, or AI tools.";
|
|
1613
|
+
readonly "markdownExport.limits": "Markdown keeps words, headings, lists, links, pictures and tables. The site's layout, colors and fonts, the header and footer, and blocks such as forms, calendars and lists of items aren't exported. To keep everything, use Download a copy on the Site history tab instead.";
|
|
1614
|
+
readonly "markdownExport.stored": "Media kept in your storage service isn't in the download: pages link to it where it's kept.";
|
|
1615
|
+
readonly "markdownExport.links": "Links between pages";
|
|
1616
|
+
readonly "markdownExport.links.site": "As the site's addresses, such as /about/ (for website tools)";
|
|
1617
|
+
readonly "markdownExport.links.files": "As links to the files, such as about.md (for notes apps)";
|
|
1618
|
+
readonly "markdownExport.scheduled": "Also export pages and items that aren't shown yet or anymore, marked as drafts";
|
|
1619
|
+
readonly "markdownExport.download": "Download the Markdown files";
|
|
1620
|
+
readonly "markdownExport.working": "Adding files to the download: {done} of {total}";
|
|
1621
|
+
readonly "markdownExport.done": "Downloaded the Markdown files.";
|
|
1622
|
+
readonly "markdownExport.error": "The Markdown files couldn't be made.";
|
|
1623
|
+
readonly "markdownExport.summary.items": "Collection items: {count}";
|
|
1624
|
+
readonly "markdownExport.summary.media": "Media files: {count}";
|
|
1625
|
+
readonly "markdownExport.note.leftOutBlock": "Markdown can't hold the {name} block, so it was left out: {items}.";
|
|
1626
|
+
readonly "markdownExport.note.scheduledLeftOut": "Not shown now, by their schedule, so they were left out: {items}. Check the box above to include them as drafts.";
|
|
1627
|
+
readonly "markdownExport.note.scheduledIncluded": "Not shown now, by their schedule, so they're marked as drafts: {items}.";
|
|
1628
|
+
readonly "markdownExport.note.noPages": "These collections have no pages of their own, so their items are in folders starting with _: {collections}.";
|
|
1629
|
+
readonly "markdownExport.note.templates": "The page designs of these collections weren't exported: each item is its own details and text. {collections}.";
|
|
1630
|
+
readonly "markdownExport.note.redirects": "Redirects that don't go to an exported page aren't in the files: {count}.";
|
|
1631
|
+
readonly "markdownExport.note.layout": "The header and footer aren't in the files. The menus are, in menus.json.";
|
|
1632
|
+
readonly "siteTransfer.export.title": "Export for another Goodfellow site";
|
|
1633
|
+
readonly "siteTransfer.export.intro": "Download this site's pages, collections, synced blocks, menus, settings and media as one zip file, exactly as they're kept, to import into another Goodfellow site with nothing lost. It's the same file Download a copy on Site history makes.";
|
|
1634
|
+
readonly "siteTransfer.export.stored": "Media your storage service keeps isn't in the file. The other site's pages link to where it's kept.";
|
|
1635
|
+
readonly "siteTransfer.export.button": "Download for another Goodfellow site";
|
|
1636
|
+
readonly "siteTransfer.export.working": "Making the file: {done} of {total} files…";
|
|
1637
|
+
readonly "siteTransfer.export.error": "The file couldn't be made. Check your connection and try again.";
|
|
1638
|
+
readonly "siteTransfer.import.title": "Import from another Goodfellow site";
|
|
1639
|
+
readonly "siteTransfer.import.intro": "Bring in a file made with Export for another Goodfellow site, or with Download a copy. Pages, collections and media come across exactly as they were.";
|
|
1640
|
+
readonly "siteTransfer.import.file": "File from the other site";
|
|
1641
|
+
readonly "siteTransfer.import.fileHint": "A .zip file. You'll see what it brings in before anything is published.";
|
|
1642
|
+
readonly "siteTransfer.import.reading": "Reading the file…";
|
|
1643
|
+
readonly "siteTransfer.import.ready": "Ready to import {title}.";
|
|
1644
|
+
readonly "siteTransfer.import.mode": "How to bring it in";
|
|
1645
|
+
readonly "siteTransfer.import.mode.add": "Add to this site: keep this site's content, and bring in what it doesn't have";
|
|
1646
|
+
readonly "siteTransfer.import.mode.replace": "Replace this site's content with the other site's";
|
|
1647
|
+
readonly "siteTransfer.import.replaceWarning": "Everything this site has that the other site doesn't is removed when you import: pages, collections, media and settings. Editors' limits, update settings, media storage and the Site address stay as they are. You can go back on Site history.";
|
|
1648
|
+
readonly "siteTransfer.import.also": "Also bring in";
|
|
1649
|
+
readonly "siteTransfer.import.menus": "Menus (the other site's replace any with the same name)";
|
|
1650
|
+
readonly "siteTransfer.import.settings": "Site Settings, colors and fonts, custom CSS and code, and the admin panel's languages";
|
|
1651
|
+
readonly "siteTransfer.import.layout": "The header and footer";
|
|
1652
|
+
readonly "siteTransfer.import.redirects": "Redirects this site doesn't have";
|
|
1653
|
+
readonly "siteTransfer.import.blocks": "Blocks this site doesn't have";
|
|
1654
|
+
readonly "siteTransfer.import.install": "Add {title} from Goodfellow's block registry, so what uses it comes in as it is";
|
|
1655
|
+
readonly "siteTransfer.import.installHint": "Adding a block changes the site's code, so the editor offers it once the site has been rebuilt.";
|
|
1656
|
+
readonly "siteTransfer.import.withoutBlocks": "Bring in what uses blocks this site doesn't have, without those blocks";
|
|
1657
|
+
readonly "siteTransfer.import.conflicts": "Both sites have these, differently";
|
|
1658
|
+
readonly "siteTransfer.import.conflictsHint": "This site's version is kept unless you choose the other site's.";
|
|
1659
|
+
readonly "siteTransfer.import.useTheirs": "Use the other site's: {what}";
|
|
1660
|
+
readonly "siteTransfer.import.useAllTheirs": "Use the other site's for all";
|
|
1661
|
+
readonly "siteTransfer.import.useAllMine": "Keep this site's for all";
|
|
1662
|
+
readonly "siteTransfer.import.another": "Choose another file";
|
|
1663
|
+
readonly "siteTransfer.import.done": "Imported {title}.";
|
|
1664
|
+
readonly "siteTransfer.import.message": "Import {title} from another Goodfellow site";
|
|
1665
|
+
readonly "siteTransfer.conflict.page": "page {name} ({detail})";
|
|
1666
|
+
readonly "siteTransfer.conflict.item": "{name} in {detail}";
|
|
1667
|
+
readonly "siteTransfer.conflict.collection": "the {name} collection, whose fields differ (this site's items in it are replaced)";
|
|
1668
|
+
readonly "siteTransfer.conflict.syncedBlock": "synced block {name}";
|
|
1669
|
+
readonly "siteTransfer.conflict.media": "media file {name}";
|
|
1670
|
+
readonly "siteTransfer.summary.pages": "Pages: {count}";
|
|
1671
|
+
readonly "siteTransfer.summary.items": "Collection items: {count}";
|
|
1672
|
+
readonly "siteTransfer.summary.collections": "New collections: {count}";
|
|
1673
|
+
readonly "siteTransfer.summary.syncedBlocks": "Synced blocks: {count}";
|
|
1674
|
+
readonly "siteTransfer.summary.media": "Media files: {count}";
|
|
1675
|
+
readonly "siteTransfer.summary.removed": "Files removed: {count}";
|
|
1676
|
+
readonly "siteTransfer.summary.menus": "Menus";
|
|
1677
|
+
readonly "siteTransfer.summary.settings": "Site Settings";
|
|
1678
|
+
readonly "siteTransfer.summary.layout": "The header and footer";
|
|
1679
|
+
readonly "siteTransfer.summary.redirects": "Redirects";
|
|
1680
|
+
readonly "siteTransfer.summary.nothing": "Nothing to bring in: this site already has everything you chose, as it is in the file.";
|
|
1681
|
+
readonly "siteTransfer.note.missingBlock": "{name} isn't one of this site's blocks. It's used on {items}.";
|
|
1682
|
+
readonly "siteTransfer.note.leftOut": "Left out, since they use blocks this site doesn't have: {items}.";
|
|
1683
|
+
readonly "siteTransfer.note.withoutBlocks": "Brought in without the blocks this site doesn't have: {items}.";
|
|
1684
|
+
readonly "siteTransfer.note.taken": "Left out, since this site has something else at their addresses: {items}.";
|
|
1685
|
+
readonly "siteTransfer.note.collectionDiffers": "This site's {collections} has other fields, so the other site's items in it are left out unless you choose the other site's collection above.";
|
|
1686
|
+
readonly "siteTransfer.note.uncopied": "Left out, since they're too large or can't be shown safely: {items}.";
|
|
1687
|
+
readonly "siteTransfer.note.stored": "Media files the other site's storage service keeps aren't in the file: {count}. Pages link to where they're kept.";
|
|
1688
|
+
readonly "siteTransfer.note.storedMerged": "Media files the other site's storage keeps are added to this site's storage, which is the same: {count}.";
|
|
1689
|
+
readonly "siteTransfer.note.languages": "The other site's languages are added to Site Settings, so its pages in them work: {codes}.";
|
|
1690
|
+
readonly "siteTransfer.note.plugins": "The other site used plugins this site doesn't have: {names}. Add them on Plugins if you need them.";
|
|
1691
|
+
readonly "siteTransfer.note.code": "Custom code comes in. It runs on every page, so check it first.";
|
|
1692
|
+
readonly "siteTransfer.note.kept": "Stays as this site has it: {things}.";
|
|
1693
|
+
readonly "siteTransfer.kept.address": "the Site address";
|
|
1694
|
+
readonly "siteTransfer.kept.limits": "editors' limits";
|
|
1695
|
+
readonly "siteTransfer.kept.updates": "update settings";
|
|
1696
|
+
readonly "siteTransfer.kept.storage": "media storage";
|
|
1697
|
+
readonly "siteTransfer.error.notASite": "This file isn't from a Goodfellow site. Choose a file made with Export for another Goodfellow site or Download a copy.";
|
|
1698
|
+
readonly "siteTransfer.error.newer": "This file was made with a newer release of Goodfellow. Update this site on the Updates screen, then try again.";
|
|
1699
|
+
readonly "siteTransfer.error.invalid": "Some of the file's content can't be read, so it can't be imported.";
|
|
1700
|
+
readonly "siteTransfer.error.other": "The file couldn't be read.";
|
|
1701
|
+
readonly "siteTransfer.error.blocks": "The blocks couldn't be added from Goodfellow's block registry. Check your connection and try again.";
|
|
1559
1702
|
readonly "updates.intro": "Goodfellow, the software the site runs on, gets fixes and new releases. Fixes install on their own each night, and only once the site has been checked to still build with them.";
|
|
1560
1703
|
readonly "updates.contentOnly": "This site's code is kept apart from its content, so Goodfellow's updates are installed where the code is, by the site's own setup or its developer.";
|
|
1561
1704
|
readonly "updates.code": "This site's code is kept apart from its content, at {place}, where Goodfellow's updates are installed.";
|
|
@@ -1074,6 +1074,58 @@ const defaultStrings = {
|
|
|
1074
1074
|
"security.broker.stop": "Stop using the sign-in page",
|
|
1075
1075
|
"security.broker.stopMessage": "Stop signing in at {address}",
|
|
1076
1076
|
"security.broker.stopBody": "Once the site has been rebuilt, editors sign in in the admin panel itself again, which keeps their sign-in where the site's pages could reach it, and blocks from registries other than Goodfellow's can't be added there.",
|
|
1077
|
+
"domain.signInSettings": "Sign-in settings",
|
|
1078
|
+
"signInSetup.service.title": "Sign in with {host}",
|
|
1079
|
+
"signInSetup.app.title": "Sign in with {host}",
|
|
1080
|
+
"signInSetup.error": "The sign-in setting couldn't be published.",
|
|
1081
|
+
"signInSetup.remove": "Stop using it",
|
|
1082
|
+
"signInSetup.contentOnly": "This site's config is kept with its code, which this sign-in can't publish. A developer runs this in the code's folder, then publishes the change:",
|
|
1083
|
+
"signInSetup.handWritten": "The site's config says where the site is stored in a way this screen can't change. A developer adds {key} to its backend line by hand.",
|
|
1084
|
+
"signInSetup.copy": "Copy",
|
|
1085
|
+
"signInSetup.copied": "Copied",
|
|
1086
|
+
"signInSetup.or": "or",
|
|
1087
|
+
"signInSetup.service.using": "Editors can choose Sign in with GitHub, through the sign-in service at {address}. Changes show once the site has rebuilt.",
|
|
1088
|
+
"signInSetup.service.message": "Sign in with GitHub through {address}",
|
|
1089
|
+
"signInSetup.service.removeMessage": "Stop signing in through {address}",
|
|
1090
|
+
"signInSetup.service.intro": "Without a sign-in service, editors sign in with a token. With one, they choose Sign in with GitHub. It runs free on your own Cloudflare account, keeps nothing, and you set it up from your browser:",
|
|
1091
|
+
"signInSetup.service.step.deploy": "Put it online with Cloudflare's button, which copies it into your GitHub account and deploys it:",
|
|
1092
|
+
"signInSetup.service.deploy": "Deploy to Cloudflare",
|
|
1093
|
+
"signInSetup.service.step.setup": "Open its address with /setup after it. It asks for a Cloudflare token, made from a link that fills it in, and your sites' addresses, then makes its two GitHub Apps with you.",
|
|
1094
|
+
"signInSetup.service.step.use": "Put its address here and choose Use this sign-in service.",
|
|
1095
|
+
"signInSetup.service.more": "How the sign-in service works",
|
|
1096
|
+
"signInSetup.service.field": "The sign-in service's address",
|
|
1097
|
+
"signInSetup.service.fieldHint": "Such as https://sign-in.your-name.workers.dev.",
|
|
1098
|
+
"signInSetup.service.problem.invalid": "That needs to be an https:// address, with nothing after the domain.",
|
|
1099
|
+
"signInSetup.service.problem.unset": "That sign-in service isn't set up yet. Finish its setup page, at its address with /setup after it, first.",
|
|
1100
|
+
"signInSetup.service.problem.unreachable": "Nothing answered at that address as a sign-in service. Check the address, and that the service is deployed.",
|
|
1101
|
+
"signInSetup.service.use": "Use this sign-in service",
|
|
1102
|
+
"signInSetup.app.intro": "Without this, editors sign in with a token. Register the admin panel with {host} once, and they choose Sign in with {host}. {host} doesn't let other sites do it for you, so it takes {host}'s own form, filled in with these values:",
|
|
1103
|
+
"signInSetup.app.noAddress": "Put the site's address in General → Site address first: the form needs the admin panel's address.",
|
|
1104
|
+
"signInSetup.app.name": "Name",
|
|
1105
|
+
"signInSetup.app.on": "Editors can choose Sign in with {host}. Changes show once the site has rebuilt.",
|
|
1106
|
+
"signInSetup.app.message": "Sign in with {host}",
|
|
1107
|
+
"signInSetup.app.removeMessage": "Stop signing in with {host}",
|
|
1108
|
+
"signInSetup.app.turnOn": "Turn on Sign in with {host}",
|
|
1109
|
+
"signInSetup.app.after": "Once the site has rebuilt, sign out and choose Sign in with {host} to try it. If {host} says the address isn't allowed, check the addresses in its form match the ones above.",
|
|
1110
|
+
"signInSetup.app.problem": "That doesn't look like what {host} shows. Copy it again.",
|
|
1111
|
+
"signInSetup.app.gitlab.open": "Open GitLab's form for a new application,",
|
|
1112
|
+
"signInSetup.app.gitlab.group": "in the {group} group",
|
|
1113
|
+
"signInSetup.app.gitlab.own": "in your own account",
|
|
1114
|
+
"signInSetup.app.gitlab.fill": "Choose Add new application, and fill it in with these:",
|
|
1115
|
+
"signInSetup.app.gitlab.redirect": "Redirect URI",
|
|
1116
|
+
"signInSetup.app.gitlab.settings": "Untick Confidential, tick the api scope, and choose Save application. An application in the group keeps working when people leave it.",
|
|
1117
|
+
"signInSetup.app.gitlab.copyId": "Copy the Application ID GitLab shows (not the Secret, which isn't needed), and paste it below.",
|
|
1118
|
+
"signInSetup.app.gitlab.field": "Application ID",
|
|
1119
|
+
"signInSetup.app.gitlab.keep": "The application's redirect URIs need every address the admin panel is at: {addresses}.",
|
|
1120
|
+
"signInSetup.app.bitbucket.open": "Open Bitbucket's OAuth consumers for the workspace:",
|
|
1121
|
+
"signInSetup.app.bitbucket.consumers": "{workspace}'s OAuth consumers",
|
|
1122
|
+
"signInSetup.app.bitbucket.fill": "Choose Add consumer, and fill it in with these:",
|
|
1123
|
+
"signInSetup.app.bitbucket.callback": "Callback URL",
|
|
1124
|
+
"signInSetup.app.bitbucket.permissions": "Permissions",
|
|
1125
|
+
"signInSetup.app.bitbucket.settings": "Leave This is a private consumer unticked, tick those permissions, and choose Save.",
|
|
1126
|
+
"signInSetup.app.bitbucket.copyId": "Open the consumer, copy its Key (not the Secret, which isn't needed), and paste it below.",
|
|
1127
|
+
"signInSetup.app.bitbucket.field": "Key",
|
|
1128
|
+
"signInSetup.app.bitbucket.keep": "The consumer's callback URL needs to be where the admin panel is: {addresses}.",
|
|
1077
1129
|
"broker.elsewhere": "Editors sign in to this site on its own sign-in page, which keeps your sign-in where the site's pages can't reach it, and shows the admin panel from there.",
|
|
1078
1130
|
"broker.open": "Go to the sign-in page",
|
|
1079
1131
|
"broker.invalid": "The site's config names a sign-in page whose address isn't one of its own, so the admin panel can't open. Ask the site's developer to fix the broker address in goodfellow.config.tsx.",
|
|
@@ -1206,7 +1258,7 @@ const defaultStrings = {
|
|
|
1206
1258
|
"comments.error.no-category": "That project's Discussions have no categories yet. Open its Discussions on GitHub once, then try again.",
|
|
1207
1259
|
"comments.error.other": "Something went wrong on GitHub. Try again in a moment.",
|
|
1208
1260
|
"comments.error.fix": "Open it on GitHub",
|
|
1209
|
-
"settings.tab.import": "Import",
|
|
1261
|
+
"settings.tab.import": "Import / Export",
|
|
1210
1262
|
"settings.tab.themes": "Themes",
|
|
1211
1263
|
"plugins.notFound": "The site has no plugin screen at this address.",
|
|
1212
1264
|
"plugins.failed": "{plugin}'s screen couldn't start. If it keeps happening, the plugin may need updating.",
|
|
@@ -1557,6 +1609,97 @@ const defaultStrings = {
|
|
|
1557
1609
|
"export.note.redirects": "Redirects aren't in the file, since WordPress needs a plugin for them: {count}.",
|
|
1558
1610
|
"export.note.noAddress": "The site has no address yet, so WordPress can't copy its media. Set it on the General tab, then download the file again.",
|
|
1559
1611
|
"export.note.layout": "The header and footer aren't in the file. WordPress's theme shows its own, with the menus.",
|
|
1612
|
+
"markdownExport.title": "Export as Markdown",
|
|
1613
|
+
"markdownExport.intro": "Download the site's pages and collection items as Markdown files, with the media library, to use with other website tools such as Hugo, Jekyll, Eleventy or Astro, notes apps such as Obsidian, or AI tools.",
|
|
1614
|
+
"markdownExport.limits": "Markdown keeps words, headings, lists, links, pictures and tables. The site's layout, colors and fonts, the header and footer, and blocks such as forms, calendars and lists of items aren't exported. To keep everything, use Download a copy on the Site history tab instead.",
|
|
1615
|
+
"markdownExport.stored": "Media kept in your storage service isn't in the download: pages link to it where it's kept.",
|
|
1616
|
+
"markdownExport.links": "Links between pages",
|
|
1617
|
+
"markdownExport.links.site": "As the site's addresses, such as /about/ (for website tools)",
|
|
1618
|
+
"markdownExport.links.files": "As links to the files, such as about.md (for notes apps)",
|
|
1619
|
+
"markdownExport.scheduled": "Also export pages and items that aren't shown yet or anymore, marked as drafts",
|
|
1620
|
+
"markdownExport.download": "Download the Markdown files",
|
|
1621
|
+
"markdownExport.working": "Adding files to the download: {done} of {total}",
|
|
1622
|
+
"markdownExport.done": "Downloaded the Markdown files.",
|
|
1623
|
+
"markdownExport.error": "The Markdown files couldn't be made.",
|
|
1624
|
+
"markdownExport.summary.items": "Collection items: {count}",
|
|
1625
|
+
"markdownExport.summary.media": "Media files: {count}",
|
|
1626
|
+
"markdownExport.note.leftOutBlock": "Markdown can't hold the {name} block, so it was left out: {items}.",
|
|
1627
|
+
"markdownExport.note.scheduledLeftOut": "Not shown now, by their schedule, so they were left out: {items}. Check the box above to include them as drafts.",
|
|
1628
|
+
"markdownExport.note.scheduledIncluded": "Not shown now, by their schedule, so they're marked as drafts: {items}.",
|
|
1629
|
+
"markdownExport.note.noPages": "These collections have no pages of their own, so their items are in folders starting with _: {collections}.",
|
|
1630
|
+
"markdownExport.note.templates": "The page designs of these collections weren't exported: each item is its own details and text. {collections}.",
|
|
1631
|
+
"markdownExport.note.redirects": "Redirects that don't go to an exported page aren't in the files: {count}.",
|
|
1632
|
+
"markdownExport.note.layout": "The header and footer aren't in the files. The menus are, in menus.json.",
|
|
1633
|
+
"siteTransfer.export.title": "Export for another Goodfellow site",
|
|
1634
|
+
"siteTransfer.export.intro": "Download this site's pages, collections, synced blocks, menus, settings and media as one zip file, exactly as they're kept, to import into another Goodfellow site with nothing lost. It's the same file Download a copy on Site history makes.",
|
|
1635
|
+
"siteTransfer.export.stored": "Media your storage service keeps isn't in the file. The other site's pages link to where it's kept.",
|
|
1636
|
+
"siteTransfer.export.button": "Download for another Goodfellow site",
|
|
1637
|
+
"siteTransfer.export.working": "Making the file: {done} of {total} files…",
|
|
1638
|
+
"siteTransfer.export.error": "The file couldn't be made. Check your connection and try again.",
|
|
1639
|
+
"siteTransfer.import.title": "Import from another Goodfellow site",
|
|
1640
|
+
"siteTransfer.import.intro": "Bring in a file made with Export for another Goodfellow site, or with Download a copy. Pages, collections and media come across exactly as they were.",
|
|
1641
|
+
"siteTransfer.import.file": "File from the other site",
|
|
1642
|
+
"siteTransfer.import.fileHint": "A .zip file. You'll see what it brings in before anything is published.",
|
|
1643
|
+
"siteTransfer.import.reading": "Reading the file…",
|
|
1644
|
+
"siteTransfer.import.ready": "Ready to import {title}.",
|
|
1645
|
+
"siteTransfer.import.mode": "How to bring it in",
|
|
1646
|
+
"siteTransfer.import.mode.add": "Add to this site: keep this site's content, and bring in what it doesn't have",
|
|
1647
|
+
"siteTransfer.import.mode.replace": "Replace this site's content with the other site's",
|
|
1648
|
+
"siteTransfer.import.replaceWarning": "Everything this site has that the other site doesn't is removed when you import: pages, collections, media and settings. Editors' limits, update settings, media storage and the Site address stay as they are. You can go back on Site history.",
|
|
1649
|
+
"siteTransfer.import.also": "Also bring in",
|
|
1650
|
+
"siteTransfer.import.menus": "Menus (the other site's replace any with the same name)",
|
|
1651
|
+
"siteTransfer.import.settings": "Site Settings, colors and fonts, custom CSS and code, and the admin panel's languages",
|
|
1652
|
+
"siteTransfer.import.layout": "The header and footer",
|
|
1653
|
+
"siteTransfer.import.redirects": "Redirects this site doesn't have",
|
|
1654
|
+
"siteTransfer.import.blocks": "Blocks this site doesn't have",
|
|
1655
|
+
"siteTransfer.import.install": "Add {title} from Goodfellow's block registry, so what uses it comes in as it is",
|
|
1656
|
+
"siteTransfer.import.installHint": "Adding a block changes the site's code, so the editor offers it once the site has been rebuilt.",
|
|
1657
|
+
"siteTransfer.import.withoutBlocks": "Bring in what uses blocks this site doesn't have, without those blocks",
|
|
1658
|
+
"siteTransfer.import.conflicts": "Both sites have these, differently",
|
|
1659
|
+
"siteTransfer.import.conflictsHint": "This site's version is kept unless you choose the other site's.",
|
|
1660
|
+
"siteTransfer.import.useTheirs": "Use the other site's: {what}",
|
|
1661
|
+
"siteTransfer.import.useAllTheirs": "Use the other site's for all",
|
|
1662
|
+
"siteTransfer.import.useAllMine": "Keep this site's for all",
|
|
1663
|
+
"siteTransfer.import.another": "Choose another file",
|
|
1664
|
+
"siteTransfer.import.done": "Imported {title}.",
|
|
1665
|
+
"siteTransfer.import.message": "Import {title} from another Goodfellow site",
|
|
1666
|
+
"siteTransfer.conflict.page": "page {name} ({detail})",
|
|
1667
|
+
"siteTransfer.conflict.item": "{name} in {detail}",
|
|
1668
|
+
"siteTransfer.conflict.collection": "the {name} collection, whose fields differ (this site's items in it are replaced)",
|
|
1669
|
+
"siteTransfer.conflict.syncedBlock": "synced block {name}",
|
|
1670
|
+
"siteTransfer.conflict.media": "media file {name}",
|
|
1671
|
+
"siteTransfer.summary.pages": "Pages: {count}",
|
|
1672
|
+
"siteTransfer.summary.items": "Collection items: {count}",
|
|
1673
|
+
"siteTransfer.summary.collections": "New collections: {count}",
|
|
1674
|
+
"siteTransfer.summary.syncedBlocks": "Synced blocks: {count}",
|
|
1675
|
+
"siteTransfer.summary.media": "Media files: {count}",
|
|
1676
|
+
"siteTransfer.summary.removed": "Files removed: {count}",
|
|
1677
|
+
"siteTransfer.summary.menus": "Menus",
|
|
1678
|
+
"siteTransfer.summary.settings": "Site Settings",
|
|
1679
|
+
"siteTransfer.summary.layout": "The header and footer",
|
|
1680
|
+
"siteTransfer.summary.redirects": "Redirects",
|
|
1681
|
+
"siteTransfer.summary.nothing": "Nothing to bring in: this site already has everything you chose, as it is in the file.",
|
|
1682
|
+
"siteTransfer.note.missingBlock": "{name} isn't one of this site's blocks. It's used on {items}.",
|
|
1683
|
+
"siteTransfer.note.leftOut": "Left out, since they use blocks this site doesn't have: {items}.",
|
|
1684
|
+
"siteTransfer.note.withoutBlocks": "Brought in without the blocks this site doesn't have: {items}.",
|
|
1685
|
+
"siteTransfer.note.taken": "Left out, since this site has something else at their addresses: {items}.",
|
|
1686
|
+
"siteTransfer.note.collectionDiffers": "This site's {collections} has other fields, so the other site's items in it are left out unless you choose the other site's collection above.",
|
|
1687
|
+
"siteTransfer.note.uncopied": "Left out, since they're too large or can't be shown safely: {items}.",
|
|
1688
|
+
"siteTransfer.note.stored": "Media files the other site's storage service keeps aren't in the file: {count}. Pages link to where they're kept.",
|
|
1689
|
+
"siteTransfer.note.storedMerged": "Media files the other site's storage keeps are added to this site's storage, which is the same: {count}.",
|
|
1690
|
+
"siteTransfer.note.languages": "The other site's languages are added to Site Settings, so its pages in them work: {codes}.",
|
|
1691
|
+
"siteTransfer.note.plugins": "The other site used plugins this site doesn't have: {names}. Add them on Plugins if you need them.",
|
|
1692
|
+
"siteTransfer.note.code": "Custom code comes in. It runs on every page, so check it first.",
|
|
1693
|
+
"siteTransfer.note.kept": "Stays as this site has it: {things}.",
|
|
1694
|
+
"siteTransfer.kept.address": "the Site address",
|
|
1695
|
+
"siteTransfer.kept.limits": "editors' limits",
|
|
1696
|
+
"siteTransfer.kept.updates": "update settings",
|
|
1697
|
+
"siteTransfer.kept.storage": "media storage",
|
|
1698
|
+
"siteTransfer.error.notASite": "This file isn't from a Goodfellow site. Choose a file made with Export for another Goodfellow site or Download a copy.",
|
|
1699
|
+
"siteTransfer.error.newer": "This file was made with a newer release of Goodfellow. Update this site on the Updates screen, then try again.",
|
|
1700
|
+
"siteTransfer.error.invalid": "Some of the file's content can't be read, so it can't be imported.",
|
|
1701
|
+
"siteTransfer.error.other": "The file couldn't be read.",
|
|
1702
|
+
"siteTransfer.error.blocks": "The blocks couldn't be added from Goodfellow's block registry. Check your connection and try again.",
|
|
1560
1703
|
"updates.intro": "Goodfellow, the software the site runs on, gets fixes and new releases. Fixes install on their own each night, and only once the site has been checked to still build with them.",
|
|
1561
1704
|
"updates.contentOnly": "This site's code is kept apart from its content, so Goodfellow's updates are installed where the code is, by the site's own setup or its developer.",
|
|
1562
1705
|
"updates.code": "This site's code is kept apart from its content, at {place}, where Goodfellow's updates are installed.",
|
package/dist/text.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as defaultStrings } from "./strings-
|
|
1
|
+
import { r as defaultStrings } from "./strings-Bd9r6qQn.js";
|
|
2
2
|
import { AdminTextFile } from "@goodfellow-cms/core";
|
|
3
3
|
import { AdminTextSource } from "@goodfellow-cms/ai";
|
|
4
4
|
//#region src/admin-text-sources.d.ts
|
package/dist/text.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as labels } from "./es-labels-DBu66eln.js";
|
|
2
|
-
import { n as defaultStrings } from "./strings-
|
|
3
|
-
import { a as languageStatus, c as sourcesToTranslate, d as PUCK_ENGLISH, o as sourceKey, s as sourceState, t as adminTextSources } from "./admin-text-sources-
|
|
2
|
+
import { n as defaultStrings } from "./strings-CgC6pd6k.js";
|
|
3
|
+
import { a as languageStatus, c as sourcesToTranslate, d as PUCK_ENGLISH, o as sourceKey, s as sourceState, t as adminTextSources } from "./admin-text-sources-B1CoPEu6.js";
|
|
4
4
|
//#region src/text.ts
|
|
5
5
|
/**
|
|
6
6
|
* The admin panel's English, with nothing to draw: every string a site's own
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goodfellow-cms/admin",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "Goodfellow CMS's admin panel: a visual editor for a site's pages, layout and settings.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"goodfellow",
|
|
@@ -64,10 +64,10 @@
|
|
|
64
64
|
"@codemirror/state": "6.7.6",
|
|
65
65
|
"@codemirror/theme-one-dark": "6.1.3",
|
|
66
66
|
"@codemirror/view": "6.43.14",
|
|
67
|
-
"@goodfellow-cms/ai": "0.
|
|
68
|
-
"@goodfellow-cms/core": "0.
|
|
69
|
-
"@goodfellow-cms/react": "0.
|
|
70
|
-
"@goodfellow-cms/registry": "0.
|
|
67
|
+
"@goodfellow-cms/ai": "0.10.0",
|
|
68
|
+
"@goodfellow-cms/core": "0.10.0",
|
|
69
|
+
"@goodfellow-cms/react": "0.10.0",
|
|
70
|
+
"@goodfellow-cms/registry": "0.10.0",
|
|
71
71
|
"codemirror": "6.0.2",
|
|
72
72
|
"fflate": "0.8.3",
|
|
73
73
|
"lucide-react": "1.52.0",
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"react-dom": "^19.0.0"
|
|
81
81
|
},
|
|
82
82
|
"devDependencies": {
|
|
83
|
-
"@goodfellow-cms/blocks": "0.
|
|
83
|
+
"@goodfellow-cms/blocks": "0.10.0",
|
|
84
84
|
"@puckeditor/core": "0.23.0",
|
|
85
85
|
"@types/react": "^19.2.0",
|
|
86
86
|
"@types/react-dom": "^19.2.0",
|
package/styles.css
CHANGED
|
@@ -1093,6 +1093,29 @@ body,
|
|
|
1093
1093
|
margin: 0 0 8px;
|
|
1094
1094
|
}
|
|
1095
1095
|
|
|
1096
|
+
/* A value to copy into another site's form, with its own copy button. */
|
|
1097
|
+
.gfa-copy-value {
|
|
1098
|
+
display: flex;
|
|
1099
|
+
flex-wrap: wrap;
|
|
1100
|
+
align-items: center;
|
|
1101
|
+
gap: 8px;
|
|
1102
|
+
margin: 8px 0;
|
|
1103
|
+
}
|
|
1104
|
+
|
|
1105
|
+
.gfa-copy-label {
|
|
1106
|
+
min-width: 10rem;
|
|
1107
|
+
font-weight: 600;
|
|
1108
|
+
}
|
|
1109
|
+
|
|
1110
|
+
.gfa-copy-value code {
|
|
1111
|
+
padding: 2px 6px;
|
|
1112
|
+
border: 1px solid var(--gfa-border);
|
|
1113
|
+
border-radius: 4px;
|
|
1114
|
+
background: var(--gfa-checker);
|
|
1115
|
+
white-space: pre-wrap;
|
|
1116
|
+
overflow-wrap: anywhere;
|
|
1117
|
+
}
|
|
1118
|
+
|
|
1096
1119
|
.gfa-token-links {
|
|
1097
1120
|
margin: 0 0 8px;
|
|
1098
1121
|
padding-left: 18px;
|