mirror of
https://github.com/flarum/core.git
synced 2025-08-16 05:14:20 +02:00
Compare commits
4 Commits
v1.6.2
...
dk/likes/l
Author | SHA1 | Date | |
---|---|---|---|
|
e478ea08d3 | ||
|
24864e82dc | ||
|
856bb8a0da | ||
|
f034fdd9f2 |
1
.github/CODEOWNERS
vendored
1
.github/CODEOWNERS
vendored
@@ -1 +0,0 @@
|
|||||||
* @flarum/core
|
|
39
.github/ISSUE_TEMPLATE/bug-report.md
vendored
Normal file
39
.github/ISSUE_TEMPLATE/bug-report.md
vendored
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
---
|
||||||
|
name: "🐛 Bug Report"
|
||||||
|
about: "If something isn't working as expected"
|
||||||
|
|
||||||
|
---
|
||||||
|
## Bug Report
|
||||||
|
|
||||||
|
**Current Behavior**
|
||||||
|
A clear and concise description of the behavior.
|
||||||
|
|
||||||
|
**Steps to Reproduce**
|
||||||
|
1. Go to '...'
|
||||||
|
2. Click on '....'
|
||||||
|
3. Scroll down to '....'
|
||||||
|
4. See error
|
||||||
|
|
||||||
|
**Expected Behavior**
|
||||||
|
A clear and concise description of what you expected to happen.
|
||||||
|
|
||||||
|
**Screenshots**
|
||||||
|
If applicable, add screenshots to help explain your problem.
|
||||||
|
|
||||||
|
**Environment**
|
||||||
|
- Flarum version: x.y.z
|
||||||
|
- Website URL: http://example.com
|
||||||
|
- Webserver: [e.g. apache, nginx]
|
||||||
|
- Hosting environment: [e.g. shared, vps]
|
||||||
|
- PHP version: x.y.z
|
||||||
|
- Browser: [e.g. chrome 67, safari 11]
|
||||||
|
|
||||||
|
```
|
||||||
|
Output of "php flarum info", run this in terminal in your Flarum directory.
|
||||||
|
```
|
||||||
|
|
||||||
|
**Possible Solution**
|
||||||
|
<!--- Only if you have suggestions or a fix for the bug -->
|
||||||
|
|
||||||
|
**Additional Context**
|
||||||
|
Add any other context about the problem here.
|
78
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
78
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
@@ -1,78 +0,0 @@
|
|||||||
name: "🐛 Bug Report"
|
|
||||||
description: If something isn't working as expected
|
|
||||||
labels: ["type/bug"]
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Thanks for taking the time to fill out this bug report!
|
|
||||||
- type: textarea
|
|
||||||
id: current_behavior
|
|
||||||
attributes:
|
|
||||||
label: Current Behavior
|
|
||||||
description: A clear and concise description of the behavior.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: steps_to_reproduce
|
|
||||||
attributes:
|
|
||||||
label: Steps to Reproduce
|
|
||||||
description: The exact steps to reproduce the bug.
|
|
||||||
placeholder: |
|
|
||||||
1. Go to '...'
|
|
||||||
2. Click on '....'
|
|
||||||
3. Scroll down to '....'
|
|
||||||
4. See error message '....'
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: expected_behavior
|
|
||||||
attributes:
|
|
||||||
label: Expected Behavior
|
|
||||||
description: A clear and concise description of what you expected to happen.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: screenshots
|
|
||||||
attributes:
|
|
||||||
label: Screenshots
|
|
||||||
description: If applicable, add screenshots to help explain your problem.
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: textarea
|
|
||||||
id: enironment
|
|
||||||
attributes:
|
|
||||||
label: Environment
|
|
||||||
value: |
|
|
||||||
- Flarum version: x.y.z
|
|
||||||
- Website URL: http://example.com
|
|
||||||
- Webserver: [e.g. apache, nginx]
|
|
||||||
- Hosting environment: [e.g. shared, vps]
|
|
||||||
- PHP version: x.y.z
|
|
||||||
- Browser: [e.g. chrome 67, safari 11]
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: php_flarum_info
|
|
||||||
attributes:
|
|
||||||
label: "Output of `php flarum info`"
|
|
||||||
value: |
|
|
||||||
```
|
|
||||||
Output of "php flarum info", run this in terminal in your Flarum directory.
|
|
||||||
```
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: textarea
|
|
||||||
id: possible_solution
|
|
||||||
attributes:
|
|
||||||
label: Possible Solution
|
|
||||||
description: Only if you have suggestions or a fix for the bug.
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: textarea
|
|
||||||
id: additional_context
|
|
||||||
attributes:
|
|
||||||
label: Additional Context
|
|
||||||
description: Add any other context about the problem here.
|
|
||||||
validations:
|
|
||||||
required: false
|
|
17
.github/ISSUE_TEMPLATE/config.yml
vendored
17
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,17 +0,0 @@
|
|||||||
blank_issues_enabled: false
|
|
||||||
contact_links:
|
|
||||||
- name: "🚀 Feature Request"
|
|
||||||
url: https://discuss.flarum.org/t/proposals
|
|
||||||
about: |
|
|
||||||
Thanks for taking the time to fill out this feature request!
|
|
||||||
We primarily use GitHub as a bug tracker and issue tracker for items we are sure to tackle in the near future.
|
|
||||||
For feature requests, ideas and feedback please post in the Flarum Community.
|
|
||||||
Feature requests are added to GitHub only when they have been accepted by the development team and implementation details have been laid out.
|
|
||||||
- name: "🙋 Support Question"
|
|
||||||
url: https://discuss.flarum.org/t/support
|
|
||||||
about: |
|
|
||||||
We primarily use GitHub as a bug tracker and issue tracker for items we are sure to tackle in the near future; for usage and support questions, please check out these resources below. Thanks!
|
|
||||||
|
|
||||||
* Flarum Community: https://discuss.flarum.org/
|
|
||||||
* Discord Chat: https://flarum.org/discord/
|
|
||||||
* Twitter: https://twitter.com/Flarum
|
|
7
.github/ISSUE_TEMPLATE/feature-request.md
vendored
Normal file
7
.github/ISSUE_TEMPLATE/feature-request.md
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
name: "🚀 Feature Request"
|
||||||
|
about: "If you have a suggestion please head over to our forum!"
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
We primarily use GitHub as a bug tracker and issue tracker for items we are sure to tackle in the near future. For feature requests, ideas and feedback please post in the Flarum Community: https://discuss.flarum.org/t/proposals. Feature requests are added to GitHub only when they have been accepted by the development team and implementation details have been laid out.
|
11
.github/ISSUE_TEMPLATE/support-question.md
vendored
Normal file
11
.github/ISSUE_TEMPLATE/support-question.md
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
name: "🙋 Support Question"
|
||||||
|
about: "If you have a question, please check out our forum or Discord!"
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
We primarily use GitHub as a bug tracker and issue tracker for items we are sure to tackle in the near future; for usage and support questions, please check out these resources below. Thanks!
|
||||||
|
|
||||||
|
* Flarum Community: https://discuss.flarum.org/
|
||||||
|
* Discord Chat: https://flarum.org/discord/
|
||||||
|
* Twitter: https://twitter.com/Flarum
|
91
.github/workflows/REUSABLE_backend.yml
vendored
91
.github/workflows/REUSABLE_backend.yml
vendored
@@ -9,12 +9,6 @@ on:
|
|||||||
default: true
|
default: true
|
||||||
required: false
|
required: false
|
||||||
|
|
||||||
enable_phpstan:
|
|
||||||
description: "Enable PHPStan Static Analysis?"
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
required: false
|
|
||||||
|
|
||||||
backend_directory:
|
backend_directory:
|
||||||
description: The directory of the project where backend code is located. This should contain a `composer.json` file, and is generally the root directory of the repo.
|
description: The directory of the project where backend code is located. This should contain a `composer.json` file, and is generally the root directory of the repo.
|
||||||
type: string
|
type: string
|
||||||
@@ -25,19 +19,12 @@ on:
|
|||||||
description: Versions of PHP to test with. Should be array of strings encoded as JSON array
|
description: Versions of PHP to test with. Should be array of strings encoded as JSON array
|
||||||
type: string
|
type: string
|
||||||
required: false
|
required: false
|
||||||
default: '["7.3", "7.4", "8.0", "8.1"]'
|
default: '["7.4", "8.0", "8.1"]'
|
||||||
|
|
||||||
php_extensions:
|
|
||||||
description: PHP extensions to install.
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
default: 'curl, dom, gd, json, mbstring, openssl, pdo_mysql, tokenizer, zip'
|
|
||||||
|
|
||||||
db_versions:
|
db_versions:
|
||||||
description: Versions of databases to test with. Should be array of strings encoded as JSON array
|
description: Versions of databases to test with. Should be array of strings encoded as JSON array
|
||||||
type: string
|
type: string
|
||||||
required: false
|
required: false
|
||||||
default: '["mysql:5.7", "mysql:8.0.30", "mariadb"]'
|
default: '["mysql:5.7", "mariadb"]'
|
||||||
|
|
||||||
php_ini_values:
|
php_ini_values:
|
||||||
description: PHP ini values
|
description: PHP ini values
|
||||||
@@ -57,41 +44,23 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
php: ${{ fromJSON(inputs.php_versions) }}
|
php: ${{ fromJSON(inputs.php_versions) }}
|
||||||
service: ${{ fromJSON(inputs.db_versions) }}
|
service: ${{ fromJSON(inputs.db_versions) }}
|
||||||
prefix: ['']
|
prefix: ['', flarum_]
|
||||||
|
|
||||||
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategymatrixinclude
|
|
||||||
include:
|
include:
|
||||||
# Expands the matrix by naming DBs.
|
|
||||||
- service: 'mysql:5.7'
|
- service: 'mysql:5.7'
|
||||||
db: MySQL 5.7
|
db: MySQL
|
||||||
- service: 'mysql:8.0.30'
|
|
||||||
db: MySQL 8.0
|
|
||||||
- service: mariadb
|
- service: mariadb
|
||||||
db: MariaDB
|
db: MariaDB
|
||||||
|
- prefix: flarum_
|
||||||
# Include Database prefix tests with only one PHP version.
|
|
||||||
- php: ${{ fromJSON(inputs.php_versions)[0] }}
|
|
||||||
service: 'mysql:5.7'
|
|
||||||
db: MySQL 5.7
|
|
||||||
prefix: flarum_
|
|
||||||
prefixStr: (prefix)
|
|
||||||
- php: ${{ fromJSON(inputs.php_versions)[0] }}
|
|
||||||
service: 'mysql:8.0.30'
|
|
||||||
db: MySQL 8.0
|
|
||||||
prefix: flarum_
|
|
||||||
prefixStr: (prefix)
|
|
||||||
- php: ${{ fromJSON(inputs.php_versions)[0] }}
|
|
||||||
service: mariadb
|
|
||||||
db: MariaDB
|
|
||||||
prefix: flarum_
|
|
||||||
prefixStr: (prefix)
|
prefixStr: (prefix)
|
||||||
|
|
||||||
# To reduce number of actions, we exclude some PHP versions from running with some DB versions.
|
|
||||||
exclude:
|
exclude:
|
||||||
- php: ${{ fromJSON(inputs.php_versions)[1] }}
|
- php: 8.0
|
||||||
service: 'mysql:8.0.30'
|
service: 'mysql:5.7'
|
||||||
- php: ${{ fromJSON(inputs.php_versions)[2] }}
|
prefix: flarum_
|
||||||
service: 'mysql:8.0.30'
|
- php: 8.0
|
||||||
|
service: mariadb
|
||||||
|
prefix: flarum_
|
||||||
|
|
||||||
services:
|
services:
|
||||||
mysql:
|
mysql:
|
||||||
@@ -101,9 +70,7 @@ jobs:
|
|||||||
|
|
||||||
name: 'PHP ${{ matrix.php }} / ${{ matrix.db }} ${{ matrix.prefixStr }}'
|
name: 'PHP ${{ matrix.php }} / ${{ matrix.db }} ${{ matrix.prefixStr }}'
|
||||||
|
|
||||||
if: >-
|
if: inputs.enable_backend_testing
|
||||||
inputs.enable_backend_testing &&
|
|
||||||
((github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) || github.event_name != 'pull_request')
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@master
|
- uses: actions/checkout@master
|
||||||
@@ -113,7 +80,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php }}
|
php-version: ${{ matrix.php }}
|
||||||
coverage: xdebug
|
coverage: xdebug
|
||||||
extensions: ${{ inputs.php_extensions }}
|
extensions: curl, dom, gd, json, mbstring, openssl, pdo_mysql, tokenizer, zip
|
||||||
tools: phpunit, composer:v2
|
tools: phpunit, composer:v2
|
||||||
ini-values: ${{ inputs.php_ini_values }}
|
ini-values: ${{ inputs.php_ini_values }}
|
||||||
|
|
||||||
@@ -143,35 +110,3 @@ jobs:
|
|||||||
working-directory: ${{ inputs.backend_directory }}
|
working-directory: ${{ inputs.backend_directory }}
|
||||||
env:
|
env:
|
||||||
COMPOSER_PROCESS_TIMEOUT: 600
|
COMPOSER_PROCESS_TIMEOUT: 600
|
||||||
|
|
||||||
phpstan:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
php: ${{ fromJSON(inputs.php_versions) }}
|
|
||||||
|
|
||||||
name: 'PHPStan PHP ${{ matrix.php }}'
|
|
||||||
|
|
||||||
if: >-
|
|
||||||
inputs.enable_phpstan &&
|
|
||||||
((github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) || github.event_name != 'pull_request')
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@master
|
|
||||||
|
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
|
||||||
php-version: ${{ matrix.php }}
|
|
||||||
coverage: xdebug
|
|
||||||
extensions: ${{ inputs.php_extensions }}
|
|
||||||
tools: phpunit, composer:v2
|
|
||||||
ini-values: ${{ inputs.php_ini_values }}
|
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
|
||||||
run: composer install
|
|
||||||
working-directory: ${{ inputs.backend_directory }}
|
|
||||||
|
|
||||||
- name: Run PHPStan
|
|
||||||
run: composer analyse:phpstan
|
|
||||||
|
165
.github/workflows/REUSABLE_frontend.yml
vendored
165
.github/workflows/REUSABLE_frontend.yml
vendored
@@ -3,32 +3,6 @@ name: Flarum Frontend Jobs
|
|||||||
on:
|
on:
|
||||||
workflow_call:
|
workflow_call:
|
||||||
inputs:
|
inputs:
|
||||||
build_script:
|
|
||||||
description: "Script to run for production build. Empty value to disable."
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
default: build
|
|
||||||
build_typings_script:
|
|
||||||
description: "Script to run for typings build. Empty value to disable."
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
default: build-typings
|
|
||||||
format_script:
|
|
||||||
description: "Script to run for code formatting. Empty value to disable."
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
default: format-check
|
|
||||||
check_typings_script:
|
|
||||||
description: "Script to run for tyiping check. Empty value to disable."
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
default: check-typings
|
|
||||||
type_coverage_script:
|
|
||||||
description: "Script to run for type coverage. Empty value to disable."
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
default: check-typings-coverage
|
|
||||||
|
|
||||||
enable_bundlewatch:
|
enable_bundlewatch:
|
||||||
description: "Enable Bundlewatch?"
|
description: "Enable Bundlewatch?"
|
||||||
type: boolean
|
type: boolean
|
||||||
@@ -87,12 +61,66 @@ env:
|
|||||||
cache_dependency_path: ${{ inputs.cache_dependency_path || format(inputs.js_package_manager == 'yarn' && '{0}/yarn.lock' || '{0}/package-lock.json', inputs.frontend_directory) }}
|
cache_dependency_path: ${{ inputs.cache_dependency_path || format(inputs.js_package_manager == 'yarn' && '{0}/yarn.lock' || '{0}/package-lock.json', inputs.frontend_directory) }}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
bundlewatch:
|
||||||
name: Checks & Build
|
name: Bundlewatch
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
if: inputs.enable_bundlewatch
|
||||||
|
|
||||||
if: >-
|
steps:
|
||||||
((github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) || github.event_name != 'pull_request')
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Set up Node
|
||||||
|
uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: ${{ inputs.node_version }}
|
||||||
|
cache: ${{ inputs.js_package_manager }}
|
||||||
|
cache-dependency-path: ${{ env.cache_dependency_path }}
|
||||||
|
|
||||||
|
- name: Build production assets
|
||||||
|
uses: flarum/action-build@2
|
||||||
|
with:
|
||||||
|
github_token: ${{ secrets.github_token }}
|
||||||
|
build_script: build
|
||||||
|
package_manager: ${{ inputs.js_package_manager }}
|
||||||
|
js_path: ${{ inputs.frontend_directory }}
|
||||||
|
do_not_commit: true
|
||||||
|
|
||||||
|
- name: Check bundle size change
|
||||||
|
run: node_modules/.bin/bundlewatch --config .bundlewatch.config.json
|
||||||
|
working-directory: ${{ inputs.frontend_directory }}
|
||||||
|
env:
|
||||||
|
BUNDLEWATCH_GITHUB_TOKEN: ${{ secrets.bundlewatch_github_token }}
|
||||||
|
CI_COMMIT_SHA: ${{ github.event.pull_request.head.sha }}
|
||||||
|
|
||||||
|
prettier:
|
||||||
|
name: Prettier
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: inputs.enable_prettier
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Set up Node
|
||||||
|
uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: ${{ inputs.node_version }}
|
||||||
|
cache: ${{ inputs.js_package_manager }}
|
||||||
|
cache-dependency-path: ${{ env.cache_dependency_path }}
|
||||||
|
|
||||||
|
- name: Install JS dependencies
|
||||||
|
run: ${{ env.ci_script }}
|
||||||
|
working-directory: ${{ inputs.frontend_directory }}
|
||||||
|
|
||||||
|
- name: Check JS formatting
|
||||||
|
run: ${{ inputs.js_package_manager }} run format-check
|
||||||
|
working-directory: ${{ inputs.frontend_directory }}
|
||||||
|
|
||||||
|
typecheck:
|
||||||
|
name: Typecheck
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: inputs.enable_typescript
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Check out code
|
- name: Check out code
|
||||||
@@ -121,23 +149,72 @@ jobs:
|
|||||||
run: ${{ env.ci_script }}
|
run: ${{ env.ci_script }}
|
||||||
working-directory: ${{ inputs.frontend_directory }}
|
working-directory: ${{ inputs.frontend_directory }}
|
||||||
|
|
||||||
- name: JS Checks & Production Build
|
- name: Typecheck
|
||||||
uses: flarum/action-build@3
|
run: ${{ inputs.js_package_manager }} run check-typings
|
||||||
|
working-directory: ${{ inputs.frontend_directory }}
|
||||||
|
|
||||||
|
type-coverage:
|
||||||
|
name: Type Coverage
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: inputs.enable_typescript
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Set up Node
|
||||||
|
uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: ${{ inputs.node_version }}
|
||||||
|
cache: ${{ inputs.js_package_manager }}
|
||||||
|
cache-dependency-path: ${{ env.cache_dependency_path }}
|
||||||
|
|
||||||
|
- name: Install JS dependencies
|
||||||
|
run: ${{ env.ci_script }}
|
||||||
|
working-directory: ${{ inputs.frontend_directory }}
|
||||||
|
|
||||||
|
- name: Check type coverage
|
||||||
|
run: ${{ inputs.js_package_manager }} run check-typings-coverage
|
||||||
|
working-directory: ${{ inputs.frontend_directory }}
|
||||||
|
|
||||||
|
build:
|
||||||
|
name: Build
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: "always() && !contains(needs.*.result, 'failed') && !contains(needs.*.result, 'cancelled')"
|
||||||
|
needs: [bundlewatch, prettier, typecheck, type-coverage]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Set up Node
|
||||||
|
uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: ${{ inputs.node_version }}
|
||||||
|
cache: ${{ inputs.js_package_manager }}
|
||||||
|
cache-dependency-path: ${{ env.cache_dependency_path }}
|
||||||
|
|
||||||
|
# Our action will install npm/yarn, cd into `${{ inputs.frontend_directory }}`, build dist JS and typings,
|
||||||
|
# then commit and upload any changes iff we are on the main branch and have just pushed.
|
||||||
|
- name: Build production JS
|
||||||
|
if: inputs.enable_typescript
|
||||||
|
uses: flarum/action-build@2
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
build_script: ${{ inputs.build_script }}
|
build_script: build
|
||||||
build_typings_script: ${{ inputs.build_typings_script }}
|
|
||||||
format_script: ${{ inputs.enable_prettier == true && inputs.format_script || '' }}
|
|
||||||
check_typings_script: ${{ inputs.enable_typescript == true && inputs.check_typings_script || '' }}
|
|
||||||
type_coverage_script: ${{ inputs.enable_typescript == true && inputs.type_coverage_script || '' }}
|
|
||||||
package_manager: ${{ inputs.js_package_manager }}
|
package_manager: ${{ inputs.js_package_manager }}
|
||||||
|
typings_script: build-typings
|
||||||
js_path: ${{ inputs.frontend_directory }}
|
js_path: ${{ inputs.frontend_directory }}
|
||||||
do_not_commit: ${{ github.ref != format('refs/heads/{0}', inputs.main_git_branch) || github.event_name != 'push' }}
|
do_not_commit: ${{ github.ref != format('refs/heads/{0}', inputs.main_git_branch) || github.event_name != 'push' }}
|
||||||
|
|
||||||
- name: Check bundle size change
|
# Our action will install npm/yarn, cd into `${{ inputs.frontend_directory }}`, build dist JS and typings,
|
||||||
if: ${{ inputs.enable_bundlewatch }}
|
# then commit and upload any changes iff we are on the main branch and have just pushed.
|
||||||
run: node_modules/.bin/bundlewatch --config .bundlewatch.config.json
|
- name: Build production JS
|
||||||
working-directory: ${{ inputs.frontend_directory }}
|
if: "! inputs.enable_typescript"
|
||||||
env:
|
uses: flarum/action-build@2
|
||||||
BUNDLEWATCH_GITHUB_TOKEN: ${{ secrets.bundlewatch_github_token }}
|
with:
|
||||||
CI_COMMIT_SHA: ${{ github.event.pull_request.head.sha }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
build_script: build
|
||||||
|
package_manager: ${{ inputs.js_package_manager }}
|
||||||
|
js_path: ${{ inputs.frontend_directory }}
|
||||||
|
do_not_commit: ${{ github.ref != format('refs/heads/{0}', inputs.main_git_branch) || github.event_name != 'push' }}
|
||||||
|
20
.github/workflows/flarum-akismet-frontend.yml
vendored
Executable file
20
.github/workflows/flarum-akismet-frontend.yml
vendored
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
name: Akismet JS
|
||||||
|
|
||||||
|
on: [workflow_dispatch, push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
uses: ./.github/workflows/REUSABLE_frontend.yml
|
||||||
|
with:
|
||||||
|
enable_bundlewatch: false
|
||||||
|
enable_prettier: true
|
||||||
|
enable_typescript: true
|
||||||
|
|
||||||
|
frontend_directory: ./extensions/akismet/js
|
||||||
|
backend_directory: ./extensions/akismet
|
||||||
|
js_package_manager: yarn
|
||||||
|
cache_dependency_path: ./yarn.lock
|
||||||
|
main_git_branch: main
|
||||||
|
|
||||||
|
secrets:
|
||||||
|
bundlewatch_github_token: ${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}
|
@@ -6,6 +6,6 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
uses: ./.github/workflows/REUSABLE_backend.yml
|
uses: ./.github/workflows/REUSABLE_backend.yml
|
||||||
with:
|
with:
|
||||||
enable_backend_testing: true
|
enable_backend_testing: false
|
||||||
|
|
||||||
backend_directory: ./extensions/approval
|
backend_directory: ./extensions/approval
|
||||||
|
20
.github/workflows/flarum-approval-frontend.yml
vendored
Executable file
20
.github/workflows/flarum-approval-frontend.yml
vendored
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
name: Approval JS
|
||||||
|
|
||||||
|
on: [workflow_dispatch, push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
uses: ./.github/workflows/REUSABLE_frontend.yml
|
||||||
|
with:
|
||||||
|
enable_bundlewatch: false
|
||||||
|
enable_prettier: true
|
||||||
|
enable_typescript: false
|
||||||
|
|
||||||
|
frontend_directory: ./extensions/approval/js
|
||||||
|
backend_directory: ./extensions/approval
|
||||||
|
js_package_manager: yarn
|
||||||
|
cache_dependency_path: ./yarn.lock
|
||||||
|
main_git_branch: main
|
||||||
|
|
||||||
|
secrets:
|
||||||
|
bundlewatch_github_token: ${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}
|
@@ -1,4 +1,4 @@
|
|||||||
name: Framework JS
|
name: Core JS
|
||||||
|
|
||||||
on: [workflow_dispatch, push, pull_request]
|
on: [workflow_dispatch, push, pull_request]
|
||||||
|
|
||||||
@@ -6,8 +6,12 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
uses: ./.github/workflows/REUSABLE_frontend.yml
|
uses: ./.github/workflows/REUSABLE_frontend.yml
|
||||||
with:
|
with:
|
||||||
frontend_directory: ./
|
enable_bundlewatch: true
|
||||||
backend_directory: ./
|
enable_prettier: true
|
||||||
|
enable_typescript: true
|
||||||
|
|
||||||
|
frontend_directory: ./framework/core/js
|
||||||
|
backend_directory: ./framework/core
|
||||||
js_package_manager: yarn
|
js_package_manager: yarn
|
||||||
cache_dependency_path: ./yarn.lock
|
cache_dependency_path: ./yarn.lock
|
||||||
main_git_branch: main
|
main_git_branch: main
|
20
.github/workflows/flarum-embed-frontend.yml
vendored
Executable file
20
.github/workflows/flarum-embed-frontend.yml
vendored
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
name: Embed JS
|
||||||
|
|
||||||
|
on: [workflow_dispatch, push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
uses: ./.github/workflows/REUSABLE_frontend.yml
|
||||||
|
with:
|
||||||
|
enable_bundlewatch: false
|
||||||
|
enable_prettier: true
|
||||||
|
enable_typescript: false
|
||||||
|
|
||||||
|
frontend_directory: ./extensions/embed/js
|
||||||
|
backend_directory: ./extensions/embed
|
||||||
|
js_package_manager: yarn
|
||||||
|
cache_dependency_path: ./yarn.lock
|
||||||
|
main_git_branch: main
|
||||||
|
|
||||||
|
secrets:
|
||||||
|
bundlewatch_github_token: ${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}
|
20
.github/workflows/flarum-emoji-frontend.yml
vendored
Executable file
20
.github/workflows/flarum-emoji-frontend.yml
vendored
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
name: Emoji JS
|
||||||
|
|
||||||
|
on: [workflow_dispatch, push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
uses: ./.github/workflows/REUSABLE_frontend.yml
|
||||||
|
with:
|
||||||
|
enable_bundlewatch: false
|
||||||
|
enable_prettier: true
|
||||||
|
enable_typescript: false
|
||||||
|
|
||||||
|
frontend_directory: ./extensions/emoji/js
|
||||||
|
backend_directory: ./extensions/emoji
|
||||||
|
js_package_manager: yarn
|
||||||
|
cache_dependency_path: ./yarn.lock
|
||||||
|
main_git_branch: main
|
||||||
|
|
||||||
|
secrets:
|
||||||
|
bundlewatch_github_token: ${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}
|
20
.github/workflows/flarum-flags-frontend.yml
vendored
Executable file
20
.github/workflows/flarum-flags-frontend.yml
vendored
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
name: Flags JS
|
||||||
|
|
||||||
|
on: [workflow_dispatch, push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
uses: ./.github/workflows/REUSABLE_frontend.yml
|
||||||
|
with:
|
||||||
|
enable_bundlewatch: false
|
||||||
|
enable_prettier: true
|
||||||
|
enable_typescript: true
|
||||||
|
|
||||||
|
frontend_directory: ./extensions/flags/js
|
||||||
|
backend_directory: ./extensions/flags
|
||||||
|
js_package_manager: yarn
|
||||||
|
cache_dependency_path: ./yarn.lock
|
||||||
|
main_git_branch: main
|
||||||
|
|
||||||
|
secrets:
|
||||||
|
bundlewatch_github_token: ${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}
|
2
.github/workflows/flarum-likes-backend.yml
vendored
2
.github/workflows/flarum-likes-backend.yml
vendored
@@ -6,6 +6,6 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
uses: ./.github/workflows/REUSABLE_backend.yml
|
uses: ./.github/workflows/REUSABLE_backend.yml
|
||||||
with:
|
with:
|
||||||
enable_backend_testing: true
|
enable_backend_testing: false
|
||||||
|
|
||||||
backend_directory: ./extensions/likes
|
backend_directory: ./extensions/likes
|
||||||
|
20
.github/workflows/flarum-likes-frontend.yml
vendored
Executable file
20
.github/workflows/flarum-likes-frontend.yml
vendored
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
name: Likes JS
|
||||||
|
|
||||||
|
on: [workflow_dispatch, push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
uses: ./.github/workflows/REUSABLE_frontend.yml
|
||||||
|
with:
|
||||||
|
enable_bundlewatch: false
|
||||||
|
enable_prettier: true
|
||||||
|
enable_typescript: false
|
||||||
|
|
||||||
|
frontend_directory: ./extensions/likes/js
|
||||||
|
backend_directory: ./extensions/likes
|
||||||
|
js_package_manager: yarn
|
||||||
|
cache_dependency_path: ./yarn.lock
|
||||||
|
main_git_branch: main
|
||||||
|
|
||||||
|
secrets:
|
||||||
|
bundlewatch_github_token: ${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}
|
20
.github/workflows/flarum-lock-frontend.yml
vendored
Executable file
20
.github/workflows/flarum-lock-frontend.yml
vendored
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
name: Lock JS
|
||||||
|
|
||||||
|
on: [workflow_dispatch, push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
uses: ./.github/workflows/REUSABLE_frontend.yml
|
||||||
|
with:
|
||||||
|
enable_bundlewatch: false
|
||||||
|
enable_prettier: true
|
||||||
|
enable_typescript: false
|
||||||
|
|
||||||
|
frontend_directory: ./extensions/lock/js
|
||||||
|
backend_directory: ./extensions/lock
|
||||||
|
js_package_manager: yarn
|
||||||
|
cache_dependency_path: ./yarn.lock
|
||||||
|
main_git_branch: main
|
||||||
|
|
||||||
|
secrets:
|
||||||
|
bundlewatch_github_token: ${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}
|
20
.github/workflows/flarum-markdown-frontend.yml
vendored
Executable file
20
.github/workflows/flarum-markdown-frontend.yml
vendored
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
name: Markdown JS
|
||||||
|
|
||||||
|
on: [workflow_dispatch, push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
uses: ./.github/workflows/REUSABLE_frontend.yml
|
||||||
|
with:
|
||||||
|
enable_bundlewatch: false
|
||||||
|
enable_prettier: true
|
||||||
|
enable_typescript: false
|
||||||
|
|
||||||
|
frontend_directory: ./extensions/markdown/js
|
||||||
|
backend_directory: ./extensions/markdown
|
||||||
|
js_package_manager: yarn
|
||||||
|
cache_dependency_path: ./yarn.lock
|
||||||
|
main_git_branch: main
|
||||||
|
|
||||||
|
secrets:
|
||||||
|
bundlewatch_github_token: ${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}
|
20
.github/workflows/flarum-mentions-frontend.yml
vendored
Executable file
20
.github/workflows/flarum-mentions-frontend.yml
vendored
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
name: Mentions JS
|
||||||
|
|
||||||
|
on: [workflow_dispatch, push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
uses: ./.github/workflows/REUSABLE_frontend.yml
|
||||||
|
with:
|
||||||
|
enable_bundlewatch: false
|
||||||
|
enable_prettier: true
|
||||||
|
enable_typescript: false
|
||||||
|
|
||||||
|
frontend_directory: ./extensions/mentions/js
|
||||||
|
backend_directory: ./extensions/mentions
|
||||||
|
js_package_manager: yarn
|
||||||
|
cache_dependency_path: ./yarn.lock
|
||||||
|
main_git_branch: main
|
||||||
|
|
||||||
|
secrets:
|
||||||
|
bundlewatch_github_token: ${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}
|
20
.github/workflows/flarum-nicknames-frontend.yml
vendored
Executable file
20
.github/workflows/flarum-nicknames-frontend.yml
vendored
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
name: Nicknames JS
|
||||||
|
|
||||||
|
on: [workflow_dispatch, push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
uses: ./.github/workflows/REUSABLE_frontend.yml
|
||||||
|
with:
|
||||||
|
enable_bundlewatch: false
|
||||||
|
enable_prettier: true
|
||||||
|
enable_typescript: false
|
||||||
|
|
||||||
|
frontend_directory: ./extensions/nicknames/js
|
||||||
|
backend_directory: ./extensions/nicknames
|
||||||
|
js_package_manager: yarn
|
||||||
|
cache_dependency_path: ./yarn.lock
|
||||||
|
main_git_branch: main
|
||||||
|
|
||||||
|
secrets:
|
||||||
|
bundlewatch_github_token: ${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}
|
20
.github/workflows/flarum-package-manager-frontend.yml
vendored
Executable file
20
.github/workflows/flarum-package-manager-frontend.yml
vendored
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
name: Package Manager JS
|
||||||
|
|
||||||
|
on: [workflow_dispatch, push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
uses: ./.github/workflows/REUSABLE_frontend.yml
|
||||||
|
with:
|
||||||
|
enable_bundlewatch: false
|
||||||
|
enable_prettier: true
|
||||||
|
enable_typescript: true
|
||||||
|
|
||||||
|
frontend_directory: ./extensions/package-manager/js
|
||||||
|
backend_directory: ./extensions/package-manager
|
||||||
|
js_package_manager: yarn
|
||||||
|
cache_dependency_path: ./yarn.lock
|
||||||
|
main_git_branch: main
|
||||||
|
|
||||||
|
secrets:
|
||||||
|
bundlewatch_github_token: ${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}
|
20
.github/workflows/flarum-pusher-frontend.yml
vendored
Executable file
20
.github/workflows/flarum-pusher-frontend.yml
vendored
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
name: Pusher JS
|
||||||
|
|
||||||
|
on: [workflow_dispatch, push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
uses: ./.github/workflows/REUSABLE_frontend.yml
|
||||||
|
with:
|
||||||
|
enable_bundlewatch: false
|
||||||
|
enable_prettier: true
|
||||||
|
enable_typescript: true
|
||||||
|
|
||||||
|
frontend_directory: ./extensions/pusher/js
|
||||||
|
backend_directory: ./extensions/pusher
|
||||||
|
js_package_manager: yarn
|
||||||
|
cache_dependency_path: ./yarn.lock
|
||||||
|
main_git_branch: main
|
||||||
|
|
||||||
|
secrets:
|
||||||
|
bundlewatch_github_token: ${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}
|
20
.github/workflows/flarum-statistics-frontend.yml
vendored
Executable file
20
.github/workflows/flarum-statistics-frontend.yml
vendored
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
name: Statistics JS
|
||||||
|
|
||||||
|
on: [workflow_dispatch, push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
uses: ./.github/workflows/REUSABLE_frontend.yml
|
||||||
|
with:
|
||||||
|
enable_bundlewatch: false
|
||||||
|
enable_prettier: true
|
||||||
|
enable_typescript: true
|
||||||
|
|
||||||
|
frontend_directory: ./extensions/statistics/js
|
||||||
|
backend_directory: ./extensions/statistics
|
||||||
|
js_package_manager: yarn
|
||||||
|
cache_dependency_path: ./yarn.lock
|
||||||
|
main_git_branch: main
|
||||||
|
|
||||||
|
secrets:
|
||||||
|
bundlewatch_github_token: ${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}
|
2
.github/workflows/flarum-sticky-backend.yml
vendored
2
.github/workflows/flarum-sticky-backend.yml
vendored
@@ -6,6 +6,6 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
uses: ./.github/workflows/REUSABLE_backend.yml
|
uses: ./.github/workflows/REUSABLE_backend.yml
|
||||||
with:
|
with:
|
||||||
enable_backend_testing: true
|
enable_backend_testing: false
|
||||||
|
|
||||||
backend_directory: ./extensions/sticky
|
backend_directory: ./extensions/sticky
|
||||||
|
20
.github/workflows/flarum-sticky-frontend.yml
vendored
Executable file
20
.github/workflows/flarum-sticky-frontend.yml
vendored
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
name: Sticky JS
|
||||||
|
|
||||||
|
on: [workflow_dispatch, push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
uses: ./.github/workflows/REUSABLE_frontend.yml
|
||||||
|
with:
|
||||||
|
enable_bundlewatch: false
|
||||||
|
enable_prettier: true
|
||||||
|
enable_typescript: false
|
||||||
|
|
||||||
|
frontend_directory: ./extensions/sticky/js
|
||||||
|
backend_directory: ./extensions/sticky
|
||||||
|
js_package_manager: yarn
|
||||||
|
cache_dependency_path: ./yarn.lock
|
||||||
|
main_git_branch: main
|
||||||
|
|
||||||
|
secrets:
|
||||||
|
bundlewatch_github_token: ${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}
|
@@ -6,6 +6,6 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
uses: ./.github/workflows/REUSABLE_backend.yml
|
uses: ./.github/workflows/REUSABLE_backend.yml
|
||||||
with:
|
with:
|
||||||
enable_backend_testing: true
|
enable_backend_testing: false
|
||||||
|
|
||||||
backend_directory: ./extensions/subscriptions
|
backend_directory: ./extensions/subscriptions
|
||||||
|
20
.github/workflows/flarum-subscriptions-frontend.yml
vendored
Executable file
20
.github/workflows/flarum-subscriptions-frontend.yml
vendored
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
name: Subscriptions JS
|
||||||
|
|
||||||
|
on: [workflow_dispatch, push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
uses: ./.github/workflows/REUSABLE_frontend.yml
|
||||||
|
with:
|
||||||
|
enable_bundlewatch: false
|
||||||
|
enable_prettier: true
|
||||||
|
enable_typescript: false
|
||||||
|
|
||||||
|
frontend_directory: ./extensions/subscriptions/js
|
||||||
|
backend_directory: ./extensions/subscriptions
|
||||||
|
js_package_manager: yarn
|
||||||
|
cache_dependency_path: ./yarn.lock
|
||||||
|
main_git_branch: main
|
||||||
|
|
||||||
|
secrets:
|
||||||
|
bundlewatch_github_token: ${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}
|
2
.github/workflows/flarum-suspend-backend.yml
vendored
2
.github/workflows/flarum-suspend-backend.yml
vendored
@@ -6,6 +6,6 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
uses: ./.github/workflows/REUSABLE_backend.yml
|
uses: ./.github/workflows/REUSABLE_backend.yml
|
||||||
with:
|
with:
|
||||||
enable_backend_testing: true
|
enable_backend_testing: false
|
||||||
|
|
||||||
backend_directory: ./extensions/suspend
|
backend_directory: ./extensions/suspend
|
||||||
|
20
.github/workflows/flarum-suspend-frontend.yml
vendored
Executable file
20
.github/workflows/flarum-suspend-frontend.yml
vendored
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
name: Suspend JS
|
||||||
|
|
||||||
|
on: [workflow_dispatch, push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
uses: ./.github/workflows/REUSABLE_frontend.yml
|
||||||
|
with:
|
||||||
|
enable_bundlewatch: false
|
||||||
|
enable_prettier: true
|
||||||
|
enable_typescript: false
|
||||||
|
|
||||||
|
frontend_directory: ./extensions/suspend/js
|
||||||
|
backend_directory: ./extensions/suspend
|
||||||
|
js_package_manager: yarn
|
||||||
|
cache_dependency_path: ./yarn.lock
|
||||||
|
main_git_branch: main
|
||||||
|
|
||||||
|
secrets:
|
||||||
|
bundlewatch_github_token: ${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}
|
19
.github/workflows/flarum-tags-frontend.yml
vendored
Executable file
19
.github/workflows/flarum-tags-frontend.yml
vendored
Executable file
@@ -0,0 +1,19 @@
|
|||||||
|
name: Tags JS
|
||||||
|
|
||||||
|
on: [workflow_dispatch, push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
uses: ./.github/workflows/REUSABLE_frontend.yml
|
||||||
|
with:
|
||||||
|
enable_bundlewatch: false
|
||||||
|
enable_prettier: true
|
||||||
|
enable_typescript: true
|
||||||
|
|
||||||
|
frontend_directory: ./extensions/tags/js
|
||||||
|
backend_directory: ./extensions/tags
|
||||||
|
js_package_manager: yarn
|
||||||
|
cache_dependency_path: ./yarn.lock
|
||||||
|
main_git_branch: main
|
||||||
|
secrets:
|
||||||
|
bundlewatch_github_token: ${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}
|
12
.github/workflows/phpstan.yml
vendored
12
.github/workflows/phpstan.yml
vendored
@@ -1,12 +0,0 @@
|
|||||||
name: Framework PHP
|
|
||||||
|
|
||||||
on: [workflow_dispatch, push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
run:
|
|
||||||
uses: ./.github/workflows/REUSABLE_backend.yml
|
|
||||||
with:
|
|
||||||
enable_backend_testing: false
|
|
||||||
enable_phpstan: true
|
|
||||||
|
|
||||||
backend_directory: .
|
|
26
.github/workflows/prepare-release.yml
vendored
26
.github/workflows/prepare-release.yml
vendored
@@ -1,26 +0,0 @@
|
|||||||
name: Prepare Release
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
version:
|
|
||||||
description: 'Version to release'
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
run:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
issues: write
|
|
||||||
pull-requests: read
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
- name: Prepare release
|
|
||||||
uses: flarum/action-release@master
|
|
||||||
env:
|
|
||||||
NEXT_TAG: ${{ inputs.version }}
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
OPEN_COLLECTIVE_TOKEN: ${{ secrets.OPEN_COLLECTIVE_TOKEN }}
|
|
153
CHANGELOG.md
153
CHANGELOG.md
@@ -1,158 +1,5 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## [v1.6.2](https://github.com/flarum/framework/compare/v1.6.1...v1.6.2)
|
|
||||||
### Fixed
|
|
||||||
* XSS Vulnerability in core (https://github.com/flarum/framework/pull/3684).
|
|
||||||
|
|
||||||
## [v1.6.1](https://github.com/flarum/framework/compare/v1.6.0...v1.6.1)
|
|
||||||
### Fixed
|
|
||||||
* JS dependencies update breaks utilities.
|
|
||||||
|
|
||||||
## [v1.6.0](https://github.com/flarum/framework/compare/v1.5.0...v1.6.0)
|
|
||||||
### Fixed
|
|
||||||
- (approval) posts approved for deleted users error ([b5874a0](b5874a08e482196f50af50aa78e43c93c29fb647))
|
|
||||||
- (regression) bad import ([5f2d7fb](5f2d7fb7b6e430d40cf2bb05eca7c73f6ca5a2cc))
|
|
||||||
- akismet fails when the extension is not on a version ([45d9121](45d91212f6bfa777cae9fc06c55c85d01ffd174d))
|
|
||||||
- apply flex for AppearancePage colors input [#3651]
|
|
||||||
- groupmentions have poor contrast on some backgrounds [#3672]
|
|
||||||
- larastan v1 incompatible with phpstan v1.9.0 [#3665]
|
|
||||||
- package manager failures not showing alerts [#3647]
|
|
||||||
- password reset leaks user existence [#3616]
|
|
||||||
- statistics previous period chart is unclear [#3654]
|
|
||||||
### Changed
|
|
||||||
- (package-manager) config composer to use web php version ([fd19645](fd196454a5641776784fa80886cc7577c840f8ed))
|
|
||||||
- (package-manager) set min core version and add warning ([31c3cfc](31c3cfc4eab4c314260b9b0d11e53ac2d4be158d))
|
|
||||||
- (statistics) prepare v1.5.1 ([dc215ab](dc215aba59145dfd7b0d6efad4388444f30e47fb))
|
|
||||||
- Apply fixes from StyleCI ([267f675](267f6759f80bd06f468337245ea6045635e827d9))
|
|
||||||
- Fix tag discussion count decreased by 2 when hiding before deleting [#3660]
|
|
||||||
- Log migration path when up/down keys are missing [#3664]
|
|
||||||
- Make it possible to extend SetupScript [#3643]
|
|
||||||
- Setup PHPStan Level 5 [#3553]
|
|
||||||
- `yarn format` ([c5c312d](c5c312db0d800e3b84b94a4abb9691e348dea742))
|
|
||||||
- add missing last period to custom date ranges [#3661]
|
|
||||||
- add priorities to profile settings page [#3657]
|
|
||||||
- allow specifying php extensions in workflow ([b0b47a0](b0b47a0888f513a459b67e9f89e72a61de38f1ce))
|
|
||||||
- format js ([06963df](06963df4079373fc8fc51b7479e9576f02beb098))
|
|
||||||
- group mentions [#3658]
|
|
||||||
- remove styleci from changelog ([b2fa28e](b2fa28e4b57094e46dbdb3d79fab74f290a17d17))
|
|
||||||
- set flarum version to dev for 1.6.0 ([fc743ba](fc743ba88872031db13597d7365a063b8004c78f))
|
|
||||||
- throw an exception when no serializer is provided to the controller [#3614]
|
|
||||||
### Added
|
|
||||||
- (statistics) support for custom date ranges [#3622]
|
|
||||||
- Allow additional login params, Introduce `LogInValidator` [#3670]
|
|
||||||
- Allow additional reset password params, introduce `ForgotPasswordValidator` [#3671]
|
|
||||||
- add statistics chart export button [#3662]
|
|
||||||
- allow specifying extensions when installing an instance [#3655]
|
|
||||||
- contrast util with yiq calculator [#3652]
|
|
||||||
- customizable session driver [#3610]
|
|
||||||
- replace `ColorPreviewInput` for GroupModal color input [#3650]
|
|
||||||
- send notifications of a new reply when post is approved [#3656]
|
|
||||||
|
|
||||||
## [v1.5.0](https://github.com/flarum/framework/compare/v1.4.0...v1.5.0)
|
|
||||||
### Fixed
|
|
||||||
- (a11y) add accessible labels to notification grid options [#3520]
|
|
||||||
- (a11y) present post streams as feeds [#3522]
|
|
||||||
- (a11y) set `aria-busy` when editing a post stream item [#3521]
|
|
||||||
- (compilation) versioner not inject into compilers [#3589]
|
|
||||||
- (mentions) accessing `id` of null `user` relation [#3618]
|
|
||||||
- (subscriptions) add missing table prefix for filter gambit [#3599]
|
|
||||||
- (tags) use default index sortmap [#3615]
|
|
||||||
- Move guzzle requirement to core [#3544]
|
|
||||||
- MyISAM tables for extensions during installation ([75aaef7](75aaef7d76317bc8578eac1439fed8091c87213b), [f926c58](f926c58e0143fe75a4a4c2e93810970c5910afc8))
|
|
||||||
- Set the translator locale to user preference for email notifications [#3525]
|
|
||||||
- `$events` property declared dynamically [#3598]
|
|
||||||
- core settings header has no priority ([33bf228](33bf2284c77863a1bb18d71d87b8516483056a74))
|
|
||||||
- html entities shown raw in page title [#3542]
|
|
||||||
- incorrect centring of deleted user avatars in notification list [#3569]
|
|
||||||
- intellisense imports defaulting to absolute path from `src` folder [#3549]
|
|
||||||
- minor backward compatible fix for php 8.1 in st_replace ([07b2f86](07b2f86dcc90a3ef17c8ee19a1a07e99a4b17360))
|
|
||||||
- post query wildcard selection causes ambiguity [#3621]
|
|
||||||
- potential static caching memory exhaustion [#3548]
|
|
||||||
- prepare release workflow has invalid layout ([70e483d](70e483d1b185332910be9513fd06cc6342830d49))
|
|
||||||
- remove deprecation warning for decoding null values ([590639f](590639f5f3e1fe883f28c41e1f175c2826b4b5f4))
|
|
||||||
- replace `.fa()` mixin usage with `.fas()` [#3537]
|
|
||||||
- return type hint static is php 8+ ([b01b75e](b01b75e36790d8026dd27ce59051d9581ad47940))
|
|
||||||
- sticky nav content displays below post stream [#3575]
|
|
||||||
- titles positioned wrongly with custom header height [#3550]
|
|
||||||
- typo in error message ([1a189f4](1a189f492320071365286a8835bc49d5a9571753))
|
|
||||||
- unread notifications are globally cached between users. [#3543]
|
|
||||||
- update workflow name ([628c281](628c281c39855f01069ddc40b698d80d29fec870))
|
|
||||||
- user has wrong discussion read status [#3591]
|
|
||||||
### Changed
|
|
||||||
- (approval, likes) use subscribers [#3577]
|
|
||||||
- (package-manager) last tweaks before beta tag ([335c602](335c602cea3fbaee9ad7c32ceecaaf222e5d89a7))
|
|
||||||
- (statistics) add release notes for 1.4.1 ([f4ace73](f4ace73a3c59434b8717efb2d83f50084f470fe4))
|
|
||||||
- (statistics) rewrite for performance on very large communities [#3531]
|
|
||||||
- (statistics) split timed data into per-model XHR requests [#3601]
|
|
||||||
- (tags) Replace event helper with event dispatcher [#3570]
|
|
||||||
- Add `loading="lazy"` attribute for avatars [#3578]
|
|
||||||
- Create CODEOWNERS ([6e48a03](6e48a0303e45bcf210e550ba3e0772bc8443a207))
|
|
||||||
- MyISAM tables for extensions during installation" ([f128190](f128190f143398dd1262fd1379e634794daee4c1))
|
|
||||||
- convert `AlertManager` `IndexPage` and `UserPage` components to TS [#3536]
|
|
||||||
- convert `Badge` `Checkbox` and `Navigation` components to TS [#3532]
|
|
||||||
- convert core modals to TypeScript [#3515]
|
|
||||||
- convert page components to TypeScript [#3538]
|
|
||||||
- debug line slipped in while rebasing a PR [#3580]
|
|
||||||
- don't pass password field between auth modals [#3626]
|
|
||||||
- fix github issue templates ([d3e456a](d3e456a1bf42d13b7cd2542c371f392712247c09))
|
|
||||||
- format code ([4954621](495462183bfb3b33046b293e6b1088ab225968df))
|
|
||||||
- getting the release workflow in ([5530400](5530400b093b5fd07d670e5c92d8a7da96634cfe))
|
|
||||||
- link logo at the top with the official website [#3552]
|
|
||||||
- prevent running both `push` and `pull_request` actions at the same time [#3597]
|
|
||||||
- refactor prefix matrix and add `MySQL 8.0` & `PHP 7.3` to workflows [#3595]
|
|
||||||
- relying on a third-party for avatar URL tests is unreliable [#3586]
|
|
||||||
- require guzzle 6 or 7 ([46b3b7a](46b3b7a9527b935c3c52269aaad2010c75dcb6d8))
|
|
||||||
- split FA imports into separate Less file for easy overriding [#3535]
|
|
||||||
- unify JS actions into one (rewritten `flarum/action-build`) [#3573]
|
|
||||||
- update version constant during cycle 22 ([d864405](d86440506dd37101e60adec591d4b017e7765ec6))
|
|
||||||
- use `isCollapsed` instead of `rangeCount` [#3581]
|
|
||||||
- use github issue template forms [#3526]
|
|
||||||
### Added
|
|
||||||
- (likes) Add likes tab to user profile [#3528]
|
|
||||||
- (likes) Option to prevent users liking their own posts [#3534]
|
|
||||||
- (modals) support stacking modals, remove bootstrap modals dependency [#3456]
|
|
||||||
- (subscriptions) add option to send notifications when not caught up [#3503]
|
|
||||||
- Add custom class for email confirmation alert [#3584]
|
|
||||||
- Admin debug mode warning [#3590]
|
|
||||||
- Delete all notifications [#3529]
|
|
||||||
- Queue package manager commands [#3418]
|
|
||||||
- Restart the queue worker after cache clearing, ext enable/disable, save settings [#3565]
|
|
||||||
- add createTableIfNotExists migration helper [#3576]
|
|
||||||
- add new workflow for generating release meta ([0901e59](0901e59a58a3e1f017762583a2adf419f7f34257))
|
|
||||||
- clear password & email tokens when appropriate [#3567]
|
|
||||||
- discussion UTF-8 slug driver [#3606]
|
|
||||||
- expose assets base url to frontend forum model [#3566]
|
|
||||||
- extender to add custom less variables [#3530]
|
|
||||||
- publish assets on admin dashboard cache clear [#3564]
|
|
||||||
- throttle email change, email confirmation, and password reset endpoints. [#3555]
|
|
||||||
|
|
||||||
## [1.4.0](https://github.com/flarum/framework/compare/v1.3.1...v1.4.0)
|
|
||||||
|
|
||||||
### Added
|
|
||||||
- `created_at` and `updated_at` columns added to several tables (https://github.com/flarum/framework/pull/3435)
|
|
||||||
- Priorities added to AdminNav links (https://github.com/flarum/framework/pull/3453)
|
|
||||||
- `app.translator` allows retrieving and setting locale (https://github.com/flarum/framework/pull/3451)
|
|
||||||
- Extensions can now declare custom settings components for use with `buildSettingComponent` (https://github.com/flarum/framework/pull/3494)
|
|
||||||
- Implement extensibility on `rel` and `target` attributes on links (https://github.com/flarum/framework/pull/3455)
|
|
||||||
- New backend tests were added to some of the bundled extensions (https://github.com/flarum/framework/issues/3508)
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
- Split boot script for Flarum in HTML footer into two parts for CSP hashing (https://github.com/flarum/framework/pull/3461)
|
|
||||||
- Split asset compilation by giving assembling compilers its own method (https://github.com/flarum/framework/pull/3446)
|
|
||||||
- Increase visibility of Component typescript class for better extensibility (https://github.com/flarum/framework/pull/3437)
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
- Mentioning an event post breaks the notification dropdown (https://github.com/flarum/framework/pull/3493)
|
|
||||||
- Suspension modal shows after suspension is over (https://github.com/flarum/framework/pull/3449)
|
|
||||||
- CLI based installations don't exit with an error code on failure (https://github.com/flarum/framework/pull/3452)
|
|
||||||
- Tabbing through dropdown controls doesn't make them visible (https://github.com/flarum/framework/pull/3450)
|
|
||||||
- Requiring zero tags on new discussions forces the user to select tags (https://github.com/flarum/framework/pull/3448)
|
|
||||||
- Long topic titles in the notification list don't overflow (https://github.com/flarum/framework/pull/3500)
|
|
||||||
- Subtags of tags the user has access to are visible even if these are not accessible (https://github.com/flarum/framework/pull/3419)
|
|
||||||
- `assertAdmin` tests access based on wrong gate ability (https://github.com/flarum/framework/pull/3501)
|
|
||||||
- Increasing the composer header size causes elements to slip underneath (https://github.com/flarum/framework/pull/3502)
|
|
||||||
- The profile mentions tab errors when sorting by `created_at` (https://github.com/flarum/framework/pull/3506)
|
|
||||||
|
|
||||||
## [1.3.1](https://github.com/flarum/framework/compare/v1.3.0...v1.3.1)
|
## [1.3.1](https://github.com/flarum/framework/compare/v1.3.0...v1.3.1)
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
@@ -1,6 +1,4 @@
|
|||||||
<p align="center">
|
<p align="center"><img src="https://flarum.org/assets/img/logo.png"></p>
|
||||||
<a href="https://flarum.org/"><img src="https://flarum.org/assets/img/logo.png"></a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://github.com/flarum/core/actions?query=workflow%3ATests"><img src="https://github.com/flarum/core/workflows/Tests/badge.svg" alt="PHP Tests"></a>
|
<a href="https://github.com/flarum/core/actions?query=workflow%3ATests"><img src="https://github.com/flarum/core/workflows/Tests/badge.svg" alt="PHP Tests"></a>
|
||||||
|
@@ -29,8 +29,8 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/flarum/framework/issues",
|
"issues": "https://github.com/flarum/core/issues",
|
||||||
"source": "https://github.com/flarum/framework",
|
"source": "https://github.com/flarum/core",
|
||||||
"docs": "https://docs.flarum.org",
|
"docs": "https://docs.flarum.org",
|
||||||
"forum": "https://discuss.flarum.org",
|
"forum": "https://discuss.flarum.org",
|
||||||
"chat": "https://flarum.org/chat"
|
"chat": "https://flarum.org/chat"
|
||||||
@@ -86,13 +86,14 @@
|
|||||||
"require": {
|
"require": {
|
||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"php": ">=7.3",
|
"php": ">=7.3",
|
||||||
|
"axy/sourcemap": "^0.1.4",
|
||||||
"components/font-awesome": "^5.14.0",
|
"components/font-awesome": "^5.14.0",
|
||||||
"composer/composer": "^2.0",
|
"composer/composer": "^2.0",
|
||||||
"dflydev/fig-cookies": "^3.0.0",
|
"dflydev/fig-cookies": "^3.0.0",
|
||||||
"doctrine/dbal": "^2.7",
|
"doctrine/dbal": "^2.7",
|
||||||
"dragonmantank/cron-expression": "^3.1.0",
|
"dragonmantank/cron-expression": "^3.1.0",
|
||||||
"franzl/whoops-middleware": "^2.0.0",
|
"franzl/whoops-middleware": "^2.0.0",
|
||||||
"guzzlehttp/guzzle": "^6.0|^7.4",
|
"guzzlehttp/guzzle": "^7.4",
|
||||||
"illuminate/bus": "^8.0",
|
"illuminate/bus": "^8.0",
|
||||||
"illuminate/cache": "^8.0",
|
"illuminate/cache": "^8.0",
|
||||||
"illuminate/config": "^8.0",
|
"illuminate/config": "^8.0",
|
||||||
@@ -126,8 +127,6 @@
|
|||||||
"psr/http-server-middleware": "^1.0",
|
"psr/http-server-middleware": "^1.0",
|
||||||
"pusher/pusher-php-server": "^2.2",
|
"pusher/pusher-php-server": "^2.2",
|
||||||
"s9e/text-formatter": "^2.3.6",
|
"s9e/text-formatter": "^2.3.6",
|
||||||
"sycho/json-api": "^0.5.0",
|
|
||||||
"sycho/sourcemap": "^2.0.0",
|
|
||||||
"symfony/config": "^5.2.2",
|
"symfony/config": "^5.2.2",
|
||||||
"symfony/console": "^5.2.2",
|
"symfony/console": "^5.2.2",
|
||||||
"symfony/event-dispatcher": "^5.2.2",
|
"symfony/event-dispatcher": "^5.2.2",
|
||||||
@@ -135,13 +134,14 @@
|
|||||||
"symfony/polyfill-intl-messageformatter": "^1.22.0",
|
"symfony/polyfill-intl-messageformatter": "^1.22.0",
|
||||||
"symfony/translation": "^5.1.5",
|
"symfony/translation": "^5.1.5",
|
||||||
"symfony/yaml": "^5.2.2",
|
"symfony/yaml": "^5.2.2",
|
||||||
|
"tobscure/json-api": "^0.3.0",
|
||||||
"wikimedia/less.php": "^3.0"
|
"wikimedia/less.php": "^3.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"mockery/mockery": "^1.4",
|
"mockery/mockery": "^1.4",
|
||||||
"phpunit/phpunit": "^9.0",
|
"phpunit/phpunit": "^9.0",
|
||||||
"phpstan/phpstan": ">=1.8.11 < 1.9.0",
|
"phpstan/phpstan-php-parser": "^1.0",
|
||||||
"nunomaduro/larastan": "^1.0"
|
"phpstan/phpstan": "^1.2"
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"sort-packages": true
|
"sort-packages": true
|
||||||
@@ -178,11 +178,5 @@
|
|||||||
"extension.neon"
|
"extension.neon"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"analyse:phpstan": "phpstan analyse"
|
|
||||||
},
|
|
||||||
"scripts-descriptions": {
|
|
||||||
"analyse:phpstan": "Run static analysis"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -17,9 +17,3 @@ trim_trailing_whitespace = false
|
|||||||
|
|
||||||
[*.{php,xml,json}]
|
[*.{php,xml,json}]
|
||||||
indent_size = 4
|
indent_size = 4
|
||||||
|
|
||||||
[tsconfig.json]
|
|
||||||
indent_size = 2
|
|
||||||
|
|
||||||
[*.neon]
|
|
||||||
indent_style = tab
|
|
20
extensions/akismet/.gitattributes
vendored
20
extensions/akismet/.gitattributes
vendored
@@ -1,20 +0,0 @@
|
|||||||
**/.gitattributes export-ignore
|
|
||||||
**/.gitignore export-ignore
|
|
||||||
**/.gitmodules export-ignore
|
|
||||||
**/.github export-ignore
|
|
||||||
**/.travis export-ignore
|
|
||||||
**/.travis.yml export-ignore
|
|
||||||
**/.editorconfig export-ignore
|
|
||||||
**/.styleci.yml export-ignore
|
|
||||||
|
|
||||||
**/phpunit.xml export-ignore
|
|
||||||
**/tests export-ignore
|
|
||||||
|
|
||||||
**/js/dist/**/* -diff
|
|
||||||
**/js/dist/**/* linguist-generated
|
|
||||||
**/js/dist-typings/**/* -diff
|
|
||||||
**/js/dist-typings/**/* linguist-generated
|
|
||||||
**/js/yarn.lock -diff
|
|
||||||
**/js/package-lock.json -diff
|
|
||||||
|
|
||||||
* text=auto eol=lf
|
|
@@ -7,7 +7,7 @@
|
|||||||
],
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/flarum/framework/issues",
|
"issues": "https://github.com/flarum/core/issues",
|
||||||
"source": "https://github.com/flarum/akismet",
|
"source": "https://github.com/flarum/akismet",
|
||||||
"forum": "https://discuss.flarum.org"
|
"forum": "https://discuss.flarum.org"
|
||||||
},
|
},
|
||||||
@@ -19,8 +19,9 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"flarum/core": "^1.6",
|
"flarum/core": "^1.3",
|
||||||
"flarum/approval": "^1.2"
|
"flarum/approval": "^1.2",
|
||||||
|
"guzzlehttp/guzzle": "^7.4"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
|
2
extensions/akismet/js/dist/admin.js.map
generated
vendored
2
extensions/akismet/js/dist/admin.js.map
generated
vendored
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,IACzBH,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,+BCL9D,MAAM,EAA+BC,OAAOC,KAAKC,OAAO,a,aCExDC,IAAAA,aAAAA,IAAqB,kBAAkB,WACrCA,IAAAA,cAAAA,IACO,kBACJC,gBAAgB,CACfC,QAAS,yBACTC,KAAM,OACNC,MAAOJ,IAAAA,WAAAA,MAAqB,yDAE7BC,gBAAgB,CAEfC,QAAS,qCACTC,KAAM,UACNC,MAAOJ,IAAAA,WAAAA,MAAqB,mEAC5BK,KAAML,IAAAA,WAAAA,MAAqB,oEAE5BM,mBACC,CACEC,KAAM,kBACNH,MAAOJ,IAAAA,WAAAA,MAAqB,mDAC5BQ,WAAY,iBAEd,QAEL,G","sources":["webpack://@flarum/akismet/webpack/bootstrap","webpack://@flarum/akismet/webpack/runtime/compat get default export","webpack://@flarum/akismet/webpack/runtime/define property getters","webpack://@flarum/akismet/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/akismet/webpack/runtime/make namespace object","webpack://@flarum/akismet/external root \"flarum.core.compat['admin/app']\"","webpack://@flarum/akismet/./src/admin/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/app'];","import app from 'flarum/admin/app';\n\napp.initializers.add('flarum-akismet', () => {\n app.extensionData\n .for('flarum-akismet')\n .registerSetting({\n setting: 'flarum-akismet.api_key',\n type: 'text',\n label: app.translator.trans('flarum-akismet.admin.akismet_settings.api_key_label'),\n })\n .registerSetting({\n //https://blog.akismet.com/2014/04/23/theres-a-ninja-in-your-akismet/\n setting: 'flarum-akismet.delete_blatant_spam',\n type: 'boolean',\n label: app.translator.trans('flarum-akismet.admin.akismet_settings.delete_blatant_spam_label'),\n help: app.translator.trans('flarum-akismet.admin.akismet_settings.delete_blatant_spam_help'),\n })\n .registerPermission(\n {\n icon: 'fas fa-vote-yea',\n label: app.translator.trans('flarum-akismet.admin.permissions.bypass_akismet'),\n permission: 'bypassAkismet',\n },\n 'start'\n );\n});\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","app","registerSetting","setting","type","label","help","registerPermission","icon","permission"],"sourceRoot":""}
|
{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,IACzBH,GCLRF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,MCJ3ER,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,M,+BCLvD,MAAM,EAA+BC,OAAOC,KAAKC,OAAO,a,aCExDC,IAAAA,aAAAA,IAAqB,kBAAkB,WACrCA,IAAAA,cAAAA,IACO,kBACJC,gBAAgB,CACfC,QAAS,yBACTC,KAAM,OACNC,MAAOJ,IAAAA,WAAAA,MAAqB,yDAE7BC,gBAAgB,CAEfC,QAAS,qCACTC,KAAM,UACNC,MAAOJ,IAAAA,WAAAA,MAAqB,mEAC5BK,KAAML,IAAAA,WAAAA,MAAqB,oEAE5BM,mBACC,CACEC,KAAM,kBACNH,MAAOJ,IAAAA,WAAAA,MAAqB,mDAC5BQ,WAAY,iBAEd,a","sources":["webpack://@flarum/akismet/webpack/bootstrap","webpack://@flarum/akismet/webpack/runtime/compat get default export","webpack://@flarum/akismet/webpack/runtime/define property getters","webpack://@flarum/akismet/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/akismet/webpack/runtime/make namespace object","webpack://@flarum/akismet/external root \"flarum.core.compat['admin/app']\"","webpack://@flarum/akismet/./src/admin/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/app'];","import app from 'flarum/admin/app';\n\napp.initializers.add('flarum-akismet', () => {\n app.extensionData\n .for('flarum-akismet')\n .registerSetting({\n setting: 'flarum-akismet.api_key',\n type: 'text',\n label: app.translator.trans('flarum-akismet.admin.akismet_settings.api_key_label'),\n })\n .registerSetting({\n //https://blog.akismet.com/2014/04/23/theres-a-ninja-in-your-akismet/\n setting: 'flarum-akismet.delete_blatant_spam',\n type: 'boolean',\n label: app.translator.trans('flarum-akismet.admin.akismet_settings.delete_blatant_spam_label'),\n help: app.translator.trans('flarum-akismet.admin.akismet_settings.delete_blatant_spam_help'),\n })\n .registerPermission(\n {\n icon: 'fas fa-vote-yea',\n label: app.translator.trans('flarum-akismet.admin.permissions.bypass_akismet'),\n permission: 'bypassAkismet',\n },\n 'start'\n );\n});\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","app","registerSetting","setting","type","label","help","registerPermission","icon","permission"],"sourceRoot":""}
|
2
extensions/akismet/js/dist/forum.js.map
generated
vendored
2
extensions/akismet/js/dist/forum.js.map
generated
vendored
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"forum.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,+BCL9D,MAAM,EAA+BC,OAAOC,KAAKC,OAAO,iBCAlD,EAA+BF,OAAOC,KAAKC,OAAO,a,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,4B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,gC,aCSxDC,IAAAA,aAAAA,IAAqB,kBAAkB,YACrCC,EAAAA,EAAAA,QAAOC,IAAc,uBAAuB,SAAUC,EAAmCC,GACvF,GAAID,EAAME,IAAI,WAAY,CACxB,IAAMC,EAAQF,EAAKE,QAEnB,GAAIA,GAASA,EAAMC,MAAK,SAACC,GAAD,MAA2B,aAAb,MAAJA,OAAA,EAAAA,EAAMC,OAAhB,IAAuC,CAC7D,IAAMC,EAAcP,EAAMf,IAAI,WAC1BsB,GAAsC,iBAAhBA,GAA4B,aAAcA,IAClEA,EAAYC,SAAWX,IAAAA,WAAAA,MAAqB,6CAE/C,CACF,CACF,KAEDY,EAAAA,EAAAA,UAASC,IAAAA,UAAuB,cAAc,SAAUC,EAAUN,GAChE,MAAoB,YAAhBA,EAAKC,OACAT,IAAAA,WAAAA,MAAqB,kDAGvBc,EAASN,EACjB,GACF,G","sources":["webpack://@flarum/akismet/webpack/bootstrap","webpack://@flarum/akismet/webpack/runtime/compat get default export","webpack://@flarum/akismet/webpack/runtime/define property getters","webpack://@flarum/akismet/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/akismet/webpack/runtime/make namespace object","webpack://@flarum/akismet/external root \"flarum.core.compat['common/extend']\"","webpack://@flarum/akismet/external root \"flarum.core.compat['forum/app']\"","webpack://@flarum/akismet/external root \"flarum.core.compat['forum/utils/PostControls']\"","webpack://@flarum/akismet/external root \"flarum.core.compat['forum/components/CommentPost']\"","webpack://@flarum/akismet/./src/forum/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/utils/PostControls'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/CommentPost'];","import { extend, override } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport type Post from 'flarum/common/models/Post';\nimport type ItemList from 'flarum/common/utils/ItemList';\n\nimport PostControls from 'flarum/forum/utils/PostControls';\nimport CommentPost from 'flarum/forum/components/CommentPost';\nimport type Mithril from 'mithril';\n\napp.initializers.add('flarum-akismet', () => {\n extend(PostControls, 'destructiveControls', function (items: ItemList<Mithril.Children>, post: Post) {\n if (items.has('approve')) {\n const flags = post.flags();\n\n if (flags && flags.some((flag) => flag?.type() === 'akismet')) {\n const approveItem = items.get('approve');\n if (approveItem && typeof approveItem === 'object' && 'children' in approveItem) {\n approveItem.children = app.translator.trans('flarum-akismet.forum.post.not_spam_button');\n }\n }\n }\n });\n\n override(CommentPost.prototype, 'flagReason', function (original, flag) {\n if (flag.type() === 'akismet') {\n return app.translator.trans('flarum-akismet.forum.post.akismet_flagged_text');\n }\n\n return original(flag);\n });\n});\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","app","extend","PostControls","items","post","has","flags","some","flag","type","approveItem","children","override","CommentPost","original"],"sourceRoot":""}
|
{"version":3,"file":"forum.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,GCLRF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,MCJ3ER,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,M,+BCLvD,MAAM,EAA+BC,OAAOC,KAAKC,OAAO,iBCAlD,EAA+BF,OAAOC,KAAKC,OAAO,a,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,4B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,gC,aCSxDC,IAAAA,aAAAA,IAAqB,kBAAkB,YACrCC,EAAAA,EAAAA,QAAOC,IAAc,uBAAuB,SAAUC,EAAmCC,GACvF,GAAID,EAAME,IAAI,WAAY,CACxB,IAAMC,EAAQF,EAAKE,QAEnB,GAAIA,GAASA,EAAMC,MAAK,SAACC,GAAD,MAA2B,aAAb,MAAJA,OAAA,EAAAA,EAAMC,WAAuB,CAC7D,IAAMC,EAAcP,EAAMf,IAAI,WAC1BsB,GAAsC,iBAAhBA,GAA4B,aAAcA,IAClEA,EAAYC,SAAWX,IAAAA,WAAAA,MAAqB,oDAMpDY,EAAAA,EAAAA,UAASC,IAAAA,UAAuB,cAAc,SAAUC,EAAUN,GAChE,MAAoB,YAAhBA,EAAKC,OACAT,IAAAA,WAAAA,MAAqB,kDAGvBc,EAASN,U","sources":["webpack://@flarum/akismet/webpack/bootstrap","webpack://@flarum/akismet/webpack/runtime/compat get default export","webpack://@flarum/akismet/webpack/runtime/define property getters","webpack://@flarum/akismet/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/akismet/webpack/runtime/make namespace object","webpack://@flarum/akismet/external root \"flarum.core.compat['common/extend']\"","webpack://@flarum/akismet/external root \"flarum.core.compat['forum/app']\"","webpack://@flarum/akismet/external root \"flarum.core.compat['forum/utils/PostControls']\"","webpack://@flarum/akismet/external root \"flarum.core.compat['forum/components/CommentPost']\"","webpack://@flarum/akismet/./src/forum/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/utils/PostControls'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/CommentPost'];","import { extend, override } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport type Post from 'flarum/common/models/Post';\nimport type ItemList from 'flarum/common/utils/ItemList';\n\nimport PostControls from 'flarum/forum/utils/PostControls';\nimport CommentPost from 'flarum/forum/components/CommentPost';\nimport type Mithril from 'mithril';\n\napp.initializers.add('flarum-akismet', () => {\n extend(PostControls, 'destructiveControls', function (items: ItemList<Mithril.Children>, post: Post) {\n if (items.has('approve')) {\n const flags = post.flags();\n\n if (flags && flags.some((flag) => flag?.type() === 'akismet')) {\n const approveItem = items.get('approve');\n if (approveItem && typeof approveItem === 'object' && 'children' in approveItem) {\n approveItem.children = app.translator.trans('flarum-akismet.forum.post.not_spam_button');\n }\n }\n }\n });\n\n override(CommentPost.prototype, 'flagReason', function (original, flag) {\n if (flag.type() === 'akismet') {\n return app.translator.trans('flarum-akismet.forum.post.akismet_flagged_text');\n }\n\n return original(flag);\n });\n});\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","app","extend","PostControls","items","post","has","flags","some","flag","type","approveItem","children","override","CommentPost","original"],"sourceRoot":""}
|
@@ -9,11 +9,11 @@
|
|||||||
"analyze": "cross-env ANALYZER=true yarn run build",
|
"analyze": "cross-env ANALYZER=true yarn run build",
|
||||||
"format": "prettier --write src",
|
"format": "prettier --write src",
|
||||||
"format-check": "prettier --check src",
|
"format-check": "prettier --check src",
|
||||||
|
"check-typings": "tsc --noEmit --emitDeclarationOnly false",
|
||||||
|
"check-typings-coverage": "typescript-coverage-report",
|
||||||
"clean-typings": "npx rimraf dist-typings && mkdir dist-typings",
|
"clean-typings": "npx rimraf dist-typings && mkdir dist-typings",
|
||||||
"build-typings": "yarn run clean-typings && ([ -e src/@types ] && cp -r src/@types dist-typings/@types || true) && tsc && yarn run post-build-typings",
|
"build-typings": "yarn run clean-typings && ([ -e src/@types ] && cp -r src/@types dist-typings/@types || true) && tsc && yarn run post-build-typings",
|
||||||
"post-build-typings": "find dist-typings -type f -name '*.d.ts' -print0 | xargs -0 sed -i 's,../src/@types,@types,g'",
|
"post-build-typings": "find dist-typings -type f -name '*.d.ts' -print0 | xargs -0 sed -i 's,../src/@types,@types,g'"
|
||||||
"check-typings": "tsc --noEmit --emitDeclarationOnly false",
|
|
||||||
"check-typings-coverage": "typescript-coverage-report"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@flarum/prettier-config": "^1.0.0",
|
"@flarum/prettier-config": "^1.0.0",
|
||||||
|
@@ -4,18 +4,14 @@
|
|||||||
// This will match all .ts, .tsx, .d.ts, .js, .jsx files in your `src` folder
|
// This will match all .ts, .tsx, .d.ts, .js, .jsx files in your `src` folder
|
||||||
// and also tells your Typescript server to read core's global typings for
|
// and also tells your Typescript server to read core's global typings for
|
||||||
// access to `dayjs` and `$` in the global namespace.
|
// access to `dayjs` and `$` in the global namespace.
|
||||||
"include": [
|
"include": ["src/**/*", "../vendor/*/*/js/dist-typings/@types/**/*", "@types/**/*"],
|
||||||
"src/**/*",
|
|
||||||
"../../../framework/core/js/dist-typings/@types/**/*",
|
|
||||||
"../../flags/js/dist-typings/@types/**/*",
|
|
||||||
"@types/**/*"
|
|
||||||
],
|
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
// This will output typings to `dist-typings`
|
// This will output typings to `dist-typings`
|
||||||
"declarationDir": "./dist-typings",
|
"declarationDir": "./dist-typings",
|
||||||
|
"baseUrl": ".",
|
||||||
"paths": {
|
"paths": {
|
||||||
"flarum/*": ["../../../framework/core/js/dist-typings/*"],
|
"flarum/*": ["../vendor/flarum/core/js/dist-typings/*"],
|
||||||
"flarum/flags/*": ["../../flags/js/dist-typings/*"]
|
"flarum/flags/*": ["../vendor/flarum/flags/js/dist-typings/*"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -38,7 +38,7 @@ class AkismetProvider extends AbstractServiceProvider
|
|||||||
$settings->get('flarum-akismet.api_key'),
|
$settings->get('flarum-akismet.api_key'),
|
||||||
$url->to('forum')->base(),
|
$url->to('forum')->base(),
|
||||||
$app::VERSION,
|
$app::VERSION,
|
||||||
$extensions->getExtension('flarum-akismet')->getVersion() ?? 'unknown',
|
$extensions->getExtension('flarum-akismet')->getVersion(),
|
||||||
$config->inDebugMode()
|
$config->inDebugMode()
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
19
extensions/approval/.editorconfig
Normal file
19
extensions/approval/.editorconfig
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# EditorConfig helps developers define and maintain consistent
|
||||||
|
# coding styles between different editors and IDEs
|
||||||
|
# editorconfig.org
|
||||||
|
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
end_of_line = lf
|
||||||
|
charset = utf-8
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
insert_final_newline = true
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
[*.{diff,md}]
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
|
||||||
|
[*.{php,xml,json}]
|
||||||
|
indent_size = 4
|
20
extensions/approval/.gitattributes
vendored
20
extensions/approval/.gitattributes
vendored
@@ -1,20 +0,0 @@
|
|||||||
**/.gitattributes export-ignore
|
|
||||||
**/.gitignore export-ignore
|
|
||||||
**/.gitmodules export-ignore
|
|
||||||
**/.github export-ignore
|
|
||||||
**/.travis export-ignore
|
|
||||||
**/.travis.yml export-ignore
|
|
||||||
**/.editorconfig export-ignore
|
|
||||||
**/.styleci.yml export-ignore
|
|
||||||
|
|
||||||
**/phpunit.xml export-ignore
|
|
||||||
**/tests export-ignore
|
|
||||||
|
|
||||||
**/js/dist/**/* -diff
|
|
||||||
**/js/dist/**/* linguist-generated
|
|
||||||
**/js/dist-typings/**/* -diff
|
|
||||||
**/js/dist-typings/**/* linguist-generated
|
|
||||||
**/js/yarn.lock -diff
|
|
||||||
**/js/package-lock.json -diff
|
|
||||||
|
|
||||||
* text=auto eol=lf
|
|
@@ -7,7 +7,7 @@
|
|||||||
],
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/flarum/framework/issues",
|
"issues": "https://github.com/flarum/core/issues",
|
||||||
"source": "https://github.com/flarum/approval",
|
"source": "https://github.com/flarum/approval",
|
||||||
"forum": "https://discuss.flarum.org"
|
"forum": "https://discuss.flarum.org"
|
||||||
},
|
},
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"flarum/core": "^1.6",
|
"flarum/core": "^1.3",
|
||||||
"flarum/flags": "^1.2"
|
"flarum/flags": "^1.2"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -52,7 +52,7 @@
|
|||||||
"prettier": true,
|
"prettier": true,
|
||||||
"typescript": false,
|
"typescript": false,
|
||||||
"bundlewatch": false,
|
"bundlewatch": false,
|
||||||
"backendTesting": true,
|
"backendTesting": false,
|
||||||
"editorConfig": true,
|
"editorConfig": true,
|
||||||
"styleci": true
|
"styleci": true
|
||||||
}
|
}
|
||||||
@@ -65,28 +65,5 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"minimum-stability": "dev",
|
"minimum-stability": "dev",
|
||||||
"prefer-stable": true,
|
"prefer-stable": true
|
||||||
"autoload-dev": {
|
|
||||||
"psr-4": {
|
|
||||||
"Flarum\\Approval\\Tests\\": "tests/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": [
|
|
||||||
"@test:unit",
|
|
||||||
"@test:integration"
|
|
||||||
],
|
|
||||||
"test:unit": "phpunit -c tests/phpunit.unit.xml",
|
|
||||||
"test:integration": "phpunit -c tests/phpunit.integration.xml",
|
|
||||||
"test:setup": "@php tests/integration/setup.php"
|
|
||||||
},
|
|
||||||
"scripts-descriptions": {
|
|
||||||
"test": "Runs all tests.",
|
|
||||||
"test:unit": "Runs all unit tests.",
|
|
||||||
"test:integration": "Runs all integration tests.",
|
|
||||||
"test:setup": "Sets up a database for use with integration tests. Execute this only once."
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"flarum/testing": "^1.0.0"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -15,6 +15,7 @@ use Flarum\Approval\Listener;
|
|||||||
use Flarum\Discussion\Discussion;
|
use Flarum\Discussion\Discussion;
|
||||||
use Flarum\Extend;
|
use Flarum\Extend;
|
||||||
use Flarum\Post\CommentPost;
|
use Flarum\Post\CommentPost;
|
||||||
|
use Flarum\Post\Event\Saving;
|
||||||
use Flarum\Post\Post;
|
use Flarum\Post\Post;
|
||||||
use Flarum\Tags\Tag;
|
use Flarum\Tags\Tag;
|
||||||
|
|
||||||
@@ -49,9 +50,9 @@ return [
|
|||||||
new Extend\Locales(__DIR__.'/locale'),
|
new Extend\Locales(__DIR__.'/locale'),
|
||||||
|
|
||||||
(new Extend\Event())
|
(new Extend\Event())
|
||||||
->listen(PostWasApproved::class, Listener\UpdateDiscussionAfterPostApproval::class)
|
->listen(Saving::class, [Listener\ApproveContent::class, 'approvePost'])
|
||||||
->subscribe(Listener\ApproveContent::class)
|
->listen(Saving::class, [Listener\UnapproveNewContent::class, 'unapproveNewPosts'])
|
||||||
->subscribe(Listener\UnapproveNewContent::class),
|
->listen(PostWasApproved::class, [Listener\ApproveContent::class, 'approveDiscussion']),
|
||||||
|
|
||||||
(new Extend\Policy())
|
(new Extend\Policy())
|
||||||
->modelPolicy(Tag::class, Access\TagPolicy::class),
|
->modelPolicy(Tag::class, Access\TagPolicy::class),
|
||||||
|
2
extensions/approval/js/dist/admin.js.map
generated
vendored
2
extensions/approval/js/dist/admin.js.map
generated
vendored
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,+BCL9D,MAAM,EAA+BC,OAAOC,KAAKC,OAAO,iBCAlD,EAA+BF,OAAOC,KAAKC,OAAO,a,aCGxDC,IAAAA,aAAAA,IAAqB,mBAAmB,YACtCC,EAAAA,EAAAA,QAAOD,IAAK,0BAA0B,SAAUE,EAAUC,GACrC,oCAAfA,GACFD,EAASE,KAAK,mBAEG,oCAAfD,GACFD,EAASE,KAAK,mBAEjB,IAEDJ,IAAAA,cAAAA,IACO,mBACJK,mBACC,CACEC,KAAM,eACNC,MAAOP,IAAAA,WAAAA,MAAqB,8EAC5BG,WAAY,mCAEd,QACA,IAEDE,mBACC,CACEC,KAAM,eACNC,MAAOP,IAAAA,WAAAA,MAAqB,kEAC5BG,WAAY,mCAEd,QACA,IAEDE,mBACC,CACEC,KAAM,eACNC,MAAOP,IAAAA,WAAAA,MAAqB,yDAC5BG,WAAY,2BAEd,WACA,GAEL,G","sources":["webpack://@flarum/approval/webpack/bootstrap","webpack://@flarum/approval/webpack/runtime/compat get default export","webpack://@flarum/approval/webpack/runtime/define property getters","webpack://@flarum/approval/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/approval/webpack/runtime/make namespace object","webpack://@flarum/approval/external root \"flarum.core.compat['common/extend']\"","webpack://@flarum/approval/external root \"flarum.core.compat['admin/app']\"","webpack://@flarum/approval/./src/admin/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/app'];","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/admin/app';\n\napp.initializers.add('flarum-approval', () => {\n extend(app, 'getRequiredPermissions', function (required, permission) {\n if (permission === 'discussion.startWithoutApproval') {\n required.push('startDiscussion');\n }\n if (permission === 'discussion.replyWithoutApproval') {\n required.push('discussion.reply');\n }\n });\n\n app.extensionData\n .for('flarum-approval')\n .registerPermission(\n {\n icon: 'fas fa-check',\n label: app.translator.trans('flarum-approval.admin.permissions.start_discussions_without_approval_label'),\n permission: 'discussion.startWithoutApproval',\n },\n 'start',\n 95\n )\n .registerPermission(\n {\n icon: 'fas fa-check',\n label: app.translator.trans('flarum-approval.admin.permissions.reply_without_approval_label'),\n permission: 'discussion.replyWithoutApproval',\n },\n 'reply',\n 95\n )\n .registerPermission(\n {\n icon: 'fas fa-check',\n label: app.translator.trans('flarum-approval.admin.permissions.approve_posts_label'),\n permission: 'discussion.approvePosts',\n },\n 'moderate',\n 65\n );\n});\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","app","extend","required","permission","push","registerPermission","icon","label"],"sourceRoot":""}
|
{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,GCLRF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,MCJ3ER,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,M,+BCLvD,MAAM,EAA+BC,OAAOC,KAAKC,OAAO,iBCAlD,EAA+BF,OAAOC,KAAKC,OAAO,a,aCGxDC,IAAAA,aAAAA,IAAqB,mBAAmB,YACtCC,EAAAA,EAAAA,QAAOD,IAAK,0BAA0B,SAAUE,EAAUC,GACrC,oCAAfA,GACFD,EAASE,KAAK,mBAEG,oCAAfD,GACFD,EAASE,KAAK,uBAIlBJ,IAAAA,cAAAA,IACO,mBACJK,mBACC,CACEC,KAAM,eACNC,MAAOP,IAAAA,WAAAA,MAAqB,8EAC5BG,WAAY,mCAEd,QACA,IAEDE,mBACC,CACEC,KAAM,eACNC,MAAOP,IAAAA,WAAAA,MAAqB,kEAC5BG,WAAY,mCAEd,QACA,IAEDE,mBACC,CACEC,KAAM,eACNC,MAAOP,IAAAA,WAAAA,MAAqB,yDAC5BG,WAAY,2BAEd,WACA,Q","sources":["webpack://@flarum/approval/webpack/bootstrap","webpack://@flarum/approval/webpack/runtime/compat get default export","webpack://@flarum/approval/webpack/runtime/define property getters","webpack://@flarum/approval/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/approval/webpack/runtime/make namespace object","webpack://@flarum/approval/external root \"flarum.core.compat['common/extend']\"","webpack://@flarum/approval/external root \"flarum.core.compat['admin/app']\"","webpack://@flarum/approval/./src/admin/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/app'];","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/admin/app';\n\napp.initializers.add('flarum-approval', () => {\n extend(app, 'getRequiredPermissions', function (required, permission) {\n if (permission === 'discussion.startWithoutApproval') {\n required.push('startDiscussion');\n }\n if (permission === 'discussion.replyWithoutApproval') {\n required.push('discussion.reply');\n }\n });\n\n app.extensionData\n .for('flarum-approval')\n .registerPermission(\n {\n icon: 'fas fa-check',\n label: app.translator.trans('flarum-approval.admin.permissions.start_discussions_without_approval_label'),\n permission: 'discussion.startWithoutApproval',\n },\n 'start',\n 95\n )\n .registerPermission(\n {\n icon: 'fas fa-check',\n label: app.translator.trans('flarum-approval.admin.permissions.reply_without_approval_label'),\n permission: 'discussion.replyWithoutApproval',\n },\n 'reply',\n 95\n )\n .registerPermission(\n {\n icon: 'fas fa-check',\n label: app.translator.trans('flarum-approval.admin.permissions.approve_posts_label'),\n permission: 'discussion.approvePosts',\n },\n 'moderate',\n 65\n );\n});\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","app","extend","required","permission","push","registerPermission","icon","label"],"sourceRoot":""}
|
2
extensions/approval/js/dist/forum.js.map
generated
vendored
2
extensions/approval/js/dist/forum.js.map
generated
vendored
File diff suppressed because one or more lines are too long
@@ -9,7 +9,6 @@
|
|||||||
|
|
||||||
namespace Flarum\Approval\Access;
|
namespace Flarum\Approval\Access;
|
||||||
|
|
||||||
use Closure;
|
|
||||||
use Flarum\Discussion\Discussion;
|
use Flarum\Discussion\Discussion;
|
||||||
use Flarum\User\User;
|
use Flarum\User\User;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
@@ -40,23 +39,14 @@ class ScopePrivatePostVisibility
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
private function discussionWhereCanApprovePosts(User $actor)
|
||||||
* Looks if the actor has permission to approve posts,
|
|
||||||
* within the discussion which the post is a part of.
|
|
||||||
*
|
|
||||||
* For example, the tags extension,
|
|
||||||
* turns the `approvePosts` ability into per tag basis.
|
|
||||||
*/
|
|
||||||
private function discussionWhereCanApprovePosts(User $actor): Closure
|
|
||||||
{
|
{
|
||||||
return function ($query) use ($actor) {
|
return function ($query) use ($actor) {
|
||||||
$query->selectRaw('1')
|
$query->selectRaw('1')
|
||||||
->from('discussions')
|
->from('discussions')
|
||||||
->whereColumn('discussions.id', 'posts.discussion_id')
|
->whereColumn('discussions.id', 'posts.discussion_id')
|
||||||
->where(function ($query) use ($actor) {
|
->where(function ($query) use ($actor) {
|
||||||
$query->whereRaw('1 != 1')->orWhere(function ($query) use ($actor) {
|
Discussion::query()->setQuery($query)->whereVisibleTo($actor, 'approvePosts');
|
||||||
Discussion::query()->setQuery($query)->whereVisibleTo($actor, 'approvePosts');
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@@ -11,19 +11,13 @@ namespace Flarum\Approval\Listener;
|
|||||||
|
|
||||||
use Flarum\Approval\Event\PostWasApproved;
|
use Flarum\Approval\Event\PostWasApproved;
|
||||||
use Flarum\Post\Event\Saving;
|
use Flarum\Post\Event\Saving;
|
||||||
use Illuminate\Contracts\Events\Dispatcher;
|
|
||||||
|
|
||||||
class ApproveContent
|
class ApproveContent
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @param Dispatcher $events
|
* @param Saving $event
|
||||||
*/
|
*/
|
||||||
public function subscribe(Dispatcher $events)
|
public static function approvePost(Saving $event)
|
||||||
{
|
|
||||||
$events->listen(Saving::class, [$this, 'approvePost']);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function approvePost(Saving $event)
|
|
||||||
{
|
{
|
||||||
$attributes = $event->data['attributes'];
|
$attributes = $event->data['attributes'];
|
||||||
$post = $event->post;
|
$post = $event->post;
|
||||||
@@ -42,4 +36,30 @@ class ApproveContent
|
|||||||
$post->raise(new PostWasApproved($post, $event->actor));
|
$post->raise(new PostWasApproved($post, $event->actor));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param PostWasApproved $event
|
||||||
|
*/
|
||||||
|
public static function approveDiscussion(PostWasApproved $event)
|
||||||
|
{
|
||||||
|
$post = $event->post;
|
||||||
|
$discussion = $post->discussion;
|
||||||
|
$user = $discussion->user;
|
||||||
|
|
||||||
|
$discussion->refreshCommentCount();
|
||||||
|
$discussion->refreshLastPost();
|
||||||
|
|
||||||
|
if ($post->number == 1) {
|
||||||
|
$discussion->is_approved = true;
|
||||||
|
|
||||||
|
$discussion->afterSave(function () use ($user) {
|
||||||
|
$user->refreshDiscussionCount();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$discussion->save();
|
||||||
|
|
||||||
|
$user->refreshCommentCount();
|
||||||
|
$user->save();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -13,22 +13,13 @@ use Flarum\Discussion\Discussion;
|
|||||||
use Flarum\Flags\Flag;
|
use Flarum\Flags\Flag;
|
||||||
use Flarum\Post\CommentPost;
|
use Flarum\Post\CommentPost;
|
||||||
use Flarum\Post\Event\Saving;
|
use Flarum\Post\Event\Saving;
|
||||||
use Illuminate\Contracts\Events\Dispatcher;
|
|
||||||
|
|
||||||
class UnapproveNewContent
|
class UnapproveNewContent
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* @param Dispatcher $events
|
|
||||||
*/
|
|
||||||
public function subscribe(Dispatcher $events)
|
|
||||||
{
|
|
||||||
$events->listen(Saving::class, [$this, 'unapproveNewPosts']);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Saving $event
|
* @param Saving $event
|
||||||
*/
|
*/
|
||||||
public function unapproveNewPosts(Saving $event)
|
public static function unapproveNewPosts(Saving $event)
|
||||||
{
|
{
|
||||||
$post = $event->post;
|
$post = $event->post;
|
||||||
|
|
||||||
|
@@ -1,40 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Flarum.
|
|
||||||
*
|
|
||||||
* For detailed copyright and license information, please view the
|
|
||||||
* LICENSE file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Flarum\Approval\Listener;
|
|
||||||
|
|
||||||
use Flarum\Approval\Event\PostWasApproved;
|
|
||||||
|
|
||||||
class UpdateDiscussionAfterPostApproval
|
|
||||||
{
|
|
||||||
public function handle(PostWasApproved $event)
|
|
||||||
{
|
|
||||||
$post = $event->post;
|
|
||||||
$discussion = $post->discussion;
|
|
||||||
$user = $discussion->user;
|
|
||||||
|
|
||||||
$discussion->refreshCommentCount();
|
|
||||||
$discussion->refreshLastPost();
|
|
||||||
|
|
||||||
if ($post->number == 1) {
|
|
||||||
$discussion->is_approved = true;
|
|
||||||
|
|
||||||
$discussion->afterSave(function () use ($user) {
|
|
||||||
$user->refreshDiscussionCount();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
$discussion->save();
|
|
||||||
|
|
||||||
if ($discussion->user) {
|
|
||||||
$user->refreshCommentCount();
|
|
||||||
$user->save();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,75 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Flarum.
|
|
||||||
*
|
|
||||||
* For detailed copyright and license information, please view the
|
|
||||||
* LICENSE file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Flarum\Approval\Tests\integration;
|
|
||||||
|
|
||||||
use Carbon\Carbon;
|
|
||||||
|
|
||||||
trait InteractsWithUnapprovedContent
|
|
||||||
{
|
|
||||||
protected function prepareUnapprovedDatabaseContent()
|
|
||||||
{
|
|
||||||
$this->prepareDatabase([
|
|
||||||
'users' => [
|
|
||||||
['id' => 1, 'username' => 'Muralf', 'email' => 'muralf@machine.local', 'is_email_confirmed' => 1],
|
|
||||||
$this->normalUser(),
|
|
||||||
['id' => 3, 'username' => 'acme', 'email' => 'acme@machine.local', 'is_email_confirmed' => 1],
|
|
||||||
['id' => 4, 'username' => 'luceos', 'email' => 'luceos@machine.local', 'is_email_confirmed' => 1],
|
|
||||||
],
|
|
||||||
'discussions' => [
|
|
||||||
['id' => 1, 'title' => __CLASS__, 'created_at' => Carbon::now(), 'last_posted_at' => Carbon::now(), 'user_id' => 4, 'first_post_id' => 1, 'comment_count' => 1, 'is_approved' => 1, 'is_private' => 0],
|
|
||||||
['id' => 2, 'title' => __CLASS__, 'created_at' => Carbon::now(), 'last_posted_at' => Carbon::now(), 'user_id' => 4, 'first_post_id' => 2, 'comment_count' => 1, 'is_approved' => 0, 'is_private' => 1],
|
|
||||||
['id' => 3, 'title' => __CLASS__, 'created_at' => Carbon::now(), 'last_posted_at' => Carbon::now(), 'user_id' => 4, 'first_post_id' => 3, 'comment_count' => 1, 'is_approved' => 0, 'is_private' => 1],
|
|
||||||
['id' => 4, 'title' => __CLASS__, 'created_at' => Carbon::now(), 'last_posted_at' => Carbon::now(), 'user_id' => 4, 'first_post_id' => 4, 'comment_count' => 1, 'is_approved' => 1, 'is_private' => 0],
|
|
||||||
['id' => 5, 'title' => __CLASS__, 'created_at' => Carbon::now(), 'last_posted_at' => Carbon::now(), 'user_id' => 4, 'first_post_id' => 5, 'comment_count' => 1, 'is_approved' => 1, 'is_private' => 0],
|
|
||||||
['id' => 6, 'title' => __CLASS__, 'created_at' => Carbon::now(), 'last_posted_at' => Carbon::now(), 'user_id' => 4, 'first_post_id' => 6, 'comment_count' => 1, 'is_approved' => 0, 'is_private' => 1],
|
|
||||||
['id' => 7, 'title' => __CLASS__, 'created_at' => Carbon::now(), 'last_posted_at' => Carbon::now(), 'user_id' => 4, 'first_post_id' => 7, 'comment_count' => 1, 'is_approved' => 1, 'is_private' => 0],
|
|
||||||
],
|
|
||||||
'posts' => [
|
|
||||||
['id' => 1, 'discussion_id' => 1, 'user_id' => 4, 'type' => 'comment', 'content' => '<t><p>Text</p></t>', 'is_private' => 0, 'is_approved' => 1, 'number' => 1],
|
|
||||||
['id' => 2, 'discussion_id' => 2, 'user_id' => 4, 'type' => 'comment', 'content' => '<t><p>Text</p></t>', 'is_private' => 0, 'is_approved' => 1, 'number' => 1],
|
|
||||||
['id' => 3, 'discussion_id' => 3, 'user_id' => 4, 'type' => 'comment', 'content' => '<t><p>Text</p></t>', 'is_private' => 0, 'is_approved' => 1, 'number' => 1],
|
|
||||||
['id' => 4, 'discussion_id' => 4, 'user_id' => 4, 'type' => 'comment', 'content' => '<t><p>Text</p></t>', 'is_private' => 0, 'is_approved' => 1, 'number' => 1],
|
|
||||||
['id' => 5, 'discussion_id' => 5, 'user_id' => 4, 'type' => 'comment', 'content' => '<t><p>Text</p></t>', 'is_private' => 0, 'is_approved' => 1, 'number' => 1],
|
|
||||||
['id' => 6, 'discussion_id' => 6, 'user_id' => 4, 'type' => 'comment', 'content' => '<t><p>Text</p></t>', 'is_private' => 0, 'is_approved' => 1, 'number' => 1],
|
|
||||||
['id' => 7, 'discussion_id' => 7, 'user_id' => 4, 'type' => 'comment', 'content' => '<t><p>Text</p></t>', 'is_private' => 0, 'is_approved' => 1, 'number' => 1],
|
|
||||||
|
|
||||||
['id' => 8, 'discussion_id' => 7, 'user_id' => 4, 'type' => 'comment', 'content' => '<t><p>Text</p></t>', 'is_private' => 0, 'is_approved' => 1, 'number' => 2],
|
|
||||||
['id' => 9, 'discussion_id' => 7, 'user_id' => 4, 'type' => 'comment', 'content' => '<t><p>Text</p></t>', 'is_private' => 1, 'is_approved' => 0, 'number' => 3],
|
|
||||||
['id' => 10, 'discussion_id' => 7, 'user_id' => 4, 'type' => 'comment', 'content' => '<t><p>Text</p></t>', 'is_private' => 0, 'is_approved' => 1, 'number' => 4],
|
|
||||||
['id' => 11, 'discussion_id' => 7, 'user_id' => 4, 'type' => 'comment', 'content' => '<t><p>Text</p></t>', 'is_private' => 1, 'is_approved' => 0, 'number' => 5],
|
|
||||||
],
|
|
||||||
'groups' => [
|
|
||||||
['id' => 4, 'name_singular' => 'Acme', 'name_plural' => 'Acme', 'is_hidden' => 0]
|
|
||||||
],
|
|
||||||
'group_user' => [
|
|
||||||
['user_id' => 3, 'group_id' => 4]
|
|
||||||
],
|
|
||||||
'group_permission' => [
|
|
||||||
['permission' => 'discussion.approvePosts', 'group_id' => 4]
|
|
||||||
]
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* null: Guest, 2: Normal User.
|
|
||||||
*/
|
|
||||||
public function unallowedUsers(): array
|
|
||||||
{
|
|
||||||
return [[null], [2]];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 1: Admin, 3: Permission Given, 4: Discussions Author.
|
|
||||||
*/
|
|
||||||
public function allowedUsers(): array
|
|
||||||
{
|
|
||||||
return [[1], [3], [4]];
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,62 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Flarum.
|
|
||||||
*
|
|
||||||
* For detailed copyright and license information, please view the
|
|
||||||
* LICENSE file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Flarum\Approval\Tests\integration\api;
|
|
||||||
|
|
||||||
use Flarum\Approval\Tests\integration\InteractsWithUnapprovedContent;
|
|
||||||
use Flarum\Testing\integration\RetrievesAuthorizedUsers;
|
|
||||||
use Flarum\Testing\integration\TestCase;
|
|
||||||
use Illuminate\Support\Arr;
|
|
||||||
|
|
||||||
class ListDiscussionsTest extends TestCase
|
|
||||||
{
|
|
||||||
use RetrievesAuthorizedUsers;
|
|
||||||
use InteractsWithUnapprovedContent;
|
|
||||||
|
|
||||||
protected function setUp(): void
|
|
||||||
{
|
|
||||||
parent::setUp();
|
|
||||||
|
|
||||||
$this->extension('flarum-approval');
|
|
||||||
|
|
||||||
$this->prepareUnapprovedDatabaseContent();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @dataProvider unallowedUsers
|
|
||||||
* @test
|
|
||||||
*/
|
|
||||||
public function can_only_see_approved_if_not_allowed_to_approve(?int $authenticatedAs)
|
|
||||||
{
|
|
||||||
$response = $this->send(
|
|
||||||
$this->request('GET', '/api/discussions', compact('authenticatedAs'))
|
|
||||||
);
|
|
||||||
|
|
||||||
$body = json_decode($response->getBody()->getContents(), true);
|
|
||||||
|
|
||||||
$this->assertEquals(200, $response->getStatusCode());
|
|
||||||
$this->assertEqualsCanonicalizing([1, 4, 5, 7], Arr::pluck($body['data'], 'id'));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @dataProvider allowedUsers
|
|
||||||
* @test
|
|
||||||
*/
|
|
||||||
public function can_see_unapproved_if_allowed_to_approve(int $authenticatedAs)
|
|
||||||
{
|
|
||||||
$response = $this->send(
|
|
||||||
$this->request('GET', '/api/discussions', compact('authenticatedAs'))
|
|
||||||
);
|
|
||||||
|
|
||||||
$body = json_decode($response->getBody()->getContents(), true);
|
|
||||||
|
|
||||||
$this->assertEquals(200, $response->getStatusCode());
|
|
||||||
$this->assertEqualsCanonicalizing([1, 2, 3, 4, 5, 6, 7], Arr::pluck($body['data'], 'id'));
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,74 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Flarum.
|
|
||||||
*
|
|
||||||
* For detailed copyright and license information, please view the
|
|
||||||
* LICENSE file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Flarum\Approval\Tests\integration\api;
|
|
||||||
|
|
||||||
use Flarum\Approval\Tests\integration\InteractsWithUnapprovedContent;
|
|
||||||
use Flarum\Testing\integration\RetrievesAuthorizedUsers;
|
|
||||||
use Flarum\Testing\integration\TestCase;
|
|
||||||
use Illuminate\Support\Arr;
|
|
||||||
|
|
||||||
class ListPostsTest extends TestCase
|
|
||||||
{
|
|
||||||
use RetrievesAuthorizedUsers;
|
|
||||||
use InteractsWithUnapprovedContent;
|
|
||||||
|
|
||||||
protected function setUp(): void
|
|
||||||
{
|
|
||||||
parent::setUp();
|
|
||||||
|
|
||||||
$this->extension('flarum-approval');
|
|
||||||
|
|
||||||
$this->prepareUnapprovedDatabaseContent();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @dataProvider unallowedUsers
|
|
||||||
* @test
|
|
||||||
*/
|
|
||||||
public function can_only_see_approved_if_not_allowed_to_approve(?int $authenticatedAs)
|
|
||||||
{
|
|
||||||
$response = $this->send(
|
|
||||||
$this
|
|
||||||
->request('GET', '/api/posts', compact('authenticatedAs'))
|
|
||||||
->withQueryParams([
|
|
||||||
'filter' => [
|
|
||||||
'discussion' => 7
|
|
||||||
]
|
|
||||||
])
|
|
||||||
);
|
|
||||||
|
|
||||||
$body = json_decode($response->getBody()->getContents(), true);
|
|
||||||
|
|
||||||
$this->assertEquals(200, $response->getStatusCode());
|
|
||||||
$this->assertEqualsCanonicalizing([7, 8, 10], Arr::pluck($body['data'], 'id'));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @dataProvider allowedUsers
|
|
||||||
* @test
|
|
||||||
*/
|
|
||||||
public function can_see_unapproved_if_allowed_to_approve(int $authenticatedAs)
|
|
||||||
{
|
|
||||||
$response = $this->send(
|
|
||||||
$this
|
|
||||||
->request('GET', '/api/posts', compact('authenticatedAs'))
|
|
||||||
->withQueryParams([
|
|
||||||
'filter' => [
|
|
||||||
'discussion' => 7
|
|
||||||
]
|
|
||||||
])
|
|
||||||
);
|
|
||||||
|
|
||||||
$body = json_decode($response->getBody()->getContents(), true);
|
|
||||||
|
|
||||||
$this->assertEquals(200, $response->getStatusCode());
|
|
||||||
$this->assertEqualsCanonicalizing([7, 8, 9, 10, 11], Arr::pluck($body['data'], 'id'));
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,16 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Flarum.
|
|
||||||
*
|
|
||||||
* For detailed copyright and license information, please view the
|
|
||||||
* LICENSE file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
use Flarum\Testing\integration\Setup\SetupScript;
|
|
||||||
|
|
||||||
require __DIR__.'/../../vendor/autoload.php';
|
|
||||||
|
|
||||||
$setup = new SetupScript();
|
|
||||||
|
|
||||||
$setup->run();
|
|
@@ -1,25 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<phpunit
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd"
|
|
||||||
backupGlobals="false"
|
|
||||||
backupStaticAttributes="false"
|
|
||||||
colors="true"
|
|
||||||
convertErrorsToExceptions="true"
|
|
||||||
convertNoticesToExceptions="true"
|
|
||||||
convertWarningsToExceptions="true"
|
|
||||||
processIsolation="true"
|
|
||||||
stopOnFailure="false"
|
|
||||||
>
|
|
||||||
<coverage processUncoveredFiles="true">
|
|
||||||
<include>
|
|
||||||
<directory suffix=".php">../src/</directory>
|
|
||||||
</include>
|
|
||||||
</coverage>
|
|
||||||
<testsuites>
|
|
||||||
<testsuite name="Flarum Integration Tests">
|
|
||||||
<directory suffix="Test.php">./integration</directory>
|
|
||||||
<exclude>./integration/tmp</exclude>
|
|
||||||
</testsuite>
|
|
||||||
</testsuites>
|
|
||||||
</phpunit>
|
|
@@ -1,27 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<phpunit
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd"
|
|
||||||
backupGlobals="false"
|
|
||||||
backupStaticAttributes="false"
|
|
||||||
colors="true"
|
|
||||||
convertErrorsToExceptions="true"
|
|
||||||
convertNoticesToExceptions="true"
|
|
||||||
convertWarningsToExceptions="true"
|
|
||||||
processIsolation="false"
|
|
||||||
stopOnFailure="false"
|
|
||||||
>
|
|
||||||
<coverage processUncoveredFiles="true">
|
|
||||||
<include>
|
|
||||||
<directory suffix=".php">../src/</directory>
|
|
||||||
</include>
|
|
||||||
</coverage>
|
|
||||||
<testsuites>
|
|
||||||
<testsuite name="Flarum Unit Tests">
|
|
||||||
<directory suffix="Test.php">./unit</directory>
|
|
||||||
</testsuite>
|
|
||||||
</testsuites>
|
|
||||||
<listeners>
|
|
||||||
<listener class="\Mockery\Adapter\Phpunit\TestListener" />
|
|
||||||
</listeners>
|
|
||||||
</phpunit>
|
|
19
extensions/bbcode/.editorconfig
Normal file
19
extensions/bbcode/.editorconfig
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# EditorConfig helps developers define and maintain consistent
|
||||||
|
# coding styles between different editors and IDEs
|
||||||
|
# editorconfig.org
|
||||||
|
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
end_of_line = lf
|
||||||
|
charset = utf-8
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
insert_final_newline = true
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
[*.{diff,md}]
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
|
||||||
|
[*.{php,xml,json}]
|
||||||
|
indent_size = 4
|
20
extensions/bbcode/.gitattributes
vendored
20
extensions/bbcode/.gitattributes
vendored
@@ -1,20 +0,0 @@
|
|||||||
**/.gitattributes export-ignore
|
|
||||||
**/.gitignore export-ignore
|
|
||||||
**/.gitmodules export-ignore
|
|
||||||
**/.github export-ignore
|
|
||||||
**/.travis export-ignore
|
|
||||||
**/.travis.yml export-ignore
|
|
||||||
**/.editorconfig export-ignore
|
|
||||||
**/.styleci.yml export-ignore
|
|
||||||
|
|
||||||
**/phpunit.xml export-ignore
|
|
||||||
**/tests export-ignore
|
|
||||||
|
|
||||||
**/js/dist/**/* -diff
|
|
||||||
**/js/dist/**/* linguist-generated
|
|
||||||
**/js/dist-typings/**/* -diff
|
|
||||||
**/js/dist-typings/**/* linguist-generated
|
|
||||||
**/js/yarn.lock -diff
|
|
||||||
**/js/package-lock.json -diff
|
|
||||||
|
|
||||||
* text=auto eol=lf
|
|
@@ -7,7 +7,7 @@
|
|||||||
],
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/flarum/framework/issues",
|
"issues": "https://github.com/flarum/core/issues",
|
||||||
"source": "https://github.com/flarum/bbcode",
|
"source": "https://github.com/flarum/bbcode",
|
||||||
"forum": "https://discuss.flarum.org"
|
"forum": "https://discuss.flarum.org"
|
||||||
},
|
},
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"flarum/core": "^1.6"
|
"flarum/core": "^1.3"
|
||||||
},
|
},
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
|
19
extensions/embed/.editorconfig
Normal file
19
extensions/embed/.editorconfig
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# EditorConfig helps developers define and maintain consistent
|
||||||
|
# coding styles between different editors and IDEs
|
||||||
|
# editorconfig.org
|
||||||
|
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
end_of_line = lf
|
||||||
|
charset = utf-8
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
insert_final_newline = true
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
[*.{diff,md}]
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
|
||||||
|
[*.{php,xml,json}]
|
||||||
|
indent_size = 4
|
20
extensions/embed/.gitattributes
vendored
20
extensions/embed/.gitattributes
vendored
@@ -1,20 +0,0 @@
|
|||||||
**/.gitattributes export-ignore
|
|
||||||
**/.gitignore export-ignore
|
|
||||||
**/.gitmodules export-ignore
|
|
||||||
**/.github export-ignore
|
|
||||||
**/.travis export-ignore
|
|
||||||
**/.travis.yml export-ignore
|
|
||||||
**/.editorconfig export-ignore
|
|
||||||
**/.styleci.yml export-ignore
|
|
||||||
|
|
||||||
**/phpunit.xml export-ignore
|
|
||||||
**/tests export-ignore
|
|
||||||
|
|
||||||
**/js/dist/**/* -diff
|
|
||||||
**/js/dist/**/* linguist-generated
|
|
||||||
**/js/dist-typings/**/* -diff
|
|
||||||
**/js/dist-typings/**/* linguist-generated
|
|
||||||
**/js/yarn.lock -diff
|
|
||||||
**/js/package-lock.json -diff
|
|
||||||
|
|
||||||
* text=auto eol=lf
|
|
@@ -7,7 +7,7 @@
|
|||||||
],
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/flarum/framework/issues",
|
"issues": "https://github.com/flarum/core/issues",
|
||||||
"source": "https://github.com/flarum/embed",
|
"source": "https://github.com/flarum/embed",
|
||||||
"forum": "https://discuss.flarum.org"
|
"forum": "https://discuss.flarum.org"
|
||||||
},
|
},
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"flarum/core": "^1.6"
|
"flarum/core": "^1.3"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
|
2
extensions/embed/js/dist/forum.js.map
generated
vendored
2
extensions/embed/js/dist/forum.js.map
generated
vendored
File diff suppressed because one or more lines are too long
19
extensions/emoji/.editorconfig
Normal file
19
extensions/emoji/.editorconfig
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# EditorConfig helps developers define and maintain consistent
|
||||||
|
# coding styles between different editors and IDEs
|
||||||
|
# editorconfig.org
|
||||||
|
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
end_of_line = lf
|
||||||
|
charset = utf-8
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
insert_final_newline = true
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
[*.{diff,md}]
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
|
||||||
|
[*.{php,xml,json}]
|
||||||
|
indent_size = 4
|
20
extensions/emoji/.gitattributes
vendored
20
extensions/emoji/.gitattributes
vendored
@@ -1,20 +0,0 @@
|
|||||||
**/.gitattributes export-ignore
|
|
||||||
**/.gitignore export-ignore
|
|
||||||
**/.gitmodules export-ignore
|
|
||||||
**/.github export-ignore
|
|
||||||
**/.travis export-ignore
|
|
||||||
**/.travis.yml export-ignore
|
|
||||||
**/.editorconfig export-ignore
|
|
||||||
**/.styleci.yml export-ignore
|
|
||||||
|
|
||||||
**/phpunit.xml export-ignore
|
|
||||||
**/tests export-ignore
|
|
||||||
|
|
||||||
**/js/dist/**/* -diff
|
|
||||||
**/js/dist/**/* linguist-generated
|
|
||||||
**/js/dist-typings/**/* -diff
|
|
||||||
**/js/dist-typings/**/* linguist-generated
|
|
||||||
**/js/yarn.lock -diff
|
|
||||||
**/js/package-lock.json -diff
|
|
||||||
|
|
||||||
* text=auto eol=lf
|
|
@@ -7,7 +7,7 @@
|
|||||||
],
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/flarum/framework/issues",
|
"issues": "https://github.com/flarum/core/issues",
|
||||||
"source": "https://github.com/flarum/emoji",
|
"source": "https://github.com/flarum/emoji",
|
||||||
"forum": "https://discuss.flarum.org"
|
"forum": "https://discuss.flarum.org"
|
||||||
},
|
},
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"flarum/core": "^1.6"
|
"flarum/core": "^1.3"
|
||||||
},
|
},
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
|
2
extensions/emoji/js/dist/forum.js.map
generated
vendored
2
extensions/emoji/js/dist/forum.js.map
generated
vendored
File diff suppressed because one or more lines are too long
@@ -22,6 +22,10 @@
|
|||||||
"build": "webpack --mode production",
|
"build": "webpack --mode production",
|
||||||
"format": "prettier --write src",
|
"format": "prettier --write src",
|
||||||
"format-check": "prettier --check src",
|
"format-check": "prettier --check src",
|
||||||
"analyze": "cross-env ANALYZER=true yarn run build"
|
"analyze": "cross-env ANALYZER=true yarn run build",
|
||||||
|
"clean-typings": "npx rimraf dist-typings && mkdir dist-typings",
|
||||||
|
"build-typings": "npm run clean-typings && cp -r src/@types dist-typings/@types && tsc",
|
||||||
|
"check-typings": "tsc --noEmit --emitDeclarationOnly false",
|
||||||
|
"check-typings-coverage": "typescript-coverage-report"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
19
extensions/flags/.editorconfig
Normal file
19
extensions/flags/.editorconfig
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# EditorConfig helps developers define and maintain consistent
|
||||||
|
# coding styles between different editors and IDEs
|
||||||
|
# editorconfig.org
|
||||||
|
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
end_of_line = lf
|
||||||
|
charset = utf-8
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
insert_final_newline = true
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
[*.{diff,md}]
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
|
||||||
|
[*.{php,xml,json}]
|
||||||
|
indent_size = 4
|
20
extensions/flags/.gitattributes
vendored
20
extensions/flags/.gitattributes
vendored
@@ -1,20 +0,0 @@
|
|||||||
**/.gitattributes export-ignore
|
|
||||||
**/.gitignore export-ignore
|
|
||||||
**/.gitmodules export-ignore
|
|
||||||
**/.github export-ignore
|
|
||||||
**/.travis export-ignore
|
|
||||||
**/.travis.yml export-ignore
|
|
||||||
**/.editorconfig export-ignore
|
|
||||||
**/.styleci.yml export-ignore
|
|
||||||
|
|
||||||
**/phpunit.xml export-ignore
|
|
||||||
**/tests export-ignore
|
|
||||||
|
|
||||||
**/js/dist/**/* -diff
|
|
||||||
**/js/dist/**/* linguist-generated
|
|
||||||
**/js/dist-typings/**/* -diff
|
|
||||||
**/js/dist-typings/**/* linguist-generated
|
|
||||||
**/js/yarn.lock -diff
|
|
||||||
**/js/package-lock.json -diff
|
|
||||||
|
|
||||||
* text=auto eol=lf
|
|
@@ -7,7 +7,7 @@
|
|||||||
],
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/flarum/framework/issues",
|
"issues": "https://github.com/flarum/core/issues",
|
||||||
"source": "https://github.com/flarum/flags",
|
"source": "https://github.com/flarum/flags",
|
||||||
"forum": "https://discuss.flarum.org"
|
"forum": "https://discuss.flarum.org"
|
||||||
},
|
},
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"flarum/core": "^1.6"
|
"flarum/core": "^1.3"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
|
4
extensions/flags/js/dist-typings/forum/components/FlagList.d.ts
generated
vendored
4
extensions/flags/js/dist-typings/forum/components/FlagList.d.ts
generated
vendored
@@ -1,7 +1,5 @@
|
|||||||
export default class FlagList extends Component<import("flarum/common/Component").ComponentAttrs, undefined> {
|
export default class FlagList {
|
||||||
constructor();
|
|
||||||
oninit(vnode: any): void;
|
oninit(vnode: any): void;
|
||||||
state: any;
|
state: any;
|
||||||
view(): JSX.Element;
|
view(): JSX.Element;
|
||||||
}
|
}
|
||||||
import Component from "flarum/common/Component";
|
|
||||||
|
17
extensions/flags/js/dist-typings/forum/components/FlagPostModal.d.ts
generated
vendored
17
extensions/flags/js/dist-typings/forum/components/FlagPostModal.d.ts
generated
vendored
@@ -1,15 +1,12 @@
|
|||||||
/// <reference types="flarum/@types/translator-icu-rich" />
|
export default class FlagPostModal {
|
||||||
export default class FlagPostModal extends Modal<import("flarum/common/components/Modal").IInternalModalAttrs> {
|
|
||||||
constructor();
|
|
||||||
oninit(vnode: any): void;
|
oninit(vnode: any): void;
|
||||||
success: boolean | undefined;
|
success: boolean | undefined;
|
||||||
reason: Stream<string> | undefined;
|
reason: any;
|
||||||
reasonDetail: Stream<string> | undefined;
|
reasonDetail: any;
|
||||||
title(): import("@askvortsov/rich-icu-message-formatter").NestedStringArray;
|
className(): string;
|
||||||
|
title(): any;
|
||||||
content(): JSX.Element;
|
content(): JSX.Element;
|
||||||
flagReasons(): ItemList<any>;
|
flagReasons(): any;
|
||||||
onsubmit(e: any): void;
|
onsubmit(e: any): void;
|
||||||
|
loading: boolean | undefined;
|
||||||
}
|
}
|
||||||
import Modal from "flarum/common/components/Modal";
|
|
||||||
import Stream from "flarum/common/utils/Stream";
|
|
||||||
import ItemList from "flarum/common/utils/ItemList";
|
|
||||||
|
2
extensions/flags/js/dist-typings/forum/components/FlagsDropdown.d.ts
generated
vendored
2
extensions/flags/js/dist-typings/forum/components/FlagsDropdown.d.ts
generated
vendored
@@ -3,5 +3,5 @@ export default class FlagsDropdown {
|
|||||||
getMenu(): JSX.Element;
|
getMenu(): JSX.Element;
|
||||||
goToRoute(): void;
|
goToRoute(): void;
|
||||||
getUnreadCount(): any;
|
getUnreadCount(): any;
|
||||||
getNewCount(): unknown;
|
getNewCount(): any;
|
||||||
}
|
}
|
||||||
|
14
extensions/flags/js/dist-typings/forum/models/Flag.d.ts
generated
vendored
14
extensions/flags/js/dist-typings/forum/models/Flag.d.ts
generated
vendored
@@ -1,11 +1,9 @@
|
|||||||
import Model from 'flarum/common/Model';
|
import Model from 'flarum/common/Model';
|
||||||
import type Post from 'flarum/common/models/Post';
|
|
||||||
import type User from 'flarum/common/models/User';
|
|
||||||
export default class Flag extends Model {
|
export default class Flag extends Model {
|
||||||
type(): string;
|
type(): any;
|
||||||
reason(): string | null;
|
reason(): any;
|
||||||
reasonDetail(): string | null;
|
reasonDetail(): any;
|
||||||
createdAt(): Date | null | undefined;
|
createdAt(): any;
|
||||||
post(): false | Post;
|
post(): any;
|
||||||
user(): false | User | null;
|
user(): any;
|
||||||
}
|
}
|
||||||
|
2
extensions/flags/js/dist/admin.js.map
generated
vendored
2
extensions/flags/js/dist/admin.js.map
generated
vendored
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,+BCL9D,MAAM,EAA+BC,OAAOC,KAAKC,OAAO,a,aCExDC,IAAAA,aAAAA,IAAqB,gBAAgB,WACnCA,IAAAA,cAAAA,IACO,gBACJC,gBACC,CACEC,QAAS,8BACTC,KAAM,OACNC,MAAOJ,IAAAA,WAAAA,MAAqB,qDAE9B,IAEDC,gBAAgB,CACfC,QAAS,4BACTC,KAAM,UACNC,MAAOJ,IAAAA,WAAAA,MAAqB,sDAE7BK,mBACC,CACEC,KAAM,cACNF,MAAOJ,IAAAA,WAAAA,MAAqB,mDAC5BO,WAAY,wBAEd,WACA,IAGDF,mBACC,CACEC,KAAM,cACNF,MAAOJ,IAAAA,WAAAA,MAAqB,mDAC5BO,WAAY,wBAEd,QACA,GAEL,G","sources":["webpack://@flarum/flags/webpack/bootstrap","webpack://@flarum/flags/webpack/runtime/compat get default export","webpack://@flarum/flags/webpack/runtime/define property getters","webpack://@flarum/flags/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/flags/webpack/runtime/make namespace object","webpack://@flarum/flags/external root \"flarum.core.compat['admin/app']\"","webpack://@flarum/flags/./src/admin/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/app'];","import app from 'flarum/admin/app';\n\napp.initializers.add('flarum-flags', () => {\n app.extensionData\n .for('flarum-flags')\n .registerSetting(\n {\n setting: 'flarum-flags.guidelines_url',\n type: 'text',\n label: app.translator.trans('flarum-flags.admin.settings.guidelines_url_label'),\n },\n 15\n )\n .registerSetting({\n setting: 'flarum-flags.can_flag_own',\n type: 'boolean',\n label: app.translator.trans('flarum-flags.admin.settings.flag_own_posts_label'),\n })\n .registerPermission(\n {\n icon: 'fas fa-flag',\n label: app.translator.trans('flarum-flags.admin.permissions.view_flags_label'),\n permission: 'discussion.viewFlags',\n },\n 'moderate',\n 65\n )\n\n .registerPermission(\n {\n icon: 'fas fa-flag',\n label: app.translator.trans('flarum-flags.admin.permissions.flag_posts_label'),\n permission: 'discussion.flagPosts',\n },\n 'reply',\n 65\n );\n});\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","app","registerSetting","setting","type","label","registerPermission","icon","permission"],"sourceRoot":""}
|
{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,GCLRF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,MCJ3ER,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,M,+BCLvD,MAAM,EAA+BC,OAAOC,KAAKC,OAAO,a,aCExDC,IAAAA,aAAAA,IAAqB,gBAAgB,WACnCA,IAAAA,cAAAA,IACO,gBACJC,gBACC,CACEC,QAAS,8BACTC,KAAM,OACNC,MAAOJ,IAAAA,WAAAA,MAAqB,qDAE9B,IAEDC,gBAAgB,CACfC,QAAS,4BACTC,KAAM,UACNC,MAAOJ,IAAAA,WAAAA,MAAqB,sDAE7BK,mBACC,CACEC,KAAM,cACNF,MAAOJ,IAAAA,WAAAA,MAAqB,mDAC5BO,WAAY,wBAEd,WACA,IAGDF,mBACC,CACEC,KAAM,cACNF,MAAOJ,IAAAA,WAAAA,MAAqB,mDAC5BO,WAAY,wBAEd,QACA,Q","sources":["webpack://@flarum/flags/webpack/bootstrap","webpack://@flarum/flags/webpack/runtime/compat get default export","webpack://@flarum/flags/webpack/runtime/define property getters","webpack://@flarum/flags/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/flags/webpack/runtime/make namespace object","webpack://@flarum/flags/external root \"flarum.core.compat['admin/app']\"","webpack://@flarum/flags/./src/admin/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/app'];","import app from 'flarum/admin/app';\n\napp.initializers.add('flarum-flags', () => {\n app.extensionData\n .for('flarum-flags')\n .registerSetting(\n {\n setting: 'flarum-flags.guidelines_url',\n type: 'text',\n label: app.translator.trans('flarum-flags.admin.settings.guidelines_url_label'),\n },\n 15\n )\n .registerSetting({\n setting: 'flarum-flags.can_flag_own',\n type: 'boolean',\n label: app.translator.trans('flarum-flags.admin.settings.flag_own_posts_label'),\n })\n .registerPermission(\n {\n icon: 'fas fa-flag',\n label: app.translator.trans('flarum-flags.admin.permissions.view_flags_label'),\n permission: 'discussion.viewFlags',\n },\n 'moderate',\n 65\n )\n\n .registerPermission(\n {\n icon: 'fas fa-flag',\n label: app.translator.trans('flarum-flags.admin.permissions.flag_posts_label'),\n permission: 'discussion.flagPosts',\n },\n 'reply',\n 65\n );\n});\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","app","registerSetting","setting","type","label","registerPermission","icon","permission"],"sourceRoot":""}
|
2
extensions/flags/js/dist/forum.js.map
generated
vendored
2
extensions/flags/js/dist/forum.js.map
generated
vendored
File diff suppressed because one or more lines are too long
@@ -17,13 +17,13 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "webpack --mode development --watch",
|
"dev": "webpack --mode development --watch",
|
||||||
"build": "webpack --mode production",
|
"build": "webpack --mode production",
|
||||||
"analyze": "cross-env ANALYZER=true yarn run build",
|
|
||||||
"format": "prettier --write src",
|
"format": "prettier --write src",
|
||||||
"format-check": "prettier --check src",
|
"format-check": "prettier --check src",
|
||||||
|
"analyze": "cross-env ANALYZER=true yarn run build",
|
||||||
"clean-typings": "npx rimraf dist-typings && mkdir dist-typings",
|
"clean-typings": "npx rimraf dist-typings && mkdir dist-typings",
|
||||||
"build-typings": "yarn run clean-typings && ([ -e src/@types ] && cp -r src/@types dist-typings/@types || true) && tsc && yarn run post-build-typings",
|
"build-typings": "yarn run clean-typings && ([ -e src/@types ] && cp -r src/@types dist-typings/@types || true) && tsc && yarn run post-build-typings",
|
||||||
"post-build-typings": "find dist-typings -type f -name '*.d.ts' -print0 | xargs -0 sed -i 's,../src/@types,@types,g'",
|
|
||||||
"check-typings": "tsc --noEmit --emitDeclarationOnly false",
|
"check-typings": "tsc --noEmit --emitDeclarationOnly false",
|
||||||
"check-typings-coverage": "typescript-coverage-report"
|
"check-typings-coverage": "typescript-coverage-report",
|
||||||
|
"post-build-typings": "find dist-typings -type f -name '*.d.ts' -print0 | xargs -0 sed -i 's,../src/@types,@types,g'"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -4,13 +4,14 @@
|
|||||||
// This will match all .ts, .tsx, .d.ts, .js, .jsx files in your `src` folder
|
// This will match all .ts, .tsx, .d.ts, .js, .jsx files in your `src` folder
|
||||||
// and also tells your Typescript server to read core's global typings for
|
// and also tells your Typescript server to read core's global typings for
|
||||||
// access to `dayjs` and `$` in the global namespace.
|
// access to `dayjs` and `$` in the global namespace.
|
||||||
"include": ["src/**/*", "../../../*/*/js/dist-typings/@types/**/*", "@types/**/*"],
|
"include": ["src/**/*", "../vendor/*/*/js/dist-typings/@types/**/*", "@types/**/*"],
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
// This will output typings to `dist-typings`
|
// This will output typings to `dist-typings`
|
||||||
"declarationDir": "./dist-typings",
|
"declarationDir": "./dist-typings",
|
||||||
|
"baseUrl": ".",
|
||||||
"paths": {
|
"paths": {
|
||||||
"flarum/*": ["../../../framework/core/js/dist-typings/*"],
|
"flarum/*": ["../vendor/flarum/core/js/dist-typings/*"],
|
||||||
"@flarum/core/*": ["../../../framework/core/js/dist-typings/*"]
|
"@flarum/core/*": ["../vendor/flarum/core/js/dist-typings/*"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
19
extensions/lang-english/.editorconfig
Normal file
19
extensions/lang-english/.editorconfig
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# EditorConfig helps developers define and maintain consistent
|
||||||
|
# coding styles between different editors and IDEs
|
||||||
|
# editorconfig.org
|
||||||
|
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
end_of_line = lf
|
||||||
|
charset = utf-8
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
insert_final_newline = true
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
[*.{diff,md}]
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
|
||||||
|
[*.{php,xml,json}]
|
||||||
|
indent_size = 4
|
20
extensions/lang-english/.gitattributes
vendored
20
extensions/lang-english/.gitattributes
vendored
@@ -1,20 +0,0 @@
|
|||||||
**/.gitattributes export-ignore
|
|
||||||
**/.gitignore export-ignore
|
|
||||||
**/.gitmodules export-ignore
|
|
||||||
**/.github export-ignore
|
|
||||||
**/.travis export-ignore
|
|
||||||
**/.travis.yml export-ignore
|
|
||||||
**/.editorconfig export-ignore
|
|
||||||
**/.styleci.yml export-ignore
|
|
||||||
|
|
||||||
**/phpunit.xml export-ignore
|
|
||||||
**/tests export-ignore
|
|
||||||
|
|
||||||
**/js/dist/**/* -diff
|
|
||||||
**/js/dist/**/* linguist-generated
|
|
||||||
**/js/dist-typings/**/* -diff
|
|
||||||
**/js/dist-typings/**/* linguist-generated
|
|
||||||
**/js/yarn.lock -diff
|
|
||||||
**/js/package-lock.json -diff
|
|
||||||
|
|
||||||
* text=auto eol=lf
|
|
@@ -7,7 +7,7 @@
|
|||||||
],
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"require": {
|
"require": {
|
||||||
"flarum/core": "^1.6"
|
"flarum/core": "^1.3"
|
||||||
},
|
},
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
|
19
extensions/likes/.editorconfig
Normal file
19
extensions/likes/.editorconfig
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# EditorConfig helps developers define and maintain consistent
|
||||||
|
# coding styles between different editors and IDEs
|
||||||
|
# editorconfig.org
|
||||||
|
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
end_of_line = lf
|
||||||
|
charset = utf-8
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
insert_final_newline = true
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
[*.{diff,md}]
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
|
||||||
|
[*.{php,xml,json}]
|
||||||
|
indent_size = 4
|
20
extensions/likes/.gitattributes
vendored
20
extensions/likes/.gitattributes
vendored
@@ -1,20 +0,0 @@
|
|||||||
**/.gitattributes export-ignore
|
|
||||||
**/.gitignore export-ignore
|
|
||||||
**/.gitmodules export-ignore
|
|
||||||
**/.github export-ignore
|
|
||||||
**/.travis export-ignore
|
|
||||||
**/.travis.yml export-ignore
|
|
||||||
**/.editorconfig export-ignore
|
|
||||||
**/.styleci.yml export-ignore
|
|
||||||
|
|
||||||
**/phpunit.xml export-ignore
|
|
||||||
**/tests export-ignore
|
|
||||||
|
|
||||||
**/js/dist/**/* -diff
|
|
||||||
**/js/dist/**/* linguist-generated
|
|
||||||
**/js/dist-typings/**/* -diff
|
|
||||||
**/js/dist-typings/**/* linguist-generated
|
|
||||||
**/js/yarn.lock -diff
|
|
||||||
**/js/package-lock.json -diff
|
|
||||||
|
|
||||||
* text=auto eol=lf
|
|
@@ -7,7 +7,7 @@
|
|||||||
],
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/flarum/framework/issues",
|
"issues": "https://github.com/flarum/core/issues",
|
||||||
"source": "https://github.com/flarum/likes",
|
"source": "https://github.com/flarum/likes",
|
||||||
"forum": "https://discuss.flarum.org"
|
"forum": "https://discuss.flarum.org"
|
||||||
},
|
},
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"flarum/core": "^1.6"
|
"flarum/core": "^1.3"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
"prettier": true,
|
"prettier": true,
|
||||||
"typescript": false,
|
"typescript": false,
|
||||||
"bundlewatch": false,
|
"bundlewatch": false,
|
||||||
"backendTesting": true,
|
"backendTesting": false,
|
||||||
"editorConfig": true,
|
"editorConfig": true,
|
||||||
"styleci": true
|
"styleci": true
|
||||||
}
|
}
|
||||||
@@ -64,28 +64,5 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"minimum-stability": "dev",
|
"minimum-stability": "dev",
|
||||||
"prefer-stable": true,
|
"prefer-stable": true
|
||||||
"autoload-dev": {
|
|
||||||
"psr-4": {
|
|
||||||
"Flarum\\Likes\\Tests\\": "tests/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": [
|
|
||||||
"@test:unit",
|
|
||||||
"@test:integration"
|
|
||||||
],
|
|
||||||
"test:unit": "phpunit -c tests/phpunit.unit.xml",
|
|
||||||
"test:integration": "phpunit -c tests/phpunit.integration.xml",
|
|
||||||
"test:setup": "@php tests/integration/setup.php"
|
|
||||||
},
|
|
||||||
"scripts-descriptions": {
|
|
||||||
"test": "Runs all tests.",
|
|
||||||
"test:unit": "Runs all unit tests.",
|
|
||||||
"test:integration": "Runs all integration tests.",
|
|
||||||
"test:setup": "Sets up a database for use with integration tests. Execute this only once."
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"flarum/testing": "^1.0.0"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -13,11 +13,8 @@ use Flarum\Api\Controller;
|
|||||||
use Flarum\Api\Serializer\BasicUserSerializer;
|
use Flarum\Api\Serializer\BasicUserSerializer;
|
||||||
use Flarum\Api\Serializer\PostSerializer;
|
use Flarum\Api\Serializer\PostSerializer;
|
||||||
use Flarum\Extend;
|
use Flarum\Extend;
|
||||||
use Flarum\Likes\Event\PostWasLiked;
|
use Flarum\Post\Event\Deleted;
|
||||||
use Flarum\Likes\Event\PostWasUnliked;
|
use Flarum\Post\Event\Saving;
|
||||||
use Flarum\Likes\Notification\PostLikedBlueprint;
|
|
||||||
use Flarum\Likes\Query\LikedByFilter;
|
|
||||||
use Flarum\Post\Filter\PostFilterer;
|
|
||||||
use Flarum\Post\Post;
|
use Flarum\Post\Post;
|
||||||
use Flarum\User\User;
|
use Flarum\User\User;
|
||||||
|
|
||||||
@@ -30,42 +27,54 @@ return [
|
|||||||
->js(__DIR__.'/js/dist/admin.js'),
|
->js(__DIR__.'/js/dist/admin.js'),
|
||||||
|
|
||||||
(new Extend\Model(Post::class))
|
(new Extend\Model(Post::class))
|
||||||
->belongsToMany('likes', User::class, 'post_likes', 'post_id', 'user_id'),
|
->belongsToMany('likes', User::class, 'post_likes', 'post_id', 'user_id')
|
||||||
|
->relationship('recentLikes', Model\RecentLikesRelationship::class),
|
||||||
|
|
||||||
new Extend\Locales(__DIR__.'/locale'),
|
new Extend\Locales(__DIR__.'/locale'),
|
||||||
|
|
||||||
(new Extend\Notification())
|
(new Extend\Notification())
|
||||||
->type(PostLikedBlueprint::class, PostSerializer::class, ['alert']),
|
->type(Notification\PostLikedBlueprint::class, PostSerializer::class, ['alert']),
|
||||||
|
|
||||||
(new Extend\ApiSerializer(PostSerializer::class))
|
(new Extend\ApiSerializer(PostSerializer::class))
|
||||||
|
->relationship('recentLikes', Api\RecentLikesRelationship::class)
|
||||||
|
->attributes(function (PostSerializer $serializer, $model, $attributes) {
|
||||||
|
$actor = $serializer->getActor();
|
||||||
|
$model->loadCount('likes');
|
||||||
|
$attributes['likesCount'] = $model->likes_count;
|
||||||
|
$attributes['likedByActor'] = $actor && $model->likes()->where('id', $actor->id)->exists();
|
||||||
|
|
||||||
|
return $attributes;
|
||||||
|
})
|
||||||
->hasMany('likes', BasicUserSerializer::class)
|
->hasMany('likes', BasicUserSerializer::class)
|
||||||
->attribute('canLike', function (PostSerializer $serializer, $model) {
|
->attribute('canLike', function (PostSerializer $serializer, $model) {
|
||||||
return (bool) $serializer->getActor()->can('like', $model);
|
return $serializer->getActor()->can('like', $model);
|
||||||
}),
|
}),
|
||||||
|
|
||||||
(new Extend\ApiController(Controller\ShowDiscussionController::class))
|
(new Extend\ApiController(Controller\ShowDiscussionController::class))
|
||||||
->addInclude('posts.likes'),
|
->addOptionalInclude('posts.likes')
|
||||||
|
->addInclude('posts.recentLikes')
|
||||||
|
->load('posts.recentLikes'),
|
||||||
|
|
||||||
(new Extend\ApiController(Controller\ListPostsController::class))
|
(new Extend\ApiController(Controller\ListPostsController::class))
|
||||||
->addInclude('likes'),
|
->addOptionalInclude('likes')
|
||||||
|
->addInclude('recentLikes')
|
||||||
|
->load('posts.recentLikes'),
|
||||||
(new Extend\ApiController(Controller\ShowPostController::class))
|
(new Extend\ApiController(Controller\ShowPostController::class))
|
||||||
->addInclude('likes'),
|
->addOptionalInclude('likes')
|
||||||
|
->addInclude('recentLikes')
|
||||||
|
->load('posts.recentLikes'),
|
||||||
(new Extend\ApiController(Controller\CreatePostController::class))
|
(new Extend\ApiController(Controller\CreatePostController::class))
|
||||||
->addInclude('likes'),
|
->addOptionalInclude('likes')
|
||||||
|
->addInclude('recentLikes')
|
||||||
|
->load('posts.recentLikes'),
|
||||||
(new Extend\ApiController(Controller\UpdatePostController::class))
|
(new Extend\ApiController(Controller\UpdatePostController::class))
|
||||||
->addInclude('likes'),
|
->addOptionalInclude('likes')
|
||||||
|
->addInclude('recentLikes')
|
||||||
|
->load('posts.recentLikes'),
|
||||||
|
|
||||||
(new Extend\Event())
|
(new Extend\Event())
|
||||||
->listen(PostWasLiked::class, Listener\SendNotificationWhenPostIsLiked::class)
|
->listen(Event\PostWasLiked::class, Listener\SendNotificationWhenPostIsLiked::class)
|
||||||
->listen(PostWasUnliked::class, Listener\SendNotificationWhenPostIsUnliked::class)
|
->listen(Event\PostWasUnliked::class, Listener\SendNotificationWhenPostIsUnliked::class)
|
||||||
->subscribe(Listener\SaveLikesToDatabase::class),
|
->listen(Deleted::class, [Listener\SaveLikesToDatabase::class, 'whenPostIsDeleted'])
|
||||||
|
->listen(Saving::class, [Listener\SaveLikesToDatabase::class, 'whenPostIsSaving']),
|
||||||
(new Extend\Filter(PostFilterer::class))
|
|
||||||
->addFilter(LikedByFilter::class),
|
|
||||||
|
|
||||||
(new Extend\Settings())
|
|
||||||
->default('flarum-likes.like_own_post', true),
|
|
||||||
|
|
||||||
(new Extend\Policy())
|
|
||||||
->modelPolicy(Post::class, Access\LikePostPolicy::class),
|
|
||||||
];
|
];
|
||||||
|
120
extensions/likes/js/dist/admin.js
generated
vendored
120
extensions/likes/js/dist/admin.js
generated
vendored
@@ -1,2 +1,120 @@
|
|||||||
(()=>{var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var s in r)e.o(r,s)&&!e.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:r[s]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};(()=>{"use strict";e.r(t);const r=flarum.core.compat["admin/app"];var s=e.n(r);s().initializers.add("flarum-likes",(function(){s().extensionData.for("flarum-likes").registerPermission({icon:"far fa-thumbs-up",label:s().translator.trans("flarum-likes.admin.permissions.like_posts_label"),permission:"discussion.likePosts"},"reply").registerSetting({setting:"flarum-likes.like_own_post",type:"bool",label:s().translator.trans("flarum-likes.admin.settings.like_own_posts_label"),help:s().translator.trans("flarum-likes.admin.settings.like_own_posts_help")})}))})(),module.exports=t})();
|
/******/ (() => { // webpackBootstrap
|
||||||
|
/******/ // runtime can't be in strict mode because a global variable is assign and maybe created.
|
||||||
|
/******/ var __webpack_modules__ = ({
|
||||||
|
|
||||||
|
/***/ "./src/admin/index.js":
|
||||||
|
/*!****************************!*\
|
||||||
|
!*** ./src/admin/index.js ***!
|
||||||
|
\****************************/
|
||||||
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
__webpack_require__.r(__webpack_exports__);
|
||||||
|
/* harmony import */ var flarum_admin_app__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! flarum/admin/app */ "flarum/admin/app");
|
||||||
|
/* harmony import */ var flarum_admin_app__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(flarum_admin_app__WEBPACK_IMPORTED_MODULE_0__);
|
||||||
|
|
||||||
|
flarum_admin_app__WEBPACK_IMPORTED_MODULE_0___default().initializers.add('flarum-likes', function () {
|
||||||
|
flarum_admin_app__WEBPACK_IMPORTED_MODULE_0___default().extensionData["for"]('flarum-likes').registerPermission({
|
||||||
|
icon: 'far fa-thumbs-up',
|
||||||
|
label: flarum_admin_app__WEBPACK_IMPORTED_MODULE_0___default().translator.trans('flarum-likes.admin.permissions.like_posts_label'),
|
||||||
|
permission: 'discussion.likePosts'
|
||||||
|
}, 'reply');
|
||||||
|
});
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ "flarum/admin/app":
|
||||||
|
/*!**************************************************!*\
|
||||||
|
!*** external "flarum.core.compat['admin/app']" ***!
|
||||||
|
\**************************************************/
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
module.exports = flarum.core.compat['admin/app'];
|
||||||
|
|
||||||
|
/***/ })
|
||||||
|
|
||||||
|
/******/ });
|
||||||
|
/************************************************************************/
|
||||||
|
/******/ // The module cache
|
||||||
|
/******/ var __webpack_module_cache__ = {};
|
||||||
|
/******/
|
||||||
|
/******/ // The require function
|
||||||
|
/******/ function __webpack_require__(moduleId) {
|
||||||
|
/******/ // Check if module is in cache
|
||||||
|
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
||||||
|
/******/ if (cachedModule !== undefined) {
|
||||||
|
/******/ return cachedModule.exports;
|
||||||
|
/******/ }
|
||||||
|
/******/ // Create a new module (and put it into the cache)
|
||||||
|
/******/ var module = __webpack_module_cache__[moduleId] = {
|
||||||
|
/******/ // no module.id needed
|
||||||
|
/******/ // no module.loaded needed
|
||||||
|
/******/ exports: {}
|
||||||
|
/******/ };
|
||||||
|
/******/
|
||||||
|
/******/ // Execute the module function
|
||||||
|
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
||||||
|
/******/
|
||||||
|
/******/ // Return the exports of the module
|
||||||
|
/******/ return module.exports;
|
||||||
|
/******/ }
|
||||||
|
/******/
|
||||||
|
/************************************************************************/
|
||||||
|
/******/ /* webpack/runtime/compat get default export */
|
||||||
|
/******/ (() => {
|
||||||
|
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
||||||
|
/******/ __webpack_require__.n = (module) => {
|
||||||
|
/******/ var getter = module && module.__esModule ?
|
||||||
|
/******/ () => (module['default']) :
|
||||||
|
/******/ () => (module);
|
||||||
|
/******/ __webpack_require__.d(getter, { a: getter });
|
||||||
|
/******/ return getter;
|
||||||
|
/******/ };
|
||||||
|
/******/ })();
|
||||||
|
/******/
|
||||||
|
/******/ /* webpack/runtime/define property getters */
|
||||||
|
/******/ (() => {
|
||||||
|
/******/ // define getter functions for harmony exports
|
||||||
|
/******/ __webpack_require__.d = (exports, definition) => {
|
||||||
|
/******/ for(var key in definition) {
|
||||||
|
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
||||||
|
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
||||||
|
/******/ }
|
||||||
|
/******/ }
|
||||||
|
/******/ };
|
||||||
|
/******/ })();
|
||||||
|
/******/
|
||||||
|
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
||||||
|
/******/ (() => {
|
||||||
|
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
||||||
|
/******/ })();
|
||||||
|
/******/
|
||||||
|
/******/ /* webpack/runtime/make namespace object */
|
||||||
|
/******/ (() => {
|
||||||
|
/******/ // define __esModule on exports
|
||||||
|
/******/ __webpack_require__.r = (exports) => {
|
||||||
|
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
||||||
|
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
||||||
|
/******/ }
|
||||||
|
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
||||||
|
/******/ };
|
||||||
|
/******/ })();
|
||||||
|
/******/
|
||||||
|
/************************************************************************/
|
||||||
|
var __webpack_exports__ = {};
|
||||||
|
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
|
||||||
|
(() => {
|
||||||
|
"use strict";
|
||||||
|
/*!******************!*\
|
||||||
|
!*** ./admin.js ***!
|
||||||
|
\******************/
|
||||||
|
__webpack_require__.r(__webpack_exports__);
|
||||||
|
/* harmony import */ var _src_admin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./src/admin */ "./src/admin/index.js");
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
|
module.exports = __webpack_exports__;
|
||||||
|
/******/ })()
|
||||||
|
;
|
||||||
//# sourceMappingURL=admin.js.map
|
//# sourceMappingURL=admin.js.map
|
2
extensions/likes/js/dist/admin.js.map
generated
vendored
2
extensions/likes/js/dist/admin.js.map
generated
vendored
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,+BCL9D,MAAM,EAA+BC,OAAOC,KAAKC,OAAO,a,aCExDC,IAAAA,aAAAA,IAAqB,gBAAgB,WACnCA,IAAAA,cAAAA,IACO,gBACJC,mBACC,CACEC,KAAM,mBACNC,MAAOH,IAAAA,WAAAA,MAAqB,mDAC5BI,WAAY,wBAEd,SAEDC,gBAAgB,CACfC,QAAS,6BACTC,KAAM,OACNJ,MAAOH,IAAAA,WAAAA,MAAqB,oDAC5BQ,KAAMR,IAAAA,WAAAA,MAAqB,oDAEhC,G","sources":["webpack://@flarum/likes/webpack/bootstrap","webpack://@flarum/likes/webpack/runtime/compat get default export","webpack://@flarum/likes/webpack/runtime/define property getters","webpack://@flarum/likes/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/likes/webpack/runtime/make namespace object","webpack://@flarum/likes/external root \"flarum.core.compat['admin/app']\"","webpack://@flarum/likes/./src/admin/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/app'];","import app from 'flarum/admin/app';\n\napp.initializers.add('flarum-likes', () => {\n app.extensionData\n .for('flarum-likes')\n .registerPermission(\n {\n icon: 'far fa-thumbs-up',\n label: app.translator.trans('flarum-likes.admin.permissions.like_posts_label'),\n permission: 'discussion.likePosts',\n },\n 'reply'\n )\n .registerSetting({\n setting: 'flarum-likes.like_own_post',\n type: 'bool',\n label: app.translator.trans('flarum-likes.admin.settings.like_own_posts_label'),\n help: app.translator.trans('flarum-likes.admin.settings.like_own_posts_help'),\n });\n});\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","app","registerPermission","icon","label","permission","registerSetting","setting","type","help"],"sourceRoot":""}
|
{"version":3,"file":"admin.js","mappings":";;;;;;;;;;;;;;AAAA;AAEAA,wEAAA,CAAqB,cAArB,EAAqC,YAAM;AACzCA,EAAAA,4EAAA,CAAsB,cAAtB,EAAsCI,kBAAtC,CACE;AACEC,IAAAA,IAAI,EAAE,kBADR;AAEEC,IAAAA,KAAK,EAAEN,wEAAA,CAAqB,iDAArB,CAFT;AAGES,IAAAA,UAAU,EAAE;AAHd,GADF,EAME,OANF;AAQD,CATD;;;;;;;;;;;ACFA;;;;;;UCAA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D","sources":["webpack://@flarum/likes/./src/admin/index.js","webpack://@flarum/likes/external root \"flarum.core.compat['admin/app']\"","webpack://@flarum/likes/webpack/bootstrap","webpack://@flarum/likes/webpack/runtime/compat get default export","webpack://@flarum/likes/webpack/runtime/define property getters","webpack://@flarum/likes/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/likes/webpack/runtime/make namespace object","webpack://@flarum/likes/./admin.js"],"sourcesContent":["import app from 'flarum/admin/app';\n\napp.initializers.add('flarum-likes', () => {\n app.extensionData.for('flarum-likes').registerPermission(\n {\n icon: 'far fa-thumbs-up',\n label: app.translator.trans('flarum-likes.admin.permissions.like_posts_label'),\n permission: 'discussion.likePosts',\n },\n 'reply'\n );\n});\n","module.exports = flarum.core.compat['admin/app'];","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export * from './src/admin';\n"],"names":["app","initializers","add","extensionData","registerPermission","icon","label","translator","trans","permission"],"sourceRoot":""}
|
622
extensions/likes/js/dist/forum.js
generated
vendored
622
extensions/likes/js/dist/forum.js
generated
vendored
File diff suppressed because one or more lines are too long
2
extensions/likes/js/dist/forum.js.map
generated
vendored
2
extensions/likes/js/dist/forum.js.map
generated
vendored
File diff suppressed because one or more lines are too long
@@ -1,20 +1,12 @@
|
|||||||
import app from 'flarum/admin/app';
|
import app from 'flarum/admin/app';
|
||||||
|
|
||||||
app.initializers.add('flarum-likes', () => {
|
app.initializers.add('flarum-likes', () => {
|
||||||
app.extensionData
|
app.extensionData.for('flarum-likes').registerPermission(
|
||||||
.for('flarum-likes')
|
{
|
||||||
.registerPermission(
|
icon: 'far fa-thumbs-up',
|
||||||
{
|
label: app.translator.trans('flarum-likes.admin.permissions.like_posts_label'),
|
||||||
icon: 'far fa-thumbs-up',
|
permission: 'discussion.likePosts',
|
||||||
label: app.translator.trans('flarum-likes.admin.permissions.like_posts_label'),
|
},
|
||||||
permission: 'discussion.likePosts',
|
'reply'
|
||||||
},
|
);
|
||||||
'reply'
|
|
||||||
)
|
|
||||||
.registerSetting({
|
|
||||||
setting: 'flarum-likes.like_own_post',
|
|
||||||
type: 'bool',
|
|
||||||
label: app.translator.trans('flarum-likes.admin.settings.like_own_posts_label'),
|
|
||||||
help: app.translator.trans('flarum-likes.admin.settings.like_own_posts_help'),
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
@@ -11,17 +11,20 @@ import PostLikesModal from './components/PostLikesModal';
|
|||||||
export default function () {
|
export default function () {
|
||||||
extend(CommentPost.prototype, 'footerItems', function (items) {
|
extend(CommentPost.prototype, 'footerItems', function (items) {
|
||||||
const post = this.attrs.post;
|
const post = this.attrs.post;
|
||||||
const likes = post.likes();
|
const likes = post.recentLikes();
|
||||||
|
const count = post.likesCount();
|
||||||
|
|
||||||
if (likes && likes.length) {
|
if (likes && likes.length) {
|
||||||
const limit = 4;
|
// the limit is dynamic through the backend, we only load those we need
|
||||||
const overLimit = likes.length > limit;
|
const limit = likes.length;
|
||||||
|
// overLimit indicates there are more likes than the ones we render (and load)
|
||||||
|
const overLimit = count > likes.length;
|
||||||
|
|
||||||
// Construct a list of names of users who have liked this post. Make sure the
|
// Construct a list of names of users who have liked this post. Make sure the
|
||||||
// current user is first in the list, and cap a maximum of 4 items.
|
// current user is first in the list, and cap a maximum of 4 items.
|
||||||
const names = likes
|
const names = likes
|
||||||
.sort((a) => (a === app.session.user ? -1 : 1))
|
.filter((a) => a !== app.session.user)
|
||||||
.slice(0, overLimit ? limit - 1 : limit)
|
.slice(0, limit)
|
||||||
.map((user) => {
|
.map((user) => {
|
||||||
return (
|
return (
|
||||||
<Link href={app.route.user(user)}>
|
<Link href={app.route.user(user)}>
|
||||||
@@ -30,12 +33,14 @@ export default function () {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (post.likedByActor()) {
|
||||||
|
names.unshift(<Link href={app.route.user(app.session.user)}>{app.translator.trans('flarum-likes.forum.post.you_text')}</Link>);
|
||||||
|
}
|
||||||
|
|
||||||
// If there are more users that we've run out of room to display, add a "x
|
// If there are more users that we've run out of room to display, add a "x
|
||||||
// others" name to the end of the list. Clicking on it will display a modal
|
// others" name to the end of the list. Clicking on it will display a modal
|
||||||
// with a full list of names.
|
// with a full list of names.
|
||||||
if (overLimit) {
|
if (overLimit) {
|
||||||
const count = likes.length - names.length;
|
|
||||||
|
|
||||||
names.push(
|
names.push(
|
||||||
<a
|
<a
|
||||||
href="#"
|
href="#"
|
||||||
@@ -44,7 +49,7 @@ export default function () {
|
|||||||
app.modal.show(PostLikesModal, { post });
|
app.modal.show(PostLikesModal, { post });
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{app.translator.trans('flarum-likes.forum.post.others_link', { count })}
|
{app.translator.trans('flarum-likes.forum.post.others_link', { count: count - likes.length })}
|
||||||
</a>
|
</a>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@@ -1,21 +0,0 @@
|
|||||||
import { extend } from 'flarum/common/extend';
|
|
||||||
import app from 'flarum/forum/app';
|
|
||||||
import UserPage from 'flarum/forum/components/UserPage';
|
|
||||||
import LinkButton from 'flarum/common/components/LinkButton';
|
|
||||||
import LikesUserPage from './components/LikesUserPage';
|
|
||||||
import ItemList from 'flarum/common/utils/ItemList';
|
|
||||||
import type Mithril from 'mithril';
|
|
||||||
|
|
||||||
export default function addLikesTabToUserProfile() {
|
|
||||||
app.routes['user.likes'] = { path: '/u/:username/likes', component: LikesUserPage };
|
|
||||||
extend(UserPage.prototype, 'navItems', function (items: ItemList<Mithril.Children>) {
|
|
||||||
const user = this.user;
|
|
||||||
items.add(
|
|
||||||
'likes',
|
|
||||||
<LinkButton href={app.route('user.likes', { username: user.slug() })} icon="far fa-thumbs-up">
|
|
||||||
{app.translator.trans('flarum-likes.forum.user.likes_link')}
|
|
||||||
</LinkButton>,
|
|
||||||
88
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
@@ -1,24 +0,0 @@
|
|||||||
import app from 'flarum/forum/app';
|
|
||||||
import PostsUserPage from 'flarum/forum/components/PostsUserPage';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The `LikesUserPage` component shows posts which user the user liked.
|
|
||||||
*/
|
|
||||||
export default class LikesUserPage extends PostsUserPage {
|
|
||||||
/**
|
|
||||||
* Load a new page of the user's activity feed.
|
|
||||||
*
|
|
||||||
* @param offset The position to start getting results from.
|
|
||||||
* @protected
|
|
||||||
*/
|
|
||||||
loadResults(offset: number) {
|
|
||||||
return app.store.find('posts', {
|
|
||||||
filter: {
|
|
||||||
type: 'comment',
|
|
||||||
likedBy: this.user.id(),
|
|
||||||
},
|
|
||||||
page: { offset, limit: this.loadLimit },
|
|
||||||
sort: '-createdAt',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user