mirror of
https://github.com/mattermost/focalboard.git
synced 2024-12-24 13:43:12 +02:00
Merge branch 'main' into gh-2147-url-property-improvement
This commit is contained in:
commit
5186372107
5
.github/ISSUE_TEMPLATE/bug_report.md
vendored
5
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@ -31,3 +31,8 @@ If applicable, add screenshots to elaborate on the problem.
|
||||
## Additional context
|
||||
|
||||
Add any other context about the problem here.
|
||||
|
||||
Also set the Severity using the *Sev/1*, *Sev/2* or *Sev/3* labels as best you can:
|
||||
* Sev/1: Issue affects critical functionality without a workaround
|
||||
* Sev/2: Issue affects major functionality with a difficult or non-obvious workaround
|
||||
* Sev/3: Issue affects minor, non-critical functionality
|
||||
|
55
.github/workflows/scorecards-analysis.yml
vendored
Normal file
55
.github/workflows/scorecards-analysis.yml
vendored
Normal file
@ -0,0 +1,55 @@
|
||||
name: Scorecards supply-chain security
|
||||
on:
|
||||
# Only the default branch is supported.
|
||||
branch_protection_rule:
|
||||
schedule:
|
||||
- cron: '38 10 * * 2'
|
||||
push:
|
||||
branches: [ main ]
|
||||
|
||||
# Declare default permissions as read only.
|
||||
permissions: read-all
|
||||
|
||||
jobs:
|
||||
analysis:
|
||||
name: Scorecards analysis
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
# Needed to upload the results to code-scanning dashboard.
|
||||
security-events: write
|
||||
actions: read
|
||||
contents: read
|
||||
|
||||
steps:
|
||||
- name: "Checkout code"
|
||||
uses: actions/checkout@ec3a7ce113134d7a93b817d10a8272cb61118579 # v2.4.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: "Run analysis"
|
||||
uses: ossf/scorecard-action@c8416b0b2bf627c349ca92fc8e3de51a64b005cf # v1.0.2
|
||||
with:
|
||||
results_file: results.sarif
|
||||
results_format: sarif
|
||||
# Read-only PAT token. To create it,
|
||||
# follow the steps in https://github.com/ossf/scorecard-action#pat-token-creation.
|
||||
repo_token: ${{ secrets.SCORECARD_READ_TOKEN }}
|
||||
# Publish the results to enable scorecard badges. For more details, see
|
||||
# https://github.com/ossf/scorecard-action#publishing-results.
|
||||
# For private repositories, `publish_results` will automatically be set to `false`,
|
||||
# regardless of the value entered here.
|
||||
publish_results: true
|
||||
|
||||
# Upload the results as artifacts (optional).
|
||||
- name: "Upload artifact"
|
||||
uses: actions/upload-artifact@82c141cc518b40d92cc801eee768e7aafc9c2fa2 # v2.3.1
|
||||
with:
|
||||
name: SARIF file
|
||||
path: results.sarif
|
||||
retention-days: 5
|
||||
|
||||
# Upload the results to GitHub's code scanning dashboard.
|
||||
- name: "Upload to code-scanning"
|
||||
uses: github/codeql-action/upload-sarif@5f532563584d71fdef14ee64d17bafb34f751ce5 # v1.0.26
|
||||
with:
|
||||
sarif_file: results.sarif
|
@ -4,12 +4,15 @@
|
||||
![CodeQL](https://github.com/mattermost/focalboard/actions/workflows/codeql-analysis.yml/badge.svg)
|
||||
![Dev Release](https://github.com/mattermost/focalboard/actions/workflows/dev-release.yml/badge.svg)
|
||||
![Prod Release](https://github.com/mattermost/focalboard/actions/workflows/prod-release.yml/badge.svg)
|
||||
<a href="https://translate.mattermost.com/engage/focalboard/">
|
||||
<img src="https://translate.mattermost.com/widgets/focalboard/-/svg-badge.svg" alt="Translation status" />
|
||||
</a>
|
||||
|
||||
Like what you see? :eyes: Give us a GitHub Star! :star:
|
||||
|
||||
[![Focalboard](website/site/static/img/hero.jpg)](https://www.focalboard.com)
|
||||
|
||||
[Focalboard](https://www.focalboard.com) is an open source, self-hosted project management tool that's an alternative to Trello, Notion, and Asana.
|
||||
[Focalboard](https://www.focalboard.com) is an open source, multilingual, self-hosted project management tool that's an alternative to Trello, Notion, and Asana.
|
||||
|
||||
It helps define, organize, track and manage work across individuals and teams. Focalboard comes in two main editions:
|
||||
|
||||
@ -113,3 +116,7 @@ File bugs, suggest features, join our forum, learn more [here](https://github.co
|
||||
## Contributing
|
||||
|
||||
Contribute code, bug reports, and ideas to the future of the Focalboard project. We welcome your input! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details on how to get involved.
|
||||
|
||||
## Translating
|
||||
|
||||
Help translate Focalboard! The app is already translated into several languages. We welcome corrections and new language translations! You can add new languages or improve existing translations at [Weblate](https://translate.mattermost.com/engage/focalboard/).
|
||||
|
@ -3,8 +3,10 @@
|
||||
## Docker
|
||||
|
||||
The Dockerfile gives a quick and easy way to pull the latest Focalboard server and deploy it locally.
|
||||
Please note that if you wish to have persistence and mount a volume for the `/data` directory, the host directory must be owned by user `nobody`.
|
||||
|
||||
```
|
||||
sudo chown -R nobody /home/user/focalboard-data
|
||||
docker build -t focalboard .
|
||||
docker run -it -v "/home/user/focalboard-data:/data" -p 80:8000 focalboard
|
||||
```
|
||||
|
12
experiments/webext/package-lock.json
generated
12
experiments/webext/package-lock.json
generated
@ -8634,9 +8634,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/nanoid": {
|
||||
"version": "3.1.29",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.29.tgz",
|
||||
"integrity": "sha512-dW2pUSGZ8ZnCFIlBIA31SV8huOGCHb6OwzVCc7A69rb/a+SgPBwfmLvK5TKQ3INPbRkcI8a/Owo0XbiTNH19wg==",
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz",
|
||||
"integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"nanoid": "bin/nanoid.cjs"
|
||||
@ -19899,9 +19899,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"nanoid": {
|
||||
"version": "3.1.29",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.29.tgz",
|
||||
"integrity": "sha512-dW2pUSGZ8ZnCFIlBIA31SV8huOGCHb6OwzVCc7A69rb/a+SgPBwfmLvK5TKQ3INPbRkcI8a/Owo0XbiTNH19wg==",
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz",
|
||||
"integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==",
|
||||
"dev": true
|
||||
},
|
||||
"natural-compare": {
|
||||
|
@ -1,7 +1,7 @@
|
||||
# Asana importer
|
||||
|
||||
This node app converts an Asana json archive into a Focalboard archive. To use:
|
||||
1. From the Asana Board Menu, select `Export / Print`, and `JSON`
|
||||
1. From the Asana Board Menu (dropdown next to board title), select `Export / Print`, and `JSON`
|
||||
2. Save it locally, e.g. to `asana.json`
|
||||
3. Run `npm install` from within `focalboard/webapp`
|
||||
4. Run `npm install` from within `focalboard/import/asana`
|
||||
|
12
import/asana/package-lock.json
generated
12
import/asana/package-lock.json
generated
@ -287,9 +287,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/ansi-regex": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
|
||||
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
@ -1879,9 +1879,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"ansi-regex": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
|
||||
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
||||
"dev": true
|
||||
},
|
||||
"ansi-styles": {
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
This node app converts a Notion CSV and markdown export into a Focalboard archive. To use:
|
||||
1. From a Notion Board, open the ... menu at the top right
|
||||
2. Select `Export` and pick `Markdown & CSV` as the export format
|
||||
2. Select `Export`, pick `Markdown & CSV` as the export format, select true to include subpages.
|
||||
3. Save it locally, and unzip the folder e.g. to `notion-export`
|
||||
4. Run `npm install` from within `focalboard/webapp`
|
||||
5. Run `npm install` from within `focalboard/import/notion`
|
||||
|
12
import/notion/package-lock.json
generated
12
import/notion/package-lock.json
generated
@ -288,9 +288,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/ansi-regex": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
|
||||
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
@ -1916,9 +1916,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"ansi-regex": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
|
||||
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
||||
"dev": true
|
||||
},
|
||||
"ansi-styles": {
|
||||
|
12
import/todoist/package-lock.json
generated
12
import/todoist/package-lock.json
generated
@ -287,9 +287,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/ansi-regex": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
|
||||
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
@ -1879,9 +1879,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"ansi-regex": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
|
||||
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
||||
"dev": true
|
||||
},
|
||||
"ansi-styles": {
|
||||
|
@ -1,12 +1,13 @@
|
||||
# Trello importer
|
||||
|
||||
This node app converts a Trello json archive into a Focalboard archive. To use:
|
||||
1. From the Trello Board Menu, select `More`, then `Print and Export`, and `Export to JSON`
|
||||
2. Save it locally, e.g. to `trello.json`
|
||||
3. Run `npm install` from within `focalboard/webapp`
|
||||
4. Run `npm install` from within `focalboard/import/trello`
|
||||
5. Run `npx ts-node importTrello.ts -i <path-to-trello.json> -o archive.focalboard` (also from within `focalboard/import/trello`)
|
||||
6. In Focalboard, click `Settings`, then `Import archive` and select `archive.focalboard`
|
||||
1. From the Trello Board Menu, `...Show Menu` on right
|
||||
2. Select `More`, then `Print and Export`, and `Export to JSON`
|
||||
3. Save it locally, e.g. to `trello.json`
|
||||
4. Run `npm install` from within `focalboard/webapp`
|
||||
5. Run `npm install` from within `focalboard/import/trello`
|
||||
6. Run `npx ts-node importTrello.ts -i <path-to-trello.json> -o archive.focalboard` (also from within `focalboard/import/trello`)
|
||||
7. In Focalboard, click `Settings`, then `Import archive` and select `archive.focalboard`
|
||||
|
||||
## Import scope
|
||||
|
||||
|
12
import/trello/package-lock.json
generated
12
import/trello/package-lock.json
generated
@ -287,9 +287,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/ansi-regex": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
|
||||
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
@ -1879,9 +1879,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"ansi-regex": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
|
||||
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
||||
"dev": true
|
||||
},
|
||||
"ansi-styles": {
|
||||
|
386
mattermost-plugin/webapp/package-lock.json
generated
386
mattermost-plugin/webapp/package-lock.json
generated
@ -6,7 +6,7 @@
|
||||
"": {
|
||||
"dependencies": {
|
||||
"core-js": "3.12.1",
|
||||
"marked": ">=2.0.1",
|
||||
"marked": ">=4.0.12",
|
||||
"mattermost-redux": "5.33.1",
|
||||
"react-intl": "^5.13.5",
|
||||
"react-router-dom": "5.2.0"
|
||||
@ -2561,11 +2561,6 @@
|
||||
"node": ">= 8"
|
||||
}
|
||||
},
|
||||
"node_modules/@react-native-community/netinfo": {
|
||||
"version": "4.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/netinfo/-/netinfo-4.7.0.tgz",
|
||||
"integrity": "sha512-a/sDB+AsLEUNmhAUlAaTYeXKyQdFGBUfatqKkX5jluBo2CB3OAuTHfm7rSjcaLB9EmG5iSq3fOTpync2E7EYTA=="
|
||||
},
|
||||
"node_modules/@sindresorhus/is": {
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz",
|
||||
@ -3387,9 +3382,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/ansi-regex": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
|
||||
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
@ -3589,11 +3584,6 @@
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"node_modules/async-limiter": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
|
||||
"integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
|
||||
},
|
||||
"node_modules/asynckit": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||
@ -4670,7 +4660,6 @@
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
|
||||
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"base64-js": "^1.3.1",
|
||||
"ieee754": "^1.1.13"
|
||||
@ -6758,9 +6747,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint/node_modules/glob-parent": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
|
||||
"integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
|
||||
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"is-glob": "^4.0.1"
|
||||
@ -7075,15 +7064,6 @@
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/execa/node_modules/is-stream": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
|
||||
"integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/executable": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
|
||||
@ -7923,21 +7903,24 @@
|
||||
}
|
||||
},
|
||||
"node_modules/gifsicle": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-5.2.0.tgz",
|
||||
"integrity": "sha512-vOIS3j0XoTCxq9pkGj43gEix82RkI5FveNgaFZutjbaui/HH+4fR8Y56dwXDuxYo8hR4xOo6/j2h1WHoQW6XLw==",
|
||||
"version": "5.3.0",
|
||||
"resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-5.3.0.tgz",
|
||||
"integrity": "sha512-FJTpgdj1Ow/FITB7SVza5HlzXa+/lqEY0tHQazAJbuAdvyJtkH4wIdsR2K414oaTwRXHFLLF+tYbipj+OpYg+Q==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"bin-build": "^3.0.0",
|
||||
"bin-wrapper": "^4.0.0",
|
||||
"execa": "^5.0.0",
|
||||
"logalot": "^2.0.0"
|
||||
"execa": "^5.0.0"
|
||||
},
|
||||
"bin": {
|
||||
"gifsicle": "cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/imagemin/gisicle-bin?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/glob": {
|
||||
@ -8218,9 +8201,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/hosted-git-info": {
|
||||
"version": "2.8.8",
|
||||
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
|
||||
"integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
|
||||
"version": "2.8.9",
|
||||
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
|
||||
"integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/html-encoding-sniffer": {
|
||||
@ -10539,15 +10522,6 @@
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/jest-junit/node_modules/uuid": {
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
|
||||
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"uuid": "bin/uuid"
|
||||
}
|
||||
},
|
||||
"node_modules/jest-leak-detector": {
|
||||
"version": "27.0.1",
|
||||
"resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.1.tgz",
|
||||
@ -11888,12 +11862,6 @@
|
||||
"json5": "lib/cli.js"
|
||||
}
|
||||
},
|
||||
"node_modules/json5/node_modules/minimist": {
|
||||
"version": "1.2.5",
|
||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
|
||||
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/jsx-ast-utils": {
|
||||
"version": "2.4.1",
|
||||
"resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz",
|
||||
@ -12237,11 +12205,11 @@
|
||||
}
|
||||
},
|
||||
"node_modules/marked": {
|
||||
"version": "3.0.6",
|
||||
"resolved": "https://registry.npmjs.org/marked/-/marked-3.0.6.tgz",
|
||||
"integrity": "sha512-a1hY8eqdP9JgmsaO0MYYhO9Li2nfY/5pAj+gWU5r41Lze6AV4Xty1cseLWDcOYimJnaVfQAomaA6NK+z2IyR+w==",
|
||||
"version": "4.0.12",
|
||||
"resolved": "https://registry.npmjs.org/marked/-/marked-4.0.12.tgz",
|
||||
"integrity": "sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ==",
|
||||
"bin": {
|
||||
"marked": "bin/marked"
|
||||
"marked": "bin/marked.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 12"
|
||||
@ -12307,6 +12275,10 @@
|
||||
"symbol-observable": "^1.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/mattermost-redux/node_modules/redux-offline": {
|
||||
"resolved": "node_modules/mattermost-redux/redux-offline@git+https:/github.com/enahum/redux-offline.git#885024de96b6ec73650c340c8928066585c413df",
|
||||
"link": true
|
||||
},
|
||||
"node_modules/mattermost-redux/node_modules/redux-persist": {
|
||||
"version": "4.9.1",
|
||||
"resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-4.9.1.tgz",
|
||||
@ -12317,6 +12289,7 @@
|
||||
"lodash-es": "^4.17.4"
|
||||
}
|
||||
},
|
||||
"node_modules/mattermost-redux/redux-offline@git+https:/github.com/enahum/redux-offline.git#885024de96b6ec73650c340c8928066585c413df": {},
|
||||
"node_modules/mdn-data": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
|
||||
@ -12608,14 +12581,14 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/mozjpeg": {
|
||||
"version": "7.1.0",
|
||||
"resolved": "https://registry.npmjs.org/mozjpeg/-/mozjpeg-7.1.0.tgz",
|
||||
"integrity": "sha512-A6nVpI33DVi04HxatRx3PZTeVAOP1AC/T/5kXEvP0U8F+J11mmFFDv46BM2j5/cEyzDDtK8ptHeBSphNMrQLqA==",
|
||||
"version": "7.1.1",
|
||||
"resolved": "https://registry.npmjs.org/mozjpeg/-/mozjpeg-7.1.1.tgz",
|
||||
"integrity": "sha512-iIDxWvzhWvLC9mcRJ1uSkiKaj4drF58oCqK2bITm5c2Jt6cJ8qQjSSru2PCaysG+hLIinryj8mgz5ZJzOYTv1A==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"bin-build": "^3.0.0",
|
||||
"bin-wrapper": "^4.0.0",
|
||||
"logalot": "^2.1.0"
|
||||
"bin-wrapper": "^4.0.0"
|
||||
},
|
||||
"bin": {
|
||||
"mozjpeg": "cli.js"
|
||||
@ -13042,15 +13015,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/optipng-bin": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-7.0.0.tgz",
|
||||
"integrity": "sha512-mesUAwfedu5p9gRQwlYgD6Svw5IH3VUIWDJj/9cNpP3yFNbbEVqkTMWYhrIEn/cxmbGA3LpZrdoV2Yl8OfmnIA==",
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-7.0.1.tgz",
|
||||
"integrity": "sha512-W99mpdW7Nt2PpFiaO+74pkht7KEqkXkeRomdWXfEz3SALZ6hns81y/pm1dsGZ6ItUIfchiNIP6ORDr1zETU1jA==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"bin-build": "^3.0.0",
|
||||
"bin-wrapper": "^4.0.0",
|
||||
"logalot": "^2.0.0"
|
||||
"bin-wrapper": "^4.0.0"
|
||||
},
|
||||
"bin": {
|
||||
"optipng": "cli.js"
|
||||
@ -13287,9 +13259,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/path-parse": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
|
||||
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
|
||||
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/path-to-regexp": {
|
||||
@ -13512,16 +13484,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/pngquant-bin": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pngquant-bin/-/pngquant-bin-6.0.0.tgz",
|
||||
"integrity": "sha512-oXWAS9MQ9iiDAJRdAZ9KO1mC5UwhzKkJsmetiu0iqIjJuW7JsuLhmc4JdRm7uJkIWRzIAou/Vq2VcjfJwz30Ow==",
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/pngquant-bin/-/pngquant-bin-6.0.1.tgz",
|
||||
"integrity": "sha512-Q3PUyolfktf+hYio6wsg3SanQzEU/v8aICg/WpzxXcuCMRb7H2Q81okfpcEztbMvw25ILjd3a87doj2N9kvbpQ==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"bin-build": "^3.0.0",
|
||||
"bin-wrapper": "^4.0.1",
|
||||
"execa": "^4.0.0",
|
||||
"logalot": "^2.0.0"
|
||||
"execa": "^4.0.0"
|
||||
},
|
||||
"bin": {
|
||||
"pngquant": "cli.js"
|
||||
@ -13668,9 +13639,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/postcss/node_modules/nanoid": {
|
||||
"version": "3.1.23",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz",
|
||||
"integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==",
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz",
|
||||
"integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"nanoid": "bin/nanoid.cjs"
|
||||
@ -14248,23 +14219,6 @@
|
||||
"symbol-observable": "^1.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/redux-offline": {
|
||||
"resolved": "git+ssh://git@github.com/enahum/redux-offline.git#885024de96b6ec73650c340c8928066585c413df",
|
||||
"dependencies": {
|
||||
"@react-native-community/netinfo": "^4.1.3",
|
||||
"redux-persist": "^4.5.0"
|
||||
}
|
||||
},
|
||||
"node_modules/redux-persist": {
|
||||
"version": "4.10.2",
|
||||
"resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-4.10.2.tgz",
|
||||
"integrity": "sha512-U+e0ieMGC69Zr72929iJW40dEld7Mflh6mu0eJtVMLGfMq/aJqjxUM1hzyUWMR1VUyAEEdPHuQmeq5ti9krIgg==",
|
||||
"dependencies": {
|
||||
"json-stringify-safe": "^5.0.1",
|
||||
"lodash": "^4.17.4",
|
||||
"lodash-es": "^4.17.4"
|
||||
}
|
||||
},
|
||||
"node_modules/redux-persist-node-storage": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/redux-persist-node-storage/-/redux-persist-node-storage-2.0.0.tgz",
|
||||
@ -15072,9 +15026,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/socketcluster-client": {
|
||||
"version": "14.3.1",
|
||||
"resolved": "https://registry.npmjs.org/socketcluster-client/-/socketcluster-client-14.3.1.tgz",
|
||||
"integrity": "sha512-Sd/T0K/9UlqTfz+HUuFq90dshA5OBJPQbdkRzGtcKIOm52fkdsBTt0FYpiuzzxv5VrU7PWpRm6KIfNXyPwlLpw==",
|
||||
"version": "14.3.2",
|
||||
"resolved": "https://registry.npmjs.org/socketcluster-client/-/socketcluster-client-14.3.2.tgz",
|
||||
"integrity": "sha512-xDtgW7Ss0ARlfhx53bJ5GY5THDdEOeJnT+/C9Rmrj/vnZr54xeiQfrCZJbcglwe732nK3V+uZq87IvrRl7Hn4g==",
|
||||
"dependencies": {
|
||||
"buffer": "^5.2.1",
|
||||
"clone": "2.1.1",
|
||||
@ -15085,16 +15039,7 @@
|
||||
"sc-errors": "^2.0.1",
|
||||
"sc-formatter": "^3.0.1",
|
||||
"uuid": "3.2.1",
|
||||
"ws": "7.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/socketcluster-client/node_modules/buffer": {
|
||||
"version": "5.6.0",
|
||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz",
|
||||
"integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==",
|
||||
"dependencies": {
|
||||
"base64-js": "^1.0.2",
|
||||
"ieee754": "^1.1.4"
|
||||
"ws": "^7.5.0"
|
||||
}
|
||||
},
|
||||
"node_modules/socketcluster-client/node_modules/uuid": {
|
||||
@ -15105,14 +15050,6 @@
|
||||
"uuid": "bin/uuid"
|
||||
}
|
||||
},
|
||||
"node_modules/socketcluster-client/node_modules/ws": {
|
||||
"version": "7.1.0",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.1.0.tgz",
|
||||
"integrity": "sha512-Swie2C4fs7CkwlHu1glMePLYJJsWjzhl1vm3ZaLplD0h7OMkZyZ6kLTB/OagiU923bZrPFXuDTeEqaEN4NWG4g==",
|
||||
"dependencies": {
|
||||
"async-limiter": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/sort-keys": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
|
||||
@ -15898,23 +15835,6 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/test-exclude/node_modules/glob": {
|
||||
"version": "7.1.6",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
|
||||
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"fs.realpath": "^1.0.0",
|
||||
"inflight": "^1.0.4",
|
||||
"inherits": "2",
|
||||
"minimatch": "^3.0.4",
|
||||
"once": "^1.3.0",
|
||||
"path-is-absolute": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/text-table": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
|
||||
@ -15953,9 +15873,9 @@
|
||||
"integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
|
||||
},
|
||||
"node_modules/tmpl": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
|
||||
"integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
|
||||
"integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/to-buffer": {
|
||||
@ -17009,12 +16929,23 @@
|
||||
}
|
||||
},
|
||||
"node_modules/ws": {
|
||||
"version": "7.4.5",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz",
|
||||
"integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==",
|
||||
"dev": true,
|
||||
"version": "7.5.6",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz",
|
||||
"integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==",
|
||||
"engines": {
|
||||
"node": ">=8.3.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"bufferutil": "^4.0.1",
|
||||
"utf-8-validate": "^5.0.2"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"bufferutil": {
|
||||
"optional": true
|
||||
},
|
||||
"utf-8-validate": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/xml": {
|
||||
@ -19421,11 +19352,6 @@
|
||||
"fastq": "^1.6.0"
|
||||
}
|
||||
},
|
||||
"@react-native-community/netinfo": {
|
||||
"version": "4.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/netinfo/-/netinfo-4.7.0.tgz",
|
||||
"integrity": "sha512-a/sDB+AsLEUNmhAUlAaTYeXKyQdFGBUfatqKkX5jluBo2CB3OAuTHfm7rSjcaLB9EmG5iSq3fOTpync2E7EYTA=="
|
||||
},
|
||||
"@sindresorhus/is": {
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz",
|
||||
@ -20190,9 +20116,9 @@
|
||||
}
|
||||
},
|
||||
"ansi-regex": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
|
||||
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
||||
"dev": true
|
||||
},
|
||||
"ansi-styles": {
|
||||
@ -20349,11 +20275,6 @@
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"async-limiter": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
|
||||
"integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
|
||||
},
|
||||
"asynckit": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||
@ -21250,7 +21171,6 @@
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
|
||||
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"base64-js": "^1.3.1",
|
||||
"ieee754": "^1.1.13"
|
||||
@ -22654,9 +22574,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"glob-parent": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
|
||||
"integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
|
||||
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"is-glob": "^4.0.1"
|
||||
@ -23194,14 +23114,6 @@
|
||||
"onetime": "^5.1.2",
|
||||
"signal-exit": "^3.0.3",
|
||||
"strip-final-newline": "^2.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"is-stream": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
|
||||
"integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"executable": {
|
||||
@ -23884,15 +23796,14 @@
|
||||
}
|
||||
},
|
||||
"gifsicle": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-5.2.0.tgz",
|
||||
"integrity": "sha512-vOIS3j0XoTCxq9pkGj43gEix82RkI5FveNgaFZutjbaui/HH+4fR8Y56dwXDuxYo8hR4xOo6/j2h1WHoQW6XLw==",
|
||||
"version": "5.3.0",
|
||||
"resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-5.3.0.tgz",
|
||||
"integrity": "sha512-FJTpgdj1Ow/FITB7SVza5HlzXa+/lqEY0tHQazAJbuAdvyJtkH4wIdsR2K414oaTwRXHFLLF+tYbipj+OpYg+Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"bin-build": "^3.0.0",
|
||||
"bin-wrapper": "^4.0.0",
|
||||
"execa": "^5.0.0",
|
||||
"logalot": "^2.0.0"
|
||||
"execa": "^5.0.0"
|
||||
}
|
||||
},
|
||||
"glob": {
|
||||
@ -24129,9 +24040,9 @@
|
||||
}
|
||||
},
|
||||
"hosted-git-info": {
|
||||
"version": "2.8.8",
|
||||
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
|
||||
"integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
|
||||
"version": "2.8.9",
|
||||
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
|
||||
"integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
|
||||
"dev": true
|
||||
},
|
||||
"html-encoding-sniffer": {
|
||||
@ -25979,12 +25890,6 @@
|
||||
"requires": {
|
||||
"ansi-regex": "^4.1.0"
|
||||
}
|
||||
},
|
||||
"uuid": {
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
|
||||
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -27076,14 +26981,6 @@
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"minimist": "^1.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"minimist": {
|
||||
"version": "1.2.5",
|
||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
|
||||
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"jsx-ast-utils": {
|
||||
@ -27354,9 +27251,9 @@
|
||||
}
|
||||
},
|
||||
"marked": {
|
||||
"version": "3.0.6",
|
||||
"resolved": "https://registry.npmjs.org/marked/-/marked-3.0.6.tgz",
|
||||
"integrity": "sha512-a1hY8eqdP9JgmsaO0MYYhO9Li2nfY/5pAj+gWU5r41Lze6AV4Xty1cseLWDcOYimJnaVfQAomaA6NK+z2IyR+w=="
|
||||
"version": "4.0.12",
|
||||
"resolved": "https://registry.npmjs.org/marked/-/marked-4.0.12.tgz",
|
||||
"integrity": "sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ=="
|
||||
},
|
||||
"mattermost-redux": {
|
||||
"version": "5.33.1",
|
||||
@ -27412,6 +27309,9 @@
|
||||
"symbol-observable": "^1.2.0"
|
||||
}
|
||||
},
|
||||
"redux-offline": {
|
||||
"version": "file:node_modules/mattermost-redux/redux-offline@git+https:/github.com/enahum/redux-offline.git#885024de96b6ec73650c340c8928066585c413df"
|
||||
},
|
||||
"redux-persist": {
|
||||
"version": "4.9.1",
|
||||
"resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-4.9.1.tgz",
|
||||
@ -27662,14 +27562,13 @@
|
||||
}
|
||||
},
|
||||
"mozjpeg": {
|
||||
"version": "7.1.0",
|
||||
"resolved": "https://registry.npmjs.org/mozjpeg/-/mozjpeg-7.1.0.tgz",
|
||||
"integrity": "sha512-A6nVpI33DVi04HxatRx3PZTeVAOP1AC/T/5kXEvP0U8F+J11mmFFDv46BM2j5/cEyzDDtK8ptHeBSphNMrQLqA==",
|
||||
"version": "7.1.1",
|
||||
"resolved": "https://registry.npmjs.org/mozjpeg/-/mozjpeg-7.1.1.tgz",
|
||||
"integrity": "sha512-iIDxWvzhWvLC9mcRJ1uSkiKaj4drF58oCqK2bITm5c2Jt6cJ8qQjSSru2PCaysG+hLIinryj8mgz5ZJzOYTv1A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"bin-build": "^3.0.0",
|
||||
"bin-wrapper": "^4.0.0",
|
||||
"logalot": "^2.1.0"
|
||||
"bin-wrapper": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
@ -28025,14 +27924,13 @@
|
||||
}
|
||||
},
|
||||
"optipng-bin": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-7.0.0.tgz",
|
||||
"integrity": "sha512-mesUAwfedu5p9gRQwlYgD6Svw5IH3VUIWDJj/9cNpP3yFNbbEVqkTMWYhrIEn/cxmbGA3LpZrdoV2Yl8OfmnIA==",
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-7.0.1.tgz",
|
||||
"integrity": "sha512-W99mpdW7Nt2PpFiaO+74pkht7KEqkXkeRomdWXfEz3SALZ6hns81y/pm1dsGZ6ItUIfchiNIP6ORDr1zETU1jA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"bin-build": "^3.0.0",
|
||||
"bin-wrapper": "^4.0.0",
|
||||
"logalot": "^2.0.0"
|
||||
"bin-wrapper": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"os-filter-obj": {
|
||||
@ -28196,9 +28094,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"path-parse": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
|
||||
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
|
||||
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
|
||||
"dev": true
|
||||
},
|
||||
"path-to-regexp": {
|
||||
@ -28373,15 +28271,14 @@
|
||||
}
|
||||
},
|
||||
"pngquant-bin": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pngquant-bin/-/pngquant-bin-6.0.0.tgz",
|
||||
"integrity": "sha512-oXWAS9MQ9iiDAJRdAZ9KO1mC5UwhzKkJsmetiu0iqIjJuW7JsuLhmc4JdRm7uJkIWRzIAou/Vq2VcjfJwz30Ow==",
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/pngquant-bin/-/pngquant-bin-6.0.1.tgz",
|
||||
"integrity": "sha512-Q3PUyolfktf+hYio6wsg3SanQzEU/v8aICg/WpzxXcuCMRb7H2Q81okfpcEztbMvw25ILjd3a87doj2N9kvbpQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"bin-build": "^3.0.0",
|
||||
"bin-wrapper": "^4.0.1",
|
||||
"execa": "^4.0.0",
|
||||
"logalot": "^2.0.0"
|
||||
"execa": "^4.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"execa": {
|
||||
@ -28437,9 +28334,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"nanoid": {
|
||||
"version": "3.1.23",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz",
|
||||
"integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==",
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz",
|
||||
"integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
@ -28974,24 +28871,6 @@
|
||||
"symbol-observable": "^1.2.0"
|
||||
}
|
||||
},
|
||||
"redux-offline": {
|
||||
"version": "git+ssh://git@github.com/enahum/redux-offline.git#885024de96b6ec73650c340c8928066585c413df",
|
||||
"from": "git+ssh://git@github.com/enahum/redux-offline.git#885024de96b6ec73650c340c8928066585c413df",
|
||||
"requires": {
|
||||
"@react-native-community/netinfo": "^4.1.3",
|
||||
"redux-persist": "^4.5.0"
|
||||
}
|
||||
},
|
||||
"redux-persist": {
|
||||
"version": "4.10.2",
|
||||
"resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-4.10.2.tgz",
|
||||
"integrity": "sha512-U+e0ieMGC69Zr72929iJW40dEld7Mflh6mu0eJtVMLGfMq/aJqjxUM1hzyUWMR1VUyAEEdPHuQmeq5ti9krIgg==",
|
||||
"requires": {
|
||||
"json-stringify-safe": "^5.0.1",
|
||||
"lodash": "^4.17.4",
|
||||
"lodash-es": "^4.17.4"
|
||||
}
|
||||
},
|
||||
"redux-persist-node-storage": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/redux-persist-node-storage/-/redux-persist-node-storage-2.0.0.tgz",
|
||||
@ -29658,9 +29537,9 @@
|
||||
}
|
||||
},
|
||||
"socketcluster-client": {
|
||||
"version": "14.3.1",
|
||||
"resolved": "https://registry.npmjs.org/socketcluster-client/-/socketcluster-client-14.3.1.tgz",
|
||||
"integrity": "sha512-Sd/T0K/9UlqTfz+HUuFq90dshA5OBJPQbdkRzGtcKIOm52fkdsBTt0FYpiuzzxv5VrU7PWpRm6KIfNXyPwlLpw==",
|
||||
"version": "14.3.2",
|
||||
"resolved": "https://registry.npmjs.org/socketcluster-client/-/socketcluster-client-14.3.2.tgz",
|
||||
"integrity": "sha512-xDtgW7Ss0ARlfhx53bJ5GY5THDdEOeJnT+/C9Rmrj/vnZr54xeiQfrCZJbcglwe732nK3V+uZq87IvrRl7Hn4g==",
|
||||
"requires": {
|
||||
"buffer": "^5.2.1",
|
||||
"clone": "2.1.1",
|
||||
@ -29671,30 +29550,13 @@
|
||||
"sc-errors": "^2.0.1",
|
||||
"sc-formatter": "^3.0.1",
|
||||
"uuid": "3.2.1",
|
||||
"ws": "7.1.0"
|
||||
"ws": "^7.5.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"buffer": {
|
||||
"version": "5.6.0",
|
||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz",
|
||||
"integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==",
|
||||
"requires": {
|
||||
"base64-js": "^1.0.2",
|
||||
"ieee754": "^1.1.4"
|
||||
}
|
||||
},
|
||||
"uuid": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
|
||||
"integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA=="
|
||||
},
|
||||
"ws": {
|
||||
"version": "7.1.0",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.1.0.tgz",
|
||||
"integrity": "sha512-Swie2C4fs7CkwlHu1glMePLYJJsWjzhl1vm3ZaLplD0h7OMkZyZ6kLTB/OagiU923bZrPFXuDTeEqaEN4NWG4g==",
|
||||
"requires": {
|
||||
"async-limiter": "^1.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -30337,22 +30199,6 @@
|
||||
"@istanbuljs/schema": "^0.1.2",
|
||||
"glob": "^7.1.4",
|
||||
"minimatch": "^3.0.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"glob": {
|
||||
"version": "7.1.6",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
|
||||
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fs.realpath": "^1.0.0",
|
||||
"inflight": "^1.0.4",
|
||||
"inherits": "2",
|
||||
"minimatch": "^3.0.4",
|
||||
"once": "^1.3.0",
|
||||
"path-is-absolute": "^1.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"text-table": {
|
||||
@ -30390,9 +30236,9 @@
|
||||
"integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
|
||||
},
|
||||
"tmpl": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
|
||||
"integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
|
||||
"integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
|
||||
"dev": true
|
||||
},
|
||||
"to-buffer": {
|
||||
@ -31230,10 +31076,10 @@
|
||||
}
|
||||
},
|
||||
"ws": {
|
||||
"version": "7.4.5",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz",
|
||||
"integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==",
|
||||
"dev": true
|
||||
"version": "7.5.6",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz",
|
||||
"integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==",
|
||||
"requires": {}
|
||||
},
|
||||
"xml": {
|
||||
"version": "1.0.1",
|
||||
|
@ -75,7 +75,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"core-js": "3.12.1",
|
||||
"marked": ">=2.0.1",
|
||||
"marked": ">=4.0.12",
|
||||
"mattermost-redux": "5.33.1",
|
||||
"react-intl": "^5.13.5",
|
||||
"react-router-dom": "5.2.0"
|
||||
|
@ -20,6 +20,7 @@ import store from '../../../webapp/src/store'
|
||||
import GlobalHeader from '../../../webapp/src/components/globalHeader/globalHeader'
|
||||
import FocalboardIcon from '../../../webapp/src/widgets/icons/logo'
|
||||
import {setMattermostTheme} from '../../../webapp/src/theme'
|
||||
import {UserSettings} from '../../../webapp/src/userSettings'
|
||||
|
||||
import TelemetryClient, {TelemetryCategory, TelemetryActions} from '../../../webapp/src/telemetry/telemetryClient'
|
||||
|
||||
@ -139,6 +140,16 @@ export default class Plugin {
|
||||
window.open(`${windowAny.frontendBaseURL}/workspace/${currentChannel}`, '_blank', 'noopener')
|
||||
}
|
||||
this.channelHeaderButtonId = registry.registerChannelHeaderButtonAction(<FocalboardIcon/>, goToFocalboardWorkspace, 'Boards', 'Boards')
|
||||
|
||||
const goToFocalboardTemplate = () => {
|
||||
const currentChannel = mmStore.getState().entities.channels.currentChannelId
|
||||
TelemetryClient.trackEvent(TelemetryCategory, TelemetryActions.ClickChannelIntro, {workspaceID: currentChannel})
|
||||
UserSettings.lastBoardId = null
|
||||
UserSettings.lastViewId = null
|
||||
window.open(`${windowAny.frontendBaseURL}/workspace/${currentChannel}`, '_blank', 'noopener')
|
||||
}
|
||||
this.channelHeaderButtonId = registry.registerChannelIntroButtonAction(<FocalboardIcon/>, goToFocalboardTemplate, 'Boards')
|
||||
|
||||
this.registry.registerProduct('/boards', 'product-boards', 'Boards', '/boards/welcome', MainApp, HeaderComponent)
|
||||
this.registry.registerPostWillRenderEmbedComponent((embed) => embed.type === 'boards', BoardsUnfurl, false)
|
||||
} else {
|
||||
|
@ -3,6 +3,7 @@
|
||||
export interface PluginRegistry {
|
||||
registerPostTypeComponent(typeName: string, component: React.ElementType)
|
||||
registerChannelHeaderButtonAction(icon: React.Element, action: () => void, dropdownText: string, tooltipText: string)
|
||||
registerChannelIntroButtonAction(icon: React.Element, action: () => void, tooltipText: string)
|
||||
registerCustomRoute(route: string, component: React.ElementType)
|
||||
registerProductRoute(route: string, component: React.ElementType)
|
||||
unregisterComponent(componentId: string)
|
||||
|
@ -1170,13 +1170,22 @@ func (a *API) handlePostSharing(w http.ResponseWriter, r *http.Request) {
|
||||
auditRec.AddMeta("shareID", sharing.ID)
|
||||
auditRec.AddMeta("enabled", sharing.Enabled)
|
||||
|
||||
// Stamp ModifiedBy
|
||||
ctx := r.Context()
|
||||
session := ctx.Value(sessionContextKey).(*model.Session)
|
||||
userID := session.UserID
|
||||
if userID == SingleUser {
|
||||
userID = ""
|
||||
}
|
||||
|
||||
if !a.app.GetClientConfig().EnablePublicSharedBoards {
|
||||
a.logger.Info(
|
||||
"Attempt to turn on sharing for board via API failed, sharing off in configuration.",
|
||||
mlog.String("boardID", sharing.ID),
|
||||
mlog.String("userID", userID))
|
||||
a.errorResponse(w, r.URL.Path, http.StatusInternalServerError, "Turning on sharing for board failed, see log for details.", nil)
|
||||
return
|
||||
}
|
||||
|
||||
sharing.ModifiedBy = userID
|
||||
|
||||
err = a.app.UpsertSharing(*container, sharing)
|
||||
@ -1320,6 +1329,7 @@ func (a *API) handleServeFile(w http.ResponseWriter, r *http.Request) {
|
||||
// - application/json
|
||||
// - image/jpg
|
||||
// - image/png
|
||||
// - image/gif
|
||||
// parameters:
|
||||
// - name: workspaceID
|
||||
// in: path
|
||||
@ -1370,6 +1380,10 @@ func (a *API) handleServeFile(w http.ResponseWriter, r *http.Request) {
|
||||
contentType = "image/png"
|
||||
}
|
||||
|
||||
if fileExtension == "gif" {
|
||||
contentType = "image/gif"
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", contentType)
|
||||
|
||||
fileReader, err := a.app.GetFileReader(workspaceID, rootID, filename)
|
||||
|
@ -22,7 +22,7 @@ func TestSharing(t *testing.T) {
|
||||
require.False(t, sharing.Enabled)
|
||||
})
|
||||
|
||||
t.Run("POST sharing", func(t *testing.T) {
|
||||
t.Run("POST sharing, config = false", func(t *testing.T) {
|
||||
sharing := model.Sharing{
|
||||
ID: rootID,
|
||||
Token: token,
|
||||
@ -30,10 +30,33 @@ func TestSharing(t *testing.T) {
|
||||
UpdateAt: 1,
|
||||
}
|
||||
|
||||
// it will fail with default config
|
||||
success, resp := th.Client.PostSharing(sharing)
|
||||
require.False(t, success)
|
||||
require.Error(t, resp.Error)
|
||||
|
||||
t.Run("GET sharing", func(t *testing.T) {
|
||||
sharing, resp := th.Client.GetSharing(rootID)
|
||||
// Expect no error, but no Id returned
|
||||
require.NoError(t, resp.Error)
|
||||
require.NotNil(t, sharing)
|
||||
require.Equal(t, "", sharing.ID)
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("POST sharing, config = true", func(t *testing.T) {
|
||||
th.Server.Config().EnablePublicSharedBoards = true
|
||||
sharing := model.Sharing{
|
||||
ID: rootID,
|
||||
Token: token,
|
||||
Enabled: true,
|
||||
UpdateAt: 1,
|
||||
}
|
||||
|
||||
// it will succeed with updated config
|
||||
success, resp := th.Client.PostSharing(sharing)
|
||||
require.True(t, success)
|
||||
require.NoError(t, resp.Error)
|
||||
})
|
||||
|
||||
t.Run("GET sharing", func(t *testing.T) {
|
||||
sharing, resp := th.Client.GetSharing(rootID)
|
||||
@ -43,4 +66,5 @@ func TestSharing(t *testing.T) {
|
||||
require.True(t, sharing.Enabled)
|
||||
require.Equal(t, sharing.Token, token)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
@ -129,7 +129,11 @@ func (n *notifier) notify() {
|
||||
|
||||
hint, err = n.store.GetNextNotificationHint(true)
|
||||
if err != nil {
|
||||
// try again later
|
||||
if store.IsErrNotFound(err) {
|
||||
// Expected when multiple nodes in a cluster try to process the same hint at the same time.
|
||||
// This simply means the other node won. Returning here will simply try fetching another hint.
|
||||
return
|
||||
}
|
||||
n.logger.Error("notify - error fetching next notification", mlog.Err(err))
|
||||
return
|
||||
}
|
||||
|
@ -195,7 +195,7 @@ func (s *SQLStore) getNextNotificationHint(db sq.BaseRunner, remove bool) (*mode
|
||||
if rows == 0 {
|
||||
// another node likely has grabbed this hint for processing concurrently; let that node handle it
|
||||
// and we'll return an error here so we try again.
|
||||
return nil, fmt.Errorf("cannot delete missing hint while getting next notification hint: %w", err)
|
||||
return nil, store.NewErrNotFound(hint.BlockID)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -260,7 +260,7 @@ func commandFromRequest(req *mmModel.WebSocketRequest) (*WebsocketCommand, error
|
||||
func (pa *PluginAdapter) WebSocketMessageHasBeenPosted(webConnID, userID string, req *mmModel.WebSocketRequest) {
|
||||
pac, ok := pa.GetListenerByWebConnID(webConnID)
|
||||
if !ok {
|
||||
pa.api.LogError("received a message for an unregistered webconn",
|
||||
pa.api.LogDebug("received a message for an unregistered webconn",
|
||||
"webConnID", webConnID,
|
||||
"userID", userID,
|
||||
"action", req.Action,
|
||||
|
@ -25,6 +25,7 @@
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
"max-lines": "off",
|
||||
"no-unused-expressions": 0,
|
||||
"babel/no-unused-expressions": [2, {"allowShortCircuit": true}],
|
||||
"eol-last": ["error", "always"],
|
||||
|
@ -121,6 +121,7 @@
|
||||
"View.DeleteView": "Eliminar vista",
|
||||
"View.DuplicateView": "Duplicar vista",
|
||||
"View.NewBoardTitle": "Vista de tauler",
|
||||
"View.NewCalendarTitle": "Vista de calendari",
|
||||
"View.NewGalleryTitle": "Vista de galeria",
|
||||
"View.NewTableTitle": "Vista de tauler",
|
||||
"View.Table": "Taula",
|
||||
|
@ -90,7 +90,7 @@
|
||||
"DashboardPage.CenterPanel.ChangeChannels": "スイッチャーで簡単にチャンネルを変更できます",
|
||||
"DashboardPage.CenterPanel.NoWorkspaces": "その言葉に一致するチャンネルは見つかりませんでした",
|
||||
"DashboardPage.CenterPanel.NoWorkspacesDescription": "別の言葉で検索してみてください",
|
||||
"DashboardPage.showEmpty": "空の表示",
|
||||
"DashboardPage.showEmpty": "空のボードを表示",
|
||||
"DashboardPage.title": "ダッシュボード",
|
||||
"DeleteBoardDialog.confirm-cancel": "キャンセル",
|
||||
"DeleteBoardDialog.confirm-delete": "削除",
|
||||
|
@ -63,10 +63,16 @@
|
||||
"CardDetailProperty.property-deleted": "{PropertyName} успешно удалено!",
|
||||
"CardDetailProperty.property-name-change-subtext": "тип из \"{oldPropType}\" в \"{newPropType}\"",
|
||||
"CardDetailProperty.property-type-change-subtext": "название для \"{newPropName}\"",
|
||||
"CardDialog.copiedLink": "Скопировано!",
|
||||
"CardDialog.copyLink": "Копировать ссылку",
|
||||
"CardDialog.editing-template": "Вы редактируете шаблон.",
|
||||
"CardDialog.nocard": "Эта карточка не существует или недоступна.",
|
||||
"ColorOption.selectColor": "Выберите цвет {color}",
|
||||
"Comment.delete": "Удалить",
|
||||
"CommentsList.send": "Отправить",
|
||||
"ConfirmationDialog.cancel-action": "Отмена",
|
||||
"ConfirmationDialog.confirm-action": "Подтвердить",
|
||||
"ConfirmationDialog.delete-action": "Удалить",
|
||||
"ContentBlock.Delete": "Удалить",
|
||||
"ContentBlock.DeleteAction": "удалить",
|
||||
"ContentBlock.addElement": "добавить {type}",
|
||||
@ -81,19 +87,41 @@
|
||||
"ContentBlock.moveDown": "Опустить",
|
||||
"ContentBlock.moveUp": "Поднять",
|
||||
"ContentBlock.text": "текст",
|
||||
"DashboardPage.CenterPanel.ChangeChannels": "Используйте переключатель, чтобы легко сменить каналы",
|
||||
"DashboardPage.CenterPanel.NoWorkspaces": "К сожалению, мы не смогли найти ни одного канала, соответствующего этому термину.",
|
||||
"DashboardPage.CenterPanel.NoWorkspacesDescription": "Пожалуйста, попробуйте найти другой термин",
|
||||
"DashboardPage.showEmpty": "Показать пустой",
|
||||
"DashboardPage.title": "Панель управления",
|
||||
"DeleteBoardDialog.confirm-cancel": "Отмена",
|
||||
"DeleteBoardDialog.confirm-delete": "Удалить",
|
||||
"DeleteBoardDialog.confirm-info": "Вы уверены, что хотите удалить доску \"{boardTitle}\"? Его удаление приведет к удалению всех карточек на доске.",
|
||||
"DeleteBoardDialog.confirm-tite": "Подтвердить удаление доски",
|
||||
"Dialog.closeDialog": "Закрыть диалог",
|
||||
"EditableDayPicker.today": "Сегодня",
|
||||
"EmptyCenterPanel.no-content": "Добавьте или выберите доску на боковой панели, чтобы начать работу.",
|
||||
"EmptyCenterPanel.plugin.choose-a-template": "Выберите шаблон",
|
||||
"EmptyCenterPanel.plugin.empty-board": "Начните с пустой доски",
|
||||
"EmptyCenterPanel.plugin.end-message": "Вы можете изменить канал с помощью переключателя на боковой панели.",
|
||||
"EmptyCenterPanel.plugin.new-template": "Новый шаблон",
|
||||
"EmptyCenterPanel.plugin.no-content-description": "Добавьте доску на боковую панель, используя любой из указанных ниже шаблонов, или начните с нуля.{lineBreak} Участники \"{workspaceName}\" будут иметь доступ к созданным здесь доскам.",
|
||||
"EmptyCenterPanel.plugin.no-content-or": "или",
|
||||
"EmptyCenterPanel.plugin.no-content-title": "Создайте доску в {workspaceName}",
|
||||
"Error.mobileweb": "Мобильная веб-поддержка в настоящее время находится на ранней стадии бета-тестирования. Могут присутствовать не все функции.",
|
||||
"Error.websocket-closed": "Соединение через веб-сокет закрыто, соединение прервано. Если это не устраняется, проверьте конфигурацию сервера или веб-прокси.",
|
||||
"Filter.includes": "содержит",
|
||||
"Filter.is-empty": "пусто",
|
||||
"Filter.is-not-empty": "не пусто",
|
||||
"Filter.not-includes": "не содержит",
|
||||
"FilterComponent.add-filter": "+ Добавить фильтр",
|
||||
"FilterComponent.delete": "Удалить",
|
||||
"GalleryCard.copiedLink": "Скопировано!",
|
||||
"GalleryCard.copyLink": "Копировать ссылку",
|
||||
"GalleryCard.delete": "Удалить",
|
||||
"GalleryCard.duplicate": "Создать дубликат",
|
||||
"General.BoardCount": "{count, plural, one {# Доска} other {# Доски}}",
|
||||
"GroupBy.ungroup": "Разгруппировать",
|
||||
"KanbanCard.copiedLink": "Скопировано!",
|
||||
"KanbanCard.copyLink": "Копировать ссылку",
|
||||
"KanbanCard.delete": "Удалить",
|
||||
"KanbanCard.duplicate": "Создать дубликат",
|
||||
"KanbanCard.untitled": "Без названия",
|
||||
@ -104,6 +132,7 @@
|
||||
"Mutator.new-template-from-card": "новый шаблон из карточки",
|
||||
"PropertyMenu.Delete": "Удалить",
|
||||
"PropertyMenu.changeType": "Изменить тип свойства",
|
||||
"PropertyMenu.selectType": "Выберите тип свойства",
|
||||
"PropertyMenu.typeTitle": "Тип",
|
||||
"PropertyType.Checkbox": "Флажок",
|
||||
"PropertyType.CreatedBy": "Создано пользователем",
|
||||
@ -120,6 +149,7 @@
|
||||
"PropertyType.URL": "URL",
|
||||
"PropertyType.UpdatedBy": "Обновлено пользователем",
|
||||
"PropertyType.UpdatedTime": "Время обновления",
|
||||
"PropertyValueElement.empty": "Пустой",
|
||||
"RegistrationLink.confirmRegenerateToken": "Это сделает недействительными ссылки, которые ранее были общими. Продолжить?",
|
||||
"RegistrationLink.copiedLink": "Скопировано!",
|
||||
"RegistrationLink.copyLink": "Скопировать ссылку",
|
||||
@ -146,6 +176,7 @@
|
||||
"Sidebar.import-archive": "Импорт архива",
|
||||
"Sidebar.invite-users": "Пригласить пользователей",
|
||||
"Sidebar.logout": "Выйти",
|
||||
"Sidebar.no-more-workspaces": "Рабочих пространств больше нет",
|
||||
"Sidebar.no-views-in-board": "Внутри нет страниц",
|
||||
"Sidebar.random-icons": "Случайные иконки",
|
||||
"Sidebar.select-a-template": "Выберите шаблон",
|
||||
@ -167,16 +198,24 @@
|
||||
"TableHeaderMenu.sort-ascending": "Сортировать по возрастанию",
|
||||
"TableHeaderMenu.sort-descending": "Сортировать по убыванию",
|
||||
"TableRow.open": "Открыть",
|
||||
"TopBar.give-feedback": "Дать обратную связь",
|
||||
"ValueSelector.noOptions": "Нет вариантов. Начните печатать, чтобы добавить первый!",
|
||||
"ValueSelector.valueSelector": "Выбор значения",
|
||||
"ValueSelectorLabel.openMenu": "Открыть меню",
|
||||
"View.AddView": "Добавить вид",
|
||||
"View.Board": "Доска",
|
||||
"View.DeleteView": "Удалить вид",
|
||||
"View.DuplicateView": "Создать дубликат вида",
|
||||
"View.Gallery": "Галерея",
|
||||
"View.NewBoardTitle": "Вид доски",
|
||||
"View.NewCalendarTitle": "Просмотр календаря",
|
||||
"View.NewGalleryTitle": "Представление \"галерея\"",
|
||||
"View.NewTableTitle": "Вид таблицы",
|
||||
"View.NewTemplateTitle": "Шаблон без названия",
|
||||
"View.Table": "Таблица",
|
||||
"ViewHeader.add-template": "Новый шаблон",
|
||||
"ViewHeader.delete-template": "Удалить",
|
||||
"ViewHeader.display-by": "Показать по: {property}",
|
||||
"ViewHeader.edit-template": "Редактировать",
|
||||
"ViewHeader.empty-card": "Очистить карточку",
|
||||
"ViewHeader.export-board-archive": "Экспорт архива доски",
|
||||
@ -190,6 +229,7 @@
|
||||
"ViewHeader.search": "Поиск",
|
||||
"ViewHeader.search-text": "Поиск текста",
|
||||
"ViewHeader.select-a-template": "Выбрать шаблон",
|
||||
"ViewHeader.set-default-template": "Установить по умолчанию",
|
||||
"ViewHeader.share-board": "Расшарить доску",
|
||||
"ViewHeader.sort": "Сортировать",
|
||||
"ViewHeader.untitled": "Без названия",
|
||||
@ -199,7 +239,13 @@
|
||||
"ViewTitle.remove-icon": "Убрать иконку",
|
||||
"ViewTitle.show-description": "Показать описание",
|
||||
"ViewTitle.untitled-board": "Доска без названия",
|
||||
"WelcomePage.Description": "Доски — это инструмент управления проектами, который помогает определять, организовывать, отслеживать и управлять работой между командами, используя знакомое представление доски Kanban.",
|
||||
"WelcomePage.Explore.Button": "Исследовать",
|
||||
"WelcomePage.Heading": "Добро пожаловать на Доски",
|
||||
"Workspace.editing-board-template": "Вы редактируете шаблон доски.",
|
||||
"calendar.month": "Месяц",
|
||||
"calendar.today": "СЕГОДНЯ",
|
||||
"calendar.week": "Неделя",
|
||||
"default-properties.title": "Заголовок",
|
||||
"error.no-workspace": "Возможно, срок вашей сессии истек, или вы не имеете доступа к этому рабочему пространству.",
|
||||
"error.relogin": "Снова войдите в систему",
|
||||
|
257
webapp/i18n/sk.json
Normal file
257
webapp/i18n/sk.json
Normal file
@ -0,0 +1,257 @@
|
||||
{
|
||||
"BoardComponent.add-a-group": "+ Pridaj skupinu",
|
||||
"BoardComponent.delete": "Mazať",
|
||||
"BoardComponent.hidden-columns": "Skryté stľpce",
|
||||
"BoardComponent.hide": "Skryť",
|
||||
"BoardComponent.new": "+ Nový",
|
||||
"BoardComponent.no-property": "žiadna {property}",
|
||||
"BoardComponent.no-property-title": "Položky s prázdnou {property} pôjdu tu. Tento stĺpec nemožno vymazať.",
|
||||
"BoardComponent.show": "Ukáž",
|
||||
"BoardPage.newVersion": "Nová verzia je dostupná, kliknite tu pre znovu načítanie.",
|
||||
"BoardPage.syncFailed": "Nástenka môže byť vymazaná, alebo prístup odobraný.",
|
||||
"BoardsUnfurl.Remainder": "+{remainder} viac",
|
||||
"BoardsUnfurl.Updated": "Upravené {time}",
|
||||
"Calculations.Options.average.displayName": "Priemer",
|
||||
"Calculations.Options.average.label": "Priemer",
|
||||
"Calculations.Options.count.displayName": "Počet",
|
||||
"Calculations.Options.count.label": "Počet",
|
||||
"Calculations.Options.countChecked.displayName": "Označené",
|
||||
"Calculations.Options.countChecked.label": "Spočítaj označené",
|
||||
"Calculations.Options.countUnchecked.displayName": "Neoznačené",
|
||||
"Calculations.Options.countUnchecked.label": "Spočítaj neoznačené",
|
||||
"Calculations.Options.countUniqueValue.displayName": "Unikátne",
|
||||
"Calculations.Options.countUniqueValue.label": "Spočítaj unikátne hodnoty",
|
||||
"Calculations.Options.countValue.displayName": "Hodnoty",
|
||||
"Calculations.Options.countValue.label": "Spočítaj hodnoty",
|
||||
"Calculations.Options.dateRange.displayName": "Rozsah",
|
||||
"Calculations.Options.dateRange.label": "Rozsah",
|
||||
"Calculations.Options.earliest.displayName": "Prvý",
|
||||
"Calculations.Options.earliest.label": "Prvý",
|
||||
"Calculations.Options.latest.displayName": "Posledný",
|
||||
"Calculations.Options.latest.label": "Posledný",
|
||||
"Calculations.Options.max.displayName": "Max",
|
||||
"Calculations.Options.max.label": "Max",
|
||||
"Calculations.Options.median.displayName": "Median",
|
||||
"Calculations.Options.median.label": "Median",
|
||||
"Calculations.Options.min.displayName": "Min",
|
||||
"Calculations.Options.min.label": "Min",
|
||||
"Calculations.Options.none.displayName": "Vypočítaj",
|
||||
"Calculations.Options.none.label": "Nič",
|
||||
"Calculations.Options.percentChecked.displayName": "Skontrolované",
|
||||
"Calculations.Options.percentChecked.label": "Percent Skontrolovaných",
|
||||
"Calculations.Options.percentUnchecked.displayName": "Neskontrolované",
|
||||
"Calculations.Options.percentUnchecked.label": "Percent neskontrolovaných",
|
||||
"Calculations.Options.range.displayName": "Rozsah",
|
||||
"Calculations.Options.range.label": "Rozsah",
|
||||
"Calculations.Options.sum.displayName": "Súčet",
|
||||
"Calculations.Options.sum.label": "Súčet",
|
||||
"CardDetail.Follow": "Sleduj",
|
||||
"CardDetail.Following": "Sledujúce",
|
||||
"CardDetail.add-content": "Pridaj obsah",
|
||||
"CardDetail.add-icon": "Pridaj ikonu",
|
||||
"CardDetail.add-property": "+ Pridaj vlastnosť",
|
||||
"CardDetail.addCardText": "Pridaj text karty",
|
||||
"CardDetail.moveContent": "presuň obsah karty",
|
||||
"CardDetail.new-comment-placeholder": "Pridaj komentár ...",
|
||||
"CardDetailProperty.confirm-delete-heading": "Potvrď vymazanie vlastnosti",
|
||||
"CardDetailProperty.confirm-delete-subtext": "Skutočne chcete vymazať \"{propertyName}\"? Mazaním ju odstránite zo všetkých kariet na tabuli.",
|
||||
"CardDetailProperty.confirm-property-name-change-subtext": "Skutočne chcete vymazať \"{propertyName}\" {customText}? Ovplyvní to hodnoty na {numOfCards} kartách na tabuli, a môže viesť k strate dát.",
|
||||
"CardDetailProperty.confirm-property-type-change": "Potvrď zmenu typu vlastnosti!",
|
||||
"CardDetailProperty.delete-action-button": "Odstrániť",
|
||||
"CardDetailProperty.property-change-action-button": "Zmeniť vlastnosť",
|
||||
"CardDetailProperty.property-changed": "Zmena vlastnosti úspešná!",
|
||||
"CardDetailProperty.property-deleted": "Mazanie {propertyName} úspešné!",
|
||||
"CardDetailProperty.property-name-change-subtext": "typ od \"{oldPropType}\" do \"{newPropType}\"",
|
||||
"CardDetailProperty.property-type-change-subtext": "meno po \"{newPropName}\"",
|
||||
"CardDialog.copiedLink": "Skopírované!",
|
||||
"CardDialog.copyLink": "Kopíruj odkaz",
|
||||
"CardDialog.editing-template": "Editujete template.",
|
||||
"CardDialog.nocard": "Karta neexistuje alebo je neprístupná.",
|
||||
"ColorOption.selectColor": "Vyber {color} farbu",
|
||||
"Comment.delete": "Odstrániť",
|
||||
"CommentsList.send": "Poslať",
|
||||
"ConfirmationDialog.cancel-action": "Zrušiť",
|
||||
"ConfirmationDialog.confirm-action": "Potvrdiť",
|
||||
"ConfirmationDialog.delete-action": "Odstrániť",
|
||||
"ContentBlock.Delete": "Odstrániť",
|
||||
"ContentBlock.DeleteAction": "Odstrániť",
|
||||
"ContentBlock.addElement": "pridaj {type}",
|
||||
"ContentBlock.checkbox": "checkbox",
|
||||
"ContentBlock.divider": "oddeľovač",
|
||||
"ContentBlock.editCardCheckbox": "označený-checkbox",
|
||||
"ContentBlock.editCardCheckboxText": "upraviť text karty",
|
||||
"ContentBlock.editCardText": "upraviť text karty",
|
||||
"ContentBlock.editText": "Upraviť text...",
|
||||
"ContentBlock.image": "obrázok",
|
||||
"ContentBlock.insertAbove": "vlož nad",
|
||||
"ContentBlock.moveDown": "Presuň dole",
|
||||
"ContentBlock.moveUp": "Presuň hore",
|
||||
"ContentBlock.text": "text",
|
||||
"DashboardPage.CenterPanel.ChangeChannels": "Na zmenu kanálov použite prepínač",
|
||||
"DashboardPage.CenterPanel.NoWorkspaces": "Prepáčte, nenašli sa kanály s daným výrazom",
|
||||
"DashboardPage.CenterPanel.NoWorkspacesDescription": "Skúste vyhľadať iný výraz",
|
||||
"DashboardPage.showEmpty": "Zobraziť prázdne",
|
||||
"DashboardPage.title": "Dashboard",
|
||||
"DeleteBoardDialog.confirm-cancel": "Zrušiť",
|
||||
"DeleteBoardDialog.confirm-delete": "Odstrániť",
|
||||
"DeleteBoardDialog.confirm-info": "Naozaj chcete odstrániť nástenku “{boardTitle}”? Odstránením vymažete všetky karty na tabuli.",
|
||||
"DeleteBoardDialog.confirm-tite": "Potvrďte odstránenie nástenky",
|
||||
"Dialog.closeDialog": "Zavrieť dialog",
|
||||
"EditableDayPicker.today": "Dnes",
|
||||
"EmptyCenterPanel.no-content": "Začnite pridaním alebo výberom nástenky z bočného panela.",
|
||||
"EmptyCenterPanel.plugin.choose-a-template": "Vybrať template",
|
||||
"EmptyCenterPanel.plugin.empty-board": "Začnite s prázdnou nástenkou",
|
||||
"EmptyCenterPanel.plugin.end-message": "Kanál môžete prepnúť prepínačom v bočnom paneli.",
|
||||
"EmptyCenterPanel.plugin.new-template": "Nový template",
|
||||
"EmptyCenterPanel.plugin.no-content-description": "Pridajte nástenku na bočný panel pomocou preddefinovaných šablón alebo si ju vytvorte sami.{lineBreak} Členovia \"{workspaceName}\" budú mať prístup k tu vytvoreným nástenkám.",
|
||||
"EmptyCenterPanel.plugin.no-content-or": "alebo",
|
||||
"EmptyCenterPanel.plugin.no-content-title": "Vytvorte nástenku v {workspaceName}",
|
||||
"Error.mobileweb": "Mobile web support is currently in early beta. Not all functionality may be present.",
|
||||
"Error.websocket-closed": "Websocket pripojenie zlyhalo - prerušené. Skontrolujte konfiguráciu servera ak problém pretrváva.",
|
||||
"Filter.includes": "zahŕňa",
|
||||
"Filter.is-empty": "je prázdny",
|
||||
"Filter.is-not-empty": "nie je prázdny",
|
||||
"Filter.not-includes": "nezahŕňa",
|
||||
"FilterComponent.add-filter": "+ Pridaj filter",
|
||||
"FilterComponent.delete": "Odstrániť",
|
||||
"GalleryCard.copiedLink": "Skopírované!",
|
||||
"GalleryCard.copyLink": "Skopírovať odkaz",
|
||||
"GalleryCard.delete": "Odstrániť",
|
||||
"GalleryCard.duplicate": "Duplikuj",
|
||||
"General.BoardCount": "{count, plural, one {# Nástenka} other {# Nástenky}}",
|
||||
"GroupBy.ungroup": "Zrušiť zoskupenie",
|
||||
"KanbanCard.copiedLink": "Skopírované!",
|
||||
"KanbanCard.copyLink": "Skopírovať odkaz",
|
||||
"KanbanCard.delete": "Odstrániť",
|
||||
"KanbanCard.duplicate": "Duplikuj",
|
||||
"KanbanCard.untitled": "Nepomenované",
|
||||
"Mutator.duplicate-board": "duplikuj nástenku",
|
||||
"Mutator.new-board-from-template": "nová nástenka z template-u",
|
||||
"Mutator.new-card-from-template": "nová karta z template-u",
|
||||
"Mutator.new-template-from-board": "nový template z nástenky",
|
||||
"Mutator.new-template-from-card": "nový template z karty",
|
||||
"PropertyMenu.Delete": "Odstrániť",
|
||||
"PropertyMenu.changeType": "Zmeniť vlastnosť",
|
||||
"PropertyMenu.selectType": "Vybrať vlastnosť",
|
||||
"PropertyMenu.typeTitle": "Typ",
|
||||
"PropertyType.Checkbox": "Checkbox",
|
||||
"PropertyType.CreatedBy": "Vytvoril",
|
||||
"PropertyType.CreatedTime": "Vytvorené",
|
||||
"PropertyType.Date": "Dátum",
|
||||
"PropertyType.Email": "Email",
|
||||
"PropertyType.File": "Súbor alebo médium",
|
||||
"PropertyType.MultiSelect": "Viacnásobný výber",
|
||||
"PropertyType.Number": "číslo",
|
||||
"PropertyType.Person": "Osoba",
|
||||
"PropertyType.Phone": "Telefón",
|
||||
"PropertyType.Select": "Vyber",
|
||||
"PropertyType.Text": "Text",
|
||||
"PropertyType.URL": "URL",
|
||||
"PropertyType.UpdatedBy": "Naposledy upravil",
|
||||
"PropertyType.UpdatedTime": "Posledná úprava",
|
||||
"PropertyValueElement.empty": "Prázdny",
|
||||
"RegistrationLink.confirmRegenerateToken": "Toto zruší platnosť predtým zdieľaných odkazov. Pokračovať?",
|
||||
"RegistrationLink.copiedLink": "Skopírované!",
|
||||
"RegistrationLink.copyLink": "Skopírovať odkaz",
|
||||
"RegistrationLink.description": "Zdieľajte tento odkaz pre vytvorenie účtu:",
|
||||
"RegistrationLink.regenerateToken": "Obnoviť token",
|
||||
"RegistrationLink.tokenRegenerated": "Registračný odkaz obnovený",
|
||||
"ShareBoard.confirmRegenerateToken": "Toto zruší platnosť predtým zdieľaných odkazov. Pokračovať?",
|
||||
"ShareBoard.copiedLink": "Skopírované!",
|
||||
"ShareBoard.copyLink": "Skopírovať odkaz",
|
||||
"ShareBoard.regenerateToken": "Obnoviť token",
|
||||
"ShareBoard.share": "Zverejniť a zdieľať túto nástenku s každým, kto má odkaz",
|
||||
"ShareBoard.tokenRegenrated": "Token obnovený",
|
||||
"ShareBoard.unshare": "Ktokoľvek s odkazom môže zobraziť túto nástenku a všetky karty v nej.",
|
||||
"Sidebar.about": "O Focalboard",
|
||||
"Sidebar.add-board": "+ Pridať nástenku",
|
||||
"Sidebar.add-template": "Nový template",
|
||||
"Sidebar.changePassword": "Zmeniť heslo",
|
||||
"Sidebar.delete-board": "Odstrániť nástenku",
|
||||
"Sidebar.delete-template": "Odstrániť",
|
||||
"Sidebar.duplicate-board": "Duplikuj nástenku",
|
||||
"Sidebar.edit-template": "Upraviť",
|
||||
"Sidebar.empty-board": "Prázdna nástenka",
|
||||
"Sidebar.export-archive": "Export archívu",
|
||||
"Sidebar.import-archive": "Import archívu",
|
||||
"Sidebar.invite-users": "Pozvať užívateľa",
|
||||
"Sidebar.logout": "Odhlásiť sa",
|
||||
"Sidebar.no-more-workspaces": "Žiadne miesta",
|
||||
"Sidebar.no-views-in-board": "Bez obsahu",
|
||||
"Sidebar.random-icons": "Náhodné ikony",
|
||||
"Sidebar.select-a-template": "vyber template",
|
||||
"Sidebar.set-language": "Nastaviť jazyk",
|
||||
"Sidebar.set-theme": "Nastaviť tému",
|
||||
"Sidebar.settings": "nastavenia",
|
||||
"Sidebar.template-from-board": "Nový template z nástenky",
|
||||
"Sidebar.untitled": "Bez názvu",
|
||||
"Sidebar.untitled-board": "(nástenka bez názvu)",
|
||||
"Sidebar.untitled-view": "(náhľad bez názvu)",
|
||||
"TableComponent.add-icon": "Pridať ikonu",
|
||||
"TableComponent.name": "názov",
|
||||
"TableComponent.plus-new": "+ Nový",
|
||||
"TableHeaderMenu.delete": "Odstrániť",
|
||||
"TableHeaderMenu.duplicate": "Duplikuj",
|
||||
"TableHeaderMenu.hide": "Skryť",
|
||||
"TableHeaderMenu.insert-left": "Vložiť vľavo",
|
||||
"TableHeaderMenu.insert-right": "Vložiť vpravo",
|
||||
"TableHeaderMenu.sort-ascending": "vzostupne",
|
||||
"TableHeaderMenu.sort-descending": "zostupne",
|
||||
"TableRow.open": "Otvoriť",
|
||||
"TopBar.give-feedback": "Spätná väzba",
|
||||
"ValueSelector.noOptions": "Žiadne možnosti. Pridajte prvú!",
|
||||
"ValueSelector.valueSelector": "Výber hodnoty",
|
||||
"ValueSelectorLabel.openMenu": "Otvor menu",
|
||||
"View.AddView": "Pridaj pohľad",
|
||||
"View.Board": "nástenka",
|
||||
"View.DeleteView": "Odstrániť pohľad",
|
||||
"View.DuplicateView": "Duplikuj pohľad",
|
||||
"View.Gallery": "Galéria",
|
||||
"View.NewBoardTitle": "Náhľad nástenky",
|
||||
"View.NewCalendarTitle": "Kalendár",
|
||||
"View.NewGalleryTitle": "Galéria",
|
||||
"View.NewTableTitle": "Tabuľka",
|
||||
"View.NewTemplateTitle": "template bez názvu",
|
||||
"View.Table": "Tabuľka",
|
||||
"ViewHeader.add-template": "Nový template",
|
||||
"ViewHeader.delete-template": "Odstrániť",
|
||||
"ViewHeader.display-by": "Zobraziť podľa: {property}",
|
||||
"ViewHeader.edit-template": "Upraviť",
|
||||
"ViewHeader.empty-card": "Prázdna karta",
|
||||
"ViewHeader.export-board-archive": "Export archívu nástenky",
|
||||
"ViewHeader.export-complete": "Export hotový!",
|
||||
"ViewHeader.export-csv": "Export do CSV",
|
||||
"ViewHeader.export-failed": "Export zlyhal!",
|
||||
"ViewHeader.filter": "Filter",
|
||||
"ViewHeader.group-by": "Zoskupiť podľa: {property}",
|
||||
"ViewHeader.new": "Nový",
|
||||
"ViewHeader.properties": "Vlastnosti",
|
||||
"ViewHeader.search": "Hľadať",
|
||||
"ViewHeader.search-text": "Hľadať text",
|
||||
"ViewHeader.select-a-template": "vyber template",
|
||||
"ViewHeader.set-default-template": "Nastaviť ako predvolenú",
|
||||
"ViewHeader.share-board": "Zdieľať nástenku",
|
||||
"ViewHeader.sort": "Triediť",
|
||||
"ViewHeader.untitled": "Bez názvu",
|
||||
"ViewTitle.hide-description": "Skryť popis",
|
||||
"ViewTitle.pick-icon": "Vybrať ikonu",
|
||||
"ViewTitle.random-icon": "Náhodne",
|
||||
"ViewTitle.remove-icon": "Odstrániť ikonu",
|
||||
"ViewTitle.show-description": "zobraziť popis",
|
||||
"ViewTitle.untitled-board": "nástenka bez názvu",
|
||||
"WelcomePage.Description": "Nástenky sú nástroj na riadenie projektov, ktorý pomáha definovať, organizovať, sledovať a riadiť prácu medzi tímami pomocou zobrazenia kanban",
|
||||
"WelcomePage.Explore.Button": "Preskúmať",
|
||||
"WelcomePage.Heading": "Vitajte",
|
||||
"Workspace.editing-board-template": "Upravujete template nástenky.",
|
||||
"calendar.month": "Mesiac",
|
||||
"calendar.today": "Dnes",
|
||||
"calendar.week": "Týždeň",
|
||||
"default-properties.title": "Názov",
|
||||
"error.no-workspace": "Platnosť vašej relácie vypršala alebo nemáte prístup.",
|
||||
"error.relogin": "Prihlásiť sa znova",
|
||||
"login.log-in-button": "Prihlásiť",
|
||||
"login.log-in-title": "Prihlásiť",
|
||||
"login.register-button": "alebo vytvoriť účet, ak žiadny nemáte",
|
||||
"register.login-button": "alebo sa prihláste ak už máte účet",
|
||||
"register.signup-title": "Zaregistrujte si účet"
|
||||
}
|
@ -45,8 +45,8 @@
|
||||
"Calculations.Options.range.label": "Aralık",
|
||||
"Calculations.Options.sum.displayName": "Toplam",
|
||||
"Calculations.Options.sum.label": "Toplam",
|
||||
"CardDetail.Follow": "İzle",
|
||||
"CardDetail.Following": "İzleniyor",
|
||||
"CardDetail.Follow": "Takip et",
|
||||
"CardDetail.Following": "Takip ediliyor",
|
||||
"CardDetail.add-content": "İçerik ekle",
|
||||
"CardDetail.add-icon": "Simge ekle",
|
||||
"CardDetail.add-property": "+ Alan ekle",
|
||||
|
@ -7,6 +7,14 @@
|
||||
"BoardComponent.no-property": "无 {property}",
|
||||
"BoardComponent.no-property-title": "{property} 属性为空的项目将转到此处。该列无法删除。",
|
||||
"BoardComponent.show": "显示",
|
||||
"BoardPage.newVersion": "Boards 的新版本已可用,点击这里重新加载。",
|
||||
"BoardPage.syncFailed": "版面或许已被删除或访问授权已被撤销。",
|
||||
"BoardsUnfurl.Remainder": "+{remainder} 更多",
|
||||
"BoardsUnfurl.Updated": "于 {time} 更新",
|
||||
"Calculations.Options.average.displayName": "平均",
|
||||
"Calculations.Options.average.label": "平均",
|
||||
"Calculations.Options.count.displayName": "计数",
|
||||
"Calculations.Options.count.label": "计数",
|
||||
"CardDetail.add-content": "新增内容",
|
||||
"CardDetail.add-icon": "新增图标",
|
||||
"CardDetail.add-property": "+ 新增属性",
|
||||
@ -35,7 +43,7 @@
|
||||
"ContentBlock.moveDown": "下移",
|
||||
"ContentBlock.moveUp": "上移",
|
||||
"ContentBlock.text": "文字",
|
||||
"DashboardPage.title": "欢迎来到 Focalboard!",
|
||||
"DashboardPage.title": "仪表板",
|
||||
"Dialog.closeDialog": "关闭对话框",
|
||||
"EditableDayPicker.today": "今天",
|
||||
"EmptyCenterPanel.no-content": "从侧栏中添加或选择一个版面,即可开始使用。",
|
||||
@ -85,7 +93,7 @@
|
||||
"ShareBoard.copiedLink": "已复制!",
|
||||
"ShareBoard.copyLink": "复制链接",
|
||||
"ShareBoard.regenerateToken": "重新产生令牌",
|
||||
"ShareBoard.share": "发布到网络上并将此版面共享给所有人",
|
||||
"ShareBoard.share": "发布并将此版面与所有持有链接者共享",
|
||||
"ShareBoard.tokenRegenrated": "已重新产生令牌",
|
||||
"ShareBoard.unshare": "拥有链接的任何人都可查看此版面和卡片。",
|
||||
"Sidebar.about": "关于 Focalboard",
|
||||
@ -156,6 +164,9 @@
|
||||
"ViewTitle.show-description": "显示描述",
|
||||
"ViewTitle.untitled-board": "无标题版面",
|
||||
"Workspace.editing-board-template": "您正在编辑版面模板。",
|
||||
"calendar.month": "月",
|
||||
"calendar.today": "今天",
|
||||
"calendar.week": "周",
|
||||
"default-properties.title": "标题",
|
||||
"error.no-workspace": "您的会话可能已过期,或者您可能没有权限访问此工作空间。",
|
||||
"error.relogin": "重新登录",
|
||||
|
1625
webapp/package-lock.json
generated
1625
webapp/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -43,7 +43,7 @@
|
||||
"imagemin-svgo": "^8.0.0",
|
||||
"imagemin-webp": "^6.0.0",
|
||||
"lodash": "^4.17.21",
|
||||
"marked": ">=2.0.1",
|
||||
"marked": "^4.0.12",
|
||||
"moment": "^2.29.1",
|
||||
"nanoevents": "^5.1.13",
|
||||
"react": "^17.0.2",
|
||||
@ -91,7 +91,7 @@
|
||||
"@types/draft-js": "^0.11.6",
|
||||
"@types/emoji-mart": "^3.0.4",
|
||||
"@types/jest": "^26.0.21",
|
||||
"@types/marked": "^2.0.0",
|
||||
"@types/marked": "^4.0.1",
|
||||
"@types/nanoevents": "^1.0.0",
|
||||
"@types/react": "^17.0.3",
|
||||
"@types/react-dom": "^17.0.3",
|
||||
|
@ -56,7 +56,7 @@ contentRegistry.registerContentType({
|
||||
block.fields.fileId = fileId || ''
|
||||
resolve(block)
|
||||
},
|
||||
'.jpg,.jpeg,.png')
|
||||
'.jpg,.jpeg,.png,.gif')
|
||||
},
|
||||
)
|
||||
|
||||
|
@ -26,7 +26,7 @@
|
||||
&:not(.subitem) {
|
||||
&::before {
|
||||
content: '';
|
||||
background: var(--sidebar-text-active-border);
|
||||
background: rgb(var(--sidebar-text-active-border-rgb));
|
||||
width: 2px;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
|
@ -8,6 +8,7 @@ export const TelemetryCategory = 'boards'
|
||||
|
||||
export const TelemetryActions = {
|
||||
ClickChannelHeader: 'clickChannelHeader',
|
||||
ClickChannelIntro: 'channelIntro_boardLink',
|
||||
ViewBoard: 'viewBoard',
|
||||
CreateBoard: 'createBoard',
|
||||
DuplicateBoard: 'duplicateBoard',
|
||||
|
@ -47,7 +47,7 @@ export const defaultTheme = {
|
||||
buttonFg: '255, 255, 255',
|
||||
sidebarBg: '30, 50, 92',
|
||||
sidebarFg: '255, 255, 255',
|
||||
sidebarTextActiveBorder: '#5d89ea',
|
||||
sidebarTextActiveBorder: '93, 137, 243',
|
||||
sidebarWhiteLogo: 'true',
|
||||
|
||||
link: '#0000ee',
|
||||
@ -76,7 +76,7 @@ export const darkTheme = {
|
||||
buttonFg: '255, 255, 255',
|
||||
sidebarBg: '75, 73, 67',
|
||||
sidebarFg: '255, 255, 255',
|
||||
sidebarTextActiveBorder: '#66b9a7',
|
||||
sidebarTextActiveBorder: '102, 185, 167',
|
||||
sidebarWhiteLogo: 'true',
|
||||
|
||||
link: '#0090ff',
|
||||
@ -105,7 +105,7 @@ export const lightTheme = {
|
||||
buttonFg: '255, 255, 255',
|
||||
sidebarBg: '247, 246, 243',
|
||||
sidebarFg: '55, 53, 47',
|
||||
sidebarTextActiveBorder: '#579eff',
|
||||
sidebarTextActiveBorder: '87, 158, 255',
|
||||
sidebarWhiteLogo: 'false',
|
||||
}
|
||||
|
||||
@ -132,7 +132,7 @@ export function setTheme(theme: Theme | null): Theme {
|
||||
document.documentElement.style.setProperty('--sidebar-bg-rgb', consolidatedTheme.sidebarBg)
|
||||
document.documentElement.style.setProperty('--sidebar-text-rgb', consolidatedTheme.sidebarFg)
|
||||
document.documentElement.style.setProperty('--link-color-rgb', consolidatedTheme.link)
|
||||
document.documentElement.style.setProperty('--sidebar-text-active-border', consolidatedTheme.sidebarTextActiveBorder)
|
||||
document.documentElement.style.setProperty('--sidebar-text-active-border-rgb', consolidatedTheme.sidebarTextActiveBorder)
|
||||
}
|
||||
|
||||
document.documentElement.style.setProperty('--sidebar-white-logo', consolidatedTheme.sidebarWhiteLogo)
|
||||
@ -183,7 +183,7 @@ export function setMattermostTheme(theme: any): Theme {
|
||||
document.documentElement.style.setProperty('--sidebar-bg-rgb', color(theme.sidebarBg).rgb().array().join(', '))
|
||||
document.documentElement.style.setProperty('--sidebar-text-rgb', color(theme.sidebarText).rgb().array().join(', '))
|
||||
document.documentElement.style.setProperty('--link-color-rgb', theme.linkColor)
|
||||
document.documentElement.style.setProperty('--sidebar-text-active-border', color(theme.sidebarTextActiveBorder).rgb().array().join(', '))
|
||||
document.documentElement.style.setProperty('--sidebar-text-active-border-rgb', color(theme.sidebarTextActiveBorder).rgb().array().join(', '))
|
||||
|
||||
return setTheme({
|
||||
...defaultTheme,
|
||||
|
@ -1,6 +1,6 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
import marked from 'marked'
|
||||
import {marked} from 'marked'
|
||||
import {IntlShape} from 'react-intl'
|
||||
import moment from 'moment'
|
||||
|
||||
@ -13,7 +13,7 @@ import {IAppWindow} from './types'
|
||||
|
||||
declare let window: IAppWindow
|
||||
|
||||
const imageURLForUser = (window as any).Components?.imageURLForUser
|
||||
const imageURLForUser = typeof window === 'undefined' ? undefined : (window as any).Components?.imageURLForUser
|
||||
const IconClass = 'octo-icon'
|
||||
const OpenButtonClass = 'open-button'
|
||||
const SpacerClass = 'octo-spacer'
|
||||
|
@ -5,9 +5,9 @@ section: "download"
|
||||
weight: 2
|
||||
---
|
||||
|
||||
Focalboard is installed with Mattermost v6.0, where it's called Boards. To access and use Boards, [install or upgrade to Mattermost v6.0 or later](https://mattermost.com/get-started/?utm_source=focalboard&utm_campaign=focalboard). Then, select the Product menu in the top left corner of Mattermost and choose **Boards**.
|
||||
Focalboard is installed with Mattermost v6 and later, where it's called Boards. You can [install Mattermost as a self-hosted server](https://mattermost.com/deploy/?utm_source=focalboard&utm_campaign=focalboard) or [sign up for Mattermost Cloud](https://customers.mattermost.com/cloud/signup?utm_source=focalboard&utm_campaign=focalboard).
|
||||
|
||||
No additional server or web-proxy configuration is required.
|
||||
## Mattermost Boards usage notes:
|
||||
|
||||
### Enable shared boards
|
||||
|
||||
|
@ -7,4 +7,7 @@ weight: 1
|
||||
|
||||
If you are new to Focalboard, [Personal Desktop](desktop) is the fastest way to try it out.
|
||||
|
||||
You can also set up [Personal Server](ubuntu) on Ubuntu to use it with your team, and import boards from Personal Desktop.
|
||||
To use it with your team, use [Mattermost Boards](../mattermost).
|
||||
You can import boards from Personal Desktop to Mattermost Boards.
|
||||
|
||||
You can also set up the standalone Development or Personal Server on [Ubuntu](ubuntu) or with [Docker](docker).
|
||||
|
@ -11,13 +11,19 @@ Personal Desktop is a fully contained, standalone app meant for a single user, t
|
||||
|
||||
Download Focalboard from the [Mac App Store](https://apps.apple.com/app/apple-store/id1556908618?pt=2114704&ct=website&mt=8).
|
||||
|
||||
<a href="https://apps.apple.com/app/apple-store/id1556908618?pt=2114704&ct=website&mt=8"><img src="/img/mac-app-store.svg" style="max-height: 40px;" /></a>
|
||||
|
||||
#### Windows
|
||||
|
||||
Download Focalboard from the [Microsoft App Store](https://www.microsoft.com/store/apps/9NLN2T0SX9VF?cid=website).
|
||||
|
||||
<a href="https://www.microsoft.com/store/apps/9NLN2T0SX9VF?cid=website"><img src="/img/ms-app-store.svg" style="max-height: 40px;" /></a>
|
||||
|
||||
Or download `focalboard-win.zip` from the latest [release on GitHub](https://github.com/mattermost/focalboard/releases).
|
||||
|
||||
#### Linux Desktop
|
||||
|
||||
To install Personal Desktop for Linux:
|
||||
To install Personal Desktop for Linux
|
||||
1. Download `focalboard-linux.tar.gz` from the latest [release on GitHub](https://github.com/mattermost/focalboard/releases)
|
||||
2. Unpack the .tar.gz archive
|
||||
4. Open `focalboard-app` from within the `focalboard-app` folder
|
||||
|
@ -14,6 +14,7 @@ Follow these steps it up on an Ubuntu server. To upgrade an existing installatio
|
||||
Popular hosted options include:
|
||||
* [Digital Ocean](https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04)
|
||||
* [Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html)
|
||||
* [Linode](https://www.linode.com/docs/products/compute/)
|
||||
|
||||
## Install Focalboard
|
||||
|
||||
@ -37,6 +38,7 @@ sudo apt install nginx
|
||||
You may need to adjust your firewall settings depending on the host, e.g.
|
||||
* [Digital Ocean](https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-18-04)
|
||||
* [EC2](https://docs.nginx.com/nginx/deployment-guides/amazon-web-services/ec2-instances-for-nginx/)
|
||||
* [Linode](https://www.linode.com/docs/guides/how-to-install-nginx-ubuntu-18-04/)
|
||||
|
||||
### Configure NGINX
|
||||
|
||||
|
@ -2,26 +2,26 @@
|
||||
<div class="container-fluid">
|
||||
<div class="homepage-intro__text text-left mt-4 mb-4">
|
||||
<h2>
|
||||
Focalboard is an open source, self-hosted alternative to Trello, Notion, and Asana.
|
||||
Focalboard is an open source, multilingual, self-hosted alternative to Trello, Notion, and Asana.
|
||||
</h2>
|
||||
|
||||
<p>
|
||||
It's a project management tool that helps define, organize, track and manage work across teams, using a familiar kanban board view. Focalboard comes in two main editions:
|
||||
It's a project management tool that helps define, organize, track and manage work across teams, using familiar views like kanban boards, cards, calendars, and tables. Super customizable to fit your workflow.
|
||||
</p>
|
||||
|
||||
<div class="text-left">
|
||||
<ul >
|
||||
<li><b><a href="download/personal-edition/desktop/">Focalboard Personal Desktop</a></b>: A stand-alone single-user desktop app for your todos and personal projects</li>
|
||||
<li><b><a href="download/mattermost/">Mattermost Boards</a></b>: A cloud or self-hosted server for your team to plan and collaborate</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Focalboard can also be installed as a standalone <a href="download/personal-edition/ubuntu/">personal server</a> for development.
|
||||
<b>For Individuals</b>: Get <a href="download/personal-edition/desktop/">Personal Desktop</a>, a stand-alone single-user app for <a href="https://apps.apple.com/app/apple-store/id1556908618?pt=2114704&ct=website&mt=8">Mac</a>, <a href="https://www.microsoft.com/store/apps/9NLN2T0SX9VF?cid=website">Windows</a>, and <a href="http://localhost:1313/download/personal-edition/desktop/#linux-desktop">Linux</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<b>For Teams</b>: Check out <a href="https://mattermost.com/boards/">Mattermost Boards</a> with integrated collaboration, for <a href="https://customers.mattermost.com/cloud/signup?utm_source=focalboard&utm_campaign=focalboard">cloud</a> or <a href="https://mattermost.com/deploy/?utm_source=focalboard&utm_campaign=focalboard">self-hosted</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<b>For Developers</b>: Fork the source code on <a href="https://github.com/mattermost/focalboard">GitHub</a> and install <a href="download/personal-edition/ubuntu/">personal server</a> for development.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
<p class="text-center">
|
||||
<a href="download/personal-edition">
|
||||
<img src="https://user-images.githubusercontent.com/46905241/121941290-ee355280-cd03-11eb-9b9f-f6f524e4103e.gif" style="width: 100%; max-width: 1200px" />
|
||||
@ -30,11 +30,11 @@
|
||||
|
||||
<div class="homepage-intro__text">
|
||||
<p>
|
||||
We're currently in early-access beta, and are looking for feedback. So please <a href="download/personal-edition/">download it today</a> and <a href="https://docs.google.com/forms/d/e/1FAIpQLSdTq7M69Pdlz71CwucaSEG0FCK1M_WRvIbZbPr2imfT2QvUCQ/viewform?usp=sf_link" target="_blank" rel="noopener">let us know what you think</a>.
|
||||
We welcome your feedback! So please <a href="download/personal-edition/">download it today</a> and <a href="https://docs.google.com/forms/d/e/1FAIpQLSdTq7M69Pdlz71CwucaSEG0FCK1M_WRvIbZbPr2imfT2QvUCQ/viewform?usp=sf_link" target="_blank" rel="noopener">let us know what you think</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Focalboard is open source! <a href="https://github.com/mattermost/focalboard" target='_blank'>Check out the source code here</a>, and contribute to the future of this project.
|
||||
Focalboard is open source! <a href="https://github.com/mattermost/focalboard" target='_blank'>Check out the source code here</a>, and <a href="/contribute/getting-started/">contribute</a> to the future of this project.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
@ -3440,7 +3440,7 @@ table>tbody>tr:nth-of-type(odd) {
|
||||
transform: skew(0deg, -5deg);
|
||||
background-image: linear-gradient(-135deg, #1ba4f7 0%, #4641ff 100%);
|
||||
height: 100%;
|
||||
min-height: 1500px;
|
||||
min-height: 1700px;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
top: -15%;
|
||||
|
Loading…
Reference in New Issue
Block a user